Классификация текстов и анализ тональности — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(init)
 
м (rollbackEdits.php mass rollback)
 
(не показаны 34 промежуточные версии 6 участников)
Строка 1: Строка 1:
'''Классификация текстов (документов)''' (''Document classification'') {{---}} задача компьютерной лингвистики<ref>[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0 Компьютерная лингвистика]</ref>, заключающаяся в отнесении документа к одной из нескольких категорий на основании содержания документа.
+
'''Классификация текстов (документов)''' (англ. ''Document classification'') {{---}} задача компьютерной лингвистики<ref>[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0 Компьютерная лингвистика]</ref>, заключающаяся в отнесении документа к одной из нескольких категорий на основании содержания документа.
  
'''Анализ тональности текста''' (''Sentiment analysis'') {{---}} задача компьютерной лингвистики<ref>[https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B8%D0%BD%D0%B3%D0%B2%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0 Компьютерная лингвистика]</ref>, заключающаяся в определении эмоциональной окраски текста и в частности, в выявлении эмоциональной оценки авторов по отношению к объектам, описываемым в тексте.
+
'''Анализ тональности текста''' (англ. ''Sentiment analysis'') {{---}} задача компьютерной лингвистики, заключающаяся в определении эмоциональной окраски (тональности) текста и, в частности, в выявлении эмоциональной оценки авторов по отношению к объектам, описываемым в тексте.
 +
 
 +
== Задачи классификации текстов ==
 +
Классификация текстов применяется, в том числе, для:
 +
* разделения веб страниц и сайтов по тематическим каталогам;
 +
* борьбы со спамом;
 +
* определение языка текста;
 +
* показа более релевантной рекламы.
 +
 
 +
== Задачи анализа тональности текста ==
 +
Основной задачей анализа тональности текста является определение его эмоциональной окраски. Это необходимо, в том числе, для:
 +
* Анализа отзывов о товарах и услугах;
 +
