如何让机器理解汉字一笔一画的奥秘?

摘要:从智能客服到机器翻译,从文本摘要生成到用户评论分析,从文本安全风控到商品描述建模,无不用到自然语言技术,作为人工智能领域的一个重要分支,如何让机器更懂得人类的语言,尤其是汉字这种强表意文字,是一个具有极大挑战的事情。

背景介绍

从智能客服到机器翻译,从文本摘要生成到用户评论分析,从文本安全风控到商品描述建模,无不用到自然语言技术,作为人工智能领域的一个重要分支,如何让机器更懂得人类的语言,尤其是汉字这种强表意文字,是一个具有极大挑战的事情。

词向量,是一种利用无监督学习方式(不需要人工数据标注),将词语映射到语义向量空间的技术。举个例子:在过去,计算机使用下标表示词语,比如“猫: 2123”,“狗: 142”,由于下标不一样,机器就只会认为是不同的词语,却不能像人一样感知词语间的语义关系。而词向量技术恰好弥补了这一点,使机器可以理解潜在的语义信息。实际上,现在很多自然语言处理的算法都是将其作为输入,进而建立端到端的算法模型。因此,设计出高质量的词向量生成算法是一个值得探讨的问题。

中文经过几千年的发展和演变,是一种强表意文字,对于我们而言,即使某个字不认识,都或许可以猜到其含义,机器却很难理解这些。比如,“蘒”这个字我们很可能不认识,但里面有“艹”字头,和“禾”木旁,那它也许就是长得像该字右下角部分的某种植物吧。通过词向量的方式,我们希望让机器能够理解汉字一笔一画之间的奥秘。然而,传统的算法并不能很好的利用中文语言学上的特性,这篇文章里,我们将提出一种利用笔画信息来提高中文词向量的方法。

词向量算法是自然语言处理领域的基础算法,在序列标注、问答系统和机器翻译等诸多任务中都发挥了重要作用。词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里,经历不断的改进,但大多是只适用于拉丁字符构成的单词(比如英文),结合中文语言特性的词向量研究相对较少。

相关工作:

早在1954年,语言学家Harris提出“Distributional Hypothesis [1](分布式假设)”:语义相似的单词往往会出现在相似的上下文中。这一假设奠定了后续各种词向量的语言学基础,即用数学模型去刻画单词和其上下文的语义相似度。Bengio et al., 2003 [2] 提出了NNLM(基于神经网络的语言模型),由于每次softmax的计算量很大(分母项的计算时间复杂度O(|V|)V是全词表),相继出现了很多快速近似计算策略。

为了解决上述问题,谷歌提出了word2vec [3,4] 算法,其中包含了两种策略,一种叫做Negative Sampling(负采样),另一种是hierarchical softmax(层次softmax)。Negative Sampling的核心思想:每次softmax计算所有单词太慢,那就随机的选几个算一算好了,当然,训练语料中出现次数越多的单词,也就越容易被选中;而Hierarchical Softmax,简单来说,就是建一棵树状的结构,每次自上而下的从根计算到叶子节点,那么就只有对数时间复杂度了!如何构建这棵树可以使得让树的高度尽量小呢?哈夫曼树。

词向量模型的核心是构造单词与其上下文的相似度函数,word2vec工具包里面有两种实现方式,分别是skipgram和cbow。


 图 1  SGNS算法示意图

假设当前单词w是“cat”,而上下文单词c是“sat”,算法的目标是给定w最大化c出现概率(skipgram)。在这个算法中,每个单词都被当作一个整体,利用外部的上下文结构信息去学习得到词向量。

那么是否可以充分结合单词内部结构的(亚词)信息,将其拆分成更细粒度的结构去增强词向量?英文中每个单词所包含的character(字母)较多,每个字母并没有实际的语义表达能力。对于中文词语而言,中文词语可以拆解成character(汉字)。

Chen et al., 2015 [5] 提出了CWE模型,思路是把一个中文词语拆分成若干汉字,然后把原词语的向量表示和其中的每一个汉字的向量表示做平均,然后作为新的词语向量。


 图 2  CWE模型示例

在该算法中,“智能”是一个上下文词语,先拆解成两个汉字“智”和“能”,然后计算出新的词语向量表示;同理,上下文词语“到来”也得到重新计算。CWE保持当前词语不拆分,这里“时代”保持不变。

不难想到,将汉字拆分成偏旁或许是一种不错的方式,Sun et al., 2014 [6]和Li et al., 2015 [7] 做过相关的研究。然而偏旁只是汉字的一部分,Yu et al., 2017 [8] 提出了更加细化的拆分,根据人工总结的“字件”,将汉字拆成一个一个的小模块,把词、汉字和字件一起进行联合学习:


 图 3  JWE算法示意图

