# 3. АНАЛИЗ ТЕКСТОВОГО КОНТЕНТА В СОЦИАЛЬНЫХ СЕТЯХ, АЛГОРИТМЫ КЛАССИФИКАЦИИ ТЕКСТОВЫХ СООБЩЕНИЙ

[назад](README.md)

Одним из самых распространённых типов данных социальных сетей являются текстовые данные. Для одних социальных сетей, таких как, например, Instagram этот вид данных является  сопутствующим, в других сетях: Facebook, Vkontakte – это один из основных типов данных, а в третьих, таких как Twitter – это основной тип. В любом случае текстовые данные представляют огромный интерес, а их анализ при этом очень востребован. Помимо определения семантического окраса текстовых сообщений, а также вычисления различных числовых метрик, приведенных в конце предыдущего раздела, имеет место задача классификации текстовых данных. 

Классификация текстовых данных социальных сетей обладает некоторой спецификой по отношению к простой классификации текстовых данных, поскольку в социальных сетях существует ряд ограничений. Наиболее значимым ограничением является ограничение по объему текстовой информации. Для большинства социальных сетей это является определенным правилом хорошего тона, а некоторых (Twitter) ограничение на количество символов в сообщении задается на программном уровне. Это ограничение делает практически невозможным классификацию текстов сообщений традиционными методами. В качестве одного из решений данной задачи можно использовать обработку текстов методами k-means с использованием метрики TF-IDF, а также LDA алгоритм. 

### K-means

K-means – это один из наиболее распространённых алгоритмов кластеризации, который относится к неиерархическим итеративным алгоритмам. 

Алгоритм k-средних строит $`k`$ кластеров, расположенных на возможно больших расстояниях друг от друга. Основной тип задач, которые решает алгоритм k-средних – наличие предположений (гипотез) относительно числа кластеров, при этом они должны быть различны настолько, насколько это возможно. Выбор числа $`k`$ может
базироваться на результатах предшествующих исследований, теоретических соображениях или интуиции. 

Общая идея алгоритма: заданное фиксированное число k кластеров наблюдения сопоставляются кластерам так, что средние в кластере (для всех переменных) максимально возможно 
отличаются друг от друга.

Первоначальное распределение объектов по кластерам происходит следующим образом. Выбирается число $`k`$, и на первом шаге эти точки считаются "центрами" кластеров. Каждому кластеру
соответствует один центр. Этот выбор часто может осуществляется согласно такой логике: 
- выбор k-наблюдений для максимизации начального расстояния; 
- случайный выбор k-наблюдений; 
- выбор первых k-наблюдений. 
В результате каждый объект назначен определенному кластеру. 

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

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

Другими словами, в k-means, каждый из $`k`$ кластеров представлен одной точкой в пространстве. Обозначим этот набор представителей кластера как множество $`С=\{c_j | j=1,\ldots,k\}`$. Эти представители k кластеров также называются состояние кластера или центройды кластера. В алгоритмах кластеризации точки группируются некоторым понятием «близости» или «подобия». В k-means мера близости по умолчанию Евклидово расстояние. В частности можно показать, что k-means пытается минимизировать следующую неотрицательную функцию стоимости. 

```math
Cost = \sum_{i=1}^N ( \argmin_j \| x_i - c_j \|_2^2 ).
```

Таким образом, алгоритм k-means минимизирует итоговый квадрат Евклидова расстояния между каждой точкой $`x_i`$ и ее самым близким представителем кластера $`c_j`$. Приведенное выше часто упоминается как целевая функция k-means. 

Алгоритм сходится, когда значения $`c_j`$. больше не изменяются. 

Алгоритм k-means достаточно прост и удобен, однако у него имеются два недостатка: 
- алгоритм слишком чувствителен к выбросам, которые могут искажать среднее. Возможным решением этой проблемы является использование модификации алгоритма – алгоритм k-медианы; 
- алгоритм может медленно работать на больших базах данных. Возможным решением данной проблемы является 
использование выборки данных.

### TF-IDF

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

Мера TF-IDF часто используется в задачах анализа текстов и 
информационного поиска, например, как один из критериев 
релевантности документа поисковому запросу, при расчёте меры 
близости документов при кластеризации. 

TF (term frequency – частота слова) – отношение числа вхождения некоторого слова к общему количеству слов документа. Таким образом, оценивается важность слова в пределах отдельного документа. 
```math
tf(t, d) = \frac{n_i}{\sum_k n_k}
```
где 𝑛_i – число вхождений слова в документ. В знаменателе формулы – общее число слов в данном документе. 

IDF (inverse document frequency – обратная частота документа) – инверсия частоты, с которой некоторое слово встречается в документах коллекции. Учёт IDF уменьшает вес широкоупотребительных слов. Для каждого уникального слова в 
пределах конкретной коллекции документов существует только одно значение IDF. 

```math
idf(t, D) = \log \frac{|D|}{|(d_i \ni t_i)|},
``` 
где $`|D|`$ – количество документов в корпусе; $`|(d_i \ni t_i)|`$ – количество документов, в которых встречается $`t_i`$ (когда $`𝑛_i \neq 0`$). 

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

