Сокращение времени парсера Stanford за счет сокращения предложения

Мы уже знаем, что время синтаксического анализа Stanford Parser увеличивается по мере увеличения длины предложения. Я заинтересован в поиске творческих способов сокращения предложения таким образом, чтобы сократить время синтаксического анализа без ущерба для точности. Например, мы можем заменить известные фразы с существительными однословными существительными. Точно так же могут ли быть какие-то другие умные способы угадать поддерево заранее, скажем, с использованием информации POS-тега? В нашем распоряжении огромный корпус неструктурированного текста. Поэтому мы хотим изучить некоторые общие шаблоны, которые в конечном итоге могут сократить время синтаксического анализа. Также приветствуются некоторые ссылки на общедоступную литературу по этому вопросу.

P.S. Мы уже знаем, как использовать многопоточность с помощью Stanford Parser, поэтому не ищем ответов с этой точки зрения.


person Shishir Mane    schedule 05.02.2015    source источник
comment
Это действительно зависит от того, что вы пытаетесь получить. Что вы готовы потерять?   -  person Dan    schedule 06.02.2015


Ответы (1)


Вы просили о «творческом» подходе. Возможно, стоит обратить внимание на метод сокращения Cell Closure. См. серию публикаций Брайана Рорка, Кристи Холлингсхед и Натана Боденстаба. Документы: 1 2 3. Основная интуиция:

  • Каждая ячейка в диаграмме синтаксического анализа CYK «покрывает» определенный диапазон (например, первые 4 слова предложения или слова 13–18 и т. д.).
  • Некоторые слова, особенно в определенных контекстах, очень вряд ли будут начинать синтаксическую составляющую из нескольких слов; другие также вряд ли положат конец составной части. Например, слово «the» почти всегда предшествует словосочетанию с существительным, и почти невозможно представить, чтобы оно оканчивалось составной частью.
  • Если мы сможем обучить классификатор с машинным обучением идентифицировать такие слова с очень высокой точностью, мы сможем тем самым идентифицировать ячейки, которые будут участвовать только в синтаксическом анализе, помещая указанные слова в крайне маловероятные синтаксические позиции. (Обратите внимание, что этот классификатор может использовать POS-тегер с линейным временем или другие высокоскоростные этапы предварительной обработки.)
  • «Закрывая» эти ячейки, мы можем значительно уменьшить как асимптотическую, так и среднюю сложность — теоретически, от кубической сложности до линейной; практически мы можем добиться примерно n^1,5 без потери точности.

Во многих случаях такое сокращение на самом деле немного повышает точность по сравнению с полным поиском, потому что классификатор может включать информацию, недоступную для PCFG. Обратите внимание, что это простая, но очень эффективная форма грубой очистки с одной грубой стадией (по сравнению с 7-этапным подходом CTF в Berkeley Parser).

Насколько мне известно, Stanford Parser в настоящее время не реализует этот метод обрезки; Я подозреваю, что вы найдете это весьма эффективным.

Бесстыдный плагин BUBS Parser реализует этот подход, а также некоторые другие оптимизации и, таким образом, достигает пропускной способности около 2500-5000 слов в секунду, обычно с точностью, по крайней мере, равной той, которую я измерил с помощью Stanford Parser. Очевидно, что если вы используете остальную часть стэнфордского пайплайна, встроенный синтаксический анализатор уже хорошо интегрирован и удобен. Но если вам нужна повышенная скорость, возможно, стоит взглянуть на BUBS, и он включает в себя пример кода, помогающий встроить движок в более крупную систему.

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

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

person AaronD    schedule 07.02.2015