Компания
378,89
рейтинг
14 апреля 2014 в 18:07

Разработка → Что такое Томита-парсер, как Яндекс с его помощью понимает естественный язык, и как вы с его помощью сможете извлекать факты из текстов

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

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

image

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

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

Алгоритм GLR


Назван инструмент в честь японского ученого Масару Томита, автора алгоритма GLR-парсинга (Generalized left-to-right algorithm), на основе которого и был создан Томита-парсер. Еще в 1984 году он описал имплементацию этого алгоритма, поставив перед собой задачу эффективно и точно производить анализ текстов на естественном языке. В некотором роде GLR-алгоритм — это расширенная версия алгоритма LR-парсинга. Но LR-алгоритм предназначен для анализа текстов, написанных на достаточно строго детерминированных языках программирования, и с естественным языком работать не может. Томита решил эту проблему путем параллелизации стеков, что позволило рассматривать различные трактовки тех или иных участков текста: как только возникает возможность различной трактовки, стек разветвляется. Таких последовательных разветвлений может быть несколько, но в процессе анализа ошибочные ветви отбрасываются, и результатом становится наиболее длинная цепочка. При этом алгоритм выдает результаты своей работы в режиме реального времени, по мере продвижения вглубь текста, другие алгоритмы обработки естественного языка такой особенностью не обладают.

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

Где используется Томита


На сегодняшний день Томита используется в четырех сервисах Яндекса:
  1. Почта. Как уже говорилось выше, если вам придет письмо, в котором вам в произвольной форме предлагают встретиться, Томита определит, где и когда будет проходить эта встреча, и предложит внести ее в календарь. Примерно так же обстоит дело с авиабилетами.
  2. Новости. В этом сервисе Томита помогает автоматически осуществлять географическую привязку и группировку новостных сюжетов. Если в заметке упоминается название страны, города или полный адрес места, где произошло описываемое событие, Томита выделит эту информацию и привяжет заметку к точке на карте.
  3. Авто. imageСервис Яндекс.Авто агрегирует отзывы об автомобилях с различных площадок, там же можно оставить свой отзыв. Томита анализирует эти отзывы, оценивает эмоциональную окраску высказываний о различных характеристиках автомобилей. На основе этих данных составляется рейтинг характеристик: внешний вид, ходовые качества, салон и комфорт, эксплуатация, впечатления.
  4. Работа. Подобно Яндекс.Авто Работа собирает с разных площадок объявления о поиске работников. Они также обычно составляются в произвольной форме. Томита анализирует эти тексты и выделяет требования к кандидатам и условия работы, формализует их, благодаря чему при поиске работы пользователи могут фильтровать вакансии.


Как все это работает на практике


В минимальной конфигурации парсеру на входе отдается сам анализируемый текст, а также словарь и грамматика. Объем словаря и сложность грамматики зависят от целей анализа: они могут быть как совсем маленькими, так и огромными. Файл грамматики состоит из шаблонов, написанных на внутреннем языке/формализме Томита-парсера. Эти шаблоны описывают в обобщенном виде цепочки слов, которые могут встретиться в тексте. Кроме того, грамматики определяют, как именно нужно представлять извлеченные факты в итоговом выводе.

image

В словарях содержатся ключевые слова, которые используются в процессе анализа грамматиками. Каждая статья этого словаря задает множество слов и словосочетаний, объединенных общим свойством. Например, «все города России». Затем в грамматике можно использовать свойство «является городом России». Слова или словосочетания можно задавать явно списком, а можно «функционально», указав грамматику, которая описывает нужные цепочки.

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

Грамматика
#encoding "utf-8" 
#GRAMMAR_ROOT S


PersonName -> Word<h-reg1, nc-agr[1]> Word<h-reg1, nc-agr[1]>*; //имя собственное - цепочка, состоящая из  одного или более слов с большой буквы и согласованных между собой в числе и падеже
FilmName -> AnyWord<h-reg1, quoted>; //название фильма - слово с большой буквы в кавычках
FilmName -> AnyWord<h-reg1, l-quoted> AnyWord* AnyWord<r-quoted>; //то же самое, но для двух и более слов


