Есть ли способ использовать 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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