其中,w , c和s分别表示词语、汉字和字件模块。字件粒度的拆分也取得了超过仅仅利用偏旁信息的方法。

此外,Su and Lee, 2017 [9] 提出了GWE模型,尝试从汉字的图片中利用卷积自动编码器来提取特征:


 图 4  GWE卷积神经网络提取特征示意图

从汉字图片提取出特征之后,再结合上下文结构信息学习中文词向量。很遗憾的是,根据其原文的描述,这种方式得到的特征基本没有提升,不过这确实是非常有意思的一次试探。

问题与挑战:

自然语言处理的顶级会议ACL 2017,共提出了未来的四大研究方向,如何更好的利用“亚词”信息就是其中的一个。在中文词向量场景下,仅将中文词语拆解到汉字粒度,会一定程度上提高中文词向量的质量,是否存在汉字粒度仍不能刻画的情况?


 图 5  汉字粒度拆解

可以看出,“木材”和“森林”是两个语义很相关的词语,但是当我们拆解到汉字粒度的时候,“木”和“材”这两个字对比“森”和“材”没有一个是相同的(一般会用一个下标去存储一个词语或汉字),因此对于这个例子而言,汉字粒度拆解是不够的。我们所希望得到的是:


 图 6  更细粒度的亚词信息拆解

“木”和“材”可以分别拆解出“木”和“木”(来源于“材”的左半边)结构,而“森”和“林”分别拆解得到多个“木”的相同结构。此外,可以进一步将汉字拆解成偏旁、字件,对于以上例子可以有效提取出语义结构信息,不过我们也分析到:


 图 7  偏旁和字件结构拆分举例

可以看出,“智”的偏旁恰好是“日”,而“日”不能表达出“智”的语义信息。实际上,偏旁的设计是为了方便在字典中查询汉字,因此结构简单、出现频率高变成了首要原则,并不一定恰好能够表达出该汉字的语义信息。此外,将“智”拆分到字件粒度,将会得到“失”,“口”和“日”三个,很不巧的是,这三个字件也均不能表达其汉字语义。我们需要设计出一种新的方法,来重新定义出词语(或汉字)具有语义的结构:


 图 8  更细粒度的亚词信息拆解举例 

这里,“知”是可以表达出“智”语义的模块,如何得到这样的亚词结构,并结合句子上下文设计模型的优化目标,生成出更好的中文词向量,将是后文要探索的内容。

cw2vec模型:

单个英文字符(character)是不具备语义的,而中文汉字往往具有很强的语义信息。不同于前人的工作,我们提出了“n元笔画”的概念。所谓“n元笔画”,即就是中文词语(或汉字)连续的n个笔画构成的语义结构。


 图 9  n元笔画生成的例子

如上图,n元笔画的生成共有四个步骤。比如说,“大人”这个词语,可以拆开为两个汉字“大”和“人”,然后将这两个汉字拆分成笔画,再将笔画映射到数字编号,进而利用窗口滑动产生n元笔画。其中,n是一个范围,在上述例子中,我们将n取值为3, 45.

在论文中我们提出了一种基于n元笔画的新型的损失函数





图 10  算法过程的举例

如上图所示,对于“治理 雾霾 刻不容缓”这句话,假设此刻当前词语恰好是“雾霾”,上下文词语是“治理”和“刻不容缓”。首先我们将当前词语“雾霾”拆解成n元笔画并映射成数字编码,然后划窗得到所有的n元笔画,根据我们设计的损失函数,计算每一个n元笔画和上下文词语的相似度,进而根据损失函数求梯度并对上下文词向量和n元笔画向量进行更新。

为了验证我们提出的cw2vec算法的效果,我们在公开数据集上,与业界最优的几个词向量算法做了对比:


图 11  实验结果

上图中包括2013年谷歌提出的word2vec [2,3] 的两个模型skipgramcbow,2014年斯坦福提出的GloVe算法 [10]2015年清华大学提出的基于汉字的CWE模型 [5],以及2017年最新发表的基于像素和字件的中文词向量算法 [8,9],可以看出cw2vecword similarityword analogy,以及文本分类和命名实体识别的任务中均取得了一致性的提升。同时,我们也展示了不同词向量维度下的实验效果:


图 12  不同词向量维度下的实验结果

上图为不同维度下在word analogy测试集上的实验结果,左侧为3cosadd,右侧为3cosmul的测试方法。可以看出我们的算法在不同维度的设置下均取得了不错的效果。此外,我们也在小规模语料上进行了测试:


 图 13  小训练数据下的实验结果

上图是仅选取20%中文维基百科训练语料,在word similarity下测试的结果,skipgram, cbowGloVe算法由于没有利用中文的特性信息进行加强,所以在小语料上表现较差,而其余四个算法取得了不错的效果,其中我们的算法在两个数据集上均取得的了最优效果。


