Во-первых, вы пропустили ту часть, что get_sentence_vector
- это не просто «среднее». Перед тем как FastText суммирует каждый вектор слова, каждый вектор делится с его нормой (нормой L2), а затем в процесс усреднения включаются только векторы, которые имеют положительное значение нормы L2.
Во-вторых, предложение всегда заканчивается EOS. Поэтому, если вы пытаетесь вычислить вручную, вам нужно поставить EOS, прежде чем вычислять среднее значение.
попробуйте это (я предполагаю, что норма L2 каждого слова положительна):
def l2_norm(x):
return np.sqrt(np.sum(x**2))
def div_norm(x):
norm_value = l2_norm(x)
if norm_value > 0:
return x * ( 1.0 / norm_value)
else:
return x
# Getting word vectors for 'one' and 'two'.
one = model.get_word_vector('yksi')
two = model.get_word_vector('kaksi')
eos = model.get_word_vector('\n')
# Getting the sentence vector for the sentence "one two" in Finnish.
one_two = model.get_sentence_vector('yksi kaksi')
one_two_avg = (div_norm(one) + div_norm(two) + div_norm(eos)) / 3
Вы можете увидеть исходный код здесь или посмотреть обсуждение здесь .