Я хочу, чтобы машина научилась классифицировать короткие тексты

17

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

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

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

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

    
задан ash 23.04.2010 в 07:23
источник
  • Это хороший вопрос в поле, в котором - я тоже - это тиро. Ключевая фраза, которую вы хотите, - «Обработка естественного языка» и «категоризация». Я сейчас охочусь. –  msw 23.04.2010 в 07:39
  • Я думаю, что вам нужен байесовский классификатор, но у меня нет опыта с ними. –  Colin Valliant 23.04.2010 в 08:13

8 ответов

22

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

  • Исправьте несколько категорий и получите набор данных обучения (пары документов, категорий).
  • Вектор данных вашего документа будет выглядеть как мешок слов. например Возьмите 100 наиболее распространенных слов, кроме слов, таких как «the», «and» и т. Д. Каждое слово получает фиксированный компонент вашего вектора данных (например, «еда» - позиция 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).
ответ дан bayer 23.04.2010 в 10:11
источник
  • Прохладный, спасибо за объяснение. Я читал что-то подобное в книге Рагхавана, Шютце и Мэннинга: nlp.stanford.edu/IR-book/information-retrieval-book.html, и это имеет смысл. –  ash 23.04.2010 в 11:36
  • Я правильно понимаю, что категории учебного набора не могут быть изменены? Наверное, я немного ленив, чтобы делать расширенные исследования. –  balu 04.12.2010 в 16:12
  • Нет, они не могут. Но как только вы это сделаете, вы все равно можете обучать новый классификатор. –  bayer 22.12.2010 в 20:48
10

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

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

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

    
ответ дан user325523 25.04.2010 в 21:42
источник
  • Это круто, спасибо за программное объяснение, я думаю, я мог бы легко перенести это на мой любимый язык. –  ash 03.05.2010 в 01:48
6

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

    
ответ дан sunqiang 23.04.2010 в 09:16
источник
  • Спасибо за ссылку, обсуждение было интересным. –  ash 23.04.2010 в 11:38
3

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

Вот хороший обзор: Ссылка Я использовал радугу, упомянутую на этой странице, для классификации текста на прототип поисковой системы, который я написал в проекте dot com.

    
ответ дан Kirt Undercoffer 15.01.2011 в 17:14
источник
  • Ссылка теперь мертва. –  Jaken Herman 19.02.2015 в 04:02
2

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

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

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

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

    
ответ дан Hannes Ovrén 23.04.2010 в 08:12
источник
  • Это хороший момент. Машинное обучение не может быть лучшим подходом для этого. Regexps полностью! –  ash 23.04.2010 в 11:37
2

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

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

    
ответ дан Kiril 23.04.2010 в 08:24
источник
  • Спасибо, это хорошая идея. Раньше я использовал Weka, но не совсем понял бэкэнд; возможно, я могу копать глубже. –  ash 23.04.2010 в 11:37
1

Здесь мы можем использовать NLP. Ниже перечислены шаги, которые я выполнил для классификации электронных писем в разных категориях: 1. Лемматизация: это устранит ненужные детали и превратит все слова в их основные формы или корневые формы. Например, он будет преобразовывать работу в работу, бегать в бег, лошади на лошадях и т. Д. Для этого мы можем использовать Stanford Lemmatizer. Ссылка

  1. Фильтрация Wordnet: мы можем использовать только те слова, которые присутствуют в Wordnet. Для этой цели я использовал интерфейс Java Wordnet. Просто отфильтруйте слова, которые не найдены в wordnet, и оставите слова. Ссылка

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

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

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

Ссылка

Ссылка

    
ответ дан Shane Castle 27.04.2010 в 01:06
источник