图 14  案例分析结果

为了更好的探究不同算法的实际效果,我们专门选取了两个词语做案例分析。第一个是环境相关的“水污染”,然后根据词向量利用向量夹角余弦找到与其语义最接近的词语。GWE找到了一些和“污”字相关的词语,比如“污泥”,“污渍”和“污垢”,而JWE则更加强调后两个字“污染”GloVe找到了一些奇怪的相近词语,比如“循环系统”,“神经系统”。CWE找到的相近词语均包含“水”和“污”这两个字,我们猜测是由于其利用汉字信息直接进行词向量加强的原因。此外,只有cw2vec找到了“水质”这个相关词语,我们认为是由于n元笔画和上下文信息对词向量共同作用的结果。第二个例子,我们特别选择了“孙悟空”这个词语,该角色出现在中国的名著《西游记》和知名日本动漫《七龙珠》中,cw2vec找到的均为相关的角色或著作名称。

作为一项基础研究成果,cw2vec在阿里的诸多场景上也有落地。在智能客服、文本风控和推荐等实际场景中均发挥了作用。此外,不单单是中文词向量,对于日文、韩文等其他语言我们也进行类似的尝试,相关的发明技术专利已经申请近二十项。

我们希望能够在基础研究上追赶学术界、有所建树,更重要的是,在具体的实际场景之中,能够把人工智能技术真正的赋能到产品里,为用户提供更好的服务。

原文链接

干货好文,请关注扫描以下二维码:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Logtail从入门到精通(三):机器分组配置

