Выделим Суть Новости. Опыт Яндекса

Привет! Меня зовут Илья Гусев, я занимаюсь машинным обучением в команде Яндекс.

Новостей.

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

Сегодня мы рассмотрим построение краткого аннотации, сюжетного дайджеста.

Этот отрывок, состоящий из фрагментов новостных документов, содержит основную информацию о событии.

Чем дайджест полезен для пользователя, очевидно — на экране сюжета мы отображаем самое важное о событии.

Многие инженеры сталкиваются с похожими проблемами: например, OpenAI недавно опубликовала статья об абстрагировании книг.

Поэтому я надеюсь, что описанный ниже подход будет вам полезен.

Как и все в Новостях, построение такого резюме должно быть полностью автоматическим.

До введения выжимки текстовая часть сюжета выглядела так:

Выделим суть новости.
</p><p>
 Опыт Яндекса

Теперь это выглядит так:

Выделим суть новости.
</p><p>
 Опыт Яндекса



Задача

Резюмирование (или аннотирование, или резюмирование) — это процесс получения краткой версии документа, раскрывающей его суть.

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

Автоматическое абстрагирование происходит с помощью компьютерной программы.

Инженеры занимаются автоматическим абстрагированием с 50-х годов.

Одной из первых работ на эту тему является статья Ганс Петер Лун 1958 год. Задача абстрагирования нескольких документов также довольно старая.

Он был популяризирован еще в начале 2000-х годов посредством серии конференций.

ДУК (Конференция по взаимопониманию документов).

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

В Яндекс.

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

В конце мы хотим получить краткое изложение наиболее важных деталей из этих документов.

Важно, что «Новости» не пишут собственные тексты, даже автоматически: у нас нет собственной редакции, все материалы, которые мы используем, получены от изданий-партнеров.

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

При этом отбрасываются все методы абстракции, которые могут писать новые тексты, включая ЯЛМ .

Сжатия бывают разных форматов: они могут отличаться размером и количеством фрагментов.

Поэкспериментировав, мы остановились на 4 предложениях.

Более крупные отрывки, а также фрагменты, размер которых превышает предложение, трудны для восприятия пользователями.



Алгоритм

Изначально мы пытались извлечь из одного документа, используя достаточно простые ТекстРанк И ЛексРанк с использованием Рейтинг страницы выше графика сходства предложений друг с другом, а также более сложных SummaRuNNer's , суть которого заключается в обучении рекуррентной модели бинарной классификации независимо от того, будет ли выжиматься каждое предложение или нет. В такой обстановке работать на сервисе не могло.

Во-первых, такие алгоритмы не могут учитывать важность фрагментов, встречающихся в нескольких документах.

Во-вторых, они сильно смещают распределение трафика в сторону одного источника, что для нас неприемлемо.

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

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

Во-первых, этот алгоритм чрезвычайно прост для понимания, написания и поддержки.

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

Это не единственный подходящий метод абстрагирования нескольких документов; тот же LexRank вполне применим для нескольких документов.

Скажем сразу, идея многодокументного абстрагирования посредством кластеризации предложений не нова.

Об этом методе есть много статей: например, этот И этот .

Наш алгоритм отличается от них прежде всего способом расчета расстояний между предложениями.

В общих чертах алгоритм работает так:

  1. Разбиваем каждый документ на предложения .

    Основным объектом нашего давления будут именно эти предложения.

  2. Для каждого предложения всех документов мы считаем вложение - числовое представление информации, содержащейся в предложении.

    Вложения можно создавать разными способами, например, с помощью Фасттекст , ИСПОЛЬЗОВАТЬ , ЛаБСЕ .

    Для этого совершенно не обязательно использовать нейросетевые модели; старый добрый подойдет. ТФ-ИДФ , только будет хуже идентифицировать похожие предложения.

    Мы строим вложения через ДССМ , который перегоняет LaBSE. В нашей версии дистилляции DSSM был обучен предсказывать расстояния между парами предложений, рассчитанные LaBSE, но это не единственный способ.

    Основная причина, почему мы это делаем, — высокая производительность Яндекс ДССМ: мы пока не можем позволить себе более тяжелые по процессорному времени модели из-за большого потока документов.

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



    Выделим суть новости.
</p><p>
 Опыт Яндекса

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

    .

    Для разных предложений из одного и того же документа мы предполагаем, что они заведомо разные.



    Выделим суть новости.
