1、自然语言处理(Natural Language Processing)

看自然语言处理的材料、书籍也有一段时间了,最近好像快看出点门道了,今天就以一个新手的角度来说说我所理解的自然语言处理。

自然语言处理是研究计算机如何处理人类语言的学科,我一般大白话解释就是:让计算机能懂我的话,这就叫自然语言处理。不过维基百科将“懂”人类语言称之为“自然语言认知”,我认为无论对自然语言做何种处理,计算机都需要“懂”一点这个语言,无论以何种方式。至于何谓计算机的“懂”,我觉得可以参考一下图灵测试(Turing Test),以及前两篇转载的Matrix67的博客,你应该会对计算机的“懂”有所理解。

平常和朋友聊NLP,或者他们翻我的书时,一般都会问一句:“怎么这么像编译原理呢?”。从我看来,基本思想差不太多,所不同的是编译原理所处理的是人工语言,而NLP则是处理分析的自然语言。自然语言处理起来会有其特殊性,最常见也是最难的就是处理歧义了,在人工语言中决不允许出现歧义,因为规矩定死了,自然语言就不一样了,拿最近很火的小明来说:

“小明,昨天下午你抱着的是谁啊?你女朋友吧?”“你妹!!!我妹!!”

你们觉得计算机能知道小明抱着的是谁么?我相信,以后能!!!

2、读书有感

以上就是我对自然语言处理的大致理解,现在我来梳理梳理我看书的知识。

2.1 NLP研究方向

NLP研究主要有两个方法:理性(规则)主义方法以及基于经验(统计)主义方法。现在主流的好像是理性与经验相结合。

  • 理性(规则)主义方法

就是认为计算机必须按照人的思维方式来思考语言,按照严格的规则来处理自然语言。语言学家乔姆斯基(Noam Chomsky)曾经把语言定义为:按照一定规律构成的句子和符号串的有限或无限的集合。我国学者吴蔚天则认为,可以将语言看成一个抽象的数学系统。语言无论是集合还是数学系统,都可以用数学的方法(规则)来刻画与描述。这个规则一般来说应该是语法,但是NLP中被定义为形式语言,是用来精确地描述语言及其结构的手段。

形式语言的语法是一个四元组,G=(N,Σ,P,S)。N为非终结符(non-terminal symbol)的有限集合,Σ为终结符(terminal-symbol)的有限集合,N与Σ无交集,N并Σ就是称之为总词汇表。P是一组重写规则的有限集合:P = {a -> b},a,b均是词汇表中的,但是a中必须包含一个非终结符。S是初始符,也属于N。

例如,有如下的形式语法:

G=(N,Σ,P,S), N={S,B,N,A }

Σ ={wikie,is,a,handsome,boy}

规则P如下:

S -> NBN, N -> AN,B -> BB

B -> is | a,N ->wikie | boy,A -> handsome

所以根据语法简单推导就是:

S -> NBN

Wikie is boy或者Boy is wikie或者wikie a boy或者 boy a wikie

当然,最后的推导应该是这样:

S -> NBN -> NBBN -> NBBAN

Wikie is a handsome boy.

觉得怎么样,以上语法是不是清晰明了?但这只是简单的情况,真实的情况下远比这复杂。

  • 基于经验(统计)主义方法

以上形式语法虽然清晰明了,但是应对真正的千变万化的语言来说,总有无法形式表达的情况。而且很多排斥理性主义方法的人都有这样的一个想法:文盲从来没有学过语法,但TA不仅能够理解语言,而且说不定还能说得很溜很好。那么文盲为什么能听懂且说出话来呢?

语言模型在自然语言处理中占有重要的地位,一个语言模型通常构建为字符串s的概率分布p(s),这里的p(s)试图反映的是字符串s作为一个句子出现的频率。

例如,Yes这个词出现在我们的英语课本中的频率非常高,所以同学们和老外交流的时候,大部分时间在听,听完之后不管啥内容都会说一句:Yes,Yes!还有Oh这个语气词无论在电影还是书本中,都很多,同学们在回答了一个Oh的时候,突然会很习惯性的接上一个词Yeah,即:Oh, yeah yeah,高兴的话,还有可能是:Oh, yeah, yeah, you’re right!

这个频率和习惯都可以反映成语言模型,即某个句子出现的概率,概率高出现的可能性就大,低则反之。对于一个句子s=w1w2w3w4…wl来说,其概率计算公式可以表示为:

p(s) = p(w1)p(w2|w1)p(w3|w1w2)…p(wl|w1…w(l-1)) // | 表示条件概率

需要注意的是,如果以上计算中,有一个值为0,p(s)则为0。显然,这个是不够准确的,所以需要进行平滑操作。顾名思义,线平滑即将折线平滑成曲线,语言模型即提高低概率(如0概率),降低高概率,尽量使概率分布趋于均匀。

有了语言模型,文盲还不能够听与说,因为TA不知道出现的那句话对应的意思是什么。所以文盲还会在脑子存一个音与意的映射,在NLP中就是语料库了。听到一个词,就去查一下,听到一个词,就去查一下。

