Как векторизовать слова? - PullRequest
       7

Как векторизовать слова?

0 голосов
/ 21 октября 2019

Из документации Keras:

Главный вход получит заголовок в виде последовательности целых чисел (каждое целое число кодирует слово). Целые числа будут между 1 и 10000 (словарь из 10000 слов), а последовательности будут длиной в 100 слов.

Здесь способ кодирования слов, по-видимому, заключается в простом использовании индекса слова в составленном словарепредставлять слово. Если в обучающих данных есть «n» слов, то целое число i для векторизации будет от [0, n-1].

Но в CountVectorizer scikit-learn:

Эта реализация дает разреженное представление счетчиков с использованием scipy.sparse.csr_matrix.

Есть ликакая связь между этими двумя способами векторизации слов? Является ли представление вектора счета более эффективным, чем векторизация на основе индекса? CountVectorizer учитывает частоту слова.

1 Ответ

0 голосов
/ 22 октября 2019

Это две совершенно разные вещи. Keras и его индексы и вложения предназначены для глубокого изучения, scikit-learn и CountVectorizer происходят из классического машинного обучения.

В Keras (или в основах глубокого обучения в целом) слова обычно представлены целым числоминдексы. Индексы тогда служат ключами в матрице внедрения, чтобы подобрать соответствующее вложение слова, которое будет использоваться в нейронной сети. В этом случае все векторы плотны, потому что нейронные сети работают с плотными непрерывными представлениями.

CountVectorizer в scikit-learn предназначен для представления предложений или документов (не совсем изолированных слов). Учитывая учебный корпус, он создает словарь слов, встречающихся в корпусе (с использованием метода fit). Затем предложение или документ представляется в виде вектора частот слов, которые в нем встречаются (при вызове метода transform). Поскольку большая часть словарного запаса отсутствует в одном документе, многие значения являются нулями и, следовательно, имеет смысл использовать разреженный вектор.

Такое представление в основном имеет смысл для традиционного машинного обучения. При глубоком обучении вы вместо этого использовали бы вложения, усредняли их, а RNN / CNN над ними или что-то еще.

...