图计算黑科技:打开中文词嵌入训练实践新模式 (3)

对于未登录词,可以采用类似FastText的方法将未登录词的单字向量求平均得到,如果单字也是未登录词则采用拼音节点的词向量代替。这种方式可以获得较高质量的词嵌入,使得词形上接近的单词在词嵌入空间也拥有较高的相似性,同时由于拼音和子词节点的加入,大大缓解了OOV(Out Of Vocabulary)的问题。

简而言之,算法主要步骤包括以下部分:构建图 —> 随机游走采样 —> 训练词嵌入。

以上就是对于腾讯自研的中文词形表示学习算法 AlphaEmbedding 的完整介绍。AlphaEmbedding 从图计算的角度重点解决针对中文场景下的分布式词表征学习问题,使得学习到的词向量在中文词形学角度相近的词语在向量空间中也拥有较近的距离。

四、实验结果

实验数据采用全量国内工商注册企业名称(约2.2亿家),对企业名称进行名称分割(这里由于业务需要,已经开发了一个可用的BERT-CRF序列标注模型),针对name字段清洗、过滤、去重后构建图。输入数据示例如下图所示:

图9. 名称分割示意图

构建图部分采用Pyspark实现,形成的图的规模包含千万节点、亿级边,随机游走和词嵌入训练采用WXG开源的plato计算框架在腾讯云EMR集群进行,在20个节点进行随机游走约用时1分钟左右,进行节点嵌入学习约耗时2小时左右。构建的带权图效果如下图所示:       

图10. 构建的无向带权图示例

在具体构图的实现方面,本文对比了两种实现方法:最初基于全称的排列组合,仅考虑同音词和子词在节点间建立连边,每个汉字节点最短两个字,拼音节点为对应汉字词语节点的拼音,我们称这种方法为combination style,其构图方式示意图如下图所示。

图11. combination style 构图示例

采用node2vec进行训练学习,以业务中常用的词语相似度排序为例,实验结果如下(检索词为“腾讯”,已在图中标红显示):

图12. combination style 效果

combination style 在业务应用中存在较多 OOV 的情况,之后采用更为简洁的“词语-子词-单字-拼音”构图方式(如图8所示),我们称之为fasttext style,并在节点嵌入学习中分别尝试了node2vec和metapath进行训练。这里仍以业务中常用的词语相似度排序为例,实验结果如下:

  

图13. fasttext style + node2vec 深度优先搜索效果

  

图14. fasttext style + node2vec 宽度优先搜索效果

  

图15. fasttext style + metapath2vec 效果

其中,三种游走方式的参数设置如下,除游走采样设置不同外,其他输入数据、嵌入学习参数均相同:

node2vec 深度优先:p=100, q=0.2, step=5, epoch=30

node2vec 宽度优先:p=100, q=5, step=5, epoch=30

metapath2vec:meta="3-2-1-0"(词语-子词-单字-拼音), step=5, epoch=30

word2vec: learning_rate=[(linear, 0.02, 0.0001)], window_size=5, epoch=20

从实验对比效果可以发现,combination style 的构图方式由于仅考虑库内词表的排列组合,图的规模最小(一千万节点),与检索词之间距离最近的都是同音词,但同音词间的排序未考虑单字构成上的相似度,拼音节点作为相似度排序的分界点,之后的子词节点相似度急剧下滑,总体效果相对欠佳。

metapath2vec 获得的词表规模相比 combination style 大但比 node2vec 小(两千多万节点),相似词语更偏好子词节点,且各近邻词语间的区分度较差。

这一结果可能与游走方式有关,一方面,metapath定义的游走方式较为固定,若仅采用“词语-子词-单字-拼音”的方式进行游走,实际业务图上存在较多词语(二字词语)没有子词而只能连接单字的场景(此时对应的metapath应该为“词语-单字-拼音”),这些metapath在采样时就会丢失,造成节点采样失衡,另一方面由于子词节点在游走过程中始终同词语节点共现,所以子词节点的相似度整体相对较高。由于metapath2vec 训练结果区分度差的特性,使得获得的词嵌入在下游任务中的表现并不理想。

node2vec 深度优先搜索和宽度优先搜索效果接近,二者获得的词表规模相同(近三千万节点),针对特定检索词返回的排序结果也很接近。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxjzf.html