fastText 的词向量方法把一个词表示为多个字符片段向量的组合。 拼写相近的词因而能够共享部分参数,不必给每个罕见词完全从头学习。本文讨论 fastText 的词向量方法。(Bojanowski et al., 2017)

cat 和 cats 怎样共享参数

以教学设定的字符三元组为例,先给词加上边界标记,再取连续三个字符。

词加边界后的写法长度为 3 的字符片段
cat<cat><ca、cat、at>
cats<cats><ca、cat、ats、ts>

两词共享 <ca 和 cat,但尾部片段不同。边界标记帮助区分词首、词尾与词内相同字母组合。真实模型可以同时使用多种片段长度;只列三元组是为了方便观察,不是规定 fastText 只能使用三元组。

对训练词表中的词,原论文还加入代表完整词的特征。完整词特征与局部片段承担不同作用,不能因为共享了片段就说两个词的表示相同。(Bojanowski et al., 2017)

训练时怎样组成一个词

设 是词 使用的片段及完整词特征集合,每个特征有向量 ,上下文词向量为 。论文训练评分可以写作

再将该分数用于词与上下文的训练目标,例如 带负采样的 Skip-Gram。某个罕见词自身样本很少,它所包含的字符片段却可能已在其他词中得到训练。组合机制提供了共享学习信号的机会。

这解释的是论文训练评分中的加和表示;具体工具如何导出或归一化词向量,应以所用接口为准,不能据此断定所有导出结果都只是原样求和。

为控制参数规模,字符片段可以经过哈希映射,共享有限的参数桶。不同片段可能碰撞到同一个桶,因此哈希不等于为所有可能字符串都保存了互不相同的向量。(Bojanowski et al., 2017)

能表示未登录词,不等于理解了这个词

未登录词是训练词表中没有收录的词。只要能按规则拆出片段,fastText 可以从共享参数组合出表示,不像纯整词查表那样只能直接报缺失。

但“能输出一个向量”与“语义准确”是两件事。拼写相近可能来自屈折变化,也可能只是巧合;专名、新词或特殊领域缩写尤其需要实测。片段规则和语料语言也会影响效果,不能把英语词形的教学例子直接当作中文的最优方案。

它仍主要产生静态表示,不能自动解决一词多义。“苹果”的组合向量不会仅因当前句子在谈水果还是公司就切换成上下文表示。

字符片段、分词与上下文表示

概念主要改变什么
fastText 字符 n-gram用字符片段共享词向量参数
BPE 等子词分词决定文本如何切成模型输入的 token 序列
上下文模型结合当前输入,计算位置相关的隐藏表示

已有的 Qwen N-gram Embedding 笔记讨论另一类局部输入表示模块。同样出现“N-gram”这个名字,不足以说明它与 fastText 的字符组合在粒度、目标或结构上相同。

如果关注的是共现统计怎样拟合,可比较 GloVe;如果关注为什么使用负词对,继续读 负采样、NCE 与 InfoNCE。返回 词向量与表示学习专题。

参考文献

Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2017). Enriching Word Vectors with Subword Information. Transactions of the Association for Computational Linguistics, 5, 135–146. https://doi.org/10.1162/tacl_a_00051