GenreChain -> Word<kwtype=genre_type> interp (Film.Genre); //жанр - цепочка, которую грамматика берет из словаря из статьи с типом genre
Film -> 'фильм'; //в качестве шаблона может выступать конкретная лемма
Descr -> GenreChain | Film; //объединение двух ранее описанных шаблонов


Director -> PersonName interp (Film.Director); //цепочку PersonName необходимо положить в поле Director факта Film


S -> Descr Director<gram="род"> FilmName interp (Film.Name::not_norm); //так называемая терминальное правило - вершина дерева. Пример цепочки, попадающей под это правило: Комедия Владимира Меньшова "Любовь и голуби"


Словарь
//для каждой статьи обязательно должен быть указан тип (в данном случае genre), название и ключ - содержание статьи
genre_type "комедия_1" 
{
   key = { "романтический комедия" agr=gnc_agr } //слова в ключе должны быть указаны в начальной форме
   key = { "лирический комедия" agr=gnc_agr } //можно указывать согласование между словами ключа
   key = { "музыкальный комедия" agr=gnc_agr }
   mainword = 2 //синтаксически главное слово ключей
   lemma = "комедия" //форма, к которой будут приводится все ключи статьи при нормализации
}


genre_type "комедия_2" //название статьи должно быть уникальным
{
   key = "комедия"
   lemma = "комедия" //леммы могут повторяться
} 


genre_type "фильм_ужасов"
{
   key = { "фильм ужас" gram={"род,мн", word=2} }
   key = "ужастик" | "хоррор"
   lemma = "фильм ужасов"
}


genre_type "боевик"
{
   key = "боевик"
   lemma = "боевик"
}

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

image

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

Как использовать Томиту в своих проектах?


В виде бинарных пакетов под Windows, OS X и Linux Томита-парсер доступен уже сейчас, но разобраться самостоятельно в том, как составлять свои грамматики и словари, не так уж просто. Поэтому мы подготовили серию обучающих видео. В следующем посте мы постараемся дать чуть более подробное описание синтаксиса и принципов работы с Томитой на основе этих уроков. Ну а самые нетерпеливые и упорные уже сейчас могут ознакомиться с видео и документацией.
Автор: @tlando
Яндекс
рейтинг 378,89

