Классификация текста, Как преобразовать текстовые строки в векторное представление - PullRequest
0 голосов
/ 09 января 2019

Я работаю над программой классификации текста. Мои тренировочные данные содержат более 700 текстовых категорий, и каждая категория содержит 1-350 текстовых фраз. 16k + фраз всего. Данные, которые должны быть классифицированы, являются текстовыми фразами. Я хочу классифицировать данные, чтобы получить 5 самых похожих категорий. Обучающие данные имеют много общих слов.

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

https://github.com/ptnplanet/Java-Naive-Bayes-Classifier

Так что я думаю, что проблема была в библиотеке, поэтому я собираюсь попробовать разные библиотеки и изучить k означает кластеризацию, так как мои данные отличаются высокой дисперсией.

Поэтому, когда я смотрю на другие библиотеки, все они требуют ввода и обучения в виде векторной матрицы. Я посмотрел на word2vec и td-idf для преобразования текстовых векторов. Я понимаю tf-idf, и что я могу получить вес слова по сравнению с остальными документами. Но как я могу использовать его для классификации моих входных данных по категориям? Будет ли каждая категория документом? Или все категории будут одним документом?

редактировать: образец данных

SEE_BILL - см. Счет

Баланс SEE_BILL-счета

SEE_BILL - где мой счет

SEE_BILL-не могу найти счет

PAY_BILL-оплатить счет

PAY_BILL-сделать платеж

PAY_BILL-нижний баланс

PAY_BILL-удалить баланс

PAST_BILL-последний счет

PAST_BILL-предыдущий счет

PAST_BILL-исторический счет

PAST_BILL-bill в прошлом году

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Два самых популярных подхода:

  • представляет каждую фразу / предложение как пакет слов, в котором вы в основном одноразово кодируете каждое слово фразы, а размерность кодирования - это размер вашего словаря (общее количество слов)
  • используйте вложения, основанные на популярных моделях, таких как word2vec, которые помещают каждое слово в X-мерное векторное пространство (например, 300-мерное), поэтому каждая из ваших фраз / предложений будет представлять собой последовательность X-мерных векторов

Еще более экстремальным подходом было бы встраивание целых предложений с использованием таких моделей, как Универсальный кодировщик предложений . Вкратце: это похоже на word2vec, но вместо слов преобразует целые предложения в (512-мерное) векторное пространство. Чем проще найти «похожие» предложения.

0 голосов
/ 09 января 2019

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

Tf-idf довольно хорош, но для этого нужна хорошая предварительная обработка. Кроме того, вам придется создавать векторы самостоятельно. Проблема в том, что вы дадите вектор длины всех отдельных слов в вашем наборе данных, даже те же слова в разных формах, в которых они встречаются в наборе данных. Поэтому, если в вашем наборе данных есть слово go, вполне вероятно, что будет несколько форм этого слова, включая going, Go, gone, went и так далее. Вот почему вы должны иметь хорошую предварительную обработку, чтобы поместить все эти формы слова go в его корневую форму. Кроме того, вы должны использовать весь набор данных в нижнем регистре, потому что слова go и Go не совпадают. Но даже если вы сделаете все это и создадите идеальный конвейер предварительной обработки, вы получите вектор длиной 20k +. Затем вам нужно будет вручную выбрать элементы (слова), которые вы хотите оставить в векторе, и удалить остальные. Это означает, что если вы хотите иметь вектор размером 300, вам придется удалить 19 700 слов из вектора. Конечно, вы останетесь с 300 лучших отличительных. Если вы хотите углубиться в это и посмотреть, как именно это работает, вы можете проверить это здесь

С другой стороны, word2vec отображает любое слово в 300-мерный вектор. Конечно, вам придется выполнить некоторую предварительную обработку, аналогичную tf-idf, но этот метод гораздо менее чувствителен. Вы можете найти, как работает word2vec здесь

В заключение я бы порекомендовал вам перейти с word2vec, потому что с ним гораздо проще начать. Есть предтренированная модель от Google, которую можно скачать здесь

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