Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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).

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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