Комментарии (78)

  • +10
    Это последний из недостающих компонентов для создания русского Ватсона. Ура!
    • +12
      Мне кажется, Вы чересчур оптимистичны по поводу Томиты, у нее достаточно ограничений.
      • +2
        Во-первых, лиха беда начало. Во-вторых, на первый взгляд, не так уж сильно Томита уступает SPARQL, который использует Ватсон.
        • +6
          Ох нет, SPARQL же совсем про другое — это хитрые запросы к базе данных. А Томита — это инструмент для доставания фактов из текста, т.е. очень упрощенно, для создания базы фактов.
          • +4
            Я лажанулся, и не успел поправить комментарий. Имелся в виду, конечно же, не сам SPARQL, а ту часть Ватсона, которая как раз извлекает факты из документов (или он пользуется уже готовой базой, которая хз как составлена? в таком случае, у вас всё существенно круче).

            Попробую еще раз: Ватсон = (1) Извлечение фактов из документов + (2) морфологический поиск по базе + (3) байесовский вывод. Третий компонент не завязан на естественном языке, для второго есть решения для русского языка (не мне вам напоминать ;) ), не хватало только (1). Томита, если я все правильно понял, закрывает этот пробел.
            • +2
              IBM довольно туманно рассказывает о том, как пополняется база Ватсона. Но думаю, что не обошлось без майнинга из обычных текстов. Другое дело, что для извлечения фактов есть масса разных подходов, далеко не всегда rule-based, который и представляет Томита, является оптимальным.
              • +2
                Да, я так и не смог найти никакой информации о том, как же все-таки появляется база узлов, которая обрабатывается Ватсоном. Но при любом раскладе, rule-based лучше, чем руки-based, которым сейчас пользуются в этой области для русских текстов
                • +4
                  Затем и выкладываем :)
    • 0
      Это вряд ли, но для формализации медицинских текстов и (в дальнейшем) их перевода между мировыми языками должен подойти.
      Я собираюсь попробовать это в ближайшее время.
      • 0
        удалось?
        • 0
          Не совсем подходящий инструмент.
        • 0
          Почему — я сам не работал, а знакомые решали аналогичную задачу и вроде как решили, но инструментами, которые пытаются работать глубже — со смыслом языка, а не только со структурой предложений. Томита-парсер давал в общем качественную картинку, но иногда были такие ошибки, которые могли критично сказаться на здоровье больного, и исправить их мог только врач, знакомый как с основами физиологии так и с историей болезни.
          • 0
            Простите, а не подскажете, что это за инструменты работающие на уровне смыслов?
            • 0
              Не могу, подписал nda.
  • +36
    Молодцы, что назвали хороший проект без ругани и наркотиков.
  • +11
    Если меня в письме пошлют подальше, то Яндекс сумеет определить, куда именно…
    • +18
      Покажет на карте и внесёт путешествие в календарь
      • +4
        И предложит заказать билеты
        • 0
          Пробки в то место тоже учтёт?)
  • +5
    У нас в проекте, Томита парсер используется для определения «эмоционального окраса» текста. Очень удобная вещь!
    • +1
      Могли бы вы привести пример эмоционального окраса текста?
      • +1
        Моё сообщение выше. Тональная оценка «позитив», допишем к нему еще одно предложение «я без ума от этого парсера!» — определим эмоцию «восхищение». Все просто:)
        • 0
          Если можно, пару вопросов:
          1. а какова скорость работы этой штуки?
          т.е. сколько текста (в кб/сек) она сможет окрасить?
          2. Что будет, если в одном тексте есть и позитив и негатив?
          • 0
            На очень сложны грамматиках скорость порядка 80 мб/час.
          • 0
            1. Замеры делали в самом начале разработки. 5.тыс «рыбных» комментариев(1 комментарий ~ 400 символов) с 20 простыми цепочками обработались за ~10сек
            2. Тональная оценка выводится исходя из баллов по шкале.
    • +9
      Расскажите, пожалуйста, подробнее! Нам очень интересно :)
      • +3
        Ведем разработку сервиса мониторинга социальных медиа. Для определения тональности, было решено использовать метод машинного обучения. Тут-то томита парсер с цепочками и пришелся как нельзя кстати, сэкономив нам кучу времени:-)
        • 0
          Не очень понятно, как Томита может вам помочь с определением тональности машинным обучением. Найти окрашенные слова в тексте и так можно. Машинное обучение вы можете сделать и по размеченным текстам (а такие есть?). Томита же разбирает цепочки слов по правилам. Что это позволяет вам определить?
        • 0
          Расскажите, пожалуйста что за сервис. Ну и как успехи было бы тоже интересно узнать.
          Перед нами сейчас похожая задача стоит.
    • 0
      Интересно, а вы подаёте ему на вход словарь эмоционально окрашенных слов (хороший, удобный,..) или Томита сам их знает и понимает цвет и степень окраски?
      • +1
        В Томиту зашит только морфологический словарь, всю остальную информацию нужно подавать на вход, а потом интерпретировать самостоятельно.
        • 0
          спасибо!
  • 0
    Помимо русского и украинского языков могут ли задаваться правила для работы с другими языками, напиример, английским, немецким, а может быть китайкским?
    • +1
      Чтобы включить новый язык, нужно подключить морфологию этого языка. Мы не можем по разным причинам сейчас выкладывать морфологии других языков. Китайский вообще устроен по другому, чтобы он заработал надо что-то специальное делать.

      В общем, когда выложим в open source, все желающие смогут сами подключать другие языки.
      • 0
        Жаль, буду надеяться, что английский и другие языки появится вскоре после появления сорцов, уж очень интересно выглядит.
        • +2
          Для английского есть бесконечное количество похожих инструментов. Самый известный, наверное, — это GATE, в составе которого есть язык описания грамматик JAPE. И еще StanfordNLP — пакет машиннообучаемых обработчиков, которые можно тренировать на своих данных.
          • 0
            Спасибо.
  • +7
    После слов «планируем отдать эту технологию в open source» пролистал вниз, поставил плюсик и лишь потом вернулся и дочитал. Спасибо!

    Остаётся всего один неоднозначный момент.

    Изменятся ли условия использования после открытия кода? Анализатор хорошо работает уже сейчас, однако последняя часть пункта 3.2 текущего лицензионного соглашения запрещает любое более-менее практическое применение «Томиты».
    • +4
      Про лицензию мы думаем и совещаемся с юристами. К сожалению, пока больше ничего не могу сказать.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +9
      Задание с финала школьной олимпиады Китая 2018 года по хакерству:
      — сгенерируйте предложение, на разбор которого парсер с указанной грамматикой потратит более 32ГБ памяти.
      • +3
        Уже было, «Зенитные кодексы Аль-Эфесби».
  • +12
    Имел дело с Томита-Парсером, вставлю свои пять копеек как «простой пользователь». Эта штука несомненно одна из самых крутых технологий, которая имеется у Яндекса, это подтверждают в личной беседе все связанные с ней яндексоиды. Но у этого есть и обратная сторона — полноценную Томиту Яндекс уж очень навряд ли откроет для всех желающих, и здесь их можно понять. Та Томита, что выложена на всеобщее обозрение, во-первых отстает на много версий от той, что используется внутри компании (это обычная практика), во-вторых даже беглое чтение документации намекает, что множество крутых фич в общедоступной версии вырезано наживую. «Открытый» Томита-Парсер нужен Яндексу чтобы показать кусочек наикрутейшей технологии, а потом собрать сливки — для компании это очень правильный шаг, а вот к «отдать в опенсорс» я отношусь скептически. Возможно отдадут базовую функциональность в виде GLR-анализатора и оберток к нему, уже будет неплохо. Надеюсь ее хотя бы причешут до нормального демона, а пока это лишь очень клевая игрушка для тех, кто «в теме».

    Наткнулся на Томита-Парсер я тогда, когда собирал материал для своей диссертации. Мне как раз понадобился инструмент извлечения фактов и Томита очень понравилась. Вдохновившись ей я даже написал свою небольшую библиотечку на Python, которую выложил на гитхаб: github.com/vas3k/python-glr-parser

    Она в каком-то роде повторяет базовую (открытую) функциональность Томиты, проект молодой, нисколько не является конкурентом или opensource-версией Томиты, написан так сказать «для себя» и для собственного диплома. Но в области обработки естественного языка в России так мало всего написано, потому возможно кто-то захочет попробовать, поучаствовать или кого-то просто вдохновит идея.
    • +3
      Та Томита, что выложена на всеобщее обозрение, во-первых отстает на много версий от той, что используется внутри компании (это обычная практика)


      Это не так. Внутри работает точно такая же сборка. Наружу не выложены некоторые особенности морфологии. В основном, чтобы плохие сеошники не злоупотребляли знаниями. И еще есть проблемы с правами на словари.

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


      Это тоже не так. Есть некоторые фичи, которые недокументированны. Но только потому, что они работают не совсем так, как должны.

      Возможно отдадут базовую функциональность в виде GLR-анализатора и оберток к нему, уже будет неплохо.


      Мы собираемся, если уж открывать, то практически все. С точностью до определенных фичей из морфологии.
      • 0
        Это тоже не так. Есть некоторые фичи, которые недокументированны. Но только потому, что они работают не совсем так, как должны.

        Ну яж не спорю, я с удовольствием наблюдаю за проектом и всегда жду новых открытых фич и документаций. В качестве аргумента я приведу помету geo-agr, которая описана здесь и должна быть очень вкусной, однако поиск по документации не находит больше ни одного ее упоминания. Явно она использует огромный пласт геоданных внутри, потому ее открывать не планировалось, но в документации-то проскочила :)

        Возможно дело в недостатке документации, если в опенсорс-проектах всегда можно почитать код, то здесь можно полагаться только на документацию. Например те же алгоритмы выделения ФИО и другие описаны скомкано, у меня не получилось их заюзать.

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

        Я пока скептичен, но вы не поверите как я буду рад ошибаться! Открывайте, я представляю объем вкусняшек, которые можно будет оттуда вытащить и уже истекаю слюнями.
        • +2
          Помета geo-agr абсолютно бесполезна без гео-данных, к которым она привязана. А их мы никогда не будем открывать из-за проблем с лицензированием. Ну и вообще, они слишком ценные, чтобы их раздавать просто так :)

          Алгоритм выделения ФИО как раз относится к тем вещам, которые работают не так, как должны.

          Надеюсь, что Вы не разочаруетесь :)
          • +5
            Геоданные можно нагенерировать из Википедии или из OpenStreetMap. Так что если в документации не описано, какой формат поддерживает geo-agr, это, наверно, неправильно.
            • +1
              Надо будет либо убрать пока помету, либо пример сделать нормальный. Второй вариант мне больше нравится.
  • –15
    Сырцы??? Что значит «в бинарном виде»? На кой ляд?
    • +2
      Подготовка к открытию исходных кодов уже началась, но процесс этот не такой быстрый, как нам бы хотелось, и, скорее всего, продлится до конца этого года.… любой желающий может воспользоваться [Томита-парсером] уже сейчас: бинарные файлы доступны для скачивания.
  • +1
    Является ли Томита родственником разработок aot.ru/? Год назад я пытался использовать их наработки. Интересовал модуль построения семантического графа. К сожалению, так и не смог его собрать. Единственное что получилось — автоматическое склонение ФИО на C#.
    • +2
      Да, в некоторой степени является.
    • +1
      Буквально на днях получилось собрать АОТ для Linux/x64, там буквально в одном-двух местах нужно подправить #include. Могу выслать Вам патч.

      Впрочем, если Вас интересует не синтаксический, а сугубо морфологический анализ или стемминг — рекомендую воспользоваться библиотекой LanguageTool. Наработки АОТ для русского языка туда уже вошли.

      Если же вас интересует просто стемминг — то можно вообще взять Hunspell.
  • +4
    Простите за офтоп, но картинкой навеяло: на словах ты Лев Толстой, после парса — бот простой.
  • 0
    В свете появления такого инструмента думаю неплохо бы напомнить об открытом неделю назад конкурсе Фонда перспективных исследований посвященному интеллектуальным сервисам и технологиям поиска информации в сети. Там как раз есть пункты где парсер однозначно пригодится, например:
    — технологий умного поиска (формирование ответов на конкретные вопросы), смыслового (контекстного) анализа запроса и результатов поиска;


    Страничка конкурса: fpi.gov.ru/activities/ideas/search
    • 0
      сорри, не туда запостил…
  • 0
    Татьяна, а без статичных грамматик пробовали? По себе знаю, что составление таких правил — то еще удовольствие. Сейчас ведь появились уже всякие вкусные вещи типа рекуррентных сверточных сетей, с которыми можно автоматически строить грамматики (т.е. деревья разбора).
    • 0
      Все зависит от задачи, от возможностей нанять асессоров и т.д. и т.п.
      Есть простые типы данных, например адреса, которые проще описать ручными правилами, чем обучать сети на большой разметке. Т.е. правила обойдутся дешевле.
      Есть более сложные случаи, когда дешевле и эффективней разметить корпус и обучить на нем.
      Иногда имеет смысл делать что-то среднее, простые случаи брать ручными грамматиками, переферийные — обучением.
  • 0
    Добрый день,

    Насколько я понимаю парсер заточен на работу с украинским и русским языками, скажите пожалуйста а возможно ли его так же заточить например на французский или голландский? Если да то не могли бы вы объяснить что для этого нужно. Спасибо.
    • 0
      Выбор языков зависит исключительно от имеющейся морфологии. По разным причинам мы не можем отдавать морфологии других языков. Поэтому прямо сейчас сделать что-то осмысленное с французским и голландским не получится.
      Когда мы выложим парсер с исходным кодом, там будет возможность подключить любую другую морфологию самостоятельно.
  • 0
    Интересная технология. Скажите пожалуйста, правильно ли я понимаю, что используя её, можно создать систему оценки соответствия произвольной фразы по заданному словарю, включащему объекты и возможные действия над ними? Т.е. в контексте управления «умным домом» не привязывать пользователя к определённому формату общения с системой, а пытаться самостоятельно определить, соответствует ли произнесённая фраза какой-либо команде, поддерживаемой системой.
    • 0
      Система предназначена для выделения смысловых предописанных цепочек из обычного теста. Ее можно использовать и для выделения команд. Степень соответсвия она не умеет оценивать, для этого нужно будет писать свой постпроцессинг.
  • 0
    А почему правила описываются каким-то AnyWord<h-reg1, l-quoted>, а не регулярным выражением?
    • 0
      Потому что ими можно описать больше, чем регулярными выражениями.
  • 0
    Татьяна, хотел спросить: а если выполняется ли какая-либо дополнительная обработка данных после извлечения фактов Томита-парсером? Просто если он сможет выдернуть из текста достаточно фактов о людях — не значит, что их можно склеивать просто по близости расположения.
    • 0
      Конечно производится, постобработка — наше всё. :)
      В зависимости от задачи мы тем или иным способом стараемся верифицировать данные, которые принес нам парсер.
      • +1
        А можно вкратце, описать принципы лежащие в постобработке (связке фактов)? Ведь более менее сложное предложение на русском языке представляет собой достаточно сложную схему речевых шаблонов (из которых парсер формирует факты) и которые могут по-разному свзываться в рамках предложения (дру с другом, согласовываться по времени, отмечать степень влияния друг на друга и т.д.)
        • +1
          Зависит от задачи.
          Когда мы извлекали информацию о персонах из СМИ, то за извлечением фактов стояла огромная машина с кластеризацией, она верифицировала факты из разных источников, склеивала дубли и еще много всего делала.
          • 0
            Всегда было интересно узнать, а так же подчерпнуть новых идей из реально существующих проектов. Были ли у Яндекса публикации по данной тематике или есть возможность указать материалы, лежащии в основе данной вышестоящей системы?
            • 0
              Публикация была одна, но я не могу ее найти. Есть моя старая лекция: nlpseminar.ru/archive/lecture32/, к сожалению ничего получше не нашлось.
          • 0
            Можно конечно выполнить ещё более высокую абстракцию, типа «парсер результатов анализа парсера», но это уже что-то на уровне фактов-смысла, а не синтаксиса-морфологии. При этом возможность четкого декларативного описания подобных вещей мне представляется достаточно сложным вопросом. Или это был достаточно механический, статистический способ решения на базе машинного обучения?
            • 0
              Мне трудно так абстрактно рассуждать, поскольку действительно все зависит от задачи.
              Итоговые факты же типизируются априори и выдаются в структурированном виде, это значит, что перепарсивать их уже незачем. Их можно фильтровать, кластеризовать, классифицировать, делать сложные умозаключения и т.д. и т.п.
              • 0
                Постараюсь посмотреть в ближайшее время видео по представленной ссылке, но похоже у меня немного другое понимание факта, извлекаемого парсером. В разрабатываемых прототипах факты, извлекаемые из предложения «Мэр города Саратов 22 июня посетил для открытия выставки местного художника краеведческий музей города» были чем-то вроде «ДолжностноеЛицо», «ПрибылКудаТо», «ОргМероприятие», «Дата», которые после этого можно было связать в некие связки «Кто-Где-Когда» как раз с помощью парсинга 2-го уровня.
                В Вашем варианте под фактами, извлекаемыми на 1-м уровне, понимаются такие результаты как уже «Кто-то посетил Что-то», получаемые с помощью достаточно широкого набора правил. Верно?
                • 0
                  Ну да, это скорее просто именованные сущности, а факт — это именованная сущность + атрибут или несколько именованных сущностей и отношения между ними.
                  Но Томита подходит для извлечения и того, и другого.
  • 0
    Вопрос по практическому использованию парсера: ф-л программы очень богатый, как и сам язык — соответственно для создания реальных наборов грамматик для жизненных ситуаций (которые (грамматики) д.б. достаточно большими) необходимо что-то вроде среды разработки/отладки. Тот ф-л отладки, что есть в распространяемой сборке совсем небольшой. Есть ли такой продукт внутри Яндекса? МОжно посмотреть хотя бы на скриншоты?
    • 0
      Такого инструмента нет. Среднестатистический томита-писатель привыкает с notepad++ за неделю-другую. Компилятор обычно довольно внятно описывает ошибки, если они произошли при компиляции. А для отладки выхода грамматик есть pretty output — он описан в документации.
  • 0
    В документации (в разделе про выделение ключевых слов) есть упоминание про алгоритм выделения ФИО. Можно узнать, на базе чего он основан (о ключевых моментах реализации)?
    • 0
      Отбой. Если кому интересно Яндекс некоторое время назад опубликовал исходные тексты tomita парсера (http://github.com/yandex/tomita-parser). Надо признать кода очень много и изучить его работы изнутри будет достаточно интересно, но касательно заданного вопроса вывод такой: используются данные из mystem и достаточно большое кол-во правил (код на C++).

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

Самое читаемое Разработка