У меня есть текстовый корпус с соответствующими темами. Например "A rapper Tupac was shot in LA"
и было помечено как ["celebrity", "murder"]
. Таким образом, в основном каждый вектор объектов может иметь много меток (не одинаковое количество. Первый вектор объектов может иметь 3 метки, второй 1, третий 5).
Если бы каждому тексту соответствовала только одна метка, я бы попробовал наивный байесовский классификатор , но я действительно не знаю, как мне поступить, если у меня будет много меток.
Есть ли способ превратить Наивный Байес в проблему классификации по нескольким меткам (если есть лучший подход - пожалуйста, дайте мне знать)?
PS немногое о данных у меня есть.
- приблизительно 10.000 элементов в наборе данных
- текст примерно 2-3 предложения
- максимум 7 ярлыков на текст
machine-learning
text-mining
Сальвадор Дали
источник
источник
Ответы:
Для начала, Наивный Байес, вероятно, здесь не подходит. Он предполагает независимость между входными данными (отсюда и «Наивный»), а слова в предложении очень зависимы.
Но, если вы действительно хотите запустить NB в качестве алгоритма для начала экспериментов, я бы рассмотрел два варианта:
Ungraceful: много классификаторов NB
Это был бы альтернативный подход. Сделайте совокупность всех слов, наблюдаемых как ваш вектор входов. Сделайте корпус из всех тегов, которые наблюдаются как ваш вектор выходных данных. NB-классификатор с несколькими выходами является эквивалентом наличия нескольких NB-классификаторов с одним выходом каждый (так что делайте, что легче реализовать в любой программной среде, которую вы используете). Рассматривайте каждый элемент как обучающую выборку, где заданный вход (слово) представляет собой,
1
если это слово присутствует, и0
если это слово отсутствует. Используйте ту же двоичную схему для вывода.Эта грубая атака заставляет применять классификатор NB к вашим данным и дает вам возможность обрести смысл, продолжая разрабатывать огромный набор классификаторов, с которым вы останетесь.
Более изящный: обработка ваших данных
Этот подход я бы порекомендовал, если вы хотите использовать один классификатор NB для нескольких классов.
Ваша цель здесь состоит в том, чтобы выяснить, как сопоставить каждый набор тегов с одним классом. Я уверен, что есть какая-то схема кластеризации или сетевой анализ (возможно, ["знаменитость"), связанная с ["убийством"], может стать сегментом "разврата") ", который будет разумно отображать ваши теги в одном кластере. Если вы рассматриваете теги как узлы, а два заданных тега вместе как ссылки, то вы захотите изучить алгоритмы обнаружения сообщества (именно с этого я и начну). Но если вы просто хотите, чтобы что-то работало, то было бы достаточно какого-то взлома тегов, который преобразует список тегов в тот тег, который чаще всего встречается в вашем наборе данных.
Этот метод берет на себя основную работу по очистке ваших данных и облегчает понимание выходных данных классификатора NB.
источник