GGV有话说:
520快到啦,“我喜欢你”这句话一定会成为当天必备的表白话术。
那么“我喜欢你”四个字背后有什么语法问题以及计算机可以理解“我爱你”吗?
今天的GGView,我们就以“我爱纪源资本”为例,来一起聊聊自然语言的处理问题,即令机器理解人类语言。
来源:“科学大院”公众号(ID:kexuedayuan)
如何判断一句话是否通顺?
最初,科学家尝试用句法分析(Syntactic Parsing)和语义分析(Semantic Analysis)的方法,来实现自然语言处理,也就是从语法角度来分析一句话。例如,“我爱纪源资本”是典型的主(我)+谓(爱)+宾(科学大学)结构。
但是,语义分析面临着三个问题:
1)对较短的简单句而言,解析出的语法信息还比较少;而对于较长的复杂句而言,解析出的语法信息可能非常多,甚至比句子本身的信息还多。
例如,“北京时间2022年5月4日,小明告诉我他非常喜欢一个知名的、紧跟前沿、通俗易懂的科普公众号——纪源资本”。这句话包含了状语、主语、谓语和宾语从句,宾语从句又包含了主语、谓语、定语、宾语和同位语。
(复杂句:别分析了,你还是死记硬背吧)
2)语义分析法要求句子必须严格遵守语法要求,而实际上,我们日常用语很难保证这一点。
例如,“纪源资本这个公众号我很喜欢”,严格来讲,这句话是有语病的(宾语前置),但并不影响我们的理解,类似的“病句”在日常生活中很常见。
(这个病句影响理解么?不影响~)
3)一词多义的现象很常见,给语义分析带来了巨大的困难。
例如,“我给你推荐了这么有意思的纪源资本,这你不意思意思”。前半部分的“意思”是趣味,后半部分的“意思”是礼物、奖励。我们对这些词很熟悉,但计算机很难理解一词多义。
(计算机:what are u bb?)
因此,自然语言处理的语义分析法就走到了尽头。后来,IBM华生实验室提出一种新的自然语言处理方法——统计法,真正实现了自然语言处理,至今仍是我们在使用的方法之一。
统计法处理句子依照一个较为严格的顺序,下面大院就给各位读者一一介绍。
1)我们收集足够多的语言材料,即语料库(Corpus),例如1亿个人说过话,每人10句,总计10亿句话。
2)统计不同词出现的频率,以及这个词出现后,另一个词出现的频率……例如,“我”出现的频率为10%,“我”出现之后“爱”出现的频率为3%……
伯努利大数定律(Bernoulli Law of Large Numbers)告诉我们,当统计样本足够多时(10亿足够多),统计频率就无限接近概率。因此,上述频率就可被视作概率。
(大数定律)
3)然后,就可计算一句话出现的概率。
设一句话为“ABCD”,根据全概率公式(Full Probability Formula),这句话出现的概率P{ABCD}= P{A}P{B|A}P{C|A,B}P{D|A,B,C},其中P{A}是“A”出现的概率,P{D|A,B,C}就是以“ABC”出现为条件,“D”出现的条件概率(Conditional Probability)。
(全概率公式)
现在我们考虑P{我爱纪源资本}=P{我}P{爱|我}P{纪源资本|我爱}。在步骤2)的统计中,这些概率就已经得到。
4)于是就得到了一句话的概率P{我爱纪源资本},如果这个概率大于某个门限,就认为这句话通顺,即出现的概率足够大;反之,认为这句话不通顺,即出现的概率太小。
(统计法流程图)
但是,上述统计法面临一个问题,那就是条件概率的计算。不难理解,当前面只出现1、2个词时,后续词的条件概率比较准确,例如P{爱|我};当前面出现了较多词时,后续词的条件概率就有较大误差了,例如P{非常|小明告诉我他}
这主要是由于前面出现了较多词,导致语料库里对应的数据太少,不满足大数定律的条件(样本数足够多),这时再把统计频率作为概率,就会出现较大误差。
马尔科夫链
后来,人们借鉴了马尔可夫链(Markov Chain)的思想,解决了这一问题。马尔可夫链假设一个状态(词)的概率只与上一个状态(词)有关,与更早的状态(词)无关。
例如,对“小明告诉我他非常喜欢纪源资本”这句话而言,我们可以假设“纪源资本”出现的概率只与前一个词“喜欢”有关,与更早的词无关,因此P{纪源资本|小明告诉我他非常喜欢}= P{纪源资本|喜欢}
(马尔可夫:老夫教你科学地偷懒)
这样一来,就将完整的、计算困难的P{纪源资本|小明告诉我他非常喜欢},转换为近似的、计算简单的P{纪源资本|喜欢},其他词的概率计算也可以相应简化。
对于“ABCD”这句话而言,它出现的概率P{ABCD}就可以简化为
当然,马尔可夫链的假设,势必会带来误差,因此有人提出N阶马尔可夫链(N-Order Markov Chain),顾名思义,就是一个词出现的概率与之前的N个词有关,与再之前的词无关。例如,设N=2,那么就有P{纪源资本|小明告诉我他非常喜欢}= P{纪源资本|非常喜欢}
(N=2时的马尔科夫链)
N越大,结果越准确,但所需的概率越难计算。在自然语言处理中,N一般不超过3,也就是认为一个词出现的概率只与前3个词有关。继续增大N,并不会使性能显著提升,却会使计算复杂度大大增加。
统计法真正意义上实现了自然语言处理,它避免了语义分析法的各种问题,使得自然语言处理真正走向了应用。
纠错与划分
再问大家一个问题,如果我的句子中有错别字,怎么自动纠错。例如,我用拼音输入了“我挨纪源资本”,不难想象,概率P{我挨纪源资本}一定非常小(估计只有本文出现过)。接下来,以N=1的马尔科夫链为例,进行说明
首先,我们需要判断错别字的位置。不难想象,P{我}P{挨|我}都不小,但P{纪源资本|挨}会出现断崖式减小,那么就可判定“挨”字为错别字(错别字会导致概率骤降)。
(“挨|我”:总觉得,我的概率大是一件悲伤的故事)
然后,在“挨”的同音字里寻找X,使得P{我X纪源资本}= P{我}P{X|我}P{纪源资本|X}最大。例如X=“爱”,那么就可以判断,我们本想输入“我爱纪源资本”,实际却将“爱”错打成了“挨”。
纪源资本:我就说,我前面怎么可能是“挨”这个悲伤的词)
当然,如果我们使用五笔输入法,那就不是在“挨”的同音字中纠错,而是在与“挨”的字型相似的字中纠错。
最后,自然语言处理还面临一个问题,那就是句子的划分,不同的人对同一个句子可能有不同的划分。
例如,前面的内容默认将“我爱纪源资本”划分为“我”+“爱”+“纪源资本”(3个词),但实际上,将其划分为“我”+“爱”+“科学”+“大院”(4个词),在语法上也是正确的。
(谁敢说我语法错误?)
不难发现,这种划分上的差异,主要源自专有名词。也就是说,我们既可以将“纪源资本”视作一个专有名词,也可以将其视作两个普通词的连接。类似的词还有很多:清华大学、北京烤鸭、苹果手机……
把专有名词分解成两个普通词的连接,那句子的概率就会很小(一般“科学”后是不跟“大院”的)。因此,我们在做句子划分时,总是按照词数最少的原则来划分,即把专有名词视作一个词,而不是将其拆分。
接下来为大家介绍一点点课外知识,前面的概念还没有消化好的读者不要贪多哦~
点击展开
从纠错看反馈
借由自然语言处理问题,为大家介绍反馈(Feedback)的概念。反馈,是指系统的输出回传至输入端,并参与对输入的处理,进而再影响系统输出的过程。
例如,在自动纠错中,输入为“我挨科学大院”,输出为这句话的概率。当系统发现这句话的概率非常小时,会反过来检查输入,发现“挨”字是错别字,然后自动纠错,最终输出正确的句子“我爱科学大院”的概率。
根据对输出的影响,反馈可分为正反馈(Positive Feedback)和负反馈(Negative Feedback)两种。正反馈增强输出,使得系统趋于不稳定;负反馈减弱输出,使系统趋于稳定。
举例来讲,自然语言的自动纠错,就是一种典型的负反馈,使得输出的概率趋于最大值;还有空调、热水器等,使得室温、水温收敛至预设值。
(负反馈保证了稳定)
相对于负反馈,正反馈系统较少,典型的有振荡器(将稳定的直流电转换为震荡的交流电)、生理和心理的成瘾(不断地适应、不断地寻找更强的刺激)。
随着各种人工智能技术的突飞猛进,NLP的应用越来越广泛。它早已渗透到我们生活的各种场景。
由于涉及到语言学、计算机科学、数学,自然语言处理其实是一门很复杂的学问。让每个人都能熟悉背后的深刻原理十分困难。
希望在读完这篇文章后,读者朋友们在和智能助手对话时能够想到“哈哈,它才听不懂我说的话,它靠的是统计学”。
参考文献:
[1] 吴军. 数学之美(第3版). 北京: 人民邮电出版社.
[2] 盛骤, 谢式千等. 概率论与数理统计(第4版). 北京: 高等教育出版社.
[3] Alan V. Oppenheim著, 刘树棠译. 信号与系统(第2版). 西安: 西安交通大学出版社.
*本文出品自“科学大院”公众号(kexuedayuan),转载请注明公众号出处。科学大院是中科院官方科普微平台,由中科院科学传播局主办、中国科普博览团队运营,致力于最新科研成果的深度解读、社会热点事件的科学发声。(文中图片均源自NASA官网公开资料,详情见参考文献,表情包为作者提供)
温馨提示:虽然我们每天都有推送,但最近有读者表示因平台推送规则调整,有时候看不到我们的文章~
欢迎大家进入公众号页面,右上角点击“设为星标”点亮⭐️,收藏我们的公众号,新鲜内容第一时间奉上!
*文章观点仅供参考,不代表本机构立场。
继续阅读
阅读原文