* Определение языка вражды<ref>[https://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%B2%D1%80%D0%B0%D0%B6%D0%B4%D1%8B Язык Вражды]</ref>.
 +
В общем случае, задача анализа тональности текста эквивалентна задаче классификации текста, где категориями текстов могут быть тональные оценки.
 +
Примеры тональных оценок:
 +
* позитивная;
 +
* негативная;
 +
* нейтральная.
 +
Под «нейтральной» подразумевается, что текст не содержит эмоциональной окраски.
 +
 
 +
В качестве примера или упражнения можно предсказывать тональность рецензий к фильмам. Например, предсказывать методом линейной регрессии оценку(тональность), что поставил автор, по документу представленном в виде вектора, где на <math>i</math>-ой позиции количество вхождений <math>i</math>-ого слова из словаря в документу.
 +
 
 +
Анализ тональности обычно определяют как одну из задач компьютерной лингвистики, т.е. подразумевается, что мы можем найти и классифицировать тональность, используя инструменты обработки естественного языка. Сделав большое обобщение, можно разделить существующие подходы на следующие категории:
 +
* подходы, основанные на правилах;
 +
* подходы, основанные на словарях;
 +
* машинное обучение с учителем;
 +
* машинное обучение без учителя.
 +
 
 +
В первом варианте системы состоят из набора '''правил''', применяя которые система делает заключение о тональности текста. Например, для предложения «Я люблю кофе», можно применить следующее правило: ''если сказуемое ("люблю") входит в положительный набор глаголов ("люблю", "обожаю", "одобряю" ...) и в предложении не имеется отрицаний, то классифицировать тональность как "положительная"''.
 +
Многие коммерческие системы используют данный подход, несмотря на то что он требует больших затрат, так как для хорошей работы системы необходимо составить большое количество правил. Зачастую правила привязаны к определенному домену (например, «ресторанная тематика») и при смене домена («обзор фотоаппаратов») требуется заново составлять правила. Тем не менее, этот подход является наиболее точным при наличии хорошей базы правил.
 +
 
 +
Подходы, основанные на '''словарях''', используют так называемые тональные словари (англ. ''affective lexicons'') для анализа текста. В простом виде тональный словарь представляет из себя список слов со значением тональности для каждого слова. Вот пример из базы ANEW<ref>[https://www.mdpi.com/2076-3417/8/2/274/html Анализ ANEW dataset]</ref>, переведенный на русский, где число означет валентность(1-9):
 +
*счастливый - 8.21;
 +
*хороший - 7.47;
 +
*скучный - 2.95;
 +
*сердитый - 2.85;
 +
*грустный - 1.61.
 +
 
 +
Чтобы проанализировать текст, можно воспользоваться следующим алгоритмом: сначала каким-нибудь способом каждому слову в тексте присвоить его значением тональности, а затем вычислить общую тональность всего текста. Вычислять общую тональность можно разными способами. Самый простой из них — среднее арифметическое всех значений. Более сложный — обучить нейронную сеть.
 +
 
 +
'''Машинное обучение без учителя''' представляет собой, наверное, наиболее интересный и в то же время наименее точный метод анализа тональности. Одним из примеров данного метода может быть автоматическая кластеризация документов. Например, можно считать документы похожими, если у них большое пересечение по набору слов, и далее этот набор будет классифицировать весь кластер. В частности если в пересечении встречаются слова "ужасный", "невыносимый" и "отвратный", то скорее всего этот документы в этом кластере имеют негативный окрас.
 +
 
 +
=== Машинное обучение с учителем ===
 +
Процесс создания системы анализа тональности очень похож на процесс создания других систем с применением машинного обучения:
 +
# Необходимо собрать коллекцию документов для обучения классификатора.
 +
# Каждый документ из обучающей коллекции нужно представить в виде вектора признаков.
 +
# Для каждого документа нужно указать «правильный ответ», т.е. тип тональности (например, положительная или отрицательная), по этим ответам и будет обучаться классификатор.
 +
# Выбор алгоритма классификации и обучение классификатора.
 +
# Использование полученной модели.
 +
 
 +
Если стоит задача классификации на более чем два класса, то тут возможны следующие варианты для обучения классификатора:
 +
* плоская классификация — обучаем лишь один классификатор для всех классов;
 +
* иерархическая классификация — делим классы на группы и обучаем несколько классификаторов для определения групп. Например, если у нас 5 классов («сильно положительный», «средне положительный», «нейтральный», «средне отрицательный», «сильно отрицательный»), то можно сначала обучить бинарный классификатор, который отделяет нейтральные тексты от субъективных; затем обучить классификатор, который отделяет положительные мнения от отрицательных; и в итоге классификатор, который отделяет сильно выраженные мнения от средних;
 +
* регрессия — обучаем классификатор для получения численного значения тональности, например от 1 до 10, где большее значение означает более положительную тональность.
 +
 
 +
Обычно иерархическая классификация дает лучшие результаты чем плоская, так как для каждого классификатора можно найти набор признаков, который позволяет улучшить результаты. Однако, он требует больших времени и усилий для обучения и тестирования. Регрессия может показать лучшие результаты, если классов действительно много (от 5 и более).
 +
 
 +
== Классификация текстов методами машинного обучения ==
 +
=== Постановка задачи ===
 +
Имеется множество категорий (классов, меток) <math>\mathfrak{C}=\{c_1,...,c_{\left|\mathfrak{C}\right|}\}</math>.
 +
 
 +
Имеется множество документов <math>\mathfrak{D}= \{ d_1, ... , d_{ \left| \mathfrak{D} \right| } \}</math>.
 +
 
 +
Неизвестная целевая функция <math>\Phi\colon \mathfrak{C} \times \mathfrak{D} \rightarrow \{ 0, 1 \}</math>.
 +
 
 +
Необходимо построить классификатор <math> \Phi^\prime </math>, максимально близкий к <math>\Phi</math>.
 +
 
 +
Имеется некоторая начальная коллекция размеченных документов <math>\mathfrak{R} \subset \mathfrak{C} \times \mathfrak{D}</math>, для которых известны значения <math>\Phi</math>. Обычно её делят на «обучающую» и «проверочную» части. Первая используется для обучения классификатора, вторая — для независимой проверки качества его работы.
 +
 
 +
Классификатор может выдавать точный ответ <math>\Phi^\prime\colon \mathfrak{C} \times \mathfrak{D} \rightarrow \{ 0, 1 \}</math> или степень подобия <math>\Phi^\prime\colon \mathfrak{C} \times \mathfrak{D} \rightarrow [ 0, 1 ]</math>.
 +
 
 +
=== Этапы подготовки ===
 +
Прежде всего следует предобработать текст. Подробно методы предобработки описаны в [[Обработка естественного языка|соответствующей статье]]
 +
==== Векторное представление слов ====
 +
Большинство математических моделей работают в векторных пространствах больших размерностей, поэтому необходимо отобразить текст в векторном пространстве. Основным походом является мешок слов (англ. ''bag-of-words''): для документа формируется вектор размерности словаря, для каждого слова выделяется своя размерность, для документа записывается признак насколько часто слово встречается в нем, получаем вектор. Наиболее распространенным методом для вычисления признака является TF-IDF<ref>[https://en.wikipedia.org/wiki/Tf%E2%80%93idf TF-idf]</ref> и его вариации (TF — частота слова (англ. ''term frequency''), IDF — обратная частота документа (англ. ''inverse document frequency'')). Плюсами мешка слов является простая реализация, однако данный метод теряет часть информации, например, порядок слов. Для уменьшения потери информации можно использовать мешок N-грамм (добавлять не только слова, но и словосочетания), или использовать более сложные в плане вычислений методы векторных представлений слов(Word2vec или его улучшение, fastText) это, например, позволяет снизить ошибку на словах с одинаковыми написаниями, но разными значениями и наоборот. Подробнее можно прочитать в [[Векторное представление слов|данной статье]].
 +
 
 +
=== Алгоритмы классификации ===
 +
==== Байесовская классификация ====
 +
Байесовская классификация является одним из самых простых, но не значит, что неэффективных, методов в классификации текстов. Данный алгоритм основан на принципе максимума апостериорной вероятности. Для классифицируемого объекта вычисляются функции правдоподобия каждого из классов, по ним вычисляются апостериорные вероятности классов. Объект относится к тому классу, для которого апостериорная вероятность максимальна.
 +
 
 +
Пусть <math>P(c_i|d)</math> {{---}} вероятность того, что документ, представленный вектором <math>d = (t_1, ..., t_n)</math>, соответствует категории <math>c_i</math> для <math>i = 1, ..., |C|</math>. Задача классификатора заключается в том, чтобы подобрать такие значения <math>c_i</math> и <math>d</math>, при которых значение вероятности <math>P(c_i|d)</math> будет максимальным:
 +
 
 +
<math>c_m = \underset{c \in C}{\operatorname{argmax}} \, P(c|d)</math>
 +
 
 +
Подробно байесовская классификация описана в [[Байесовская классификация|соответствующей статье]].
 +
 
 +
Преимущества метода:
 +
* высокая скорость работы;
 +
* простая реализация алгоритма;
 +
* легкая интерпретируемость результатов работы алгоритма.
 +
 
 +
Недостатки метода:
 +
* частое низкое качество классификации;
 +
* неспособность учитывать зависимость результата классификации от сочетания признаков.
 +
 
 +
===== Многомерная модель =====
 +
В многомерной (англ. ''multivariate'') модели документ – это вектор бинарных атрибутов, показывающих, встретилось ли в документе то или иное слово. Когда мы подсчитываем правдоподобие документа, мы перемножаем вероятности того, что встретилось каждое слово из документа и вероятности того, что не встретилось каждое (словарное) слово, которое не встретилось. Получается модель многомерных испытаний Бернулли. Наивное предположение в том, что события «встретилось ли слово» предполагаются независимыми.
 +
 
 +
Математически: пусть <math>V = \{w_t\}_{t=1}^{|V|}</math> – словарь. Тогда документ <math>d_i</math> – это вектор длины <math>|V|</math>, состоящий из битов <math>B_{it}</math>. <math>B_{it} = 1</math> тогда и только тогда, когда слово <math>w_{t}</math> встречается в документе <math>d_{i}</math>.
 +
 
 +
Правдоподобие принадлежности <math>d_{i}</math> классу <math>c_{j}</math>:
 +
 
 +
<math>P(d_i|c_j) = \prod_{t=1}^{|V|}(B_{it} \times P(w_t|c_j) + (1 - B_{it}) \times (1 - P(w_t|c_j)))</math>
 +
 
 +
Для обучения такого классификатора нужно обучить <math>P(w_t|c_j)</math>.
 +
 
 +
Пусть дан набор документов <math>D = \{d_{i}\}</math>, которые уже распределены по классам <math>c_{j}</math> (возможно, даже вероятностно распределены, то есть про каждый документ мы знаем, с какой вероятностью он принадлежит к каждому классу, но здесь и далее будем рассматривать детерминированную модель), дан словарь <math>V = \{w_t\}</math>, и мы знаем биты <math>B_{it}</math> (знаем документы).
 +
 
 +
Тогда можно подсчитать оптимальные оценки вероятностей того, что то или иное слово встречается в том или ином классе (при помощи лапласовой оценки):
 +
 
 +
<math>P(w_t|c_j) = \frac{1 + \sum_{i=1}^{|D|} B_{it} \times P(c_j|d_i)}{2 + \sum_{i=1}^{|D|} P(c_j|d_i)}</math>
 +
 
 +
Априорные вероятности классов можно подсчитать как <math>P(c_j) = \frac{1}{|D|}\sum_{i=1}^{|D|}P(c_j|d_i)</math>. Классификация происходит как обычно — максимизацией правдоподобия: <math>c = argmax_{j}P(c_j)P(d_i|c_j) = argmax_{j}(\log{\sum_{i=1}^{|D|}P(c_j|d_i)} + \sum_{t=1}^{|V|}\log{(B_{it} \times P(w_t|c_j) + (1 - B_{it}) \times (1 - P(w_t|c_j)))})</math>.
 +
 
 +
===== Мультиномиальная модель =====
 +
В мультиномиальной (англ. ''multinomial'') модели документ – это последовательность событий. Каждое событие – это случайный выбор одного слова из того самого мешка слов. Когда мы подсчитываем правдоподобие документа, мы перемножаем вероятности того, что мы достали из мешка те самые слова, которые встретились в документе. Наивное предположение в том, что мы достаём из мешка разные слова независимо друг от друга. Получается мультиномиальная генеративная модель, которая учитывает количество повторений каждого слова, но не учитывает, каких слов нет в документе.
 +
 
 +
Математически: пусть <math>V = \{w_t\}_{t=1}^{|V|}</math> – словарь. Тогда документ <math>d_i</math> – это вектор длины <math>|V|</math>, состоящий из слов, каждое из которых «вынуто» из словаря с вероятностью <math>P(w_t|c_j)</math>.
 +
 
 +
Правдоподобие принадлежности <math>d_{i}</math> классу <math>c_{j}</math>:
 +
 
 +
<math>P(d_i|c_j) = P(|d_i|) \times |d_i|! \times \prod_{t=1}^{|V|}\frac{P(w_t|c_j)^{N_{it}}}{N_{it}!}</math>, где <math>N_{it}</math> – количество вхождений <math>w_t</math> в <math>d_i)</math>.
 +
 
 +
Для обучения такого классификатора тоже нужно обучить вероятности <math>P(w_t|c_j)</math>.
 +
 
 +
Пусть дан набор документов <math>D = \{d_{i}\}</math>, которые уже распределены по классам <math>c_{j}</math>, дан словарь <math>V = \{w_t\}</math>, и мы знаем вхождения <math>N_{it}</math>.
 +
 
 +
Тогда можно подсчитать апостериорные оценки вероятностей того, что то или иное слово встречается в том или ином классе (не забываем сглаживание – правило Лапласа):
 +
 
 +
<math>P(w_t|c_j) = \frac{1 + \sum_{i=1}^{|D|} N_{it} \times P(c_j|d_i)}{|V| + \sum_{s=1}^{|V|}\sum_{i=1}^{|D|} N_{is}P(c_j|d_i)}</math>.
 +
 
 +
Априорные вероятности классов можно подсчитать как <math>P(c_j) = \frac{1}{|D|}\sum_{i=1}^{|D|}P(c_j|d_i)</math>.
 +
Тогда классификация будет происходить как <math>c = argmax_{j}P(c_j)P(d_i|c_j) = argmax_{j}(\log{\sum_{i=1}^{|D|}P(c_j|d_i)} + \sum_{t=1}^{|V|}N_{it}\log{P(w_t|c_j)})</math>.
 +
 
 +
==== Метод опорных векторов ====
 +
Для использования [[Метод опорных векторов (SVM)|метода опорных векторов]] (англ. ''SVM, support vector machine'') требуется представлять каждый документ, как вектор, задаваемый своим содержимым в общем векторном пространстве. После этого строится разделяющая гиперплоскость для каждого известного класса.
 +
 
 +
Преимущества метода:
 +
* один из наиболее качественных методов;
 +
* возможность работы с небольшим набором данных для обучения;
 +
* сводимость к задаче выпуклой оптимизации, имеющей единственное решение.
 +
 
 +
Недостатки метода: сложная интерпретируемость параметров алгоритма и неустойчивость по отношению к выбросам в исходных данных, например в документе, рассказывающем о том как какой-нибудь футболист любит разводить собак и как он это делает, из-за частого употребления имени футболиста документ будет отнесен к классу "про футбол", или наоборот все документы с этим футболистом станут принадлежать к классу "разведение собак".
 +
 
 +
==== pLSA ====
 +
pLSA (англ. ''Probabilistic latent semantic analysis'') или вероятностный латентно-семантический анализ был разработан в 1999г.
 +
 
 +
Каждое слово <math>d</math> порождается некой темой <math>t \in T</math>. Документ порождается некоторым распределением на темах <math>p(t|d)</math>. Слово порождается именно темой, а не документом: <math>p(w|d, t) = p(w|d)</math>. Итого получается следующая функция правдоподобия: <math>p(w|d) = \sum_{t \in T}p(w|t)p(t|d)</math>.
 +
 
 +
Можно оценить <math>p(w|d) = \frac{n_{wd}}{n_{d}}</math>, а требуется найти <math>\phi_{wt} = p(w|t), \theta_{td} = p(t|d)</math>. Правдоподобие выглядит следующим образом <math>p(D) = \prod_{d \in D}\prod_{w \in d}p(d, w)^{n_dw} = \prod_{d \in D}\prod_{w \in d}(\sum_{t \in T}p(w|t)p(t|d))^{n_dw}</math>.
 +
 
 +
Максимизировать такое правдоподобие следует используя [[EM-алгоритм]]. На Е-шаге ищем, сколько слов <math>w</math> в документе <math>d</math> из темы <math>t</math>:
 +
 
 +
<math>n_{dwt} = n_{dw}p(t|d, w)=n_{dw}\frac{\phi_{wt}\theta_{td}}{\sum_{s \in T}\phi_{ws}\theta_{sd}}</math>
 +
 
 +
На М шаге пересчитываем параметры модели: <math>n_{wt} = \sum_d n_{dwt}</math>, <math>n_{td} = \sum_{w \in d} n_{dwt}</math>, <math>n_{t} = \sum_w n_{wt}</math>, <math>\theta_{td} = \frac{n_{td}}{n_d}</math>, <math>\phi_{wt} = \frac{n_{wt}}{n_t}</math>.
 +
 
 +
Параметров очень много, что явно введет к оверфиттингу, только если корпус не будет на порядки больше числа тем. Однако это решается регуляризацией(Есть целая наука о разных регуляризаторах для pLSA (К.В. Воронцов)).
 +
 
 +
В общем виде так: добавим регуляризаторы <math>R_{i}</math> в логарифм правдоподобия:
 +
<math>\sum_{d \in D}\sum_{w \in d}n_{dw}\log{(\sum_{t \in T}\phi_{wt}\theta_{td})} + \sum_i \tau R_i(\Phi, \Theta)</math>
 +
 
 +
Тогда  ЕМ-алгоритме на М-шаге появятся частные производные <math>R</math>:
 +
 
 +
<math>n_{wt} = \sum_{d \in D}n_{dwt} + \phi\frac{\partial R}{\partial \phi_{wt}}</math>,
 +
<math>n_{td} = \sum_{w \in d}n_{dwt} + \theta\frac{\partial R}{\partial \theta_{td}}</math>.
 +
 
 +
Вместо pLSA почти всегда используют его улучшение - LDA<ref>[https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation LDA]</ref>(англ. ''Latent Dirichlet allocation''), оно более ресурсоемкое, однако выдает лучшие результаты чем pLSA. Фактически это улучшение является байесовским вариантом pLSA, использующее вариационные приближения или сэмплирование(это основные подходы к выводу в сложных вероятностных моделях).
 +
 
 +
=== Оценка качества в задачах классификации ===
 +
Для [[Оценка качества в задачах классификации|оценки качества классификации]], как и для оценки качества работы многих других алгоритмов машинного обучения вычисляется точность, полнота, F-мера и accuracy.
 +
 
 +
== Применение семантических тезаурусов для анализа тональности текстов ==
 +
Существуют тезаурусы<ref>[https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%B7%D0%B0%D1%83%D1%80%D1%83%D1%81 Тезаурус]</ref>, размеченные силами людей с учётом эмоциональной окраски слов, содержащихся в них. Такие словари позволяют определять тональность текста без применения алгоритмов машинного обучения. Тональность текста определяется как сумма тональностей слов, содержащихся в размеченных словарях.
 +
 
 +
Основной проблемой методов, основанных на словарях является трудоёмкость построения словаря: отдельного для каждого нового языка и каждой новой тематики.
 +
 
 +
Известные тезаурусы:
 +
* [http://wndomains.fbk.eu/wnaffect.html WordNet-Affect];
 +
* [http://nmis.isti.cnr.it/sebastiani/Publications/LREC10.pdf SentiWordNet];
 +
* [http://sentic.net/ SenticNet]
 +
 
 +
== См. также ==
 +
 
 +
*[[Векторное представление слов]]
 +
*[[Кластеризация]]
 +
 
 +
== Примечания ==
 +
<references/>
 +
 
 +
[[Категория: Машинное обучение]]
 +
[[Категория: Обработка естественного языка]]

Текущая версия на 19:44, 4 сентября 2022

Классификация текстов (документов) (англ. Document classification) — задача компьютерной лингвистики[1], заключающаяся в отнесении документа к одной из нескольких категорий на основании содержания документа.

Анализ тональности текста (англ. Sentiment analysis) — задача компьютерной лингвистики, заключающаяся в определении эмоциональной окраски (тональности) текста и, в частности, в выявлении эмоциональной оценки авторов по отношению к объектам, описываемым в тексте.

Задачи классификации текстов

Классификация текстов применяется, в том числе, для:

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

Задачи анализа тональности текста

Основной задачей анализа тональности текста является определение его эмоциональной окраски. Это необходимо, в том числе, для:

  • Анализа отзывов о товарах и услугах;
  • Определение языка вражды[2].

В общем случае, задача анализа тональности текста эквивалентна задаче классификации текста, где категориями текстов могут быть тональные оценки. Примеры тональных оценок:

  • позитивная;
  • негативная;
  • нейтральная.

Под «нейтральной» подразумевается, что текст не содержит эмоциональной окраски.

В качестве примера или упражнения можно предсказывать тональность рецензий к фильмам. Например, предсказывать методом линейной регрессии оценку(тональность), что поставил автор, по документу представленном в виде вектора, где на [math]i[/math]-ой позиции количество вхождений [math]i[/math]-ого слова из словаря в документу.

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

  • подходы, основанные на правилах;
  • подходы, основанные на словарях;
  • машинное обучение с учителем;
  • машинное обучение без учителя.

В первом варианте системы состоят из набора правил, применяя которые система делает заключение о тональности текста. Например, для предложения «Я люблю кофе», можно применить следующее правило: если сказуемое ("люблю") входит в положительный набор глаголов ("люблю", "обожаю", "одобряю" ...) и в предложении не имеется отрицаний, то классифицировать тональность как "положительная". Многие коммерческие системы используют данный подход, несмотря на то что он требует больших затрат, так как для хорошей работы системы необходимо составить большое количество правил. Зачастую правила привязаны к определенному домену (например, «ресторанная тематика») и при смене домена («обзор фотоаппаратов») требуется заново составлять правила. Тем не менее, этот подход является наиболее точным при наличии хорошей базы правил.

Подходы, основанные на словарях, используют так называемые тональные словари (англ. affective lexicons) для анализа текста. В простом виде тональный словарь представляет из себя список слов со значением тональности для каждого слова. Вот пример из базы ANEW[3], переведенный на русский, где число означет валентность(1-9):

  • счастливый - 8.21;
  • хороший - 7.47;
  • скучный - 2.95;
  • сердитый - 2.85;
  • грустный - 1.61.

Чтобы проанализировать текст, можно воспользоваться следующим алгоритмом: сначала каким-нибудь способом каждому слову в тексте присвоить его значением тональности, а затем вычислить общую тональность всего текста. Вычислять общую тональность можно разными способами. Самый простой из них — среднее арифметическое всех значений. Более сложный — обучить нейронную сеть.

Машинное обучение без учителя представляет собой, наверное, наиболее интересный и в то же время наименее точный метод анализа тональности. Одним из примеров данного метода может быть автоматическая кластеризация документов. Например, можно считать документы похожими, если у них большое пересечение по набору слов, и далее этот набор будет классифицировать весь кластер. В частности если в пересечении встречаются слова "ужасный", "невыносимый" и "отвратный", то скорее всего этот документы в этом кластере имеют негативный окрас.

Машинное обучение с учителем

Процесс создания системы анализа тональности очень похож на процесс создания других систем с применением машинного обучения:

  1. Необходимо собрать коллекцию документов для обучения классификатора.
  2. Каждый документ из обучающей коллекции нужно представить в виде вектора признаков.
  3. Для каждого документа нужно указать «правильный ответ», т.е. тип тональности (например, положительная или отрицательная), по этим ответам и будет обучаться классификатор.
  4. Выбор алгоритма классификации и обучение классификатора.
  5. Использование полученной модели.

Если стоит задача классификации на более чем два класса, то тут возможны следующие варианты для обучения классификатора:

  • плоская классификация — обучаем лишь один классификатор для всех классов;
  • иерархическая классификация — делим классы на группы и обучаем несколько классификаторов для определения групп. Например, если у нас 5 классов («сильно положительный», «средне положительный», «нейтральный», «средне отрицательный», «сильно отрицательный»), то можно сначала обучить бинарный классификатор, который отделяет нейтральные тексты от субъективных; затем обучить классификатор, который отделяет положительные мнения от отрицательных; и в итоге классификатор, который отделяет сильно выраженные мнения от средних;
  • регрессия — обучаем классификатор для получения численного значения тональности, например от 1 до 10, где большее значение означает более положительную тональность.

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

Классификация текстов методами машинного обучения

Постановка задачи

Имеется множество категорий (классов, меток) [math]\mathfrak{C}=\{c_1,...,c_{\left|\mathfrak{C}\right|}\}[/math].

Имеется множество документов [math]\mathfrak{D}= \{ d_1, ... , d_{ \left| \mathfrak{D} \right| } \}[/math].

Неизвестная целевая функция [math]\Phi\colon \mathfrak{C} \times \mathfrak{D} \rightarrow \{ 0, 1 \}[/math].

Необходимо построить классификатор [math] \Phi^\prime [/math], максимально близкий к [math]\Phi[/math].

Имеется некоторая начальная коллекция размеченных документов [math]\mathfrak{R} \subset \mathfrak{C} \times \mathfrak{D}[/math], для которых известны значения [math]\Phi[/math]. Обычно её делят на «обучающую» и «проверочную» части. Первая используется для обучения классификатора, вторая — для независимой проверки качества его работы.

Классификатор может выдавать точный ответ [math]\Phi^\prime\colon \mathfrak{C} \times \mathfrak{D} \rightarrow \{ 0, 1 \}[/math] или степень подобия [math]\Phi^\prime\colon \mathfrak{C} \times \mathfrak{D} \rightarrow [ 0, 1 ][/math].

Этапы подготовки

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

Векторное представление слов

Большинство математических моделей работают в векторных пространствах больших размерностей, поэтому необходимо отобразить текст в векторном пространстве. Основным походом является мешок слов (англ. bag-of-words): для документа формируется вектор размерности словаря, для каждого слова выделяется своя размерность, для документа записывается признак насколько часто слово встречается в нем, получаем вектор. Наиболее распространенным методом для вычисления признака является TF-IDF[4] и его вариации (TF — частота слова (англ. term frequency), IDF — обратная частота документа (англ. inverse document frequency)). Плюсами мешка слов является простая реализация, однако данный метод теряет часть информации, например, порядок слов. Для уменьшения потери информации можно использовать мешок N-грамм (добавлять не только слова, но и словосочетания), или использовать более сложные в плане вычислений методы векторных представлений слов(Word2vec или его улучшение, fastText) это, например, позволяет снизить ошибку на словах с одинаковыми написаниями, но разными значениями и наоборот. Подробнее можно прочитать в данной статье.

Алгоритмы классификации

Байесовская классификация

Байесовская классификация является одним из самых простых, но не значит, что неэффективных, методов в классификации текстов. Данный алгоритм основан на принципе максимума апостериорной вероятности. Для классифицируемого объекта вычисляются функции правдоподобия каждого из классов, по ним вычисляются апостериорные вероятности классов. Объект относится к тому классу, для которого апостериорная вероятность максимальна.

Пусть [math]P(c_i|d)[/math] — вероятность того, что документ, представленный вектором [math]d = (t_1, ..., t_n)[/math], соответствует категории [math]c_i[/math] для [math]i = 1, ..., |C|[/math]. Задача классификатора заключается в том, чтобы подобрать такие значения [math]c_i[/math] и [math]d[/math], при которых значение вероятности [math]P(c_i|d)[/math] будет максимальным:

[math]c_m = \underset{c \in C}{\operatorname{argmax}} \, P(c|d)[/math]

Подробно байесовская классификация описана в соответствующей статье.

Преимущества метода:

  • высокая скорость работы;
  • простая реализация алгоритма;
  • легкая интерпретируемость результатов работы алгоритма.

Недостатки метода:

  • частое низкое качество классификации;
  • неспособность учитывать зависимость результата классификации от сочетания признаков.
Многомерная модель

В многомерной (англ. multivariate) модели документ – это вектор бинарных атрибутов, показывающих, встретилось ли в документе то или иное слово. Когда мы подсчитываем правдоподобие документа, мы перемножаем вероятности того, что встретилось каждое слово из документа и вероятности того, что не встретилось каждое (словарное) слово, которое не встретилось. Получается модель многомерных испытаний Бернулли. Наивное предположение в том, что события «встретилось ли слово» предполагаются независимыми.

Математически: пусть [math]V = \{w_t\}_{t=1}^{|V|}[/math] – словарь. Тогда документ [math]d_i[/math] – это вектор длины [math]|V|[/math], состоящий из битов [math]B_{it}[/math]. [math]B_{it} = 1[/math] тогда и только тогда, когда слово [math]w_{t}[/math] встречается в документе [math]d_{i}[/math].

Правдоподобие принадлежности [math]d_{i}[/math] классу [math]c_{j}[/math]:

[math]P(d_i|c_j) = \prod_{t=1}^{|V|}(B_{it} \times P(w_t|c_j) + (1 - B_{it}) \times (1 - P(w_t|c_j)))[/math]

Для обучения такого классификатора нужно обучить [math]P(w_t|c_j)[/math].

Пусть дан набор документов [math]D = \{d_{i}\}[/math], которые уже распределены по классам [math]c_{j}[/math] (возможно, даже вероятностно распределены, то есть про каждый документ мы знаем, с какой вероятностью он принадлежит к каждому классу, но здесь и далее будем рассматривать детерминированную модель), дан словарь [math]V = \{w_t\}[/math], и мы знаем биты [math]B_{it}[/math] (знаем документы).

Тогда можно подсчитать оптимальные оценки вероятностей того, что то или иное слово встречается в том или ином классе (при помощи лапласовой оценки):

[math]P(w_t|c_j) = \frac{1 + \sum_{i=1}^{|D|} B_{it} \times P(c_j|d_i)}{2 + \sum_{i=1}^{|D|} P(c_j|d_i)}[/math]

Априорные вероятности классов можно подсчитать как [math]P(c_j) = \frac{1}{|D|}\sum_{i=1}^{|D|}P(c_j|d_i)[/math]. Классификация происходит как обычно — максимизацией правдоподобия: [math]c = argmax_{j}P(c_j)P(d_i|c_j) = argmax_{j}(\log{\sum_{i=1}^{|D|}P(c_j|d_i)} + \sum_{t=1}^{|V|}\log{(B_{it} \times P(w_t|c_j) + (1 - B_{it}) \times (1 - P(w_t|c_j)))})[/math].

Мультиномиальная модель

В мультиномиальной (англ. multinomial) модели документ – это последовательность событий. Каждое событие – это случайный выбор одного слова из того самого мешка слов. Когда мы подсчитываем правдоподобие документа, мы перемножаем вероятности того, что мы достали из мешка те самые слова, которые встретились в документе. Наивное предположение в том, что мы достаём из мешка разные слова независимо друг от друга. Получается мультиномиальная генеративная модель, которая учитывает количество повторений каждого слова, но не учитывает, каких слов нет в документе.

Математически: пусть [math]V = \{w_t\}_{t=1}^{|V|}[/math] – словарь. Тогда документ [math]d_i[/math] – это вектор длины [math]|V|[/math], состоящий из слов, каждое из которых «вынуто» из словаря с вероятностью [math]P(w_t|c_j)[/math].

Правдоподобие принадлежности [math]d_{i}[/math] классу [math]c_{j}[/math]:

[math]P(d_i|c_j) = P(|d_i|) \times |d_i|! \times \prod_{t=1}^{|V|}\frac{P(w_t|c_j)^{N_{it}}}{N_{it}!}[/math], где [math]N_{it}[/math] – количество вхождений [math]w_t[/math] в [math]d_i)[/math].

Для обучения такого классификатора тоже нужно обучить вероятности [math]P(w_t|c_j)[/math].

Пусть дан набор документов [math]D = \{d_{i}\}[/math], которые уже распределены по классам [math]c_{j}[/math], дан словарь [math]V = \{w_t\}[/math], и мы знаем вхождения [math]N_{it}[/math].

Тогда можно подсчитать апостериорные оценки вероятностей того, что то или иное слово встречается в том или ином классе (не забываем сглаживание – правило Лапласа):

[math]P(w_t|c_j) = \frac{1 + \sum_{i=1}^{|D|} N_{it} \times P(c_j|d_i)}{|V| + \sum_{s=1}^{|V|}\sum_{i=1}^{|D|} N_{is}P(c_j|d_i)}[/math].

Априорные вероятности классов можно подсчитать как [math]P(c_j) = \frac{1}{|D|}\sum_{i=1}^{|D|}P(c_j|d_i)[/math]. Тогда классификация будет происходить как [math]c = argmax_{j}P(c_j)P(d_i|c_j) = argmax_{j}(\log{\sum_{i=1}^{|D|}P(c_j|d_i)} + \sum_{t=1}^{|V|}N_{it}\log{P(w_t|c_j)})[/math].

Метод опорных векторов

Для использования метода опорных векторов (англ. SVM, support vector machine) требуется представлять каждый документ, как вектор, задаваемый своим содержимым в общем векторном пространстве. После этого строится разделяющая гиперплоскость для каждого известного класса.

Преимущества метода:

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

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

pLSA

pLSA (англ. Probabilistic latent semantic analysis) или вероятностный латентно-семантический анализ был разработан в 1999г.

Каждое слово [math]d[/math] порождается некой темой [math]t \in T[/math]. Документ порождается некоторым распределением на темах [math]p(t|d)[/math]. Слово порождается именно темой, а не документом: [math]p(w|d, t) = p(w|d)[/math]. Итого получается следующая функция правдоподобия: [math]p(w|d) = \sum_{t \in T}p(w|t)p(t|d)[/math].

Можно оценить [math]p(w|d) = \frac{n_{wd}}{n_{d}}[/math], а требуется найти [math]\phi_{wt} = p(w|t), \theta_{td} = p(t|d)[/math]. Правдоподобие выглядит следующим образом [math]p(D) = \prod_{d \in D}\prod_{w \in d}p(d, w)^{n_dw} = \prod_{d \in D}\prod_{w \in d}(\sum_{t \in T}p(w|t)p(t|d))^{n_dw}[/math].

Максимизировать такое правдоподобие следует используя EM-алгоритм. На Е-шаге ищем, сколько слов [math]w[/math] в документе [math]d[/math] из темы [math]t[/math]:

[math]n_{dwt} = n_{dw}p(t|d, w)=n_{dw}\frac{\phi_{wt}\theta_{td}}{\sum_{s \in T}\phi_{ws}\theta_{sd}}[/math]

На М шаге пересчитываем параметры модели: [math]n_{wt} = \sum_d n_{dwt}[/math], [math]n_{td} = \sum_{w \in d} n_{dwt}[/math], [math]n_{t} = \sum_w n_{wt}[/math], [math]\theta_{td} = \frac{n_{td}}{n_d}[/math], [math]\phi_{wt} = \frac{n_{wt}}{n_t}[/math].

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

В общем виде так: добавим регуляризаторы [math]R_{i}[/math] в логарифм правдоподобия: [math]\sum_{d \in D}\sum_{w \in d}n_{dw}\log{(\sum_{t \in T}\phi_{wt}\theta_{td})} + \sum_i \tau R_i(\Phi, \Theta)[/math]

Тогда ЕМ-алгоритме на М-шаге появятся частные производные [math]R[/math]:

[math]n_{wt} = \sum_{d \in D}n_{dwt} + \phi\frac{\partial R}{\partial \phi_{wt}}[/math], [math]n_{td} = \sum_{w \in d}n_{dwt} + \theta\frac{\partial R}{\partial \theta_{td}}[/math].

Вместо pLSA почти всегда используют его улучшение - LDA[5](англ. Latent Dirichlet allocation), оно более ресурсоемкое, однако выдает лучшие результаты чем pLSA. Фактически это улучшение является байесовским вариантом pLSA, использующее вариационные приближения или сэмплирование(это основные подходы к выводу в сложных вероятностных моделях).

Оценка качества в задачах классификации

Для оценки качества классификации, как и для оценки качества работы многих других алгоритмов машинного обучения вычисляется точность, полнота, F-мера и accuracy.

Применение семантических тезаурусов для анализа тональности текстов

Существуют тезаурусы[6], размеченные силами людей с учётом эмоциональной окраски слов, содержащихся в них. Такие словари позволяют определять тональность текста без применения алгоритмов машинного обучения. Тональность текста определяется как сумма тональностей слов, содержащихся в размеченных словарях.

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

Известные тезаурусы:

См. также

Примечания