В этой статье мы говорим о наивном байесовском классификаторе — системе классификации первого поколения.

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

Классификация всегда представляла интерес в индустриальном пространстве, будь то мошеннические транзакции, анализ обзоров/твитов или классификация запросов. Если подумать, даже языковое моделирование — это задача классификации, то есть выбор следующего слова из всех слов. Прежде чем я углублюсь в тему, системы классификации можно разделить на два типа. Генеративный и Дискриминативный.

Дискриминативный -> Присвоение категории на основе ввода

Генеративный -> Генерация входных данных (синтетических) на основе категории.

Наивный байесовский подход относится к разделу «Генеративный». Вкратце, Наивный Байес генерирует синтетическое предложение для каждого класса, а затем мы выбираем класс, который генерирует наиболее близкое к данному входу.

Почему он называется наивным байесовским?

Наивный байесовский классификатор — это вероятностный классификатор, который возвращает из классов C класс, генерирующий выборку, наиболее близкую к входным данным.

*Наивный*Байесовский метод

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

Наивный *байесовский*

Термин «Байес» происходит от теоремы Байеса. Если мы математически представим цель классификации, то получим вот что:

C¹ = argmax P(c|d)

где

P(c|d) = при наличии документа вернуть оценку класса. (обсуждается ниже)

C¹ = Наша цель. Из всех классов вернуть класс с наивысшим баллом

Вспомним теорему Байеса из нашей школы,

P(x|y) = P(y|x) * P(x)/P(y)

Теорема Байеса помогает нам разбить любую условную вероятность на 3 вероятности. Даже, в нашем случае, мы можем сделать это,

P (c|d) = P(d|c) * P(c)/P(d)

Итак, C¹ = argmax P(c|d) становится

C¹ = argmax P(d|c) * P(c)/P(d)

где

P(d|c) = Проверить релевантность этого документа сгенерированному документу класса c. Назовите его "Вероятность документа d", так как модель генерирует этот показатель путем аппроксимации обучающего корпуса.

P(c) = априорная вероятность самого класса. Не переусердствуйте с «приорой». Модель запоминает соотношение экземпляров этого класса и всех классов в обучающем корпусе.

d = данный документ.

Поскольку P(d) не зависит от класса и является общим для всех классов, мы игнорируем его. Теперь уравнение наивного Байеса сводится к

C¹ = argmax P(d|c) * P(c)

Интуитивно это уравнение делает следующее: оно сначала выбирает класс => P(c), а затем генерирует слова для этого класса для вычисления релевантности с документом d => P(d|c).

Документы как функции

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

  1. Мешок слов предположение
  2. Учтите, что каждое слово/функция не зависит от следующего. Давайте разберемся с уравнениями:

P(d|c) = P(f₁ f₂ f₃…fₙ|c)

= P(w₁w₂w₃…wₙ|c)

Поскольку мы предположили, что признаки независимы, становится

= P(w₁|c)* P(w₂|c)*P(w₃|c)*..P(wₙ|c)

P(d|c) = P(w₁|c)* P(w₂|c)*P(w₃|c)*..P(wₙ|c)

C¹ = argmax P(d|c) * P(c)

C¹ = argmax (P(w₁|c)* P(w₂|c)*P(w₃|c)*..P(wₙ|c)) * P(c)

ОТЛИЧНЫЙ!! Мы знаем все переменные в уравнении. Теперь мы можем подсчитать баллы.

Наивный байесовский алгоритм — последовательность шагов

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

Шаги обучения

  1. Рассчитайте априорные классы P (c), разделив количество документов с классом c на общее количество документов.
  2. Вычислите P(wi|cj), разделив вхождение wi на общее количество слов в этом классе cj.

Шаги тестирования

Получив тестовое предложение, мы вносим значения, полученные на этапе обучения, в уравнение наивного Байеса.

Мы подсчитываем баллы для всех классов и выбираем тот, который имеет самый высокий балл. В данном случае это класс 2, т.е. отрицательный класс.

Предостережения и незначительные обновления

Если вы заметили расчеты, есть несколько проблем:

  1. Числовая шкала: даже для предложения из 3 слов десятичные значения огромны. Итак, чтобы избежать недополнения/переполнения цифр и для ускорения вычислений, мы меняем все на логарифмический масштаб.
  2. Вне словарного запаса: это разветвляется на два случая. Во-первых, если слово из проверочного предложения нигде не встречается в обучающем корпусе, то мы просто игнорируем его при расчете.

Во-вторых, предположим, что слово «спал» встречается не в классе-1, а в других классах. Итак, P(slept|c1) = 0. Это делает всю оценку P(d|c1) = 0, поскольку мы умножаем вероятности признаков. Чтобы справиться с этим, мы добавляем. Лапласово сглаживание, то есть добавление +1 к частоте каждого слова.

Итак, P(wi|c) = #(wi|c) + 1/ сигма #(wk|c) для всех V + |V|

Вот и все!!

Оптимизация наивного Байеса

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

Бинаризация

Для анализа настроений и некоторых других задач классификации существование слова важнее, чем его частотность. Это также ускоряет алгоритм. Это часто называют BinaryNB или Multinomial NaiveNB. Здесь мы обрезаем частоту любого слова до 1.

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

Например:

Перед бинаризацией:

1. Мы пошли в кинотеатр смотреть фильм

2. Фильм был великолепен. Игра тоже

После бинаризации

1. Мы пошли в кинотеатр смотреть фильм

2. Фильм был великолепен. Действуя слишком

И все остальные шаги остаются прежними.

Обращение с отрицанием

Даже самые продвинутые модели настроений терпят неудачу при отрицании. Например, модель может определить «Этот фильм был хорошим» как положительный, но может потерпеть неудачу в «Этот фильм был плохим». Отрицание, произведенное «не», изменяет настроение рецензии.

Другим примером может быть отрицание отрицания «Этот фильм был неплох».

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

Например,

Честно говоря, фильм мне не понравился, но...

Честно говоря, мне не понравился NEG_the NEG_movie, но я…

Этот простой трюк очень хорошо работает на практике. Если вы задумаетесь над этим, вы поймете, что мы сохраняем положительные слова, такие как «нравится», как «NEG_like», тем самым превращая их в отрицательные слова.