使用预训练的fasttext模型时,gensim如何计算句子嵌入?

问题描述 投票:0回答:0

根据 this 答案,FastText 的句子相似度是用两种方法之一计算的(取决于嵌入是创建有监督的还是无监督的)

  1. 归一化词向量的均值(无监督)
  2. 词向量的均值(有监督)

但我不能让其中任何一个给出与句子嵌入相同的答案

from gensim.models import fasttext
import numpy as np

wv = fasttext.load_facebook_vectors("transtotag/cc.da.300.bin")

w1 = wv["til"]
norm_w1 = np.linalg.norm(wv["til"], ord=2)
s1 = w1/norm_w1

w2 = wv["skat"]
norm_w2 = np.linalg.norm(wv["skat"], ord=2)
s2 = w2/norm_w2

w3 = wv["til skat"]

# Using "raw" embeddings
((w1+w2)/2-w3).max() #0.25
((w1+w2)-w3).max() # 0.5

# using normalized embeddings
((s1+s2)/2-w3).max() # 0.18
((s1+s2)-w3).max() # 0.37

我什至还尝试添加 EOS(如答案中所述)

nl = wv["</s>"]
norm_nl = np.linalg.norm(wv["</s>"],2)
snl = nl/norm_nl

w3 = wv["til skat"]

((s1+s2+snl)/3-w3).max() #0.12

如果我们查看源代码,那么

wv[]
只会返回
vstack([self.get_vector(key) for key in key_or_keys])
即它对待
til skat
一个单词。

我也找不到关于如何在文档中创建句子嵌入的任何信息。

gensim word-embedding fasttext
© www.soinside.com 2019 - 2024. All rights reserved.