Хорошо ли я понимаю использование встраивания слов, например, с логистической регрессией? - PullRequest
0 голосов
/ 02 июня 2018

Интересно, правильно ли я понял идею использования встраивания мира в обработку естественного языка.Я хочу показать вам, как я это воспринимаю, и спросить, верна ли моя интерпретация.

Давайте предположим, что мы хотим предсказать, будет ли предложение положительным или отрицательным.Мы будем использовать предварительно обученное вложение слов, подготовленное в очень большом текстовом корпусе с размером, равным 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описал весь процесс с указанными шагами, которые вызывают у меня большинство сомнений.Я прошу вас указать мне ошибки, которые я сделал в своих рассуждениях, и их объяснения.Я хочу быть уверен, что я правильно понял.Спасибо заранее за вашу помощь.

1 Ответ

0 голосов
/ 02 июня 2018

Логистическая регрессия принимает плоские 2-мерные матрицы для входов X, но вы пытаетесь вставить в нее странную структуру rugget - она ​​не будет работать.

Я бы предложил более простое решение - просто используйте среднее вложениекаждое слово в предложении как вход для логистической регрессии.В этом случае этот вход будет иметь правильную форму и будет относительно небольшим.Если вы хотите улучшить эту формулу, вы можете сделать ее средневзвешенной (например, по TF-IDF).

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

...