顺带简单说一下机器学习,以前我怎么都不理解机器到底是怎么学习的,可能是我也仔细分析过我是怎么学习的。机器学习和人其实差不多,归纳法加演绎法。如有一段材料:鸟会飞,鹦鹉是鸟。计算机就能学会:鹦鹉会飞。不过这仅是我粗浅的理解,还有待继续深入。

2.2 NLP理论基础

上面介绍了两个大方向,理论基础也就是大方向的理论基础:语言学、概率论、信息论。在这里就不一一说了,不过我还是得单独都搞本书看看咯。

2.3 NLP分析步骤

觉着还是和编译原理差不多,不过多了一个分词的步骤,具体见下:

  • 分词

分词是每个语言都要碰到的问题,很多地方说英语没有这个问题,因为有空格作为分隔符。但是我觉得英语也有词组,分词组应该也不是一件容易的事情。具体分词可以参加:漫话中文自动分词和语义识别(上):中文分词算法

  • 语法分析

分完词后,就需要进行语法分析了,即分析这句话是否通顺合理。语法分析又分为词法分析与句法分析。词法分析就是分析诸如名词性短语、动词性短语,句法分析就是分析诸如主谓宾、从句等结构,但这都是从理性主义方法出发,关于这个可以参加:漫话中文自动分词和语义识别(下):句法结构和语义结构。目前更实用的,则是对大规模真实语料的概率统计分析与机器学习算法。简单理解就是,一个词一个句,出现的概率大就是正确的。

  • 语义分析

到了我觉得最难的地方了,句子的语义分析。高中考试的时候,句子出现歧义了,我这个大活人有时候都会理解错误,能让计算机理解更是难上加难。再加上国人说话隐晦,一语双关。说个有趣的HSK(汉语水平考试)考试题目:

张三找了个女朋友,李四问:“你女朋友长得怎么样?”张三答:“她人还不错。”问:张三的女朋友长得好么?

A、长得好 B、长得不好 C、她人不错 D、不知道

套用书本的话说就是:自然语言的语义计算问题十分困难,如何模拟人脑思维的过程,建立语言、知识与客观世界之间可计算的逻辑关系,并实现具有高区分能力的语义计算模型,至今任是个未能解决的难题。

2.4 NLP应用领域

  • 机器翻译类

这个应该是常人能看到体会到的,从文曲星到金山词霸再到Google翻译,机器翻译伴随着我们80后一起成长。Google翻译更是论文翻译的必须物,尽管得到的结果有时候会惨不忍睹。如:今天天气好好啊 -> Today the weather good ah。多么直白的翻译。

机器翻译的主要方法和NLP的方法差不多,不过过程有些不一样,有两种:基于中间语言与不基于中间语言。

基于中间语言,就是相当于将所有语言互译成一种语言(如世界语),所有全世界N种语言翻译就只需要与同一种语言互译N次即可。但是是否能够构造出表示各种不同的自然语言语法、语义的中间语言,至少目前还是个未知数。此外,由于翻译都是误差,误差传递两次会有更大的误差,无法很好的生成对应的各种语言。

不基于中间语言的又有:基于统计和基于实例的,统计就和前面提到的语言模型类似,基于实例的就是将不断累积的已经译好的文本作为机器翻译的样本,翻译的时候直接查看是否有类似的翻译。

话说,以前老师说做同声传译一小时有5W,等到机器翻译完美解决那一刻,同声传译一小时多少捏?哇哈哈,很是邪恶啊!当然,我们的路还有很长。

  • 阅读理解类

阅读理解无外乎就是读完文章,让我们说出文章的中心思想,文章内容以及文章类型。说出文章的中心思想就是自动文摘生成技术,说出文章内容的就是信息抽取技术,说出文章类型就是文本分类技术。不过书还没看到这里来,就不继续写了。

  • 问答类

Siri横空出世,让业内业外人士都开了眼界,52nlp中有一篇关于siri的文章,见:这里,不知道作者是褒还是贬。同时,移动10086在siri之前也有小机器人可以相互扯淡,这里也有一个获奖的开源自然语言的人工智能的聊天机器人:A.L.I.C.E,我一朋友还和AliceBot聊了好一会儿天。

问答类我觉得是NLP与AI关系最为密切的一个环节,也是图灵测试直接使用的工具,现在一个叫CleverBot的机器人号称通过了图灵测试,成功欺骗了800位观众。当然,现在问答类的系统并不是仅仅用于扯淡的,主要的还是类似与10086那样的客服系统,基于某个领域的问答,难度相较而言没那么高。

3、小结

以上很多仅仅是一些肤浅的理解,对NLP内部实现有些许了解,但是不深入。还需要继续阅读书籍以及相关文献,而且还得再恶补数学相关的知识。NLP刚入门,路还长着……

参考资料:

  1. 维基百科
  2. 52NLP
  3. 《统计自然语言处理》 宗成庆
  4. 《自然语言处理的原理及其应用》 杨宪泽
  5. 《自然语言处理》 江铭虎