Как работают механизмы обнаружения контента, такие как Zemanta и Open Calais?
Мне было интересно, как семантический сервис, такой как Open Calais, вычисляет названия компаний или людей, технические концепции, ключевые слова и т. Д. Из фрагмента текста. Это потому, что у них большая база данных, с которой они сопоставляют текст?
Как такая служба, как Zemanta, узнает, какие изображения предложить, например, к фрагменту текста?
3 ответа
Михал Финкельштейн из OpenCalais здесь.
Во-первых, спасибо за ваш интерес. Я отвечу здесь, но я также призываю вас читать больше на форумах OpenCalais; там много информации, включая, но не ограничиваясь: http://opencalais.com/tagging-information http://opencalais.com/how-does-calais-learn Также не стесняйтесь следить за нами в Twitter (@OpenCalais) или напишите нам по адресу team@opencalais.com
Теперь к ответу:
OpenCalais основана на десятилетии исследований и разработок в области обработки естественного языка и анализа текста.
Мы поддерживаем полный "стек НЛП" (как мы его называем): от токенизации текста, морфологического анализа и POS-тегов до поверхностного разбора и определения именных и устных фраз.
Семантика вступает в игру, когда мы ищем сущности (так называемое извлечение сущностей, распознавание именованных сущностей). Для этой цели у нас есть сложная система, основанная на правилах, которая объединяет правила обнаружения, а также словари / словари. Эта комбинация позволяет нам идентифицировать названия компаний / людей / фильмов и т. Д., Даже если их нет ни в одном доступном списке.
Для наиболее заметных субъектов (таких как люди, компании) мы также выполняем разрешение анафоры, перекрестные ссылки и канонизацию / нормализацию имен на уровне статьи, поэтому мы будем знать, что "Джон Смит" и "Мистер" Смит, например, скорее всего, ссылается на одного и того же человека. Итак, краткий ответ на ваш вопрос - нет, речь идет не только о сопоставлении с большими базами данных.
События / факты действительно интересны, потому что они поднимают наши правила открытия на один уровень глубже; мы находим отношения между объектами и помечаем их соответствующим типом, например M&As (отношения между двумя или более компаниями), изменения в сфере занятости (отношения между компаниями и людьми) и так далее. Излишне говорить, что извлечение событий / фактов невозможно для систем, которые основаны исключительно на лексиконах. По большей части наша система настроена на точность, но мы всегда стараемся поддерживать разумный баланс между точностью и целостностью.
Кстати, в этом месяце появятся новые интересные возможности метаданных, так что следите за обновлениями.
С Уважением,
Michal
Я не знаком с перечисленными конкретными службами, но в области обработки естественного языка разработан ряд методов, позволяющих извлекать информацию такого рода из общего текста. Как сказал Шон, если у вас есть подходящие термины, нетрудно найти эти термины с некоторыми другими объектами в контексте, а затем использовать результаты этого поиска, чтобы определить, насколько вы уверены, что извлеченный термин является действительным объектом интерес.
OpenNLP - отличный проект, если вы хотите поиграть с обработкой естественного языка. Упомянутые вами возможности, вероятно, лучше всего реализовать с помощью распознавателей именованных сущностей (NER) (алгоритмы, которые обычно находят собственные имена, а иногда и даты) и / или устранения неоднозначности слов (WSD) (например, слово "банк"). имеет различные значения в зависимости от его контекста, и это может быть очень важно при извлечении информации из текста. Учитывая предложения: "самолет накренился налево", "сугроб был высоко" и "они ограбили банк", вы можете увидеть, как неоднозначность может сыграть важную роль в понимании языка)
Методы, как правило, основываются друг на друге, и NER является одной из более сложных задач, поэтому для успешного выполнения NER вам, как правило, потребуются точные токенизаторы (токенайзеры на естественном языке, обратите внимание - статистические подходы, как правило, лучше всего), струнные стеммеры (алгоритмы, которые связывают похожие слова с общими корнями: таким образом, слова, такие как информатор и информатор, обрабатываются одинаково), обнаружение предложения ("Мистер Джонс был высоким." - это только одно предложение, поэтому вы не можете просто проверить пунктуацию), часть речевые тегеры (POS-тегеры) и WSD.
Существует порт Python (части) OpenNLP под названием NLTK ( http://nltk.sourceforge.net/), но у меня пока нет особого опыта работы с ним. Большая часть моей работы была с портами Java и C#, которые работают хорошо.
Все эти алгоритмы, конечно же, зависят от языка, и для их запуска может потребоваться значительное время (хотя, как правило, это быстрее, чем чтение материала, который вы обрабатываете). Поскольку современное состояние в значительной степени основано на статистических методах, существует также значительный коэффициент ошибок, который необходимо принимать во внимание. Кроме того, поскольку уровень ошибок влияет на все этапы, а что-то вроде NER требует многочисленных этапов обработки (токенизация -> обнаружение предложения -> тег POS -> WSD -> NER), составление коэффициентов ошибок.
Open Calais, вероятно, использует технологию синтаксического анализа языка и статистику языка, чтобы угадать, какие слова или фразы являются Именами, Местами, Компаниями и т. Д. Затем, это просто еще один шаг, чтобы выполнить какой-либо поиск этих объектов и вернуть метаданные.
Zementa, вероятно, делает нечто подобное, но сравнивает фразы с метаданными, прикрепленными к изображениям, чтобы получить связанные результаты.
Это конечно не легко.