Несколько меток в контролируемом алгоритме обучения

10

У меня есть текстовый корпус с соответствующими темами. Например "A rapper Tupac was shot in LA"и было помечено как ["celebrity", "murder"]. Таким образом, в основном каждый вектор объектов может иметь много меток (не одинаковое количество. Первый вектор объектов может иметь 3 метки, второй 1, третий 5).

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

Есть ли способ превратить Наивный Байес в проблему классификации по нескольким меткам (если есть лучший подход - пожалуйста, дайте мне знать)?

PS немногое о данных у меня есть.

  • приблизительно 10.000 элементов в наборе данных
  • текст примерно 2-3 предложения
  • максимум 7 ярлыков на текст
Сальвадор Дали
источник
@fordprefect Multinomial Naive Bayes использует полиномиальное распределение для вероятностей некоторого признака, заданного классом: . ОП хочет, чтобы классификатор управлял несколькими выходами, как описано в TheGrimmScientist. п(ея|с)
Роберт Смит

Ответы:

6

Для начала, Наивный Байес, вероятно, здесь не подходит. Он предполагает независимость между входными данными (отсюда и «Наивный»), а слова в предложении очень зависимы.

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

Ungraceful: много классификаторов NB

Это был бы альтернативный подход. Сделайте совокупность всех слов, наблюдаемых как ваш вектор входов. Сделайте корпус из всех тегов, которые наблюдаются как ваш вектор выходных данных. NB-классификатор с несколькими выходами является эквивалентом наличия нескольких NB-классификаторов с одним выходом каждый (так что делайте, что легче реализовать в любой программной среде, которую вы используете). Рассматривайте каждый элемент как обучающую выборку, где заданный вход (слово) представляет собой, 1если это слово присутствует, и 0если это слово отсутствует. Используйте ту же двоичную схему для вывода.

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

Более изящный: обработка ваших данных

Этот подход я бы порекомендовал, если вы хотите использовать один классификатор NB для нескольких классов.

Ваша цель здесь состоит в том, чтобы выяснить, как сопоставить каждый набор тегов с одним классом. Я уверен, что есть какая-то схема кластеризации или сетевой анализ (возможно, ["знаменитость"), связанная с ["убийством"], может стать сегментом "разврата") ", который будет разумно отображать ваши теги в одном кластере. Если вы рассматриваете теги как узлы, а два заданных тега вместе как ссылки, то вы захотите изучить алгоритмы обнаружения сообщества (именно с этого я и начну). Но если вы просто хотите, чтобы что-то работало, то было бы достаточно какого-то взлома тегов, который преобразует список тегов в тот тег, который чаще всего встречается в вашем наборе данных.

Этот метод берет на себя основную работу по очистке ваших данных и облегчает понимание выходных данных классификатора NB.

TheGrimmScientist
источник
спасибо за ваш вклад, если у вас есть идея, что будет лучше, чем NB, пожалуйста, дайте мне знать.
Сальвадор Дали
1
раздел «существующие решения» этой слайд-колоды содержит все, что я хотел бы ответить, плюс еще кое-что (при условии, что вам не нужен конкретно классификатор и вы просто хотите использовать теги). Я надеюсь, что это полезно для вас.
TheGrimmScientist
@TheGrimmScientist Разве не разумно использовать первый подход? Если у вас есть вектор объектов f1, f2, f3 и, скажем, 3 метки для этого вектора, мы можем разделить его на 3 вектора (все с одинаковыми объектами f1, f2, f3) с разными метками в качестве выходных данных. Тогда можно использовать Наивный Байес как обычно. Я не уверен, что это то, что вы имели в виду.
Роберт Смит