</p><p>
 Опыт Яндекса

  4. Мы запускаем алгоритм иерархической кластеризации на полученной двумерной матрице сходства.

    со склейкой по середине (например, такой ) с каймой обрезки, выбранной по ручной разметке.

    На выходе получаются кластеры, состоящие из похожих друг на друга предложений.

    Таким образом, один кластер равен примерно одной «смысловой единице» нашего сюжета.

    Пример кластера:

    • В ходе эксперимента выяснилось, что животные, тела которых расположены параллельно земле, имеют более гибкие позвоночники.

    • В рамках эксперимента было установлено, что животные, тело которых расположено параллельно поверхности земли, имеют гораздо более гибкий позвоночник.

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

    • У животных с телом, параллельным земле, позвоночник стал очень гибким.

    • «Животные, чьи тела параллельны земле, в ходе эволюции приобрели более гибкие позвоночники, поэтому четвероногие животные могут бегать быстрее, чем люди», — добавил Гюнтер.

  5. Мы предполагаем, что наиболее важные элементы сюжета упоминались чаще, а значит, предложений в таких кластерах должно быть больше.

    Оставляем четыре крупнейших кластера с наибольшим количеством документов.

  6. Отсортируйте оставшиеся четыре кластера по относительному медианному положению.

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

    Это необходимо для того, чтобы текст выглядел более связным.

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

    Например, во фразе «Она назвала шесть пунктов, в которых были выражены опасения по поводу производства на этом предприятии» неясно, кого «она» имеет в виду и о каком предприятии она говорит.

  8. Мы выбираем предложение, которое будет представлять кластер в окончательном отрывке.

    .

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

    Получается, что мы отдаем предпочтение тому предложению, вложение которого ближе всего к центру масс кластера.

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

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



Метрики

В Яндексе есть разделение на офлайн- и онлайн-метрики.

Онлайн-метрики рассчитываются в ходе A/B-экспериментов над самими сервисами и показывают, как пользователи взаимодействуют с новым функционалом.

Но офлайн-метрики не требуют такого взаимодействия.

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

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

Первая оценка оценивает, хорошее или плохое краткое изложение, а вторая выявляет проблемы с отдельными фрагментами.



Выделим суть новости.
</p><p>
 Опыт Яндекса

Мы регулярно удаляем бинарную разметку из топ-историй основных рубрик.

Каждый сжатие отмечают 10 человек.

Если только 5 или 6 человек из 10 сказали, что сжатие прошло нормально, мы выносим вердикт «не уверен».

Если 4 и меньше, то «плохая выжимка», а если 7 и больше, то «хорошая».

На графике ниже доля плохих сквизов отмечена красным, а доля хороших — зеленым.

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

И они могут быть как незначительными, так и серьезными.



Выделим суть новости.
</p><p>
 Опыт Яндекса

Такую разметку сложно масштабировать.

Чтобы обойти это, мы построили БЕРТ -классификатор, аппроксимирующий маркировку.

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

Это позволило нам пройтись по гиперпараметрам алгоритма и выбрать оптимальные с точки зрения данного классификатора с последующей проверкой по разметке.

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

Вторая разметка направлена на то, чтобы выяснить, какие ошибки встречаются чаще.

Метки должны быть размещены на отдельных фрагментах, но маркеры имеют доступ ко всему фрагменту.



Выделим суть новости.
</p><p>
 Опыт Яндекса

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

Только на эту категорию приходится более 50% всех ошибок.

Они взяты в основном из-за несовершенства вложения и кластеризации.



Планы

Уже более 3-х месяцев на всех платформах и для всех историй работает автоматическое построение отрывков.

Пользователи в целом довольны, о чем свидетельствует рост отдачи и активности на сервисе.

При этом мы не считаем 20-30% плохих сквизов приемлемой цифрой и активно работаем над ее снижением:

  1. Переходим на вложения-трансформеры, например, на тот же LaBSE
  2. Улучшаем обнаружение плохих фрагментов классификатором текста.

  3. Добавляем новую информацию: выделяем ссылки и сущности.

Очевидно, что текущая маркировка лишь проверяет «внешний вид» выписки, но хотелось бы также понять, насколько хорошо выписка извлекает важные детали и насколько она информативна.

Мы продолжим исследования в этом направлении.

Надеемся, что от внедрения дайджестов выиграют все.

Еще несколько примеров построенных сжатий

Выделим суть новости.
</p><p>
 Опыт Яндекса



Выделим суть новости.
</p><p>
 Опыт Яндекса



Выделим суть новости.
</p><p>
 Опыт Яндекса

Теги: #Машинное обучение #искусственный интеллект #Обработка естественного языка #Поисковые технологии #суммирование #абстрагирование #аннотирование #команда Яндекс.

новостей

Вместе с данным постом часто просматривают: