Подытожим
Эта глава – сверхкороткая, по сравнению с остальными в этой книге. Почему? Потому что наивный Байес очень простой! И за это все его любят. Кажется, что он делает что-то сложное волшебным образом, хотя на самом деле он просто полагается на хорошую память компьютера, помнящего, насколько часто каждый жетон появляется в каждом классе.
Есть такая пословица: «Опыт – отец мудрости, а память – ее мать». К «наивному Байесу» она подходит на 100 %. Полнота «псевдомудрости» программы состоит из загруженных и хранящихся данных и кусочка математической изоленты.
«Наивный Байес» даже немного приспособлен к простому применению в коде. Например, вот как он выглядит в С#:
http://msdn.microsoft.com/en-us/magazine/jj891056.aspx
небольшой кусочек, написанный кем-то на Python и выложенный в Сеть:
http://www.mustapps.com/spamfilter.py
вот на Ruby:
http://blog.saush.com/2009/02/11/naive-bayesian-classifiers-and-ruby/
Одно из замечательных свойств этой модели – то, что она отлично работает, даже если кругом куча элементов (feature) – вводных данных модели ИИ, с помощью которых вы строите свои предположения (в случае с нашими данными, каждое слово представляет собой элемент). Но, несмотря на это, не забывайте, что у простой модели набора слов (bag of words) тоже есть свои недостатки. Если честно, наивная часть модели может стать причиной появления проблем. Приведу пример.
Предположим, я создал «наивный байесовский» классификатор, который пытается классифицировать твиты по отношению к написанному на положительные и отрицательные. И когда кто-то пишет что-то вроде:
Новый фильм Майкла Бэя – это дымящаяся куча шовинистского мусора, полная взрывов и убогой игры актеров, не выражающей ничего. Но лично мне понравилось!
Правильно ли обработает модель эту запись? В ней пачка отрицательных жетонов, но в конце – несколько положительных.
Так как модель набора слов не учитывает структуру текста и принимает все жетоны за беспорядочную кучу, возникает проблема. Многие наивные байесовские модели на самом деле рассматривают в качестве жетонов фразы, а не отдельные слова. Это помогает немного контекстуализировать слова (и делает предположения классификатора еще более нелепыми, но кому какая разница!). Для выполнения такой работы нужно больше тренировочных данных, потому что количество возможных фраз из N слов гораздо больше, чем количество возможных слов.
Для записей, подобных этому отзыву на фильм, может понадобиться модель, которая учитывает положение слов. За какой фразой последнее слово? Получение подобной информации немедленно устраняет все мысли о простой концепции «набора слов».
Конечно, это все придирки. «Наивный Байес» – это простой и многофункциональный инструмент ИИ. Его легко прототипировать и испытывать. Попробуйте помоделировать с помощью этого классификатора разные идеи, и если они будут достаточно хорошо работать – вы молодец. Если результаты многообещающи, но убоги – можно обратить свой взор на что-нибудь «помясистее», вроде комплексной модели (ensemble model), рассмотренной в главе 7.