Таким образом, мера TF-IDF является произведением двух сомножителей: 

```math
tfidf(t,d,D) = tf(t,d) \times idf(t, D).
```
 
Большой вес в TF-IDF получат слова с высокой частотой в пределах конкретного документа и с низкой частотой употреблений в других документах.

### LDA

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

Модель LDA решает классическую задачу анализа текстов: создать вероятностную модель большой коллекции текстов (например, для information retrieval или классификации). 

Очевидно, что у одного документа может быть несколько тем. Подходы, которые кластеризуют документы по темам, никак этого не учитывают. LDA – это иерархическая байесовская модель, состоящая из двух уровней: 
- на первом уровне – смесь, компоненты которой соответствуют «темам»; 
- на втором уровне – мультиномиальная переменная с априорным распределением Дирихле, которое задаёт «распределение тем» в документе. 

Граф модели можно увидеть на рис. 9. 

![Рис. 9. Граф LDA модели ](images/2021-09-04_21-37-12.png)  
Рис. 9. Граф LDA модели 
 
Модель будет генерировать новый документ исходя из следующих действий: 
- выбор длины документа N; 
- выбор вектора $`\theta \thicksim (\alpha)`$ – вектора «степени выраженности» 
каждой темы в этом документе. 

Для каждого из N слов w: 
- выбор темы $`z_n`$ по распределению $`Mult(\theta)`$ ; 
- выбор слова $`w_n \thicksim p(w_n | z_n, \beta)`$ с вероятностями, заданными 
в $`\beta`$. 

Для простоты фиксируем число тем k и будем считать, что $`\beta`$ – это набор параметров $`\beta_{ij} = p(w^j = 1 | z^i = 1)`$, которые нужно оценить, при этом явно не обозначая распределение по $`N`$. Совместное распределение выглядит следующим образом 

```math
p(\theta,\ldots,N | \alpha,  \beta) = p(N| \zeta) p (\theta | \alpha) \prod_{n=1}^N p(z_n|\theta)p(w_n|z_n,\beta).
```

В отличие от обычной кластеризации с априорным распределением Дирихле или обычным распределением Байеса, мы не выбираем кластер один раз, а затем подбираем слова из этого кластера, а для каждого слова сначала выбираем по распределению $`\theta`$ тему, а уже потом определяем слово по этой теме. 

### Машинное обучение

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

Системы классификации основанные на машинном обучении, как правило, состоят из двух основных частей: частотный анализатор со словарём и нейросетевой классификатор. На вход системы поступает текст, на выходе получаем тему, которой посвящен этот текст (спорт, политика, медицина и т.п.). 

Перед началом работы пользователю необходимо определить классы, с которыми будет работать система и подобрать множество учебных текстов. Далее из множества учебных текстов, определённым образом, выделяются слова – формируется словарь. На последнем этапе инициализации системы, используя учебные 
тексты и полученный словарь, необходимо обучить нейросетевой классификатор. Классификатор необходимо обучить на множестве учебных текстов. Эту процедуру можно разбить на четыре этапа: 
1. Определение количества классов, с которыми будет работать система. Подбор тематических учебных текстов, в одинаковом объеме для каждого класса. Тексты должны в точности соответствовать своей теме. 
2. Составление словаря из множества учебных текстов. Для решения этой задачи можно воспользоваться обобщенным законом Бредфорда. В следующих разделах эта задача рассматривается подробнее. 
3. Частотный анализ множества учебных текстов, с использованием полученного словаря. Получаем множество учебных векторов для нейронной сети. 
4. Обучение нейросетевого классификатора на наборе векторов частотных характеристик учебных текстов. Далее рассматривается решение этой задачи. 

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

### Метод коллективного принятия

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

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

Вторая часть системы классифицирует текст основываясь на имеющимся словаре. Другими словами каждое слово из текста $`T = t_1 t_2 \ldots t_n`$ сопоставляется со словарем $`U = u_1 u_2  \ldots u_m`$ с целью получения списка категорий: 

```math
\delta(u_i) = \{ \underbrace{k_j \ldots k_h}_z \},
```

где $`\delta(u_i)`$ – функция извлечения категорий слова $`u_i`$ из словаря; $`\{ k_j \ldots k_h \}`$ – вектор из $`z`$ элементов $`k`$ (элемент списка категорий $`K = k_1 k_2 \ldots k_L`$ ), к которым принадлежит слово $`u_i`$ ; $`1 \leq j,h,z \leq L`$.

Если $`\gamma(t_i) = u_j`$, где $`\gamma(t_i)`$ – функция стемминга текста $`t_i`$, то $`\delta(t_i) = \delta(u_j) = \bar{k}`$ . В случае отсутствия слова в словаре оно отдаётся эксперту на классификацию с последующим добавлением в словарь. 

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

В результате обработки текста имеем перечень категорий (к которым относятся слова) на осонове которого алгоритм высчитывает пороговое значение «веса» тематики и классифицирует исходный текст.

[назад](README.md)
