floret:轻量且鲁棒的词向量
floret是fastText的扩展版本,利用Bloom嵌入技术创建包含单词和子词信息的紧凑向量表。其向量大小可比传统词向量小10倍,同时将fastText的子词特性集成至spaCy流程中。
向量表机制
传统向量表(如spaCy默认配置)仅包含固定词汇列表的向量。例如,“newspaper"和"newspapers"作为独立条目存储,而拼写错误或罕见词(如"newsspaper”)会被分配全零的未知向量(UNK)。
floret通过引入子词信息解决该问题:子词(如"news"和"paper")可关联已知词与未登录词,提升向量表征质量。
子词向量技术
fastText使用字符n-gram子词:单词的最终向量是其完整词向量与所有子词向量的平均值。例如,“apple"的4-gram向量由以下字符串向量的平均得到:
<apple>
,<app
,appl
,pple
,ple>
floret在此基础上优化:
- 统一存储:将单词和子词向量合并至同一哈希表
- 布隆嵌入:通过多重哈希减少表大小
子词优势场景
- 多后缀语言(如匈牙利语):单个词干可衍生上百种形式
- 复杂屈折语(如芬兰语):名词变体对应英语介词短语
- 长复合词(如德语):通过子词单元(如"Bund”+“gesetz”)优化表征
- 拼写错误与新词:利用重叠子词(如"univercity"→“university”)
spaCy集成对比
向量类型 | 表大小 | 英语任务性能(UD EWT) | 韩语任务提升(UD Kaist) |
---|---|---|---|
传统fastText | 2-3GB | 94.1% TAG | 79.0% TAG |
floret | <300MB | 93.9% TAG | 82.8% TAG(+3.8%) |
实践应用
- 预训练管道:spaCy v3.4+提供克罗地亚语、芬兰语、韩语等语言的floret向量
- 自定义训练:通过spaCy项目模板训练任意语言向量