Кросспост моего второго поста об извлечении информации.
Предыдущий пост
о семантических связях между словами представил открытый инструмент
word2vec, позволяющий строить или выявлять в некотором смысле
семантические сети слов и словосочетаний.
В
этом посте мы рассмотрим систему, выявляющую связи между запросом и
документами по тройке: Объект1-Связь-Объект2, где объекты {Объект1,
Объект2} представлены в виде существительного либо семантического класса
существительного, Связь -- в виде глагола или падежного типа.
Система называется ReVerb (от Relataion=связь, Verb=глагол). Её исходный код доступен на github. Система поддерживает только английский язык.
С попыткой представить знание в виде приведённых троек можно встретиться довольно часто где (например, этот подход упоминался в докладе Gerhard Weikum на RuSSIR'2011).
Первое впечатление от такого подхода: слишком узкий взгляд на семантику
и что ничего путного с этим не сделать. Однако это не совсем так. Часто
перед решением задачи компьютерной лингвистики (будь то машинный
перевод, анализ тональности или информационный поиск) нужно сделать
первые шаги в изучении имеющихся данных. Эти шаги могут включать
построение частотных таблиц слов или словосочетаний (N-грамм),
выявление ключевых слов, представляющих документ и т.д. Кстати, многие
начальные шаги можно оптимально сделать при помощи инструментов Linux,
таких как cat, cut, grep, awk, sed, wc
(от word count, а не то, что можно подумать) и других. Таким образом,
воспользовавшись существующими инструментами обработки текста, можно
решить начальные задачи, даже не написав строчки кода!
Демонстрация системы извлечения знаний из 500 млн веб-страниц находится здесь. Что в ней примечательного?
Например, можно получить список стран Африки, задав запрос:
Argument1: type:Country
Relation: is located in
Argument2: Africa
Система
выводит список из 45 государств, видимо тех, о которых что-то
публикуется в Сети (вообще, официально признанных суверенных государств в
Африке 54, согласно Википедии).
Можно задавать общие вопросы: например, какие актёры играли в каких фильмах:
Argument1: what/who
Relation: starred in
Argument2: what/who
Например, Barbra Streisand снималась в фильме "Yentl", Jessica Alba в "Sin City", а Johny Depp в "Pirates of the Caribbean".
Воспользовавшись падежной связкой "symbol of", мы получаем список символов разных стран.
Argument1: what/who
Relation: symbol of
Argument2: type:Country
У Шотландии -- это единорог.
Индексировать и искать документы с мета-информацией можно, например, при помощи Apache Solr. Но это уже отдельная история.