Я хочу, чтобы машина научилась классифицировать короткие тексты - PullRequest
18 голосов
/ 23 апреля 2010

У меня есть тонна рассказов длиной около 500 слов, и я хочу разделить их на одну из, скажем, 20 категорий:

  • Развлечения
  • Еда
  • Музыка
  • и т.д.

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

Любая помощь будет оценена, спасибо!

Ответы [ 8 ]

24 голосов
/ 23 апреля 2010

A наивный Байес , скорее всего, будет работать для вас. Метод такой:

  • Исправьте количество категорий и получите набор обучающих данных из пар (документ, категория).
  • Вектор данных вашего документа будет как мешок слов. например Возьмите 100 самых распространенных слов, кроме таких слов, как «,» и «и тому подобное». Каждое слово получает фиксированный компонент вашего вектора данных (например, «еда» - это позиция 5). Вектор признаков - это массив логических значений, каждый из которых указывает, появилось ли это слово в соответствующем документе.

Обучение:

  • Для вашего учебного комплекта рассчитайте вероятность каждого признака и каждого класса: p (C) = количество документов класса C / общее количество документов.
  • Рассчитать вероятность признака в классе: p (F | C) = количество документов класса с заданным признаком (= слово «еда» в тексте) / количество документов в данном классе.

Решение:

  • Для несекретного документа вероятность его принадлежности к классу C пропорциональна P (C | F1, ..., F500) = P (C) * P (F1 | C) * P (F2 | C) * ... * P (F500 | C). Выберите C, который максимизирует этот термин.
  • Поскольку умножение является численно сложным, вместо этого вы можете использовать сумму логарифмов, которая максимизируется при том же C: log P (C | F1, ..., F500) = log P (C) + log P ( F1 | C) + log P (F2 | C) + ... + log P (F500 | C).
10 голосов
/ 25 апреля 2010

Я классифицировал десятки тысяч коротких текстов. Сначала я использовал модель векторного пространства tf-idf, а затем сделал кластеризацию k-средних на этих векторах. Это очень хороший начальный шаг аналитического анализа данных, чтобы получить хороший контроль над вашим набором данных. Пакет, который я использовал для кластеризации, был cluto: http://glaros.dtc.umn.edu/gkhome/views/cluto/

Чтобы сделать tf-idf, я только что написал быстрый скрипт на perl для токенизации не буквенно-цифровых символов. Затем каждый документ состоит из пакета слов. Каждый документ представлен в виде вектора слов, которые он содержит. Значением каждого индекса вектора является термин частота (tf) * обратная частота документа (idf). Это просто произведение количества этого слова / термина в документе, умноженное на обратную долю фракции документов, содержащих это слово. (потому что слово типа "the" очень неинформативно.)

Этот метод быстро даст вам точность 80% -90%. Затем вы можете вручную пометить те, которые являются правильными (или, что более важно, неправильными), а затем выполнить контролируемое обучение, если вы того пожелаете.

6 голосов
/ 23 апреля 2010

Я думаю, что статья «Машинное обучение в автоматизированной классификации текста» (вы можете Google и скачать файл PDF) стоит прочитать. В документе обсуждались две важные части: одна для выбора объектов (перевод текста в пространство объектов), другая для построения классификатора на пространстве объектов. Существует множество методов выбора признаков и несколько методов классификации (дерево решений, наивный Байес, kNN, SVM и т. д.). Вы можете попробовать некоторую комбинацию, чтобы увидеть, работает ли она на вашем наборе данных.
Я делал что-то подобное раньше, я использую Python для манипулирования текстом, выбора объектов и определения их веса. и Оранжевый для классификатора. Orange и Weka уже включили наивный байесовский, kNN ..., но в настоящее время я мог бы написать классификатор напрямую со скриптом Python, это тоже не должно быть слишком сложно.
Надеюсь, это поможет.

3 голосов
/ 15 января 2011

Большинство людей скажут, что статистический анализ текста (как наивный байесовский подход) является стандартным подходом: «Основы статистической обработки естественного языка», Мэннинг и Шютце и «Обработка речи и языка», Юрафски и Мартин являются стандартными ссылками , Статистический анализ текста стал стандартным подходом в конце 90-х годов, потому что они легко превосходили символические системы. Однако некоторые символические системы включают статистические элементы, и вы также можете использовать коннекционистский подход (есть несколько статей, демонстрирующих это). Вы также можете использовать косинусное сходство (форма k-Nearest Neighbor), хотя наивный байесовский метод обычно является лучшим.

Вот хороший обзор: http://www.cs.utexas.edu/users/hyukcho/classificationAlgorithm.html Я использовал радугу, упомянутую на этой странице, для классификации текста по прототипу поисковой системы, который я написал для проекта dot com.

2 голосов
/ 23 апреля 2010

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

Если вам нравятся результаты различных алгоритмов машинного обучения, и вы все еще заинтересованы в реализации собственных алгоритмов, то вы можете реализовать тот, который вам нравится больше всего. Это также поможет вам избавиться от ощущения «сработает ли это на самом деле», которое обычно возникает перед созданием алгоритма ML / AI.

2 голосов
/ 23 апреля 2010

Если нет шансов, что в будущем вы захотите провести еще 500 классификаций, я не уверен, что выберу подход к машинному обучению.

Если категории не очень похожи ("еда" и "итальянская еда", чтобы взять пример), я думаю, что довольно наивная эвристика может сработать очень хорошо.

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

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

1 голос
/ 30 ноября 2016

Мы можем использовать НЛП здесь. Ниже приведены шаги, которые я реализовал для классификации писем по разным категориям: 1. Лемматизация: это удалит ненужные детали и превратит все слова в их основные формы или корневые формы. Мол, это превратит работу в работу, бег в беге, лошадей в лошадь и т. Д. Для этого мы можем использовать Stanford Lemmatizer. http://stanfordnlp.github.io/CoreNLP/

  1. Фильтрация Wordnet: мы можем использовать только те слова, которые присутствуют в Wordnet. Я использовал Java Wordnet Interface для этой цели. Просто отфильтруйте слова, которых нет в wordnet, и возьмите остальные слова. http://projects.csail.mit.edu/jwi/

  2. Поиск синонимов и других синонимов. Для каждой из вышеуказанных 5 или 6 категорий, указанных выше, сформируйте отдельные наборы, содержащие синонимы синонимов этих категорий. Например, сформируйте набор, который будет содержать синонимы развлечения, а затем дополнительные синонимы найденных развлечений. Мы также можем увеличить этот набор с помощью веб-сканирования.

  3. Подача данных: возьмите все слова после лемматизации и фильтрации Wordnet определенной истории и проверьте, сколько слов соответствует в каждой категории. Например, если история содержит 100 слов, и она соответствует 35 словам в категории развлечений, 40 словам с едой, 30 словам с поездкой, то весьма вероятно, что она попадет в категорию еды, и, следовательно, это будет история еды , Я получил хорошие результаты для моей классификации электронной почты, используя вышеуказанный подход.
0 голосов
/ 27 апреля 2010

Если вы ищете что-то готовое, вы можете попробовать алгоритмы интеллектуального анализа данных Microsoft в SQL Server:

http://msdn.microsoft.com/en-us/library/ms175595%28v=SQL.100%29.aspx

http://www.sqlserverdatamining.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...