词向量算法—【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】蚂蚁金服公开的基于笔画的中文词向量算法相关推荐
- AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法
导读:词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机器翻译等诸多任务中都发挥了重要作用.词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里,该算法也经历不断的改 ...
- cw2vec:蚂蚁金服公开最新基于笔画的中文词向量算法
向AI转型的程序员都关注了这个号
- SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架
前言 SOFABoot是蚂蚁金服开源的基于Spring Boot的研发框架,它在Spring Boot的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力.在增强了 Sp ...
- 云原生时代,蚂蚁金服公开了新的金融混合云架构
蚂蚁金服在过去十五年重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑.在 2019 杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享.我们将其 ...
- 【笔记】蚂蚁金服公开基于笔画的中文词向量算法
案例来源:@安和林 案例地址: https://yq.aliyun.com/articles/376139 (以下为案例的简要概述,便于之后能快速检索到相关内容.部分文字与图片可能直接来自原文,如有侵 ...
- 基于笔画中文分词算法---蚂蚁金服
原标题:AAAI 2018 | 蚂蚁金服公开最新基于笔画的中文词向量算法 转载自蚂蚁金服科技 查看全文 http://www.taodudu.cc/news/show-5808302.html 相关文 ...
- 《MIT科技评论》全球十大突破性技术之一,蚂蚁金服刷脸支付的算法和难点
<麻省理工科技评论>发布了2017年全球十大突破性技术榜单,其中刷脸支付上榜."在中国,人脸识别系统现在应用于授权支付.设备访问以及罪犯追踪."该项技术被认为是在&qu ...
- AI在蚂蚁金服产品线中的大规模应用
近日,蚂蚁金服副总裁兼首席数据科学家漆远博士发表了主题为<金融智能的发展与应用>的演讲.漆远表示,蚂蚁金服今年的两个关键词,一个是"开放",一个是"AI(人工 ...
- 蚂蚁金服开源增强版 Spring Boot 的研发框架!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:gitee.com/sofastack/sofa-b ...
最新文章
- 怎么自学python软件-Python入门学习难吗,新手如何学习
- 面向对象4(匿名对象、内部类、包、修饰符、代码块)
- git分支feature和hotfix分支
- 条件渲染-v-if // v-else // v-else if // v-show
- 游戏开发引擎 Cryengine 在 GitHub 上公开全部源代码
- Outlook 2003解除附件下载限制
- linux6.4添加源,RHEL6.4更改为CentOS源
- 原生js添加class
- 单词播放器5.10发布
- 通过蓝牙连接进行ActiveSync同步
- matlab插值拟合
- phpstudy本地快速搭建网站,并外网访问【无公网IP】
- 数论概论笔记 第3章 勾股数组与单位圆
- DNS,FTP,HTTP,DHCP,TFTP,SMTP详解
- G.652光纤各个子类的主要区别及应用
- 如何查看计算机操作过程,如何查看电脑使用记录?详细方法奉上
- Jstack查询线程堆栈
- Android -- 在线播放歌曲 1 -- 搜索歌曲
- 汽车销售管理系统 c语言版 课程设计,汽车销售管理系统c语言版.docx
- C++上机实验3-个人所得税计算器