sense2vec重装上阵:基于上下文的词向量
2019年11月22日|阅读时间18分钟
2016年基于Reddit 2015年度评论语料训练的sense2vec模型,如今迎来重大更新。本文呈现了新版本库、新向量资源、新评估方案,以及一个仅在几小时内就达到可用准确度的命名实体识别(NER)演示项目。
通过全新交互式演示,可以探索词语相似度并对比2015与2019年的差异。
算法核心创新
sense2vec(Trask等,2015)是对word2vec算法家族的革新,通过语言标注预处理文本,学习更精确的概念向量。词性标注特别有用:许多词语根据词性具有完全不同含义,因此需要分别查询"duck|VERB"和"duck|NOUN"的同义词。命名实体标注和名词短语也能帮助学习多词表达的向量。
本次升级包含三大突破:
- 基于2019年Reddit评论训练的新向量模型,与2015版形成鲜明对比
- 利用spaCy v2的管道组件和扩展属性系统彻底更新sense2vec库
- 提供端到端的命名实体识别应用案例,展示技术实用价值
向量探索发现
对比2015与2019模型显示出有趣的语言演变:
- 乡村歌手Billy Ray Cyrus因与年轻说唱歌手合作而改变语义关联
- Harvey Weinstein的关联词从电影从业者变为性侵案相关名人
- “AOC"从电子术语转变为美国议员姓名
- “to flex"新增"炫耀"俚语含义
- “to ghost”(已读不回)使用频率显著上升
技术实现细节
库功能架构
sense2vec作为Python包,支持基于词性标签和实体标签的词短语向量加载与查询。可作为独立库使用,或作为spaCy管道组件集成,提供便捷的自定义属性和方法。
独立使用示例:
|
|
spaCy组件集成:
|
|
评估方法论
提出三种评估工作流:
- 相似性三元评估:通过随机选择相同语义的短语进行对比
- 最相似评估:直接评估查询词与近邻词的关联质量
- A/B测试评估:对比两个向量模型的输出结果
A/B评估显示2019模型在33个案例中更优,2015模型在17个案例中更优,51个案例无显著差异。
NER模型快速构建
以时尚品牌识别为例,演示完整工作流程:
术语列表创建
使用sense2vec.teach
配方快速构建品牌术语库:
|
|
规则基线建立
将术语列表转换为匹配模式:
|
|
实体识别器集成
|
|
标注与训练成果
在2小时内完成:
- 处理2,516条文本
- 创建1,735条标注(1,235训练样本,500评估样本)
- 最终模型达到82.1%准确率
性能对比数据
模型配置 | 准确率 | F值 | 精确率 | 召回率 |
---|---|---|---|---|
规则基线 | 48.4% | 96.3 | 32.4 | - |
spaCy空白模型 | 65.7% | 77.3 | 57.1 | - |
spaCy+词向量 | 73.4% | 81.5 | 66.8 | - |
spaCy+词向量+tok2vec | 82.1% | 83.5 | 80.7 | - |
预训练技术创新
采用掩码语言模型目标,预测词语的GloVe向量而非单词ID,使用余弦损失函数。在10亿词规模的Reddit评论上训练8小时,模型大小仅17.8MB。
训练命令:
|
|
未来发展方向
支持更精确的非组合性名词短语检测,处理其他多词表达(特别是动词短语),增加词形归一化预处理,扩展至英语之外的其他语言。