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

    Задача извлечения информации из текста сама по себе не нова: в этом направлении проделано довольно много работы как со стороны крупных компаний 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.


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

    Комментарии 21

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

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

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

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

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

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

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

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

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

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

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

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

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

                          Самое читаемое