Что такое анализ зависимостей и как анализировать предложения с помощью нейронных сетей?

Эта статья является кратким изложением статьи Данци Чен во время ее докторской диссертации. в Стэнфорде, не стесняйтесь читать прямо здесь.

Разбор зависимостей

Прежде всего, синтаксический анализ зависимостей берет предложение и создает набор направленных помеченных дуг от head до зависимых. Но что такое головы и иждивенцы? Интуитивно синтаксический анализатор зависимостей хочет идентифицировать ключевое понятие в предложении. Возьмите эту строку в качестве примера:

Я тебя люблю.

Здесь ключевым понятием является описание действия или состояния «любви»: кто-то любит что-то или кого-то еще. Слово «любовь» — это голова, а «я» и «ты» — зависимые, украшающие или, другими словами, уточняющие действие любви. В качестве примера возьмем еще одно сложное предложение:

«Предпочитаю» — ключевое понятие в этом предложении, где подлежащее «я» предпочитает бегство, обладающее некоторыми свойствами. Все остальные слова просто указывают, что это за рейс. В этом примере слово «предпочитать» является корнем в синтаксическом анализе зависимостей, относящимся к главе всех головок.

Некоторые правила разбора зависимостей:

  • Только головы указывают на иждивенцев.
  • Ярлыки описывают, что зависимый значит для своей головы.
  • Это называется структурой типизированной зависимости, потому что типизированная зависимость метки взяты из фиксированного набора грамматических отношений.

Проблемы с традиционными парсерами

Три основных предостережения, приведенные в документе:

1. Со статистической точки зрения эти синтаксические анализаторы страдают от использования миллионов в основном плохо оцененных весов признаков.

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

3. Использование множества шаблонов признаков вызывает менее изученную проблему: в современных парсерах зависимостей большую часть времени выполнения занимает не основной алгоритм синтаксического анализа, а этап извлечения признаков.

Решение для них теперь очевидно: используйте плотные представления функций вместо разреженных индикаторных функций. (например, word2vec)

В этой статье автор обучил классификатор нейронной сети принимать решения по синтаксическому анализу в анализаторе зависимостей на основе переходов. Нейронная сеть изучает компактные плотные векторные представления слов, теги частей речи (POS) и метки зависимостей. Это приводит к быстрому и компактному классификатору, который использует только 200 изученных плотных функций, обеспечивая при этом хороший выигрыш в точности и скорости синтаксического анализа на двух языках (английском и китайском) и двух разных представлениях зависимостей (зависимости CoNLL и Stanford).

Анализ зависимостей на основе перехода

Как мы видели ранее, результатом разбора зависимостей является последовательность направленных помеченных дуг от головок к зависимостям. Процесс генерации таких последовательностей состоит из переходов. Давайте немного поразмыслим над словом «переход», прежде чем продолжить.

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

конфигурация c= (s, b, A),

где s обозначает стек, b — буфер, A — набор дуг. В стек записывается то, что еще не определено, в буфер записывается то, что наш алгоритм вообще не просматривал, а в набор дуг записываются прогнозы, а именно то, как прыгают стрелки между словами в предложении, начинающемся с ROOT.

На приведенной выше диаграмме показано, как система дугового стандарта работает с предложением: «У него хороший контроль». Мы изучим это, чтобы понять, что означает переход.

  • Shift: последовательно перемещать слова в стек для рассмотрения.

Начнем с начальной конфигурации: пустой стек только с ROOT, полный буфер со всем предложением и пустой набор A. Начиная с «He», мы последовательно перемещаем слова в стек, а затем думаем, можем ли мы придумать разумная дуга зависимости. Помните, что слова в стеке — это единственные слова, на которые мы обращаем внимание. Если бы мы НЕ могли придумать дугу зависимости, мы перемещали одно слово из буфера в стек.

  • Левая дуга: два самых правых слова в стеке имеют дугу зависимости.

Когда у нас есть [КОРЕНЬ Он есть] в стеке для самых правых слов: «Он» и «имеет», мы знаем, что «Он» — это слово, определяющее «имеет», что является ключевой концепцией этого примера. предложение. Это означает, что «имеет» — это голова, а «Он» — зависимый. Тогда можно придумать следующий переход: лево-дуговой, для того чтобы указать от головного «имеет» к зависимому «Он», нам нужна левая дуга. Затем мы удаляем зависимого из стека. Для CS-специалистов поначалу это обычно неудобно, потому что структура данных стека обычно работает по принципу FIFO (первым поступил — первым обслужен), но здесь этого НЕТ. Мы удаляем зависимое слово независимо от того, является ли оно самым правым или вторым справа словом.

  • Правая дуга: похожа на левую дугу, но отличается по направлению.

Взяв в качестве примера [ROOT имеет контроль] для двух самых правых слов: «имеет» и «контроль», мы знаем, что «контроль» является зависимым от слова «имеет». Таким образом, мы получаем переход вправо-дуга (потому что он указывает от левого слова к правому слову в стеке). Единственное отличие от левой дуги состоит в том, что на этот раз мы удаляем из стека самое правое слово «control». Опять же, мы выбираем, какое слово удалить, только оценивая, является ли оно зависимым.

  • Остановиться, когда в стеке снова останется только ROOT.

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

Парсер на основе нейронной сети

Нейронная сеть здесь служит мозгом в процессе «придумать дугу зависимости на основе двух самых правых слов в стеке». Он принимает плотный вектор представления слов и предсказывает переход в стиле softmax.

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

В этой статье автор использует конкатенированные вложения для слов/тегов POS/дуговых меток в качестве входных данных. Обучающий набор генерируется с использованием оракула с «самым коротким стеком», который всегда предпочитает LEFT-ARC вместо SHIFT. Детали здесь не важны, но мы должны знать, что для каждой возможной конфигурации существует переход к исходной точке. И мы обучаем наш парсер нейронной сети контролируемым образом.

Я не думаю, что какая-либо реализация имеет решающее значение в следующем списке, но вот некоторые детали обучения, примененные в документе в качестве поиска:

  • Функция активации куба
  • Выберите 3 верхних слова как в стеке, так и в буфере
  • Минипакетный АдаГрад с дропаутом
  • Выберите параметры с наивысшей оценкой непомеченных вложений.

Жадное декодирование при разборе

На данном этапе это довольно прямолинейно. Получив конфигурацию, мы сначала извлекаем представления для выбранных слов/тегов/меток, затем используем их в качестве входных данных нашей нейронной сети для прогнозирования следующего перехода и, наконец, генерируем новую конфигурацию на основе прогноза. Стоит отметить, что автор провел предварительный расчет для 10 000 самых частых слов, чтобы ускорить процесс синтаксического анализа.

Использованная литература: