Искусственный интеллект

индекс
244,28

Извлечение фактов

Задача извлечения информации из текста сама по себе не нова: в этом направлении проделано довольно много работы как со стороны крупных компаний aka Яndex и Google, так и со стороны независимых разработчиков. Однако, говорить о том, что данная задача окончательно решена, увы, не приходится. В этой статье я хочу немного упорядочить свои знания по данному вопросу, поверхностно разобрав наработки, с которыми мне недавно пришлось столкнуться.

Существующие решения


И так, пусть нам дано предложение «Визит Президента в Данию придаст новое дыхание диалогу двух стран». Для вычленения фактов из этого предложения потребуется пройти следующие этапы:

I. Токенизация


На данном этапе предстоит разбить предложение на отдельные слова. Проблем тут возникнуть не должно.

II. Морфологический анализ


После разбивки, для каждого слова необходимо получить морфологическую информацию о нём (часть речи, род, падеж, число и т.д.) и всевозможные атрибуты (например, является ли слово именем или географическим месторасположением). Для данной задачи необходимо наличие специальных словарей: в качестве реестра русских слов можно использовать словарь Зализняка или его проприетарные производные. В качестве готового решения можно рассмотреть утилиту Mystem от Яndex.

В случае использования утилиты Mystem исходное предложение будет разобрано следующим образом:
krestyaninov@localhost# echo "Визит Президента в Данию придаст новое дыхание диалогу двух стран" | ./mystem -niwg
Визит{визит=S,муж,неод=(им,ед|вин,ед)}
Президента{президент=S,муж,од=(род,ед|вин,ед)}
в{в=PR=|в=S,сокр=(им,ед|им,мн|род,ед|род,мн|дат,ед|дат,мн|вин,ед|вин,мн|твор,ед|твор,мн|пр,ед|пр,мн)}
Данию{дания=S,гео,жен,неод=вин,ед}
придаст{придавать=V=непрош,ед,изъяв,3-л,сов}
новое{новое=S,сред,неод=(им,ед|вин,ед)|новый=A=(им,ед,полн,сред|вин,ед,полн,сред)}
дыхание{дыхание=S,сред,неод=(им,ед|вин,ед)}
диалогу{диалог=S,муж,неод=дат,ед}
двух{два=NUM=(род|вин,жен,од|вин,муж,од|пр)}
стран{страна=S,жен,неод=род,мн}


III. Синтаксический разбор


На данном этапе определяются связанные подгруппы слов в предложении. Например, СУЩЕСТВИТЕЛЬНОЕ-ГЛАГОЛ: «визит-предаст». Установление этих связей позволит нам определится с неоднозначностями в морфологическом анализе. Так например, из словосочетания «новое дыхание» видно, что «новое» — это прилагательное, а не существительное (в чём не было уверенности после морфологического анализа).

IV. Семантический разбор


Задача семантического анализа заключается в построении полноценного дерева связей слов в предложении. Данный процесс имеет множество нюансов и в целом довольно сложен, для того, что бы быть описанным в этой статье. Подробней о семантическом анализе можно почитать здесь.

V. Извлечение фактов


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

Подробнее об извлечении фактов можно посмотреть по перечисленным ниже адресам:
Презентация «Яндекс.Пресс-портреты»;
Презентация: «Автоматическое извлечение фактов из текста»;

Существующие решения


Из существующих сколь-либо приемлемо работающих свободно распространяемых систем извлечения фактов мне удалось найти лишь систему под названием GATE. Система довольно интересная и многообещающая, однако нативной поддержки русского языка она, к сожалению, не имеет. Попробовать её в действии можно с помощь этого мануала.

Из платных систем можно отметить отечественную разработку RCO (спасибо rg_software).

Дополнительные ссылки по теме


Извлечение ключевых слов с помощью Wikipedia;
Обзор Text Mining систем;
Обзор лингвистической системы «Semantix».

P.S.


Как уже было сказано выше, статья является компиляцией тех данных по теме извлечения информации, что мне удалось найти и понять. Если у Вас есть информация/идеи/наработки по теме — буду рад увидеть их в комментариях.
+54
15 мая 2010, 12:32
80

комментарии (21)

0
0nly0ne #
А как будет разобрано предложение: "Новенькая пила долго жевала ножку стула"?
+3
gepeBo #
на этапе морфологиского анализа возникнет неоднозначность, которая будет разрешена с помощью синтаксического разбора. У яндекса кстати и на этот сччет статейки есть
0
0nly0ne #
Вот меня и интересует как будет распознана фраза: «новенькая пила». Как Прилагательное с существительным или как существительное с глаголом.
Если можно, дайте ссылку на алгоритм разрешения подобных ситуация.
+4
gepeBo #
Вероятностная модель снятия морфологической омонимии на основе нормализующих подстановок и позиций соседних слов (PDF) — download.yandex.ru/company/Zelenkov_Segalovich.pdf

еще много публикаций и статей здесь от Яндекса
company.yandex.ru/public/articles/

0
Animals_Amateur #
Если тут про ИИ, то с помощью функции «непонял — переспроси».
+2
Lucky_Student #
Взять эту программу вычленения фактов, натравить ее на известные новостные порталы.
Далее сделать программу, которая будет рассчитывать влияние каких-либо событий на курс чего бы то ни было (доллара, евро, акций каких-либо компаний, нефть и тд).
Потом сделать программу, которая будет исходя из результатов предыдущих программ играть на рынке.
Далее, программу, которая будет каждый месяц определенный % переводить на счет в Яндекс.Деньги или Вебмани, а затем присылать СМС-уведомление на телефон о текущей «зарплате». Остается только сходить и получить деньги.
Или продать комплект этих программ другому лентяю, за большие деньги и уже с полученной суммы уехать куда-нибудь в теплое местечко. :)
–3
odiszapc #
Есть такая программа. «Головной мозг человека» называется.
+4
Lucky_Student #
Да вы не капитан, вы адмирал прямо какой-то. Я то писал, не как применять этот самый «головной мозг человека» постоянно, а как применив один раз, можно автоматизировать некоторые действия и в результате получать прибыль. Естественно, это скорее фантастично, нежели реально, но весьма интересно. :)
+1
odiszapc #
Я — рядовой «Очевидность»
0
aleks_raiden #
есть уже такие системы, анализирующие новостные данные и вырабатывающие торговые стратегии по ним
0
bear11 #
даа, пробовали уже… коэффициент корреляции новостей с поведением рынка получился что-то около — 0.1%
+7
excoder #
Или вот такое: Эти типы стали есть на складе.
Если будет задан контекст: «ищем факты про сталь», это поможет синтаксису построить верный разбор (изначально может быть получено несколько теоретически верных синтаксических разборов).
+6
Infanty #
Я такую систему разрабатываю, моё мнение что общем статья правильная. Но тут как с операционной системой — написать вроде бы просто, но получить аналог Windows 7 сложно.

II. Морфологический анализ — некоторое слова (их достаточно много) полиморфны и однозначно определить все его морфологические свойства нельзя без учёта семантики (окружающих слов). Mystem иногда у меня неправильно определяла часть речи для заданного слова. К тому же не все слова известны заранее, в словаре Зализняка чуть больше 150 000 слов в первоначальной форме.

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

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

V. Извлечение фактов — тут нужно бочку чая и ящик сгущёнки для работы мозга. Вариантов много. Есть системы основанные на правилах, есть основанные на знаниях в базе, есть основанные на наборе предложений (что то между правилами и знаниями, но не правила + знания). Я использую свой способ называя его — молекулярная сеть.

Тут даже если вы выберите систему основанную на знаниях — я читал про более чем 10 способов её реализации. В общем вариантов решения множество, но ещё есть проблема качества, пока не все ещё способы достигли требуемого качества.

P.S.: На разведку я не работаю… но это пока :).

+2
VDG #
? Я использую свой способ называя его — молекулярная сеть.
Интересно. Уже не помню почему, но лет 8-10 назад, когда выдумывал собственную систему извлечения фактов, то для себя обозвал её «белковой».
0
letoosh #
Если я Вас правильно понял, ни в одном методе не рассматривается контекст. Выходит факты извлекаются независимо друг от друга?

Например:
1. Угарный газ в концентрациях выше 0.1% опасен для жизни. Вдыхание газа в течение часа приводит к смерти.
2. Ионизированные газы могут использоваться для общей профилактики. Вдыхание газа в течение часа улучшает общее состояние организма.
0
Infanty #
Нет, всё зависит от ситуации, что конкретно вы хотите получить на выходе. Смысл извлекается из простого предложения полностью, а не из конкретного слова.
+3
tlando #
Не в качестве саморекламы:

К моим презентациям, на которые Вы ссылаетесь (что мне чрезвычайно приятно :) ) есть так же видео:
mathlingvo.ru/nlpseminar/archive/s_1 — извлечение фактов
mathlingvo.ru/nlpseminar/archive/s_32 — пресс-портреты (намного лучше по содержанию)

И у нас есть еще презентация + видео Лидии Пивоваровой: Роль онтологий в извлечении фактографической информации
mathlingvo.ru/nlpseminar/archive/s_2
0
krestjaninoff #
Благодарю Вас! Довольно ценное дополнение.
0
arronax #
Банально, но спасибо огромное за статью! Я только начинаю заниматься по этой теме и эта статья для меня очень полезна.

Сам я, почему-то, вышел на CASOS AutoMap, но он ориентирован на вычленение «социально-сетевой» составляющей из текстов.
0
savamura #
А не могли бы Вы порекомендовать книги по теме?
0
fedor_malyshkin #
Как небольшое уточнение к статье и как средство осознания сложности и неоднозначности русского языка (для тех, кто не в курсе): http://fedor-malyshkin.habrahabr.ru/blog/95324/.

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