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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Машинное обучение с учителем)
м (rollbackEdits.php mass rollback)
 
(не показано 15 промежуточных версий 5 участников)
Строка 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'') {{---}} задача компьютерной лингвистики, заключающаяся в определении эмоциональной окраски (тональности) текста и, в частности, в выявлении эмоциональной оценки авторов по отношению к объектам, описываемым в тексте.
+
'''Анализ тональности текста''' (англ. ''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>;
+
* Определение языка вражды<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>.
 
В общем случае, задача анализа тональности текста эквивалентна задаче классификации текста, где категориями текстов могут быть тональные оценки.
 
В общем случае, задача анализа тональности текста эквивалентна задаче классификации текста, где категориями текстов могут быть тональные оценки.
 
Примеры тональных оценок:
 
Примеры тональных оценок:
 
* позитивная;
 
* позитивная;
 
* негативная;
 
* негативная;
* нейтральная;
+
* нейтральная.
 
Под «нейтральной» подразумевается, что текст не содержит эмоциональной окраски.
 
Под «нейтральной» подразумевается, что текст не содержит эмоциональной окраски.
  
В качестве примера или упражнения можно предсказывать тональность рецензий к фильмам. Например, предсказывать оценку(тональность), что поставил автор, по набору слов в формате one-hot.
+
В качестве примера или упражнения можно предсказывать тональность рецензий к фильмам. Например, предсказывать методом линейной регрессии оценку(тональность), что поставил автор, по документу представленном в виде вектора, где на <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):
+
Подходы, основанные на '''словарях''', используют так называемые тональные словари (англ. ''affective lexicons'') для анализа текста. В простом виде тональный словарь представляет из себя список слов со значением тональности для каждого слова. Вот пример из базы ANEW<ref>[https://www.mdpi.com/2076-3417/8/2/274/html Анализ ANEW dataset]</ref>, переведенный на русский, где число означет валентность(1-9):
*счастливый-8.21
+
*счастливый - 8.21;
*хороший-7.47
+
*хороший - 7.47;
*скучный-2.95
+
*скучный - 2.95;
*сердитый-2.85
+
*сердитый - 2.85;
*грустный-1.61
+
*грустный - 1.61.
  
Чтобы проанализировать текст, можно воспользоваться следующим алгоритмом: сначала каждому слову в тексте присвоить его значением тональности из словаря (если оно присутствует в словаре), а затем вычислить общую тональность всего текста. Вычислять общую тональность можно разными способами. Самый простой из них — среднее арифметическое всех значений. Более сложный — обучить нейронную сеть.
+
Чтобы проанализировать текст, можно воспользоваться следующим алгоритмом: сначала каким-нибудь способом каждому слову в тексте присвоить его значением тональности, а затем вычислить общую тональность всего текста. Вычислять общую тональность можно разными способами. Самый простой из них — среднее арифметическое всех значений. Более сложный — обучить нейронную сеть.
  
'''Машинное обучение без учителя''' представляет собой, наверное, наиболее интересный и в то же время наименее точный метод анализа тональности. Одним из примеров данного метода может быть автоматическая кластеризация документов.
+
'''Машинное обучение без учителя''' представляет собой, наверное, наиболее интересный и в то же время наименее точный метод анализа тональности. Одним из примеров данного метода может быть автоматическая кластеризация документов. Например, можно считать документы похожими, если у них большое пересечение по набору слов, и далее этот набор будет классифицировать весь кластер. В частности если в пересечении встречаются слова "ужасный", "невыносимый" и "отвратный", то скорее всего этот документы в этом кластере имеют негативный окрас.
  
 
=== Машинное обучение с учителем ===
 
=== Машинное обучение с учителем ===
 
Процесс создания системы анализа тональности очень похож на процесс создания других систем с применением машинного обучения:
 
Процесс создания системы анализа тональности очень похож на процесс создания других систем с применением машинного обучения:
# необходимо собрать коллекцию документов для обучения классификатора
+
# Необходимо собрать коллекцию документов для обучения классификатора.
# каждый документ из обучающей коллекции нужно представить в виде вектора признаков
+
# Каждый документ из обучающей коллекции нужно представить в виде вектора признаков.
# для каждого документа нужно указать «правильный ответ», т.е. тип тональности (например, положительная или отрицательная), по этим ответам и будет обучаться классификатор
+
# Для каждого документа нужно указать «правильный ответ», т.е. тип тональности (например, положительная или отрицательная), по этим ответам и будет обучаться классификатор.
# выбор алгоритма классификации и обучение классификатора
+
# Выбор алгоритма классификации и обучение классификатора.
# использование полученной модели
+
# Использование полученной модели.
  
 
Если стоит задача классификации на более чем два класса, то тут возможны следующие варианты для обучения классификатора:
 
Если стоит задача классификации на более чем два класса, то тут возможны следующие варианты для обучения классификатора:
* Плоская классификация — обучаем лишь один классификатор для всех классов.
+
* плоская классификация — обучаем лишь один классификатор для всех классов;
* Иерархическая классификация — делим классы на группы и обучаем несколько классификаторов для определения групп. Например, если у нас 5 классов («сильно положительный», «средне положительный», «нейтральный», «средне отрицательный», «сильно отрицательный»), то можно сначала обучить бинарный классификатор, который отделяет нейтральные тексты от субъективных; затем обучить классификатор, который отделяет положительные мнения от отрицательных; и в итоге классификатор, который отделяет сильно выраженные мнения от средних.
+
* иерархическая классификация — делим классы на группы и обучаем несколько классификаторов для определения групп. Например, если у нас 5 классов («сильно положительный», «средне положительный», «нейтральный», «средне отрицательный», «сильно отрицательный»), то можно сначала обучить бинарный классификатор, который отделяет нейтральные тексты от субъективных; затем обучить классификатор, который отделяет положительные мнения от отрицательных; и в итоге классификатор, который отделяет сильно выраженные мнения от средних;
* Регрессия — обучаем классификатор для получения численного значения тональности, например от 1 до 10, где большее значение означает более положительную тональность.
+
* регрессия — обучаем классификатор для получения численного значения тональности, например от 1 до 10, где большее значение означает более положительную тональность.
  
Обычно иерархическая классификация дает лучшие результаты чем плоская, т.к. для каждого классификатора можно найти набор признаков, который позволяет улучшить результаты. Однако, он требует больших времени и усилий для обучения и тестирования. Регрессия может показать лучшие результаты, если классов действительно много (от 5 и более).
+
Обычно иерархическая классификация дает лучшие результаты чем плоская, так как для каждого классификатора можно найти набор признаков, который позволяет улучшить результаты. Однако, он требует больших времени и усилий для обучения и тестирования. Регрессия может показать лучшие результаты, если классов действительно много (от 5 и более).
 
 
=== Этапы подготовки ===
 
==== Предобработка текста ====
 
Предобработка текста переводит текст на естественном языке в формат удобный для дальнейшей работы. Применяются следующие операции:
 
* Перевод всех букв в тексте в нижний или верхний регистры;
 
* Удаление чисел или замена на текстовый эквивалент;
 
* Удаление пунктуации;
 
* Удаление редких и слишком частых слов;
 
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B5%D1%81%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0#.D0.A1.D1.82.D0.B5.D0.BC.D0.BC.D0.B8.D0.BD.D0.B3 Стемминг] или [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B5%D1%81%D1%82%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0#.D0.9B.D0.B5.D0.BC.D0.BC.D0.B0.D1.82.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F Лемматизация];
 
==== Извлечение признаков из текстов ====
 
Большинство математических моделей работают в векторных пространствах больших размерностей, поэтому необходимо отобразить текст в векторном пространстве. Основным походом является мешок слов (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) это, например, позволяет снизить ошибку на словах с одинаковыми написаниями, но разными значениями и наоборот.
 
  
 
== Классификация текстов методами машинного обучения ==
 
== Классификация текстов методами машинного обучения ==
Строка 84: Строка 73:
  
 
=== Этапы подготовки ===
 
=== Этапы подготовки ===
Этапы подготовки не отличается от обработки текста, описанной выше в анализе тональности.
+
Прежде всего следует предобработать текст. Подробно методы предобработки описаны в [[Обработка естественного языка|соответствующей статье]]
 +
==== Векторное представление слов ====
 +
Большинство математических моделей работают в векторных пространствах больших размерностей, поэтому необходимо отобразить текст в векторном пространстве. Основным походом является мешок слов (англ. ''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>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>
 
<math>c_m = \underset{c \in C}{\operatorname{argmax}} \, P(c|d)</math>
  
Для вычисления значений <math>P(c_i|d)</math> пользуются теоремой Байеса:
+
Подробно байесовская классификация описана в [[Байесовская классификация|соответствующей статье]].
 
 
<math>P(c_i|d) = \frac{P(d|c_i)P(c_i)}{P(d)}</math>
 
 
 
где <math>P(c_i)</math> – априорная вероятность того, что документ отнесен к категории <math>c_i</math>; <math>P(d | c_i)</math> – вероятность найти документ, представленный вектором <math>d = (t_1, ..., t_n)</math>, в категории <math>c_i</math>; <math>P(d)</math> – вероятность того, что произвольно взятый документ можно представить в виде вектора признаков <math>d = (t_1, ..., t_n)</math>.
 
 
 
По сути <math>P(c_i)</math> является отношением количества документов из обучающей выборки <math>L</math>, отнесенных в категорию c_i , к количеству всех документов из <math>L</math>.
 
 
 
<math>P(d)</math> не зависит от категории <math>c_i</math>, а значения <math>t_1, ..., t_n</math> заданы заранее, поэтому знаменатель {{---}} это константа, не влияющая на выбор наибольшего из значений <math>P(c_i|d)</math>.
 
 
 
Вычисление <math>P(d | c_i)</math> затруднительно из-за большого количества признаков <math>t_1, ..., t_n</math> , поэтому делают «наивное» предположение о том, что любые две координаты, рассматриваемые как случайные величины, статистически не зависят друг от друга. Тогда можно воспользоваться формулой
 
 
 
<math>P(d|c_i) = \prod_{k=1}^{n} P(t_k|c)</math>
 
 
 
Далее все вероятности подсчитываются по методу максимального правдоподобия.
 
 
 
<math>c = argmax_{c \in C} P(c)\prod_{k=1}^{n} P(t_k|c)</math>
 
  
 
Преимущества метода:
 
Преимущества метода:
Строка 115: Строка 92:
 
* легкая интерпретируемость результатов работы алгоритма.
 
* легкая интерпретируемость результатов работы алгоритма.
  
Недостатками являются частое низкое качество классификации и неспособность учитывать зависимость результата классификации от сочетания признаков.
+
Недостатки метода:
 +
* частое низкое качество классификации;
 +
* неспособность учитывать зависимость результата классификации от сочетания признаков.
  
 
===== Многомерная модель =====
 
===== Многомерная модель =====
В многомерной(multivariate) модели документ – это вектор бинарных атрибутов, показывающих, встретилось ли в документе то или иное слово. Когда мы подсчитываем правдоподобие е документа, мы перемножаем вероятности того, что встретилось каждое слово из документа и вероятности того, что не встретилось каждое (словарное) слово, которое не встретилось. Получается модель многомерных испытаний Бернулли. Наивное предположение в том, что события «встретилось ли слово» предполагаются независимыми.
+
В многомерной (англ. ''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>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>.
Строка 128: Строка 107:
 
Для обучения такого классификатора нужно обучить <math>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>D = \{d_{i}\}</math>, которые уже распределены по классам <math>c_{j}</math> (возможно, даже вероятностно распределены, то есть про каждый документ мы знаем, с какой вероятностью он принадлежит к каждому классу, но здесь и далее будем рассматривать детерминированную модель), дан словарь <math>V = \{w_t\}</math>, и мы знаем биты <math>B_{it}</math> (знаем документы).
  
 
Тогда можно подсчитать оптимальные оценки вероятностей того, что то или иное слово встречается в том или ином классе (при помощи лапласовой оценки):
 
Тогда можно подсчитать оптимальные оценки вероятностей того, что то или иное слово встречается в том или ином классе (при помощи лапласовой оценки):
  
<math>P(w_i|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(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>.
+
Априорные вероятности классов можно подсчитать как <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) модели документ – это последовательность событий. Каждое событие – это случайный выбор одного слова из того самого «bag of words». Когда мы подсчитываем правдоподобие документа, мы перемножаем вероятности того, что мы достали из мешка те самые слова, которые встретились в документе. Наивное предположение в том, что мы достаём из мешка разные слова независимо друг от друга. Получается мультиномиальная генеративная модель, которая учитывает количество повторений каждого слова, но не учитывает, каких слов нет в документе.
+
В мультиномиальной (англ. ''multinomial'') модели документ – это последовательность событий. Каждое событие – это случайный выбор одного слова из того самого мешка слов. Когда мы подсчитываем правдоподобие документа, мы перемножаем вероятности того, что мы достали из мешка те самые слова, которые встретились в документе. Наивное предположение в том, что мы достаём из мешка разные слова независимо друг от друга. Получается мультиномиальная генеративная модель, которая учитывает количество повторений каждого слова, но не учитывает, каких слов нет в документе.
  
 
Математически: пусть <math>V = \{w_t\}_{t=1}^{|V|}</math> – словарь. Тогда документ <math>d_i</math> – это вектор длины <math>|V|</math>, состоящий из слов, каждое из которых «вынуто» из словаря с вероятностью <math>P(w_t|c_j)</math>.
 
Математически: пусть <math>V = \{w_t\}_{t=1}^{|V|}</math> – словарь. Тогда документ <math>d_i</math> – это вектор длины <math>|V|</math>, состоящий из слов, каждое из которых «вынуто» из словаря с вероятностью <math>P(w_t|c_j)</math>.
Строка 143: Строка 122:
 
Правдоподобие принадлежности <math>d_{i}</math> классу <math>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>w_t<\math> в <math>d_i)</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>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>D = \{d_{i}\}</math>, которые уже распределены по классам <math>c_{j}</math>, дан словарь <math>V = \{w_t\}</math>, и мы знаем вхождения <math>N_{it}</math>.
  
 
Тогда можно подсчитать апостериорные оценки вероятностей того, что то или иное слово встречается в том или ином классе (не забываем сглаживание – правило Лапласа):
 
Тогда можно подсчитать апостериорные оценки вероятностей того, что то или иное слово встречается в том или ином классе (не забываем сглаживание – правило Лапласа):
Строка 156: Строка 135:
 
Тогда классификация будет происходить как <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>.
 
Тогда классификация будет происходить как <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)]] ====
+
==== Метод опорных векторов ====
Будем представлять каждый документ, как вектор, задаваемый своим содержимым в общем векторном пространстве. После этого будем строить [http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BE%D0%BF%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2_(SVM)#.D0.A0.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB.D1.8F.D1.8E.D1.89.D0.B0.D1.8F_.D0.B3.D0.B8.D0.BF.D0.B5.D1.80.D0.BF.D0.BB.D0.BE.D1.81.D0.BA.D0.BE.D1.81.D1.82.D1.8C разделяющую гиперплоскость] для каждого известного класса.
+
Для использования [[Метод опорных векторов (SVM)|метода опорных векторов]] (англ. ''SVM, support vector machine'') требуется представлять каждый документ, как вектор, задаваемый своим содержимым в общем векторном пространстве. После этого строится разделяющая гиперплоскость для каждого известного класса.
  
 
Преимущества метода:
 
Преимущества метода:
Строка 164: Строка 143:
 
* сводимость к задаче выпуклой оптимизации, имеющей единственное решение.
 
* сводимость к задаче выпуклой оптимизации, имеющей единственное решение.
  
Недостатки метода: сложная интерпретируемость параметров алгоритма и неустойчивость по отношению к выбросам в исходных данных.
+
Недостатки метода: сложная интерпретируемость параметров алгоритма и неустойчивость по отношению к выбросам в исходных данных, например в документе, рассказывающем о том как какой-нибудь футболист любит разводить собак и как он это делает, из-за частого употребления имени футболиста документ будет отнесен к классу "про футбол", или наоборот все документы с этим футболистом станут принадлежать к классу "разведение собак".
 +
 
 +
==== pLSA ====
 +
pLSA (англ. ''Probabilistic latent semantic analysis'') или вероятностный латентно-семантический анализ был разработан в 1999г.  
  
==== pLSA (Hoffmann, 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>d</math> порождается некой темой <math>t \in T</math>. Lокумент порождается некоторым распределением на темах <math>p(t|d)</math>. Cлово порождается именно темой, а не документом - <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>.
 
Можно оценить <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>.
  
Максимизировать такое правдоподобие следует ЕМ-алгоритмом. На Е-шаге ищемм, сколько слов <math>w</math> в документе <math>d</math> из темы <math>t</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_{dwt} = n_{dw}p(t|d, w)=n_{dw}\frac{\phi_{wt}\theta_{td}}{\sum_{s \in T}\phi_{ws}\theta_{sd}}</math>
Строка 187: Строка 168:
 
<math>n_{td} = \sum_{w \in d}n_{dwt} + \theta\frac{\partial R}{\partial \theta_{td}}</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>.
+
Вместо pLSA почти всегда используют его улучшение - LDA<ref>[https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation LDA]</ref>(англ. ''Latent Dirichlet allocation''), оно более ресурсоемкое, однако выдает лучшие результаты чем pLSA. Фактически это улучшение является байесовским вариантом pLSA, использующее вариационные приближения или сэмплирование(это основные подходы к выводу в сложных вероятностных моделях).
 
 
  
=== Оценка качества классификации ===
+
=== Оценка качества в задачах классификации ===
Для оценки качества классификации, как и для оценки качества работы многих других алгоритмов машинного обучения вычисляется [https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA#%D0%A2%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(precision) точность] и [https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA#%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_(recall) полнота].
+
Для [[Оценка качества в задачах классификации|оценки качества классификации]], как и для оценки качества работы многих других алгоритмов машинного обучения вычисляется точность, полнота, F-мера и accuracy.
  
 
== Применение семантических тезаурусов для анализа тональности текстов ==
 
== Применение семантических тезаурусов для анализа тональности текстов ==
Строка 202: Строка 182:
 
* [http://nmis.isti.cnr.it/sebastiani/Publications/LREC10.pdf SentiWordNet];
 
* [http://nmis.isti.cnr.it/sebastiani/Publications/LREC10.pdf SentiWordNet];
 
* [http://sentic.net/ SenticNet]
 
* [http://sentic.net/ SenticNet]
 +
 +
== См. также ==
 +
 +
*[[Векторное представление слов]]
 +
*[[Кластеризация]]
  
 
== Примечания ==
 
== Примечания ==
 
<references/>
 
<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], размеченные силами людей с учётом эмоциональной окраски слов, содержащихся в них. Такие словари позволяют определять тональность текста без применения алгоритмов машинного обучения. Тональность текста определяется как сумма тональностей слов, содержащихся в размеченных словарях.

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

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

См. также

Примечания