本文主要是介绍词向量算法—【AAAI2018】蚂蚁金服公开的基于笔画的中文词向量算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
词向量算法是自然语言处理领域的基础算法,在序列标注、问答系统和机器翻译等诸多任务中都发挥了重要作用。词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里。该算法也经历了不断的改进,但大多数仅适用于拉丁字符构成的单词(英文、法语。。。。),结合中文语言特性的词向量研究相对较少。由于中文语言的博大精深,一字一词都蕴含这丰富的语义,在自然语言处理的相关任务中对于中文语料很难处理。
惊喜的是在AAAI2018会议上,蚂蚁金服公开了其最新研究成果,被高分录用论文“cw2vec: Learning Chinese Word Embeddings with Stroke n-grams”提出了: cw2vec——基于汉字笔画信息的中文词向量算法研究,该方法揭示了隐藏在一笔一划之间的秘密。
单个英文字符(character)是不具备语义的,而中文汉字往往具有很强的语义信息。不同于前人的工作,他们提出了“n元笔画”的概念。所谓“n元笔画”,即就是中文词语(或汉字)连续的n个笔画构成的语义结构。
图1 n元笔画生成的例子
如上图中,n元笔画的生成共有四个步骤。比如说,“大人”这个词语,可以拆开为两个汉字“大”和“人”,然后将这两个汉字拆分成笔画,再将笔画映射到数字编号,进而利用窗口滑动产生n元笔画。其中,n是一个范围,在上述例子中,我们将n取值为3, 4和5。在论文中提出了一种基于n元笔画的新型的损失函数,如下:
其中,W和C分别为当前词语和上下文词语,σ是sigmoid函数,T(w)是当前词语划窗内的所有词语集合,D是训练语料的全部文本。为了避免传统softmax带来的巨大计算量,这篇论文也采用了负采样的方式。C'为随机选取的词语,称为“负样例”,λ是负样例的个数,而 则表示负样例C'按照词频分布进行的采样,其中语料中出现次数越多的词语越容易被采样到。相似性sim(·,·)函数被按照如下构造:
其中, 为当前词语对应的一个n元笔画向量,而 是其对应的上下文词语的词向量。这项技术将当前词语拆解为其对应的n元笔画,但保留每一个上下文词语不进行拆解。S(w)为词语w所对应的n元笔画的集合。在算法执行前,这项研究先扫描每一个词语,生成n元笔画集合,针对每一个n元笔画,都有对应的一个n元笔画向量,在算法开始之前做随机初始化,其向量维度和词向量的维度相同。
图2 算法过程的举例
如上图所示,对于“治理 雾霾 刻不容缓”这句话,假设此刻当前词语恰好是“雾霾”,上下文词语是“治理”和“刻不容缓”。首先将当前词语“雾霾”拆解成n元笔画并映射成数字编码,然后划窗得到所有的n元笔画,根据设计的损失函数,计算每一个n元笔画和上下文词语的相似度,进而根据损失函数求梯度并对上下文词向量和n元笔画向量进行更新。
数据
我们于2016年11月20日,下载了中文维基百科dump7 ,其中包含265K中文维基百科文章。我们使用gensim工具包中的脚本来转换数据从XML到文本格式8。 根据我们的观察,语料库由简体和繁体中文组成字符。 因此我们利用opencc toolkit 9进行标准化
所有字符都是简体中文。 所有Unicode字符落入在0x4E00和0x9FA5,该范围之间是汉字被保留。 我们使用ansj toolkit 10进行分词。我们扫描训练语料库并记录所有的字符以收集中n-gram。 之后,我们称之为 Juhe Data11 汉字信息检索服务API,从网上抓取新华字典笔画信息12。
以上所用到数据来源:
7:https://dumps.wikimedia.org/zhwiki/20161120/
8:https://radimrehurek.com/gensim/corpora/wikicorpus.html
9:https://github.com/BYVoid/OpenCC
10:https://github.com/NLPchina/ansj seg
11:https://www.juhe.cn/docs/api/id/156
12:http://xh.5156edu.com/
为了验证这项研究提出的cw2vec算法的效果,在公开数据集上,与业界最优的几个词向量算法做了对比:
上图中包括2013年谷歌提出的word2vec的两个模型skipgram和cbow,2014年斯坦福提出的GloVe算法,2015年清华大学提出的基于汉字的CWE模型,以及2017年最新发表的基于像素和偏旁的中文词向量算法,可以看出cw2vec在word similarity,word analogy,以及文本分类和命名实体识别的任务中均取得了一致性的提升。同时,这篇文章也展示了不同词向量维度下的实验效果:
图4 不同词向量维度下的实验结果
上图为不同维度下在word analogy测试集上的实验结果,左侧为3cosadd,右侧为3cosmul的测试方法。可以看出这项算法在不同维度的设置下均取得了不错的效果。此外,也在小规模语料上进行了测试:
上图是仅选取20%中文维基百科训练语料,在word similarity下测试的结果,skipgram, cbow和GloVe算法由于没有利用中文的特性信息进行加强,所以在小语料上表现较差,而其余四个算法取得了不错的效果,其中cw2vec的算法在两个数据集上均取得的了最优效果。
为了更好的探究不同算法的实际效果,这项研究专门选取了两个词语做案例分析。
第一个是环境相关的“水污染”,然后根据词向量利用向量夹角余弦(余弦定理)找到与其语义最接近的词语。GWE找到了一些和“污”字相关的词语,比如“污泥”,“污渍”和“污垢”,而JWE则更加强调后两个字“污染”GloVe找到了一些奇怪的相近词语,比如“循环系统”,“神经系统”。CWE找到的相近词语均包含“水”和“污”这两个字,猜测是由于其利用汉字信息直接进行词向量加强的原因。此外,只有cw2vec找到了“水质”这个相关词语,分析认为是由于n元笔画和上下文信息对词向量共同作用的结果。
第二个例子,特别选择了“孙悟空”这个词语,该角色出现在中国的名著《西游记》和知名日本动漫《七龙珠》中,cw2vec找到的均为相关的角色或著作名称。
作为一项基础研究成果,cw2vec在蚂蚁和阿里的诸多场景上也有落地。在智能客服、文本风控和推荐等实际场景中均发挥了作用。此外,不单单是中文词向量,对于日文、韩文等其他语言也进行类似的尝试,相关的发明技术专利已经申请近二十项。
我们希望能够在基础研究上追赶学术界、有所建树,更重要的是,在具体的实际场景之中,能够把人工智能技术真正的赋能到产品里,为用户提供更好的服务。
注:以上相关图片来自《cw2vec: Learning ChineseWord Embeddingswith Stroke n-gram Information》所有。
至此,对蚂蚁金服提出的词向量新理论进行了大致学习,具体想做进一步研究的可以看
paper:https://github.com/ShelsonCao/cw2vec/blob/master/cw2vec.pdf
这篇关于词向量算法—【AAAI2018】蚂蚁金服公开的基于笔画的中文词向量算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!