摘要: 基于集团内数年来的Agent运维经验总结,我们设计了一种灵活性更高、使用更加便捷、耦合度更低的配置&机器管理方式:自定义标识机器分组。此种方式对于动态环境非常适用,尤其适用于弹性伸缩服务和swarm、pouch(阿里docker…

(vue基础试炼_02)使用vue.js实现隔2秒显示不同内容

接上一篇&#xff1a;&#xff08;vue基础试炼_01&#xff09;使用vue.js 快速入门hello worldhttps://gblfy.blog.csdn.net/article/details/103841156 文章目录一、原始js写法① 效果图② 2秒之后二、使用vue实现① 思考② vue写法③ 效果图三、vue总结一、原始js写法 <!…

适合小团队作战,奖金+招聘绿色通道,这一届算法大赛关注下?

大赛背景伴随着5G、物联网与大数据形成的后互联网格局的逐步形成&#xff0c;日益多样化的用户触点、庞杂的行为数据和沉重的业务体量也给我们的数据资产管理带来了不容忽视的挑战。为了建立更加精准的数据挖掘形式和更加智能的机器学习算法&#xff0c;对不断生成的用户行为事…

银行业AI:炒作背后的现实——“尽管对新技术感到兴奋,但银行业态度非常谨慎”

摘要&#xff1a; 在人工智能火热的今天&#xff0c;银行业是如何看待人工智能对其的影响呢&#xff1f;答案可能出人意料。随着人工智能的发展&#xff0c;越来越多的行业都或多或少会受到该技术的影响。在博主之前的文章中&#xff0c;分析了人工智能、大数据以及VR对教育行业…

tcp分包传图片 如何还原_技术控丨超详细解析TCP重传机制

作者&#xff1a;Zhang_Jiawen &#xff1b; 来自&#xff1a;Dell技术社区TCP 的主要任务是很简单&#xff1a;打包和发送数据。TCP 与其他协议的不同之处在于使用滑动窗口来管理基本数据收发过程&#xff0c;同时确保数据流的有效及可靠传输&#xff0c;从而不致发送速率明显…

超详细!上线一个机器学习项目你需要哪些准备?

摘要&#xff1a; Canvas是用于设计和记录机器学习系统的模板。它比简单的文本文档具有优势&#xff0c;因为Canvas用简单的部件通过部件之间的相关性来寻找机器学习系统的关键组件。这个工具已经很流行&#xff0c;因为它对复杂项目进行了可视化操作。 在本文中&#xff0c;我…

漫画:什么是插入排序?

戳蓝字“CSDN云计算”关注我们哦&#xff01;————— 第二天 —————————————————人们如何进行扑克牌的排序呢&#xff1f;举个例子&#xff0c;比如我手中有红桃6,7,9,10这四张牌&#xff0c;已经处于升序排列&#xff1a;这时候&#xff0c;我又抓到了一…

(vue基础试炼_03)使用vue.js实现TodoList

接上一篇&#xff1a;&#xff08;vue基础试炼_02&#xff09;使用vue.js实现隔2秒显示不同内容https://gblfy.blog.csdn.net/article/details/103841818 指令作用v-for循环数据v-on绑定事件v-model数据的双向绑定文章目录一、需求说明① 案例文档② 基础代码③ 基础效果图二、…

Python API快餐教程(1) - 字符串查找API

摘要&#xff1a; 字符串查找API 字符串处理相关API 字符串是7种序列类型中的一种。除了序列的操作函数&#xff0c;比如len()来求字符串长度之外&#xff0c;Python还为字符串提供丰富到可以写个编辑器的API. 查找类API 首先&#xff0c;下面的查找API都是为了查找位置&#x…

因吵架总被骂,阿里程序猿一气之下发明“情侣吵架神器”

摘要&#xff1a; 最近&#xff0c;阿里有个叫虎跑的程序猿&#xff0c;发明了一个“吵架神器”。 到底是个什么黑科技&#xff1f; 最近&#xff0c;阿里有个叫虎跑的程序猿&#xff0c;发明了一个“吵架神器”。到底是个什么黑科技&#xff1f;和很多情侣一样&#xff0c;虎跑…

java中volatile关键字的含义_java中volatile关键字的含义

转自&#xff1a;http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中&#xff0c;有一个关键字volatile的使用目前存在很大的混淆&#xff0c;以为使用这个关键字&#xff0c;在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线…

(vue基础试炼_04)使用组件改造TodoList

接上一篇&#xff1a;&#xff08;vue基础试炼_03&#xff09;使用vue.js实现TodoListhttps://gblfy.blog.csdn.net/article/details/103842233 指令说明v-bind传入绑定值文章目录一、前端页面组件化二、全局组件学习三、局部组件学习一、前端页面组件化 页面组件化&#xff1a…

我们到底该如何看待6G?

戳蓝字“CSDN云计算”关注我们哦&#xff01;近日&#xff0c;加拿大媒体报道&#xff0c;华为已确认在加拿大渥太华开启6G网络研究&#xff0c;已与加拿大多所大学的研究者展开洽谈。华为表示&#xff0c;自家的渥太华研发实验室将引领华为全球6G发展。图片来源网络消息传出之…

两年AI研究经验(教训)总结,进来看看吧!

摘要&#xff1a; 本文以过来人的身份将自身2年的研究经验做了一下分享&#xff0c;希望本文对于即将开始从事人工智能研究的朋友有所帮助。人工智能研究这个领域是有一定门槛的。对于初学者来说&#xff0c;一般通常的做法是直接购买一些热门的书籍&#xff0c;比如“西瓜书”…

C语言:字符串字面量及其保存位置

相关阅读 C语言https://blog.csdn.net/weixin_45791458/category_12423166.html?spm1001.2014.3001.5482 虽然C语言中不存在字符串类型&#xff0c;但依然可以通过数组或指针的方式保存字符串&#xff0c;但字符串字面量却没有想象的这么简单&#xff0c;本文就将对此进行讨论…

system.argumentnullexception值不能为null_MySQL NULL 值如何处理?

我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时&#xff0c;该命令可能就无法正常工作。为了处理这种情况&#xff0c;MySQL提供了三大运算符:IS NULL: 当列的值是 NULL,此运算符返回 true。IS NOT NULL: 当列…

神经网络的优缺点

摘要&#xff1a; 深度学习目前受到了追捧。人们想将神经网络应用到各个地方&#xff0c;但是它们真的适合每个地方吗&#xff1f;在本篇文章中&#xff0c;将对于这个问题以及深度学习现在如此受追捧的原因进行讨论。通过这篇文章&#xff0c;您将了解神经网络的主要缺点&…

(vue基础试炼_05)简单组件之间的传值

接上一篇&#xff1a;&#xff08;vue基础试炼_04&#xff09;使用组件改造TodoListhttps://gblfy.blog.csdn.net/article/details/103844256 文章目录一、上篇回顾① 代码欣赏② 代码分析二、子组件如何向父组件传值呢&#xff1f;① 需求案例文档② 需求案例效果图③ 思考与思…

漫画:程序员战力图鉴

戳蓝字“CSDN云计算”关注我们哦&#xff01;看漫画了解程序员战斗力 are u ready&#xff1f;编程架构能力撕比嘴炮能力划水摸鱼能力花式甩锅能力画饼忽悠能力PPT吹比能力哈哈哈哈哈哈程序员哥哥上面说的是你吗 福利扫描添加小编微信&#xff0c;备注“姓名公司职位”&#xf…

Python数据挖掘与机器学习,快速掌握聚类算法和关联分析

摘要&#xff1a;前文数据挖掘与机器学习技术入门实战与大家分享了分类算法&#xff0c;在本文中将为大家介绍聚类算法和关联分析问题。分类算法与聚类到底有何区别&#xff1f;聚类方法应在怎样的场景下使用&#xff1f;如何使用关联分析算法解决个性化推荐问题&#xff1f;本…