Как стать автором
Обновить

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

В небольшое дополнение. Есть еще вот такой вариант
pypi.org/project/bert-extractive-summarizer

В нём предложения векторизуются, кластеризуются, и суммаризируются по близости к центроидам кластеров.

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

В тегах указан «Python», но в тексте нет примеров или модулей Python.
Некорректный тег?

Камрад S_A, спасибо за линк на «Bert Extractive Summarizer». Протестировали — достойное решение.
Подбираем библиотеку для суммаризации/конспектированию новостей (банковские новости США), перепробовали массу решенией, беря за ориентир Resoomer (resoomer.com).

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

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

Это жутко медленно. Можно использовать быстрый вариант: разбить w2v на классы (параметр при обучении), каждому слову присвоить класс (число — int), тогда пространство признаков сильно сокращается и сравнение (даже по косинусу) происходит быстро. А если разбивать на классы не встроенным в w2v алгоритмом (k-means), а написать свой, то можно получить пересекающиеся классы, что уже интереснее, и, ес-но, точнее работает.

Но помимо этого есть методы суммаризации, основанные на эмотивных характеристиках текста, что особенно важно в соц. медиа (да и в СМИ неплохо работает). Учитывается сила сентимента, агрессивность и пр. Получаются неплохие результаты.

А вот с бредогенераторами текста (даже на трансформерах) пока ничего толкового не видел…
НЛО прилетело и опубликовало эту надпись здесь
Надо понимать, что наши конкретные реализации подходов 1) ориентированы на русский язык 2) оптимизированы для краткой аннотации из нескольких предложений, а не одного заголовка.
Поэтому без особой переделки получилось:
0.148 на основе векторов,
0.15 на основе общих слов,
0.1 кластеризацией.
И это меньше weak baseline))
Хорошая демонстрация, что под разные задачи конкретная реализация подхода будет разной.
У меня вопрос по лемматизации. Как поступать с предложениями, которые схожи по этой метрике, но по факту имеют существенно разный смысл:
«Я работаю на заводе» против «Я работал на заводе».

И второй вопрос: как поступать с синонимами или с синонимичными выражениями?
По поводу словоформ — можно по-разному проводить подготовку текстов. Т.е. заделать какой-то условный механизм лемматизации, который будет глаголы приводить либо к инфинитивам, либо к другой интересной вам форме (т.е. например, с сохранением времени), можно посмотреть, например, тут: pymorphy2.readthedocs.io/en/latest/internals/dict.html. А можно вообще не лемматизировать. Но это надо поэкспериментировать. В плане эмбеддингов эти два предложения всё равно будут близкими друг к другу (даже при сохранении формы). А вот при подсчете общих слов — могут считаться разными или одинаковыми — в зависимости от подготовки текстов.

По поводу синонимов — при построении векторов они и так будут рядом относительно. А вот при подходе с выявлением общих слов они будут считаться разными словами. Особого смысла работать со словарем синонимов не вижу, разве что NER как-то выделять (например, упоминания в тексте одного документа с полным и кратким наименованием, аббревиатурой, в этом есть смысл). А вот синонимичность обычных слов часто зависит от контекста, необходимо не просто заменять одно слово другим, а учитывать его значение, для подхода с общими словами это излишне, на мой взгляд, мне такой подход нравится за его простоту :)
Сначала мы нанимаем копирайтеров и журналюг, что бы они писали нам много слоф, а потом учим машину сокращать текст… Л — Логика
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории