Я хочу рассказать о разработанном мной сервисе реферирования новостных текстов на английском, русском и немецком языках.

Системы автоматического реферирования (резюмирования) (САР) — тема довольно специфическая и будет интересна в основном тем, кто занимается автоматической обработкой языка. Хотя идеально исполненный саммарайзер мог бы стать полезным помощником в сферах, где необходимо преодолеть информационный перегруз и быстро принять решение о том, какая информация стоит дальнейшего рассмотрения.

Как обстоит дело?


С одной стороны, в процессе поиска аналогов я заметил интересную вещь — большинство найденных мною статей, сервисов, репозиториев и пр. датируются самое позднее 2012 годом. На Хабре есть статья на тему автоматического реферирования, опубликованная в 2011 году. В этом же году новостное реферирование было последний раз включено в список треков конференции TAC.

С другой стороны, набирают популярность мобильные приложения, которые обрабатывают новостные потоки и представляют пользователю короткие рефераты на выбранные им темы. Яркий пример такой востребованности — относительно недавняя (2013 г.) покупка Google и Yahoo саммарайзеров-стартапов Wavii и Summly соответственно, а также наличие различных браузер-плагинов, реферирующих веб-страницы (Chrome, Mozilla).

Беглое же тестирование бесплатных он-лайн сервисов реферирования показывает, что большинство из них работает схоже, выдавая одинаково средние (плохие?) результаты, среди которых, пожалуй, в лучшую сторону выделяется Autosummarizer.

Список найденных саммарайзеров

Зачем ещё одна САР?


Изначальная цель проекта — послужить платформой для изучения программирования в общем и программирования на python в частности. А поскольку тема компьютерной лингвистики мне близка по роду деятельности, то я выбрал реферирование в качестве объекта разработки, к тому же по нему уже имелись некоторые идеи и материалы.

Если походить по сервисам из приведённого списка, то можно увидеть, что работают они в большинстве своём с английскими текстами (если их вообще удаётся заставить функционировать). Выбрать другой язык можно в MEAD, OTS, Essential-mining, Aylien и Swesum. При этом первый не имеет веб-интерфейса, третий после 10 пробных текстов требует регистрации, а четвертый, давая возможность выставить настройки в демо, почему-то не хочет ничего реферировать.

По мере того, как у меня выходило что-то путное с обработкой английских текстов, захотелось сделать сервис, который работал бы ещё с русскими и немецкими новостными статьями и работал бы не хуже перечисленных, а также предоставить возможность сравнить разработанный алгоритм с популярными сегодня методами TextRank, LexRank, LSA и другими. К тому же, это неплохая возможность попрактиковаться с html, css и wsgi.

Где посмотреть?


Сайт проекта: t-CONSPECTUS

Как работает?


t-CONSPECTUS — это саммарайзер экстрактного типа, т.е. он формирует реферат из предложений оригинальной статьи, которые в процессе анализа получили наибольший вес, и, следовательно, лучше всего передают смысл содержимого.

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

Во время предварительной обработки текст разбивается на абзацы и предложения, находится заголовок (понадобится для коррекции весов терминов), проводится токенизация и стемминг. Для русского и немецкого языков проводится лемматизация. Pymorhpy2 лемматизирует русские тексты, для обработки немецких пришлось написать свою функцию лемматизации на основе лексикона парсера CDG, поскольку ни NLTK, ни Pattern, ни TextBlob German, ни FreeLing не предоставляли нужного функционала, а выбранный хостинг не поддерживает Java, что исключило возможность использовать Stanford NLP.

На этапе взвешивания терминов ключевые слова определяются с помощью TF-IDF. Термин получает дополнительный коэффициент, если:

  1. встретился в заголовке,
  2. встретился в первых и последних предложениях абзацев,
  3. встретился в восклицательных или вопросительных предложениях,
  4. является именем собственным.

Взвешивание предложений проводится по методике симметричного реферирования.

Детальное описание приводится в статье «Яцко В.А. Симметричное реферирование: теоретические основы и методика // Научно-техническая информация. Сер.2. — 2002. — № 5.»

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

Кроме того, при расчете финального веса предложения учитывается его позиция в тексте (в новостных текстах первое предложние наиболее информативное), наличие имен собственных и цифровых последовательностей и длина предложения. Дополнительно применяется штрафной коэффициент, который понижает вес длинных предложений.

Заданное количество значимых предложений выбирается из отсортированного по убыванию весов списка, при этом извлеченные предложения на выходе расставляются в том пордке, в котором они шли в оригинале, чтобы хоть как-то соблюсти связность текста. Размер саммари по умолчанию равен 20% от объема оригинала.

Какое качество саммари?


Традиционный подход к оценке качества саммари – сравнение с человеческим рефератом. Пакет ROUGE является на сегодняшний день самым популярным инструментом для проведения такой оценки.

К сожалению, раздобыть эталоны не так-то просто, хотя, например, конференция DUC предоставляет результаты прошедших соревнований саммарайзеров, включая человеческие рефераты, если пройти ряд бюрократических процедур.

Я выбрал две метрики полностью автоматической оценки, обоснованные и описанные в п. 3 здесь (pdf), которые сравнивают саммари с оригиналом статьи. Это косинусный коэффициент (cosine similarity) и расстояние Дженсона-Шеннона (Jensen–Shannon divergence).

Расстояние Дженсона-Шеннона показывает, сколько информации будет потеряно, если заменить оригинал рефератом. Соответственно, чем ближе показатель к нулю, тем лучше качество.

Косинусный коэффициент, классический для IR, показывает насколько близки друг к другу вектора документов. Для составления векторов я использовал tf-idf слов. Соответственно, чем ближе показатель к 1, тем больше соответствует реферат оригиналу по плотности ключевых слов.

В качестве систем для сравнения были выбраны:

  • Open Text Summarizer, который работает с выбранными мною тремя языками и по словам самих разработчиков “Several academic publications have benchmarked it and praised it”;
  • TextRank, популярный сегодня алгоритм в реализации Sumy;
  • Random – справделиво сравнить алгоритм со случайно выбранными предложениями статьи.

Для каждого языка незаинтересованными пользователями было отобрано 5 текстов из областей «научно-популярная статья» (popsci), «окружающая среда» (environ), «политика» (politics), «социальная сфера» (social), «информационные технологии» (IT). Оценивались 20% рефераты.

Таблица 1. Английский язык:
  Cosine Similarity (-->1) Jensen–Shannon divergence (-->0)
  t-CONSP OTS Textrank Random t-CONSP OTS Textrank Random
   
popsci 0.7981 0.7727 0.8227 0.5147 0.5253 0.4254 0.3607 0.4983
environ 0.9342 0.9331 0.9402 0.7683 0.3742 0.3741 0.294 0.4767
politics 0.9574 0.9274 0.9394 0.5805 0.4325 0.4171 0.4125 0.5329
social 0.7346 0.6381 0.5575 0.1962 0.3754 0.4286 0.5516 0.8643
IT 0.8772 0.8761 0.9218 0.6957 0.3539 0.3425 0.3383 0.5285

Таблица 2. Немецкий язык:
  Cosine Similarity (-->1) Jensen–Shannon divergence (-->0)
  t-CONSP OTS Textrank Random t-CONSP OTS Textrank Random
   
popsci 0.6707 0.6581 0.6699 0.4949 0.5009 0.461 0.4535 0.5061
envir 0.7148 0.6749 0.7512 0.2258 0.4218 0.4817 0.4028 0.6401
politics 0.7392 0.6279 0.6915 0.4971 0.4435 0.4602 0.4103 0.499
social 0.638 0.5015 0.5696 0.6046 0.4687 0.4881 0.456 0.444
IT 0.4858 0.5265 0.6631 0.4391 0.5146 0.537 0.4269 0.485

