NLP系列(1)_从破译外星人文字浅谈自然语言处理基础

作者:龙心尘 &&寒小阳
时间:2016年1月。
出处:
http://blog.csdn.net/longxinchen_ml/article/details/50543337
http://blog.csdn.net/han_xiaoyang/article/details/50545650
声明:版权所有,转载请联系作者并注明出处

1. 如果让你破译“三体”人文字你会怎么办?

我们试着开一下脑洞:假如你有一个优盘,里面存了大量“三体”人(刘慈欣小说中的高智能外星人)的网络文本信息,你会怎样通过这些信息去了解外星文明并从中获取有价值的技术情报?当然,“三体”人的文字都长这样儿:

在这里插入图片描述

“全是乱码,根本摸不着头脑!”

好吧,的确是这样。其实在计算机的眼中,人类的语言跟外星人的语言也没什么两样。

让计算机“理解”人类语言中的种种信息,甚至像人类一样做出反应,这些是自然语言处理的主要内容。

那我们怎么分析呢?首先,我们尝试找出最小观察对象,发现外星人文字好像是一块一块的方块字,每一个方块字可以作为我们的一个分析的基本语言单位。我们对这些方块字做一些基本的统计,大致就能知道“三体”人语言的基本词汇量、常用词、罕见词、常用固定搭配等等。可见统计方法是一个比较有用的利器。

而且,我们发现,有些方块字直接由一个空格将其隔开。因此将方块字区分成不同的区域,每一个区域是否可以理解成一句话?这个工作就是**“断句”**,也是自然语言处理当中的一个典型问题。

然后空行可以作为分段。按照人类语言的经验,可能段首第一句话会包含更多的信息。

还能继续分析吗?似乎比较难了。可是后来你发现,这个优盘中的外星人语料库有些是“标注”了的。
比如你找到一个**《三体语汉语双语词典》** ,原来三体人早就开始窃取中国情报了,还做了个词典。那这个词典刚好可以为你所用,里面词与词的对应关系其实就是一种标注信息。而且还有一些双语例句,这也是“标注信息”。用NLP专门些的说法,这些就是“标注语料”。有了它们,就可以通过神经网络训练机器翻译模型。
还比如,你发现有些信息是像在豆瓣网站中那样被组织的。里面每段话都有一些类似“赞”与“踩”的标记。基于这些标记,你可以统计出某些词在好评中出现的概率比差评的更高,这些词可能就是“褒义词”。类似的,你也可以统计出一些“贬义词”。基于这些褒、贬义词,可以去判断其他文本的褒贬性。这就是自然语言处理中的“褒贬分析”过程。

……

由此可见,当面对一种一无所知的语言的时候,似乎最直接的方法就是掌握大量的语料,而且这些语料最好是经过各种方式标注了的。然后对其进行各种各样的统计,发掘一些有价值的信息。其中,通过统计方法学习知识的手段就是传说中自然语言处理的经验主义视角,而深度学习也是需要大量统计语料的,本质上也是一种经验主义。另一方面,深度神经网络由于其相互连接的网络结构,也是一种“连接主义”视角。这些问题我们在之后的文章里可以进行更充分的探讨。

2. 自然语言处理要解决的问题:

其实,自然语言处理的应用非常广泛,如:

  • 垃圾邮件识别

    通过自动分析邮件中的文本内容,判断该邮件是否垃圾邮件。

  • 中文输入法

    通过识别输入的拼音字符串,识别用户希望输入的汉字。

  • 机器翻译

    将文本从一种语言转成另一种语言,如中英文机器翻译。

  • 自动问答、客服机器人

    用文本输入一个问题,再返回一段文本作为问题的答案。

    ……

这里简单罗列了一些NLP的常见领域:分词,词性标注,命名实体识别,句法分析,语义识别,垃圾邮件识别,拼写纠错,词义消歧,语音识别,音字转换,机器翻译,自动问答……

如果对自然语言处理的应用场景不太了解,可以去百度的的NLPC自然语言处理平台简单玩几个例子就熟悉了。里面的api非常丰富,而且都是基于百度十几年的NLP技术积累和全国最大的标注语料,效果杠杠的。

3. 自然语言处理的发展现状

根据stafford教授Dan Jurafsky的介绍:

  • 有些问题得到了基本解决,如:词性标注、命名实体识别、垃圾邮件识别。

  • 有些问题取得长足进展,如:情感分析、共指消解、词义消歧、句法分析、机器翻译、信息抽取。

  • 有些问题依然充满挑战,如:自动问答、复述、文摘提取、会话机器人等。

4. 自然语言处理问题的简单分类

