Нейронные сети для генерации новых грамматик языка программирования

Недавно у меня возникла необходимость создать грамматику языка ANTLR для целей транспилятора (преобразования одного языка сценариев в другой). Мне пришло в голову, что Google Translate довольно хорошо переводит естественный язык. У нас есть всевозможные модели рекуррентных нейронных сетей, LSTM, и GPT-2 генерирует грамматически правильный текст.

Вопрос: Существует ли модель, достаточная для обучения примерам примеров грамматики / кода, чтобы затем вывести новый файл грамматики с произвольным исходным кодом примера?

1 ответ

Я сомневаюсь, что такая модель существует.

Основная проблема заключается в том, что languages генерируются из grammars и почти невозможно преобразовать обратно из-за бесконечного числа parser trees (комбинации) доступны для различных исходных кодов.

Так что в вашем случае, скажем, вы тренируетесь на python code (1000 примеров кодов), результирующая грамматика для обучения будет такой же. Таким образом, модель всегда будет генерировать одну и ту же грамматику независимо от исходного кода примера.

Если вы используете обучающие образцы из нескольких языков, модель все равно не может генерировать грамматику, поскольку она состоит из бесконечного числа возможностей.

Ваш пример Google translate работает для реального перевода, поскольку допустимы небольшие ошибки, но эти модели не основаны на создании корневой грамматики для каждого языка. Есть некоторые инструменты, которые могут переводить примеры языков программирования, но они не генерируют грамматику, работают на основе грамматики.

То, что вы описываете, - это "просто" структура изучения контекстно-свободных грамматик.

Я не уверен, что этот подход действительно сработает в вашем случае, но это давняя проблема в НЛП: введение грамматики для контекстно-свободных грамматик. Пример введения решения этой проблемы с использованием методов статистического обучения можно найти в книге Чарняка " Статистическое изучение языка".

Обратите внимание, что то, что я описал, относится к CFG в целом, но вы можете проверить индукцию для грамматик LL, потому что генераторы синтаксических анализаторов в основном используют эти типы грамматик.

Я ничего не знаю об ANTLR, но есть довольно хорошие примеры перевода естественного языка, например, в действительные запросы SQL: http://nlpprogress.com/english/semantic_parsing.html.

Другие вопросы по тегам