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

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

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

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

Любая справка ценилась бы, Спасибо!

20
задан dmcer 30 April 2010 в 02:52
поделиться

6 ответов

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

  • Зафиксируйте ряд категорий и получите обучающий набор данных пар (документ, категория).
  • Вектор данных вашего документа будет чем-то вроде мешка слов. например Возьмите 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) + журнал P (F2 | C) + ... + журнал P (F500 | C).
24
ответ дан 29 November 2019 в 23:23
поделиться

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

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

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

10
ответ дан 29 November 2019 в 23:23
поделиться

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

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

2
ответ дан 29 November 2019 в 23:23
поделиться

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

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

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

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

2
ответ дан 29 November 2019 в 23:23
поделиться

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

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

http://www.sqlserverdatamining.com

0
ответ дан 29 November 2019 в 23:23
поделиться

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

6
ответ дан 29 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: