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






Open Calais, вероятно, использует технологию синтаксического анализа языка и языковую статику, чтобы угадать, какие слова или фразы являются именами, местами, компаниями и т. д. Затем это всего лишь еще один шаг, чтобы выполнить какой-то поиск этих сущностей и вернуть метаданные.
Zementa, вероятно, делает что-то подобное, но сопоставляет фразы с метаданными, прикрепленными к изображениям, чтобы получить связанные результаты.
Конечно, это непросто.
Я не знаком с перечисленными конкретными службами, но в области обработки естественного языка разработан ряд методов, которые позволяют извлекать информацию такого рода из общего текста. Как заявил Шон, если у вас есть термины-кандидаты, нетрудно найти эти термины с некоторыми другими сущностями в контексте, а затем использовать результаты этого поиска, чтобы определить, насколько вы уверены в том, что извлеченный термин является фактическим элементом интерес.
OpenNLP - отличный проект, если вы хотите поиграть с обработкой естественного языка. Названные вами возможности, вероятно, будут лучше всего реализованы с помощью распознавателей именованных сущностей (NER) (алгоритмы, которые обнаруживают имена собственные, как правило, а иногда и даты) и / или устранение неоднозначности слов (WSD) (например, слово `` банк '') имеет разное значение в зависимости от контекста, и это может быть очень важно при извлечении информации из текста. Учитывая предложения: «самолет повернул налево», «снежный вал был высок» и «они ограбили банк», вы можете увидеть, как устранение неоднозначности может играть важную роль в понимании языка)
Методы, как правило, основываются друг на друге, и NER является одной из наиболее сложных задач, поэтому для успешного выполнения NER вам, как правило, потребуются точные токенизаторы (токенизаторы естественного языка, заметьте - статистические подходы, как правило, лучше всего), стеммеры строк ( алгоритмы, которые объединяют похожие слова с общими корнями: поэтому такие слова, как информатор и информатор, обрабатываются одинаково), обнаружение предложения («Мистер Джонс был высоким» - это только одно предложение, поэтому вы не можете просто проверить пунктуацию), -речевые тегеры (POS-тегеры) и WSD.
Существует порт Python для (частей) OpenNLP под названием NLTK (http://nltk.sourceforge.net), но у меня пока нет большого опыта с ним. Большая часть моей работы была связана с портами Java и C#, которые работают хорошо.
Все эти алгоритмы, конечно, зависят от языка, и для их выполнения может потребоваться значительное время (хотя, как правило, это быстрее, чем чтение обрабатываемого вами материала). Поскольку современный уровень техники в значительной степени основан на статистических методах, необходимо также учитывать значительный коэффициент ошибок. Кроме того, поскольку частота ошибок влияет на все этапы, а что-то вроде NER требует многочисленных этапов обработки (токенизация -> определение предложения -> тег POS -> WSD -> NER), частота ошибок складывается.
Михал Финкельштейн из OpenCala здесь.
Во-первых, спасибо за проявленный интерес. Я отвечу здесь, но я также рекомендую вам прочитать больше на форумах OpenCalais; там много информации, включая, но не ограничиваясь: http://opencalais.com/tagging-informationhttp://opencalais.com/how-does-calais-learn Также не стесняйтесь подписаться на нас в Twitter (@OpenCalais) или написать нам по адресу [email protected]
Теперь к ответу:
OpenCalais основан на десятилетии исследований и разработок в области обработки естественного языка и текстовой аналитики.
Мы поддерживаем полный «стек НЛП» (как мы его называем): От токенизации текста, морфологического анализа и POS-тегов до поверхностного анализа и определения именных и вербальных фраз.
Семантика вступает в игру, когда мы ищем сущности (также известные как извлечение сущностей, распознавание именованных сущностей). Для этой цели у нас есть сложная система, основанная на правилах, которая объединяет правила обнаружения, а также лексиконы / словари. Эта комбинация позволяет нам идентифицировать названия компаний / лиц / фильмов и т. д., Даже если их нет ни в одном доступном списке.
Для наиболее известных организаций (таких как люди, компании) мы также выполняем разрешение анафор, перекрестные ссылки и канонизацию / нормализацию имен на уровне статьи, поэтому мы будем знать, что «Джон Смит» и «Мистер. Смит, например, скорее всего, относятся к одному и тому же человеку. Итак, краткий ответ на ваш вопрос - нет, дело не только в сопоставлении с большими базами данных.
События / факты действительно интересны, потому что они углубляют наши правила открытия на один уровень; мы находим отношения между объектами и помечаем их соответствующим типом, например M&A (отношения между двумя или более компаниями), Employment Changes (отношения между компаниями и людьми) и т. д. Излишне говорить, что извлечение событий / фактов невозможно для систем, основанных исключительно на словарях. По большей части наша система ориентирована на точность, но мы всегда стараемся поддерживать разумный баланс между точностью и полнотой.
Кстати, в конце этого месяца появятся новые интересные возможности для метаданных, так что следите за обновлениями.
С уважением,
Михал