У меня проблема / вопрос с Word2Vec
Как я понимаю: давайте обучим модель на корпусе текста (по-моему, это корпус размером ~ 2 Гб)Давайте возьмем одну строку из этого текста и вычислим вектор этой строки (вектор строки = сумма векторов слов).Это будет что-товот так:
for w in words:
coords += model[w]
Чем посчитаем длину этого вектора.Со стандартной библиотекой:
import numpy as np
vectorLen = np.linalg.norm(coords)
Зачем нам нужен Word2Vec?Да, для преобразования слов в векторы И контекстуальная близость (близкие слова, которые встречаются и слова, близкие по значению, имеют схожие координаты)!
И что я хочу (чего я жду)- если я возьму некоторую строку текста и добавлю какое-то слово из словаря, что не характерно для этой строки, чем снова вычислю длину этого вектора, я получу совершенно другое значение, что если я буду вычислять только вектор этой строки бездобавление некоторых нехарактерных слов к этой строке из словаря.
Но на самом деле - значения этих векторов (до добавления слова (слов) и после) очень похожи!Более того - они практически одинаковы!Почему я получаю этот результат?Если я правильно понимаю, для строки координаты слов будут совершенно одинаковыми (контекстная близость), но новые слова будут иметь довольно разные координаты, и это должно повлиять на результат (длину вектора строки с новыми словами)!
Например, это настройки моей модели W2V:
#Word2Vec model
model = gensim.models.Word2Vec(
sg=0,
size=300,
window=3,
min_count=1,
hs=0,
negative=5,
workers=10,
alpha=0.025,
min_alpha=0.025,
sample=1e-3,
iter=20
)
#prepare the model vocabulary
model.build_vocab(sentences, update=False)
#train model
model.train(sentences, epochs=model.iter, total_examples=model.corpus_count)
ИЛИ это:
#Word2Vec model
model = gensim.models.Word2Vec(
sg=1,
size=100,
window=10,
min_count=1,
hs=0,
negative=5,
workers=10,
alpha=0.025,
min_alpha=0.025,
seed=7,
sample=1e-3,
hashfxn=hash,
iter=20
)
#prepare the model vocabulary
model.build_vocab(sentences, update=False)
В чем проблема?И как я могу получить необходимый результат?