Интересно, правильно ли я понял идею использования встраивания мира в обработку естественного языка.Я хочу показать вам, как я это воспринимаю, и спросить, верна ли моя интерпретация.
Давайте предположим, что мы хотим предсказать, будет ли предложение положительным или отрицательным.Мы будем использовать предварительно обученное вложение слов, подготовленное в очень большом текстовом корпусе с размером, равным 100. Это означает, что для каждого слова у нас есть 100 значений.Наш файл выглядит следующим образом:
...
new -0.68538535 -0.08992791 0.8066535 other 97 values ...
man -0.6401568 -0.05007627 0.65864474 ...
many 0.18335487 -0.10728102 0.468635 ...
doesnt 0.0694685 -0.4131108 0.0052553082 ...
...
Очевидно, у нас есть набор тестов и поездов.Мы будем использовать модель sklearn для подгонки и прогнозирования результатов.Наш набор поездов выглядит следующим образом:
1 This is positive and very amazing sentence.
0 I feel very sad.
И тестовый набор содержит предложения типа:
In my opinion people are amazing.
У меня есть в основном сомнения, связанные с предварительной обработкой входных данных.Интересно, должно ли это быть сделано следующим образом:
Мы делаем для всех предложений, например, токенизацию, удаление стоп-слов, строчные буквы и т. Д. Так что для нашего примера мы получаем:
'this', 'is', 'positive', 'very', 'amazing', 'sentence'
'i', 'feel', 'very', 'sad'
'in', 'my', 'opinion', 'people', 'amazing'
Мы используем pad_sequences
:
1,2,3,4,5,6
7,8,4,9
10,11,12,13,5
Кроме того, мы проверяем длину самого длинного предложения как в наборе поездов, так и в наборе тестов.Давайте предположим, что в нашем случае максимальная длина равна 10. Нам нужно, чтобы все векторы имели одинаковую длину, поэтому мы заполняем оставшиеся поля нулями.
1,2,3,4,5,0,0,0,0,0
6,7,4,8,0,0,0,0,0,0
10,11,12,13,5,0,0,0,0,0
Теперь самое большое сомнение - мы присваиваем значенияиз нашего файла встраивания слов word2vec во все слова из подготовленных векторов из обучающего набора и набора тестов.
Наш файл вложения слов word2vec выглядит следующим образом:
...
in -0.039903056 0.46479827 0.2576446 ...
...
opinion 0.237968 0.17199863 -0.23182874...
...
people 0.2037858 -0.29881874 0.12108547 ...
...
amazing 0.20736384 0.22415389 0.09953516 ...
...
my 0.46468195 -0.35753986 0.6069699 ...
...
И, например, для'in', 'my', 'opinion', 'people', 'amazing'
равняется 10,11,12,13,5,0,0,0,0,0
, мы получаем таблицу таблиц примерно так: [-0.039903056 0.46479827 0.2576446 ...],[0.46468195 -0.35753986 0.6069699 ...],[0.237968 0.17199863 -0.23182874...],[0.2037858 -0.29881874 0.12108547 ...],[0.20736384 0.22415389 0.09953516 ...],0,0,0,0
Наконец, наш набор поездов выглядит следующим образом:
x y
1 [0.237968 0.17199863 -0.23182874...],[next 100 values],[next 100 values],[...],[...],0,0,0,0,0,
0 [...],[...],[...],[...],[...],[...],[...],0,0,0
1 [...],[...],[...],[...],[...],0,0,0,0,0
...
И тестовый набор выглядит следующим образомпуть:
y
[100 values],[...],[...],[...],0,0,0,0,0,0
...
На последнем шаге мы тренируем нашу модель, используя, например, модель sklearn:
LogisticRegression().fit(values from y column of train set, values from x column of train set)
Затем мы прогнозируем данные:
LogisticRegression().predict(values from y column of test set)
Выше Iописал весь процесс с указанными шагами, которые вызывают у меня большинство сомнений.Я прошу вас указать мне ошибки, которые я сделал в своих рассуждениях, и их объяснения.Я хочу быть уверен, что я правильно понял.Спасибо заранее за вашу помощь.