Я сомневаюсь, что такая модель существует.
Основная проблема заключается в том, что languages
генерируется из grammars
, и преобразование обратно практически невозможно из-за бесконечного числа parser trees
(комбинаций), доступных для различных исходных кодов.
Итак, в вашем случае, скажем, вы тренируетесь на python code
(1000 примеров кодов), результирующая грамматика для обучения будет такой же. Таким образом, модель всегда будет генерировать одну и ту же грамматику независимо от исходного кода примера.
Если вы используете обучающие образцы из нескольких языков, модель по-прежнему не может генерировать грамматику, поскольку она состоит из бесконечного числа возможностей.
Ваш пример Google translate работает для реального перевода, поскольку допустимы небольшие ошибки, но эти модели не основаны на создании корневой грамматики для каждого языка. Есть некоторые инструменты, которые могут переводить языки программирования пример , но они не генерируют грамматику, работают на основе грамматики.
Обновление
Как выучить grammar
у code
.
После сравнения с некоторыми концепциями НЛП у меня есть список вопросов, которые могут возникнуть, и способ борьбы с ними.
Работа с variable names
, coding structures
и tokens
.
Для понимания грамматики нам придется разбить код на минимум. Это означает понимание того, что означает каждый термин в коде. Посмотрите на этот пример
![Syntax tree](https://i.stack.imgur.com/h3vPE.png)
Уже простое выражение сводится к дереву разбора. Мы можем видеть, что дерево разбивает выражение и tags
каждое число как factor
. Это действительно важно, чтобы избавиться от человеческого элемента кода (например, имен переменных и т. Д.) И погрузиться в реальную грамматику. В НЛП эта концепция известна как Часть речевого тегирования . Вам нужно будет разработать свой собственный метод для создания тегов, поскольку это легко, если вы знаете грамматику для языка.
Понимание отношений
Для этого вы можете tokenize
сокращенный код и обучаться, используя модель, основанную на результате, который вы ищете. Если вы хотите написать код, используйте модель n grams
, используя LSTM
, например, пример . Модель выучит грамматику, но ее извлечение не простая задача. Вам нужно будет запустить отдельный код, чтобы попытаться извлечь все возможные отношения, изученные моделью.
* ** тысяча шестьдесят одна тысячи шестьдесят-дв * Пример * +1063 *
Фрагмент кода
# Sample code
int a = 1 + 2;
cout<<a;
Метки
# Sample tags and tokens
int a = 1 + 2 ;
[int] [variable] [operator] [factor] [expr] [factor] [end]
Оставление operator
, expr
и keywords
не должно иметь значения, если имеется достаточно данных, но они станут частью грамматики.
Это образец, чтобы помочь понять мою идею. Вы можете улучшить это, если глубже взглянуть на Теорию вычислений и понять работу automata
и различных grammars
.