Классификация лежит в основе машинного обучения и человеческого интеллекта. Распознавание голосов, лиц или изображений, которые мы видим ежедневно, - все это подпадает под классификацию. Теперь, переходя к Наивному Байесу, для всех, кто только начинает заниматься обработкой естественного языка, это первый шаг к достижению этой цели; поэтому чрезвычайно важно понимать, как это реализовать и что происходит под капотом. . В этой статье мы узнаем, как реализовать наивно-байесовский алгоритм с нуля и использовать его для анализа настроений.

ИНДЕКС:

  1. АНАЛИЗ СООБЩЕНИЙ
  2. ТЕРМИНОЛОГИЯ
  3. ТЕОРЕМА НАИВ-БЕЙСА
  4. ВЫВОД
  5. ОБУЧЕНИЕ МОДЕЛИ
  6. РЕШЕННЫЙ ПРИМЕР
  7. ЗАКЛЮЧЕНИЕ

АНАЛИЗ СООБЩЕНИЙ

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

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

1. «Отличное место. Еда вкусная, и атмосфера довольно приятная »

Теперь у вашего друга противоположные взгляды. Это новое место ему не понравилось. Поэтому, когда вы в свою очередь спрашиваете его мнение, он замечает:

2. «Это жалкое место. Еда ужасная, и атмосфера меня подавляет, и мне становится очень неуютно »

Я думаю, мы все можем согласиться с тем, что утверждение 1 выражает положительное настроение, а утверждение 2 - отрицательное настроение или эмоцию. Нам также важно обратить внимание на то, что ИМЕННО дало нам подсказки, которые позволили нам классифицировать предложения на положительные или отрицательные.

Ответ? Реплики…

если присмотреться… В предложениях есть определенные слова, которые определяют эмоцию. Положительные слова, такие как отлично, вкусно, приятно и т. Д. сделайте предложение позитивным, а такие слова, как жалкий, ужасный, неудобный и т. д. Сделайте предложение отрицательным. Фактически, если мы просто заменим эти специальные сигналы в предложении, оно полностью изменит его значение. Позволь мне показать тебе:

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

ТЕРМИНОЛОГИЯ

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

Идти дальше ; мы обычно обозначаем ввод как x, а вывод как y, где y ∈ [y, yb, yc,… ..yn] классы, и задача вашей модели - предсказать, к какому классу вывода принадлежит конкретный ввод x. Теперь в этом случае мы будем иметь дело со словами и предложениями, поэтому есть небольшое изменение в терминологии. Наш вход будет 'd' для документа (в основном предложений), состоящего из ряда функций, а наш вывод будет 'c 'для класса. Здесь класс будет представлять либо положительное (для положительного настроения), либо отрицательное (для отрицательного настроения).

Итак, наконец, мы получим вход d, и наша модель должна научиться предсказывать, к какому классу «c» она принадлежит.

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

ТЕОРЕМА НАИВ-БЕЙЗА

Давайте сначала рассмотрим теорему Байеса:

P(A | B) = P(B | A) * P(A) / P(B) ->(1)

Давайте посмотрим на термины:

  • P (A | B) = вероятность того, что событие A произойдет, при условии, что событие B произойдет
  • P (B | A) = вероятность того, что событие B произойдет, при условии, что событие A произойдет
  • P (A) = вероятность возникновения события A
  • P (B) = вероятность того, что событие B произойдет

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

Теперь мы можем описать полиномиальную наивную теорему Байеса. Как следует из названия, в этой теореме используется байесовский классификатор с упрощенным предположением о взаимодействии функций.

Одно из наиболее важных допущений, которое мы рассмотрели в Наивном Байесе, называется мешком слов. Это означает, что все, что действительно волнует алгоритм, - это слово и его частота, то есть сколько раз слово встречается в наших данных. Положение слова в нашем предложении (документе) не имеет значения. Нам нужно только отслеживать, сколько раз конкретное слово появлялось в нашем документе. Вот и все .

Позвольте мне объяснить на примере:

«Чай делает меня счастливым. Черный чай, зеленый чай, чай с молоком, неважно, какой это; пока это чай, я доволен. Я выросла на чае, и каждый глоток напоминает мне старые добрые времена »

Разберем дальше:

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

ВЫВОД

Теперь попробуем сформулировать это математически.

Если вы помните, нашей главной целью было найти класс (будь то положительное или отрицательное мнение) по конкретному предложению (документу). Итак, мы можем подойти к этой проблеме следующим образом:

1. Предположим, у нас есть набор возможных классов C.

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

Итак, по сути, условная вероятность класса данного документа.

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

Объединяя все шаги вместе, получаем:

Здесь термин ĉ обозначает класс с максимальной вероятностью.

Мы уже были знакомы с теоремой Байеса; так что теперь мы можем подставить формулу для условной вероятности в уравнение (2)

Мы можем еще больше упростить это уравнение. При итерации по классам наш документ, конечно, не изменяется, изменяется только класс; так что мы можем безопасно удалить P (d) из знаменателя, не вызывая серьезных проблем. Таким образом, наше модифицированное уравнение выглядит следующим образом:

Термин P (d | c) называется вероятностью правдоподобия.

Второй член P (c) называется априорной вероятностью.

Мы можем еще больше упростить его, разделив каждый документ на набор функций f1, f2, f3, …… ..fn.

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

Если два события X и Y не зависят друг от друга, то вероятность того, что события происходят вместе (P (X и Y)), становится равной:

P( X ∩ Y) = P(X) * P(Y)

что значит:

P( f 1 | c ∩ f 2 | c) = P(f 1 | c) * P(f 2 | c)

