You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用预训练FastText模型时,Gensim如何计算句子嵌入?

fastText句子嵌入计算的问题

根据fastText相关讨论,句子相似度计算的方式分为两种,取决于嵌入是监督还是无监督训练生成:

  • 无监督训练生成的嵌入:使用归一化词向量的均值作为句子嵌入
  • 监督训练生成的嵌入:使用词向量的均值作为句子嵌入

但按照这两种方式计算时,我始终无法得到与直接调用wv["til skat"]一致的结果:

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"]

# 使用"原始"嵌入
((w1+w2)/2-w3).max() # 0.25
((w1+w2)-w3).max() # 0.5

# 使用归一化嵌入
((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

查看gensim的fastText源码后发现,wv[]处理多词输入时,会把til skat当成单个词来处理(核心逻辑为vstack([self.get_vector(key) for key in key_or_keys])),而且官方文档中也找不到关于句子嵌入生成方式的明确说明。

内容的提问来源于stack exchange,提问作者CutePoison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:58:24