Таблица 3. Русский язык:
  Cosine Similarity (-->1) Jensen–Shannon divergence (-->0)
  t-CONSP OTS Textrank Random t-CONSP OTS Textrank Random
   
popsci 0.6005 0.5223 0.5487 0.4789 0.4681 0.513 0.5144 0.5967
environ 0.8745 0.8100 0.8175 0.7911 0.382 0.4301 0.4015 0.459
politics 0.5917 0.5056 0.5428 0.4964 0.4164 0.4563 0.4661 0.477
social 0.6729 0.6239 0.5337 0.6025 0.3946 0.4555 0.4821 0.4765
IT 0.84 0.7982 0.8038 0.7185 0.5087 0.4461 0.4136 0.4926

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

Здесь и здесь можно скачать сторонние пакеты для автоматической оценки качества саммари.

А что дальше?


Дальше планируется улучшать понемногу алгоритм, например, учитывать синонимы при поиске ключевых слов статьи, либо использовать для этих целей что-то типа латентного размещения Дирихле (Latent Dirichlet Allocation); решить, какие части текста нуждаются в особом взвешивании (например, нумерованные списки); попробовать добавить ещё языки и т.д. и т.п.

На самом сайте добавить в статистику показатели качества, добавить визуальное сравнение результатов «родного» алгоритма и сторонних и т.д.

Спасибо за внимание!

