[БЕЗ_ЗВУКА] Одна
из задач анализа текстов — это задача аннотирования текстов.
Давайте поговорим о том, какие постановки задачи в данном случае возможны,
затем о том, какие бывают методы решений, и обсудим несколько простых бейзлайнов.
Итак, во-первых, вы можете задаться целью сократить текст.
Получить текст меньшей длины,
который будет передавать основную идею исходного текста.
Но это задача довольно сложная: ведь вам нужно еще добиться согласованности
предложений, возможно, как-то их переформулировать,
поэтому чаще решают более простую задачу, а именно,
выделяют наиболее важные для данного текста предложения.
Здесь нужно заметить, что понятие важности, конечно,
довольно субъективно, и вполне может быть, что разные люди будут выделять разные
предложения, если попросить это сделать человека.
Ну и другой вариант — это решать задачу
аннотирования не для одного документа, а сразу для коллекции документов.
В этом случае нужно позаботиться о том, чтобы, с одной стороны,
идеи из каждого документа были представлены в итоговой аннотации,
а с другой стороны, чтобы не было повторов.
Ведь в принципе, предложения могут даже существенно различаться,
но по сути доносить одну и ту же мысль.
Мы с вами будем разбирать самый простой случай — случай,
в котором мы хотим выделить какие-то наиболее важные предложения в тексте.
Ну во-первых, можно попробовать применить методы
обучения с учителем, но в этом случае нужна будет разметка.
То есть нужно будет каким-то образом получить от людей ответы на
вопросы «Какие предложения самые важные в данном тексте?»,
причем для большого количества текстов.
В этом месте вы непременно столкнетесь с тем,
что люди действительно отвечают по-разному, ну а кроме того,
будет проблема с тем, что эта задача действительно сложная для человека,
и довольно затруднительно сразу понять, какие предложения самые важные.
Очень много вариантов ответа, приходится выбирать, какой вариант лучше,
и таким образом разметку вы будете собирать не очень быстро.
Можно поддаться соблазну помочь людям,
которые делают разметку, и выдавать некоторый ответ.
Ну например, ответ некоторого простого алгоритма или случайный ответ.
В этом месте нужно быть очень внимательным,
потому что люди склонны соглашаться.
Если вы попробуете в качестве исходной разметки предлагать разметку от
какого-то алгоритма, скорее всего, по такой разметке этот
алгоритм будет оказываться самым лучшим по сравнению с другими.
Поэтому будьте очень аккуратны, собирая разметку.
В качестве объектов в данном случае будут выступать предложения.
Для них можно решать задачу классификации: войдет предложение в аннотацию или не
войдет.
Конечно, можно было бы прогнозировать и какое-то действительное число,
которое выражает значимость этого предложения.
Но собрать разметку с действительными числами от людей — совсем уж смелая затея,
поэтому проще смотреть на это как на задачу классификации,
а если нужна некая важность предложений, то можно взять в качестве нее вероятность
принадлежности предложения к классу «оставить в аннотации».
В качестве признаков подойдут такие логичные и простые вещи,
как длина предложения, количество в нем слов с большой буквы, слов,
написанных на другом языке, различных терминов, если вы можете их выделять,
встречаемость слов из предложения в остальном тексте,
ну и на этом всем можно запустить любой адекватный классификатор.
Однако очень часто получить разметку крайне затруднительно,
поэтому особенно популярны методы обучения без учителя.
Они в основном используют идею подсчитать значимость
предложений на основе их содержания, по каким-нибудь эвристикам или на основе
какой-то простой логичной модели, либо выделить группу предложений,
которые развивают какую-то одну идею.
Самый простой бейзлайн выглядит следующим образом.
Давайте рассмотрим корпус документов,
построенный так: пусть каждое предложение из текста будет отдельным документом.
И давайте добавим в этот корпус еще и сам документ.
Теперь давайте посмотрим на расстояния между документом и
отдельными предложениями.
И те предложения, которые наиболее похожи на документ,
например, можно использовать cosine similarity,
вот эти вот самые предложения будут наиболее важными.
В этом лежит очень простая
идея.
Вы выбираете те предложения,
в которых распределения слов очень похожи на распределение слов в документе.
Таким образом, если у вас есть какое-то предложение, подводящее итог,
и использующее слова, которые часто встречаются в документе,
которые представляют собой основные объекты, которые описываются в документе,
то это предложение, скорее всего, окажется самым важным.
Вы можете выбирать для аннотации предложения,
для которых cosine similarity получилась больше какого-то порога, можете выбирать
просто предложения с наиболее высокой cosine similarity, ну, например,
задаться целью выбрать три предложения или пять предложений из текста.
Другой вариант — это кластеризовать предложения,
опять же, в представлении мешком слов,
то есть снова у нас каждое предложение будет описываться частотами слов в нем.
Кластеризовать можно чем-нибудь простым, например, k-Means.
А в качестве предложений, которые мы оставляем в аннотации, взять предложения,
наиболее близкие к центрам кластеров.
Также вы можете задуматься о том, что можно преобразовать признаки в предыдущих
методах, и попробовать сделать всё то же самое с преобразованными признаками.
Ну так действительно делать можно, можно делать какие-то матричные разложения,
можно делать какие-то нелинейные преобразования.
Более сложные методы аннотирования — это TextRank,
основанный на идее из PageRank, алгоритма, придуманного для ранжирования
поисковой выдачи, и алгоритмы, основанные на нейросетях.
В основном они эксплуатируют идею
использования предложений, от которых
получается наибольший отклик при решении какой-то еще задачи анализа текста.
Ну, например, задачи классификации текстов.
Подведем итог.
Мы обсудили с вами возможные постановки задачи аннотирования,
поговорили о том, какие бывают методы,
и обсудили пару простых бейзлайнов в случае методов обучения без учителя.
Таким образом, мы познакомились с задачей аннотирования текстов.