Примечание. Я задокументировал следующее для моей недавно созданной системы понимания естественного языка с открытым исходным кодом (хотя в основном она устарела).

Я рассматриваю понимание естественного языка (NLU) как процесс ввода произвольного текста (включая транскрипцию голоса в текст) произвольного размера с контекстом или без него и вывода кросс-лингвистически согласованного семантического представления (например, представление лямбда-исчисления). Одна из основных причин, по которой я приостановил разработку вышеупомянутого проекта, заключается в том, что я верю, что ядро ​​моей системы скоро станет возможным, а в конечном итоге превзойдет его, с глубоким обучением, что приведет к устареванию большей части моей работы.

Ниже я описываю, как с помощью глубокого обучения можно реализовать компоненты, составляющие этот процесс NLU. Я ссылаюсь на SyntaxNet от Google в большинстве описаний, потому что SyntaxNet является наиболее полной, точной, хорошо документированной и открытой реализацией этих подходов к глубокому обучению; другие документы документально подтвердили аналогичные результаты.

А. Сегментация текста (определение границ слова)

SyntaxNet от Google использует предварительно обученные нейронные сети для определения границ слов на более чем 40 языках (с очень высокой точностью), включая китайский (который не разделяет слова пробелами).

Б. Признание сущности

Идентификация сущностей (например, названия города, ресторана, человека) может быть невероятно ресурсоемкой, если принудительно искать каждую входную n -грамму во всех возможных индексах сущностей (например, в индексах городов, ресторанов , люди). Следовательно, лучше всего использовать предварительно обученные языковые модели для определения вероятности принадлежности n -го термина к определенной категории сущностей на основе предыдущих n терминов. на входе. Например, обученная языковая модель может определить, что следующий термин люди, которые живут в… с высокой вероятностью появятся в индексах, связанных с местоположением (например, города, страны), и позволит избежать поиска в категориях сущностей с низкой вероятностью ( из которых могут быть десятки; например, люди, названия книг / фильмов). Применение машинного обучения для распознавания сущностей не ново и было запланированным компонентом моей системы, которого я никогда не достиг.

С. Морфологический анализ

Подобно сегментации текста, SyntaxNet Google может делать логические выводы, что имеет отношение в основном к синтаксическому анализу зависимостей, но также применяется к WSD и грамматическому спряжению. В русском языке, сильно подверженном изменению, морфология может указывать на число, род, является ли слово предметом или объектом предложения, притяжательные формы, предложные фразы и многое другое.

Д. Словарные векторы

После сегментации вводимого текста и идентификации и анализа терминального символа следующий компонент системы глубокого обучения NLU будет отображать вводимый текст на вложения слов / фраз. Эти векторы будут предварительно обучены неконтролируемым обучением (например, skip-gram) на больших корпусах (например, Wikipedia corpus). Эти векторные представления необходимы для создания дерева синтаксического анализа на следующем этапе, но они также отражают нечеткую природу языка, такую ​​как определение семантически похожих фраз. Кроме того, учитывая нечеткость языка, могут быть разные степени точности сопоставления с семантическими представлениями. Например, в некоторых случаях использования два термина квалифицируются как синонимы (например, будильник и часы), в то время как в других случаях одни и те же термины не должны. Вычисления векторов позволяют вероятностно-семантическому анализу изменять степень точности (или семантической точности), подходящую для текущей задачи или интерфейса.

Э. Разбирать деревья

Деревья синтаксического анализа - это важнейший компонент, который отличает NLU от NLP. В первую очередь, он определяет отношения между терминами в текстовой последовательности, чтобы сделать вывод о значении текста. Эти отношения моделируются с помощью дерева синтаксического анализа и связанного семантического дерева (которое будет отображаться в лингвистически независимое семантическое представление). Google SyntaxNet демонстрирует, что простая нейронная сеть с прямой связью может построить эти деревья синтаксического анализа: Учитывая предложение в качестве входных данных, она помечает каждое слово тегом части речи (POS), который описывает синтаксическую функцию слова, и определяет синтаксические отношения между словами в предложении, представленные в дереве синтаксического анализа зависимостей .

Действительно, SyntaxNet - это просто тегирование части речи для грамматической структуры, а не разметка семантических ролей. Но как только этот подход идентифицирует синтаксические отношения (например, субъект + глагол / действие + объект), векторы слов могут вывести семантическое представление этого отношения. Кроме того, эти структуры учитывают тот же анализ зависимостей, который необходим для задач NLU. При построении дерева синтаксического анализа SyntaxNet использует поиск пучка для устранения неоднозначности синтаксического анализа: Входное предложение обрабатывается слева направо, при этом зависимости между словами добавляются постепенно по мере рассмотрения каждого слова в предложении. На каждом этапе обработки может быть возможно множество решений - из-за неоднозначности - и нейронная сеть дает оценку конкурирующим решениям на основе их правдоподобия . Опять же, эти POS-деревья не являются целью NLU, но теперь, когда нейронные сети могут точно создавать синтаксическую структуру ввода, обрабатывать устранение неоднозначности, а векторные пространства могут моделировать семантические представления слов и фраз, почти возможно интегрировать эти компоненты для получения богатого вывода. семантические деревья.

Google обучает свои модели на деревьях, предоставленных Проектом универсальных зависимостей. Google также отмечает, что этот подход глубокого обучения еще не идеален, но он постоянно совершенствуется: Хотя точность не идеальна, она, безусловно, достаточно высока, чтобы быть полезной во многих приложениях. Основным источником ошибок на этом этапе являются такие примеры, как описанная выше неоднозначность присоединения предложной фразы, которая требует знания реального мира (например, что улица вряд ли может быть расположена в машине) и глубоких контекстных рассуждений .

Примечание. Одним из таких возможных подходов к глубокому обучению является использование нейронных сетей для вывода плотных лесов синтаксического анализа, а затем использование существующих реализаций для поиска в лесах синтаксического анализа k - наилучших семантически достоверных, устраненных неоднозначностей деревьев синтаксического анализа с их связанными семантические деревья и грамматически правильный отображаемый текст. Я написал здесь скудный отчет об этом подходе.

Ф. Невидимые слова

Нейронные сети могут генерировать входные представления на основе символов вместо встраивания на основе слов, чтобы определять семантическую структуру невидимых терминов, идентифицируя систематические шаблоны в морфологии и синтаксисе, [чтобы] позволить нам угадывать грамматическую функцию слов даже когда они совершенно новые. […] Поступая таким образом, модели могут узнать, что слова могут быть связаны друг с другом, потому что они имеют общие части (например, «коты - это множественное число от кот и имеет одну и ту же основу; дикая кошка - это разновидность слова кот. Кот'). […] Эти модели […] намного лучше предсказывают значение новых слов, основываясь как на их написании, так и на том, как они используются в контексте ».

Г. Независимость от языка

Как демонстрирует SyntaxNet, реализации, использующие встраивание слов и нейронные сети, не зависят от языка, а Google обучил нейронные сети для более чем 40 языков. Опять же, Google обучает свои модели на деревьях, предоставленных Проектом универсальных зависимостей.

H. Грамматическое спряжение

Грамматическое спряжение не является уникальным для NLU, но необходимо для любого интерфейса на естественном языке, включая задачи, которые должны отображать данное семантическое представление в соответствующий отображаемый текст (т. Е. Процесс, обратный описанному выше). Используя те же модели, которые использует морфологический анализ (часть C), в сочетании с синтаксической структурой, которую раскрывают деревья синтаксического анализа (часть E), эти системы могут правильно сопрягать термины в соответствии с грамматикой своего языка.