根据 this 答案,FastText 的句子相似度是用两种方法之一计算的(取决于嵌入是创建有监督的还是无监督的)
但我不能让其中任何一个给出与句子嵌入相同的答案
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
一个单词。
我也找不到关于如何在文档中创建句子嵌入的任何信息。