Задача, которую нужно решить: С учетом предложения верните намерение, стоящее за ним (Think chatbot)
Сокращенный пример набора данных (Намерение слева от dict):
data_raw = {"mk_reservation" : ["i want to make a reservation",
"book a table for me"],
"show_menu" : ["what's the daily menu",
"do you serve pizza"],
"payment_method" : ["how can i pay",
"can i use cash"],
"schedule_info" : ["when do you open",
"at what time do you close"]}
Я сократил предложения с помощью spaCy и токенизировал каждое слово, используя алгоритм word2vec , предоставленный библиотекой gensim.
Вот что стало результатом использования модели word2vec GoogleNews-vectors-positive300.bin:
[[[ 5.99331968e-02 6.50703311e-02 5.03010787e-02 ... -8.00536275e-02
1.94782894e-02 -1.83010306e-02]
[-2.14406010e-02 -1.00447744e-01 6.13847338e-02 ... -6.72588721e-02
3.03986594e-02 -4.14126664e-02]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
...
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]]
[[ 4.48647663e-02 -1.03907576e-02 -1.78682189e-02 ... 3.84555124e-02
-2.29179319e-02 -2.05144612e-03]
[-5.39291985e-02 -9.88398306e-03 4.39085700e-02 ... -3.55276838e-02
-3.66208404e-02 -4.57760505e-03]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
...
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
0.00000000e+00 0.00000000e+00]]]
- Это список предложений, а каждое предложение - это списокслова ( [предложения [предложение [слово]]] )
- Каждое предложение (список) должно быть размером 10 слов (я дополняю оставшиеся нулями)
- Каждое слово (список) содержит 300 элементов (размерности word2vec)
Следуя некоторым учебникам, я преобразовал это в TensorDataset.
В данный момент я очень озадачен тем, как использовать word2vec, и, возможно, я просто терял время, на данный момент я считаю, что слой вложений из конфигурации LSTM должен быть составленимпортируя весовые коэффициенты модели word2vec, используя:
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('path/to/file')
weights = torch.FloatTensor(model.vectors)
word_embeddings = nn.Embedding.from_pretrained(weights)
Этого недостаточно, так как pytorch говорит, что он не принимает вложения, где индексы имеют тип INT.
РЕДАКТИРОВАТЬ: я обнаружил, что импортировать весовую матрицу из gensim word2vec не так просто, нужно импортировать и таблицу word_index.
Как только я исправлюэтот вопрос я выложу здесь.