大家可能感受到了,自然语言处理的问题非常庞杂,一时还真不太好系统地梳理。我们这里简单列出主流的几类:

  • 文本分类问题:垃圾邮件识别,黄反识别,褒贬分析等。这类问题是对于输入的文本,直接判断其属于某一/几类的概率。

  • 序列标注问题:分词,词性标注,命名实体识别等。这类问题是对于输入的一句话,直接判断里面的每个字是否属于一个词,是词头、词中、词尾还是独立词,词的词性如何,名词词性的词具体是人名、地名还是其他专属名词。这类问题有点像分类问题。但是每个字的判断需要考虑其上下文的信息,乃至整句话的信息,相互之间存在影响,故与文本分类不同。

  • 序列生成问题:机器翻译,自动问答,阅读理解,自动摘要等。这些问题的输入序列与输出序列长度不相等,难以一一对应,所以是更加复杂的文本生成问题。

  • 无监督学习问题:文本聚类、主题模型等问题。前3个问题都是基于有标注语料的NLP问题,叫做有监督学习问题。而对于没有标注只有大量语料的情况,叫做无监督学习问题。

  • 其他重要问题,如文本表示问题(词袋子模型,词向量,句子向量等),语义相似度计算问题,多任务学习问题等。

5. 文本处理基础

文本处理往往是解决NLP问题的基础。也十分重要,这里简单介绍一下。

5.1 正则表达式

对于英文等字符串类型的自然语言,正则表达式能够很好地做一些简单的处理工作。如词干提取,大小写转换等。

现在主流的编程语言对正则表达式都有较好的支持,如Grep、Awk、Sed、Python、Perl、Java、C/C++。可以通过简单的编程完成一些基本任务。

5.2 分词

对于英文,分词比较直观。一般被空格区分开来的就是不同的词。但是有些不同的词汇表达需要我们细心判断

分词

这需要我们根据不同的条件做一些简单的判断规则

这样的方法对英语这种包含固定分隔符的语言行之有效。但**对于汉语、日语、德语以及我们上面的“三体文”等文本则不再适用,需要有专门的分词技术。**我们将在之后的文章中进行探讨。

  • 莎拉波娃现在居住在美国东南部的佛罗里达。
  • 莎拉波娃 现在 居住 在 美国 东南部 的 佛罗里达

5.3 编辑距离

编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数。

允许的编辑操作包括:

  • 将一个字符替换成另一个字符(substitution,s)

  • 插入一个字符(insert,i)

  • 删除一个字符(delete,d)

一个简单的示意图如下:

在这里插入图片描述

我们可以使用动态规划算法解最小编辑距离,其形式化定义如下:

在这里插入图片描述

通过这种方法,给字符串之间定义了一个量化的“距离”的概念,而且很有解释力。

在机器学习中,有了“距离”就可以做很多事情。比如判断两个字符串的相似性,做一些分类、聚类的工作。

在工程上,**编辑距离可以用来提供用于拼写纠错的侯选单词。**比如我用英文输入法输入一个“girlfriand”的单词。但是词库中没有“girlfriand”这个词。则可以寻找与“girlfriand”编辑距离为1或2的其他字符串,如“girlfriend”、“girlfriends”,作为纠正拼写错误的候选词。剩下的问题就是判断哪个侯选词的作为纠正词的概率更高而已。

6. 分类问题基础

由于自然语言处理中相当一部分都可以抽象成分类问题去处理。我们在这里补充一些分类问题的基本知识,方便以后探讨。

6.1 分类问题的多种类型

  1. 二分类:判断题

1.1 褒贬分析:判断一段文本是“褒”还是“贬”。

1.2 垃圾邮件识别:判断一封邮件是“正常邮件”还是“垃圾邮件”。

  1. 多分类:单选题

  2. 多标签分类:多选题

有时候管多选题叫做软分类,单选题叫硬分类。

6.2 多分类的评估指标

对于一般二分类,我们评估的指标有召回率、精确度和F值。对于多分类我们也有类似的评价标准。如果cij为有多少篇ci的文档被自动分类到cj类别下,则有:

在这里插入图片描述

7. 小结

本文主要是讲了一些自然语言处理的浅层内容。我们从从破译外星人文字导出自然语言处理过程中的经验主义视角。因为业务场景十分繁杂,我们简单对问题做了些归类。文本处理的一些基础内容,如正则表达式、分词断句等是自然语言预处理过程中的常用手段。编辑距离传统上是衡量两个字符串相似性的尺度。了解这些基础之后,就可以进行一些典型的自然语言处理问题了,比如文本分类。我们将在接下来的文章中一一介绍。

猜你喜欢

转载自blog.csdn.net/longxinchen_ml/article/details/50543337
今日推荐