Есть ли способ использовать CodeBERT для встраивания исходного кода без естественного языка на входе?Python

Программы на Python
Anonymous
Есть ли способ использовать CodeBERT для встраивания исходного кода без естественного языка на входе?

Сообщение Anonymous »

На сайте CodeBERTS github представлен пример использования пары NL-PL с предварительно обученной базовой моделью для создания внедрения. Я хочу создать встраивание, используя только исходный код, к которому не привязан естественный язык. Это будет сделано для того, чтобы я мог попытаться использовать косинусное сходство, чтобы найти сходство встраивания одного исходного кода в другое. Было бы менее желательно просто удалить токены естественного языка, а не использовать другой метод?
В этом исходном коде я воссоздал предложенный метод внедрения, но без каких-либо токенов естественного языка. Мои окончательные результаты по сходству не были исключительными, поэтому я не могу подтвердить, был ли этот метод лучшим или нет.

Код: Выделить всё

>>> from transformers import AutoTokenizer, AutoModel
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("microsoft/codebert-base")
>>> model = AutoModel.from_pretrained("microsoft/codebert-base")
>>> code_tokens=tokenizer.tokenize("def max(a,b): if a>b: return a else return b")
['def', 'Ġmax', '(', 'a', ',', 'b', '):', 'Ġif', 'Ġa', '>', 'b', ':', 'Ġreturn', 'Ġa', 'Ġelse', 'Ġreturn', 'Ġb']
>>> tokens=[tokenizer.cls_token]+[tokenizer.sep_token]+code_tokens+[tokenizer.eos_token]
['', '', 'def', 'Ġmax', '(', 'a', ',', 'b', '):', 'Ġif', 'Ġa', '>', 'b', ':', 'Ġreturn', 'Ġa', 'Ġelse', 'Ġreturn', 'Ġb', '']
>>> tokens_ids=tokenizer.convert_tokens_to_ids(tokens)
[0, 2, 9232, 19220, 1640, 102, 6, 428, 3256, 114, 10, 15698, 428, 35, 671, 10, 1493, 671, 741, 2]
>>> context_embeddings=model(torch.tensor(tokens_ids)[None,:])[0]
torch.Size([1, 20, 768])
tensor([[-0.1423,  0.3766,  0.0443,  ..., -0.2513, -0.3099,  0.3183],
...,
[-0.1433,  0.3785,  0.0450,  ..., -0.2527, -0.3121,  0.3207]],
grad_fn=)
Я также заметил проект https://github.com/neulab/code-bert-score, который пытается добиться чего-то подобного, поскольку они делают nl необязательным вводом. Однако мне не удалось узнать точный метод выполнения этой задачи из их утилит.

Подробнее здесь: https://stackoverflow.com/questions/786 ... anguage-in

Вернуться в «Python»