Мы можем еще больше упростить уравнение (5)! Кроме того, предполагая, что события независимы друг от друга, нам не нужно принимать во внимание, как каждая функция связана друг с другом или вероятность появления одной функции с учетом другой функции. Это экономит нам много вычислительной мощности.

Таким образом, наше окончательное уравнение становится:

P( f 1 , f 2 , …., f n |c) = P( f 1 |c) · P( f 2 |c) · … · P( f n |c) ->(6)

or

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

Уф !!!! мы наконец закончили с выводом. Теперь давайте перейдем к тому, как мы можем применить эту концепцию в практической задаче.

ОБУЧЕНИЕ МОДЕЛИ

1. Рассчитайте априорную вероятность. Сначала мы найдем количество документов, принадлежащих к каждому классу. Определение процента документов в каждом классе даст нам требуемую априорную вероятность.

Предположим, что количество документов в классе c равно Nc.

Предполагается, что общее количество документов равно Ntotal.

Итак, P (c) = Nc / Ntotal - › (9)

2. Рассчитайте вероятность. Здесь все становится немного сложнее. Наша основная цель - найти, сколько раз слово wi встречается среди всех слов во всех документах класса c. Сначала мы объединяем все документы с категорией c в один большой текст «категории c». Затем мы используем частоту wi в этом объединенном документе, чтобы дать вероятность правдоподобия.

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

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

d = «Мне понравился этот фильм»

Слово «любимый» присутствует только в положительном классе, и во входных данных отрицательного класса нет примеров «любимого». Теперь из уравнения (8) мы должны найти вероятность, умножив вероятность правдоподобия для каждого класса. Рассчитав вероятностную вероятность слова «любимый» для класса «негативный», мы получим:

P («любил» | «отрицательно») = 0

Теперь, если мы подставим это значение в уравнение (8), вся вероятность нашего «отрицательного» класса станет равной нулю; независимо от других значений.

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

Здесь a - коэффициент сглаживания Лапласа. Обычно мы принимаем его значение равным 1.

3. Подставьте априорную и правдоподобную вероятность в уравнение (8).

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

Однако есть несколько способов оптимизировать этот процесс:

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

Это исходное уравнение, которое у нас было:

Теперь, если мы применим логарифм к обеим сторонам, мы получим линейную функцию:

б. Стоп-слова: такие слова, как the, a, an, was, when и т. д.

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

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

г. Двоичный полиномиальный наивный-байесовский метод: это немного измененная версия полиномиального наивно-байесовского метода. Здесь мы будем уделять больше внимания тому, присутствует слово или нет, чем его частоте. Как мы уже видели, отдельное слово может вызвать массовое изменение тональности предложения, и, таким образом, было бы логичным способом игнорировать, сколько раз это конкретное слово появлялось в предложении, и сконцентрироваться на том, присутствует ли это конкретное слово или нет. в документе.

РЕШЕННЫЙ ПРИМЕР

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

Набор данных обучения:

Набор тестовых данных:

Это вымышленный набор данных по обзорам фильмов. Рецензии на фильмы были разделены на положительные и отрицательные классы соответственно.

Решим проблему: (мы будем считать коэффициент сглаживания, a, равным 1)

Для первого тестового примера:

Априорная вероятность:

P (c = «положительный») = 3/6 = 1/2, P (c = «отрицательный») = 3/6 = 1/2

Вероятность правдоподобия:

P («Отлично» | c = «Положительно») = 1 + 1 / (9 + 19) = 0,0714.

P («фильм» | c = «Положительный») = 2 + 1 / (9 + 19) = 0,1071.

P («Отлично» | c = «Отрицательно») = 0 + 1 / (10 + 19) = 0,0344

P («фильм» | c = «Негатив») = 0 + 1 / (10 + 19) = 0,0344

Наконец, мы применяем наши выводы в уравнении (8) и возвращаем максимальную вероятность:

P (c = «положительный») * P («Отличный» | c = «Положительный») * P («фильм» | c = «Положительный») = 0,5 * 0,0714 * 0,1071 = 0,00382

P (c = «отрицательный») * P («Отлично» | c = «Отрицательный») * P («фильм» | c = «Отрицательный») = 0,5 * 0,0344 * 0,0344 = 0,000591

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

Для второго тестового примера:

Априорная вероятность:

P (c = «положительный») = 3/6 = 1/2, P (c = «отрицательный») = 3/6 = 1/2

В этом примере встречаются неизвестные слова: this, is. Мы не будем учитывать их в наших расчетах.

Вероятность правдоподобия:

P («скучно» | c = «положительно») = 0 + 1 / (9 + 19) = 0,03571

P («жалкий» | c = «Положительный») = 0 + 1 / (9 + 19) = 0,03571.

P (‘and’ | c = ‘Positive’) = 0 + 1 / (9 + 19) = 0,03571.

P («скучно» | c = «отрицательно») = 1 + 1 / (10+ 19) = 0,0689.

P («жалкий» | c = «отрицательный») = 1 + 1 / (10 + 19) = 0,0689.

P (‘and’ | c = ‘Negative’) = 1 + 1 / (10 + 19) = 0,0689.

Наконец, мы применяем наши выводы в уравнении (8) и возвращаем максимальную вероятность:

P (c = «положительный») * P («скучный» | c = «положительный») * P («жалкий» | c = «положительный») * P («и» | c = «положительный») = 0,5 * 0,03571 * 0,03571 * 0,03571 = 0,00002277

P (c = «отрицательный») * P («Отлично» | c = «Отрицательный») * P («фильм» | c = «Отрицательный») = 0,5 * 0,0689 * 0,0689 * 0,0689 = 0,00016354

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

ЗАКЛЮЧЕНИЕ

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

Код на Python, реализующий двоичный полиномиальный наивно-байесовский классификатор, можно найти в моем репозитории на github. Набор данных также был включен в репо.