Прогнозирование классификаций с помощью наивного Байеса и работа с функциями/словами, не входящими в обучающий набор

Рассмотрим проблему классификации текста спама или не спама с помощью алгоритма наивного Байеса.

Вопрос следующий:

как вы делаете прогнозы о документе W =, если в этом наборе слов вы видите новое слово wordX, которое вообще не было замечено вашей моделью (поэтому у вас даже нет оценки вероятности сглаживания Лапласа для него)?

Обычное дело — просто игнорировать это слово X, даже если оно было замечено в текущем тексте, потому что оно не связано с вероятностью? т.е. Я знаю, что иногда для решения этой проблемы используется сглаживание Лапласа, но что, если это слово совершенно новое?

Некоторые из решений, о которых я думал:

1) Просто игнорируйте эти слова при оценке классификации (самая простая, но иногда неправильная...?, однако, если обучающая выборка достаточно велика, это, вероятно, лучше всего сделать, так как я думаю, что разумно предположить ваши особенности и материал был выбран достаточно хорошо, если у вас есть, скажем, 1 или 20 миллионов данных).

2) Добавьте это слово в свою модель и полностью измените свою модель, потому что словарный запас изменился, поэтому вероятности должны меняться везде (хотя у этого есть проблема, поскольку это может означать, что вам придется часто обновлять модель, особенно если ваш анализ 1M документов , сказать)

Я провел некоторое исследование по этому вопросу, прочитал несколько слайдов Дэна Джурафски НЛП и НБ, посмотрел несколько видео на курсе и просмотрел некоторые исследовательские работы, но не смог найти ничего полезного. Мне кажется, что эта проблема вовсе не нова, и должно быть что-то (эвристическое..?) там. Если нет, было бы здорово узнать это тоже!

Надеюсь, что это полезный пост для сообщества и заранее спасибо.

PS: чтобы сделать проблему немного более явной с одним из решений, которые я видел, скажем, что мы видим неизвестное новое слово wordX в спаме, тогда для этого слова мы можем сделать 1/ count(spams) + |Vocabulary + 1|, проблема, с которой я столкнулся при выполнении чего-то подобного, заключается в том, значит ли это, что мы меняем размер словаря, и теперь каждый новый документ, который мы классифицируем, имеет новую функцию и словарное слово? Это видео, похоже, пытается решить эту проблему, но я не уверен, что это хорошо, или 2, может быть, я неправильно его понял:

https://class.coursera.org/nlp/lecture/26


person Charlie Parker    schedule 22.07.2013    source источник


Ответы (1)


С практической точки зрения (имея в виду, что это не все, о чем вы просите), я бы предложил следующую структуру:

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

  2. Всякий раз, когда появляется новое слово (относительно вашей текущей модели), используйте какой-либо метод сглаживания для его учета. например Сглаживание Лапласа, как предлагается в вопросе, может быть хорошим началом.

  3. Периодически переобучайте свою модель, используя новые данные (обычно в дополнение к исходному набору поездов), чтобы учитывать изменения в проблемной области, например. новые термины. Это можно делать через заданные промежутки времени, например, раз в месяц; после того, как было встречено некоторое количество неизвестных слов, или онлайн-способом, т.е. после каждого входного документа.

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

Это гарантирует, что ваша модель будет обновляться и учитывать новые термины, добавляя их в модель время от времени и учитывая их еще до этого (простое игнорирование их обычно не является хорошей идеей).

person etov    schedule 22.07.2013