自然语言处理的理解与应用

作者: 望墨溢

来源: 科学大院

发布日期: 2022-05-05 07:00:00

本文介绍了自然语言处理(NLP)的基本概念及其应用,重点讨论了计算机如何判断句子是否通顺,分析了句法分析和语义分析的局限性,以及统计法在自然语言处理中的重要性。文章还探讨了错别字的自动纠错和句子的划分问题,强调了NLP在现代生活中的广泛应用。

当你说出“我喜欢ta”时,计算机会怎么想?“我爱科学大院”,这句话一定不难理解,且十分通顺。但是,对人类而言通顺的句子,计算机能够理解么?这就是自然语言处理(Natural Language Processing, NLP)问题,即令机器理解人类语言。

自然语言处理包括很多内容,为简单起见,大院er只为大家介绍计算机如何判断一句话是否通顺,且没有错别字。

如何判断一句话是否通顺?最初,科学家尝试用句法分析(Syntactic Parsing)和语义分析(Semantic Analysis)的方法,来实现自然语言处理,也就是从语法角度来分析一句话。例如,“我爱科学大院”是典型的主(我)+谓(爱)+宾(科学大学)结构。

但是,语义分析面临着三个问题:对较短的简单句而言,解析出的语法信息还比较少;而对于较长的复杂句而言,解析出的语法信息可能非常多,甚至比句子本身的信息还多。例如,“北京时间2022年5月4日,小明告诉我他非常喜欢一个知名的、紧跟前沿、通俗易懂的科普公众号——科学大院”。这句话包含了状语、主语、谓语和宾语从句,宾语从句又包含了主语、谓语、定语、宾语和同位语。

语义分析法要求句子必须严格遵守语法要求,而实际上,我们日常用语很难保证这一点。例如,“科学大院这个公众号我很喜欢”,严格来讲,这句话是有语病的(宾语前置),但并不影响我们的理解,类似的“病句”在日常生活中很常见。

一词多义的现象很常见,给语义分析带来了巨大的困难。例如,“我给你推荐了这么有意思的科学大院,这你不意思意思”。前半部分的“意思”是趣味,后半部分的“意思”是礼物、奖励。我们对这些词很熟悉,但计算机很难理解一词多义。

因此,自然语言处理的语义分析法就走到了尽头。后来,IBM华生实验室提出一种新的自然语言处理方法——统计法,真正实现了自然语言处理,至今仍是我们在使用的方法之一。

统计法处理句子依照一个较为严格的顺序,下面大院就给各位读者一一介绍。我们收集足够多的语言材料,即语料库(Corpus),例如1亿个人说过话,每人10句,总计10亿句话。统计不同词出现的频率,以及这个词出现后,另一个词出现的频率。

例如,“我”出现的频率为10%,“我”出现之后“爱”出现的频率为3%。伯努利大数定律(Bernoulli Law of Large Numbers)告诉我们,当统计样本足够多时(10亿足够多),统计频率就无限接近概率。因此,上述频率就可被视作概率。

然后,就可计算一句话出现的概率。设一句话为“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”出现的条件概率。

现在我们考虑P{我爱科学大院}=P{我}P{爱|我}P{科学大院|我爱}。在步骤2)的统计中,这些概率就已经得到。于是就得到了一句话的概率P{我爱科学大院},如果这个概率大于某个门限,就认为这句话通顺;反之,认为这句话不通顺。

但是,上述统计法面临一个问题,那就是条件概率的计算。当前面只出现1、2个词时,后续词的条件概率比较准确,例如P{爱|我};当前面出现了较多词时,后续词的条件概率就有较大误差了,例如P{非常|小明告诉我他}。

这主要是由于前面出现了较多词,导致语料库里对应的数据太少,不满足大数定律的条件,这时再把统计频率作为概率,就会出现较大误差。后来,人们借鉴了马尔可夫链(Markov Chain)的思想,解决了这一问题。马尔可夫链假设一个状态(词)的概率只与上一个状态(词)有关,与更早的状态(词)无关。

例如,对“小明告诉我他非常喜欢科学大院”这句话而言,我们可以假设“科学大院”出现的概率只与前一个词“喜欢”有关,因此P{科学大院|喜欢}。这样一来,就将完整的、计算困难的P{科学大院|小明告诉我他非常喜欢},转换为近似的、计算简单的P{科学大院|喜欢}。

当然,马尔可夫链的假设,势必会带来误差,因此有人提出N阶马尔可夫链(N-Order Markov Chain),顾名思义,就是一个词出现的概率与之前的N个词有关,与再之前的词无关。例如,设N=2,那么就有P{科学大院|小明告诉我他非常喜欢}=P{科学大院|非常喜欢}。N越大,结果越准确,但所需的概率越难计算。在自然语言处理中,N一般不超过3,也就是认为一个词出现的概率只与前3个词有关。

再问大家一个问题,如果我的句子中有错别字,怎么自动纠错。例如,我用拼音输入了“我挨科学大院”,不难想象,概率P{我挨科学大院}一定非常小。接下来,以N=1的马尔科夫链为例,进行说明。

首先,我们需要判断错别字的位置。不难想象,P{我}和P{挨|我}都不小,但P{科学大院|挨}会出现断崖式减小,那么就可判定“挨”字为错别字。然后,在“挨”的同音字里寻找X,使得P{我X科学大院}=P{我}P{X|我}P{科学大院|X}最大。

当然,如果我们使用五笔输入法,那就不是在“挨”的同音字中纠错,而是在与“挨”的字型相似的字中纠错。最后,自然语言处理还面临一个问题,那就是句子的划分,不同的人对同一个句子可能有不同的划分。例如,将“我爱科学大院”划分为“我”+“爱”+“科学大院”,但实际上,将其划分为“我”+“爱”+“科”+“学”+“大院”在语法上也是正确的。

不难发现,这种划分上的差异,主要源自专有名词。也就是说,我们既可以将“科学大院”视作一个专有名词,也可以将其视作两个普通词的连接。因此,我们在做句子划分时,总是按照词数最少的原则来划分,即把专有名词视作一个词,而不是将其拆分。

随着各种人工智能技术的突飞猛进,NLP的应用越来越广泛。它早已渗透到我们生活的各种场景。由于涉及到语言学、计算机科学、数学,自然语言处理其实是一门很复杂的学问。让每个人都能熟悉背后的深刻原理十分困难。大院er希望在读完这篇文章后,读者朋友们在和智能助手对话时能够想到“哈哈,它才听不懂我说的话,它靠的是统计学”。

UUID: 28d28610-b2ed-4343-91ca-00adf5b72338

原始文件名: /home/andie/dev/tudou/annot/AI语料库-20240917-V2/AI语料库/科学大院公众号-pdf2txt/2022年/科学大院_2022-05-05_当你说出“我喜欢ta”时,计算机会怎么想?.txt

是否为广告: 否

处理费用: 0.0135 元