Как работают механизмы обнаружения контента, такие как Zemanta и Open Calais? - PullRequest
5 голосов
/ 22 августа 2008

Мне было интересно, как семантический сервис, такой как Open Calais, вычисляет названия компаний или людей, технические концепции, ключевые слова и т. Д. Из фрагмента текста. Это потому, что у них большая база данных, с которой они сопоставляют текст?

Откуда такая служба, как Земанта, узнает, какие изображения предложить, например, к фрагменту текста?

Ответы [ 3 ]

9 голосов
/ 04 мая 2009

Михал Финкельштейн из OpenCalais здесь.

Во-первых, спасибо за ваш интерес. Я отвечу здесь, но я также призываю вас читать больше на форумах OpenCalais; там много информации, включая, но не ограничиваясь: http://opencalais.com/tagging-information http://opencalais.com/how-does-calais-learn Также не стесняйтесь подписаться на нас в Twitter (@OpenCalais) или напишите нам по адресу team@opencalais.com

Теперь к ответу:

OpenCalais основана на десятилетии исследований и разработок в области обработки естественного языка и анализа текста.

Мы поддерживаем полный «стек НЛП» (как мы его называем): От токенизации текста, морфологического анализа и маркировки POS до мелкого разбора и определения именных и устных фраз.

Семантика вступает в игру, когда мы ищем сущности (a.k.a. Извлечение сущностей, Распознавание именованных сущностей). Для этой цели у нас есть сложная система, основанная на правилах, которая объединяет правила обнаружения, а также словари / словари. Эта комбинация позволяет нам идентифицировать названия компаний / людей / фильмов и т. Д., Даже если их нет ни в одном доступном списке.

Для наиболее известных организаций (таких как люди, компании) мы также выполняем разрешение анафоры, перекрестные ссылки и канонизацию / нормализацию имен на уровне статьи, поэтому мы будем знать, что «Джон Смит» и «Мистер» Смит, например, скорее всего, ссылается на одного и того же человека. Поэтому короткий ответ на ваш вопрос - нет, речь идет не только о сопоставлении с большими базами данных.

События / факты действительно интересны, потому что они поднимают наши правила обнаружения на один уровень глубже; мы находим отношения между объектами и помечаем их соответствующим типом, например M & As (отношения между двумя или более компаниями), изменения в сфере занятости (отношения между компаниями и людьми) и так далее. Излишне говорить, что извлечение событий / фактов невозможно для систем, которые основаны исключительно на лексиконах. По большей части наша система настроена на точность, но мы всегда стараемся поддерживать разумный баланс между точностью и целостностью.

Кстати, в этом месяце появятся новые интересные возможности метаданных, так что следите за обновлениями.

С уважением,

Michal

7 голосов
/ 30 августа 2008

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

OpenNLP - отличный проект, если вы хотите поиграть с обработкой естественного языка. Упомянутые вами возможности, вероятно, лучше всего реализовать с помощью Named Entity Recognizer (NER) (алгоритмы, которые обычно определяют собственные имена, а иногда и даты) и / или устранения неоднозначности слов (WSD) (например, слово «банк»). имеет разные значения в зависимости от контекста, и это может быть очень важно при извлечении информации из текста. Учитывая предложения: «самолет накренился налево», «сугроб был высок» и «они ограбили банк», вы можете увидеть, как неоднозначность может сыграть важную роль в понимании языка)

Методы, как правило, основаны друг на друге, и NER является одной из более сложных задач, поэтому для успешного выполнения NER вам, как правило, потребуются точные токенизаторы (токенайзеры на естественном языке, обратите внимание - статистические подходы, как правило, работают лучше всего), Строковые элементы (алгоритмы, которые связывают похожие слова с общими корнями: таким образом, такие слова, как informant и informer, обрабатываются одинаково), определение предложения («Мистер Джонс был высоким.» - это только одно предложение, поэтому вы не можете просто проверить пунктуацию), тегеры части речи (POS-тегеры) и WSD.

Существует порт Python (части) OpenNLP под названием NLTK (http://nltk.sourceforge.net), но у меня пока нет особого опыта с этим. Большая часть моей работы была с портами Java и C #, которые работают хорошо.

Все эти алгоритмы, конечно же, зависят от языка, и для их запуска может потребоваться значительное время (хотя, как правило, это быстрее, чем чтение материала, который вы обрабатываете). Поскольку современное состояние в значительной степени основано на статистических методах, существует также значительный коэффициент ошибок, который необходимо принимать во внимание. Кроме того, поскольку частота ошибок влияет на все этапы, а что-то вроде NER требует многочисленных этапов обработки ((tokenize -> обнаружение предложений -> POS-тег -> WSD -> NER), составление коэффициентов ошибок.

0 голосов
/ 22 августа 2008

Open Calais, вероятно, использует технологию синтаксического анализа языка и статистику языка, чтобы угадать, какие слова или фразы являются Именами, Местами, Компаниями и т. Д. Затем, это просто еще один шаг, чтобы выполнить какой-либо поиск этих объектов и вернуть метаданные.

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

Это, конечно, не просто.

...