Комментарии (17)


  1. Kraplax
    26.11.2015 17:09

    Спасибо, хороший и подробный анализ.

    Хотелось бы уточнить:

    Косинусный коэффициент, классический для IR

    Что такое IR? В тексте статьи не нашёл.


    1. 26.11.2015 17:36

      IR — Information Retrieval.
      Косинусный коэффициент позаимствован из информационного поиска, где он используется в рамках векторной модели для измерения степени сходства между двумя векторами документов / документов и запроса.


  1. Kraplax
    26.11.2015 19:19
    +1

    Стоит отметить что смысл реферированного текста может значительно измениться, если в предложениях используются местоимения. Два предложения, не идущих друг за другом в оригинальном тексте могут в реферате стоять рядом и, в случае если второе содержит местоимение (например, указательное "такой") создать таким образом иллюзию, что речь идет об объекте из первого.

    От такого эффекта можно попытаться избавиться малой кровью, искусственно занизив рейтинг разорванных предложений с местоимениями или добавив рейтинга смежным (предстоящим?) предложениям с местоимениями.

    Возможно, более надёжным способом избавиться от такого поведения было бы построение семантического графа предложений/текста и корректировки весов предложений с ним (с вероятной также заменой местоимений соответствущими объектами).


    1. 26.11.2015 21:15
      +1

      Да, замечание дельное, проблема разрешения кореферентности актуальна для любой области nlp. Нужно подумать над тем, как отождествлять личные местоимения и соответствующие им антецеденты, учитывая при этом, что местоимения, как не имеющие веса стоп-слова удаляются в самом начале предобработки.

      Нашел пока что только одну доступную библиотеку по этому вопросу — GUITAR


      1. 27.11.2015 10:48
        +1

        Добавлю к своему же ответу ещё и питоновский модуль cort.


  1. buriy
    26.11.2015 21:16

    А не могли бы вы в паре предложений описать, в чём смысл этого «авторитетного» критерия под названием «Симметричное реферирование», и как вы определили, приносит ли этот критерий пользу или нет.


    1. 27.11.2015 09:42
      +1

      Смысл методики (и я не говорил, что она «авторитетная») довольно прост — берем предложение из текста, например второе, смотрим на стоящее слева от него первое предложение и проверяем, есть ли в нем такие же ключевые слова, как и в №2. Совпало, например, одно слово «питон», значит предложение №2 имеет одну свзяь с предложением №1, а так как методика симметричная, то и предложение №1 имеет также одну связь, поскольку в нем повторяется тот же «питон». Дальше проводим ту же проверку справа с предложением №3 и т.д. Чем больше у предложения связей, тем выше его вес.

      Что касается пользы, то я не проводил никакой другой оценки качества, кроме представленной здесь в таблицах.

      Возникает логичный вопрос, почему я использовал эту методику? Ответ — из чистого любопытсва. Если программных реализаций известных алгоритмов типа LSA или вариаций TextRank в Интернете большое количество, то по данному методу нет ничего, кроме некоторых теоретических публикаций.


      1. buriy
        27.11.2015 11:31

        Спасибо. Мне интересен «смысл» исключительно в плане «пользы». У методики должно быть какое-то объяснение, почему она должна улучшать результаты. А тут объяснения нет. Работает или нет непонятно. Помогает или вредит непонятно. Может, в оригинальной работе Яцко есть какое-либо объяснение?


        1. 27.11.2015 12:13

          Често говоря, не нашел в работе четкого объяснения, чем этот алгоритм отличается от существующих.

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


  1. Kraplax
    27.11.2015 01:44

    Еще любопытно было бы сравнить те же самые показатели на другом объеме рефератов (больше или меньше 20%), если конечно другие инструменты поддерживают соответствующие проценты выборки при реферировании. Как меняется картина? Есть ли кардинальные изменения? Быть может какой-то инструмент эффективнее на малых выборках, тогда как другой — на средних и даже больших?


    1. 27.11.2015 10:01

      Другие инструменты поддерживают и сравнить можно. Можно также поставить ограничение на количество предложений на выходе вне зависимости от объема статьи, например 4 или 5, как это делают TextTeaser или autosummarizer.com. Но вот нужно ли оценивать качество на объемах больше 20%, это вопрос… Есть высказывание Inderjeet Mani, признанного специалиста в области nlp и автоматического реферирования, которое гласит «Саммари объемом 17% от изначального размера текста ускоряет вдвое процесс принятия решений».


      1. Kraplax
        27.11.2015 10:37

        Но ведь саммари в 17% — это гораздо больше, чем автореферат в 20%, при условии что саммари писал человек, который не просто сокращает обьем текста, но и перефразирует. Поэтому может оказаться что автореферат имеет свой порог «полезности»


        1. 27.11.2015 10:40

          мне кажется, автор цитаты имел в виду как раз машинное саммари.


  1. Donskoy
    27.11.2015 10:48
    +2

    А есть какие-нибудь общепринятые baseline-алгоритмы, датасеты или бенчмарки, на которых можно потестировать САР? Для английского, думаю, должны быть.
    Не хочу сказать ничего плохого, но значения метрик, полученные на 5 новостных статьях, не могут быть объективной оценкой качества реферирования — было бы интересно погонять её на больших данных.


    1. 27.11.2015 11:56
      +1

      Согласен, представленные значения — это скорее субъективная попытка удостовериться, что алгоритм работает, и не всё так плохо, как могло бы быть.

      Общепринятые датасеты, отсылку на которые можно встретить в любой статье по автоматическому реферированию, — это материалы DUC. Их, к сожалению, нельзя скачать просто так, нужно заполнить несколько форм и отправить их организаторам, после чего будет выдан доступ.

      Основные метрики для измерения качества — Recall, Precision, F1-measure, Cosine Similarity (всё это позаимствовано из IR) и сходство n-грам. Реализованы они в наборе ROUGE (тут же есть небольшой набор текстов из DUC) и в Sumy.

      Кстати говоря, вот этот учебный проект содержит пакет rouge (который обычно нужно так же запрашивать) и около 50 текстов с человеческими саммари. Правда они больше подходят для оценки качества multi-document summarization.


  1. ikashnitsky
    28.11.2015 22:27

    Вызывают удивление весьма приличные значения рандома по метрике Дженсона-Шеннона для немецкого и русского. Если рандом сопоставим с алгоритмами, то либо алгоритмы слабы, либо метрика не годится. Конечно, есть ещё вариант удачного рандома. Насколько понимаю, Вы рандом один раз прогоняли. Можно было бы хотя бы усредненное значение нескольких итераций взять.


    1. 29.11.2015 11:23

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