Фон

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



Теперь я собираюсь поговорить о том, как преобразовать его в график.

Подход

Для этого мне нужны следующие вспомогательные функции.

На этот раз немного длинновато со вспомогательными функциями, поэтому я пройдусь по функциям.

А. Токенизатор

У меня есть две разные функции токенизатора. Одним из них является «spanner», который вы найдете в моем последнем посте. Другой - тот, который я представляю здесь. Он называется «dynamicTokenizer». Их различия заключаются в том, как рекомбинировать необработанные токены обратно в осмысленную сущность.

«Spanner» использует прямой вывод процессора NER, то есть «bionlp13cg». «dynamicTokenizer», с другой стороны, использует мою пользовательскую функцию «consolidatedpassV2». Эта функция выполняет ту же задачу, что и встроенная строфа NER. Однако этот процессор зависит от набора правил, а не от процессора на основе нейронной сети. Набор правил представляет собой общие правила того, как английский язык используется для построения значимой фразы (например, именной фразы, прилагательной фразы и т. Д.), И поэтому он является детерминированным. Его необходимо использовать вместе с «dynamicToknierzer», потому что при каждом проходе теги части речи (POS) для каждого токена будут меняться, что приводит к еще одной рекомбинации. Процесс будет продолжаться до тех пор, пока не достигнет устойчивого состояния, при котором количество токенов больше не изменится.

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

B. Правила подключения токенов

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

1. Линейная последовательность порядка слов

2. Зависимость между двумя словами

Первый довольно прост. Это просто порядок слов в английском предложении, который читается слева направо. Ничего особенного.

Второй сильно зависит от грамматики зависимостей [1]. Анализ на основе зависимостей отличается от анализа на основе групп [2], в котором каждый токен в качестве узла будет классифицироваться как терминальный или нетерминальный. Анализ на основе зависимостей не различает каждый узел, а структура зависимостей определяется отношением между словом (головой) и его зависимостями. Структуры зависимостей более плоские, чем структуры фраз, отчасти потому, что в них отсутствует конечная составляющая фразы глагола. И именно по этой причине я выбираю выходные данные синтаксического анализа на основе зависимостей для построения графика, потому что я хочу предоставить возможность одному токену перейти к другому токену, игнорируя порядок слов в предложении. Я позаимствовал эту идею из алгоритма PageRank [3].

Антракт

Я подробно описал, какие шаги нужно разбить предложение на токены, готовые для построения графа.

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

Чао пока и следите за обновлениями.

[1] https://en.wikipedia.org/wiki/Dependency_grammar

[2] https://en.wikipedia.org/wiki/Parse_tree

[3] https://en.wikipedia.org/wiki/PageRank