NLP系列(1)_从破译外星人文字浅谈自然语言处理基础
作者:龙心尘 &&寒小阳
时间:2016年1月。
出处:
http://blog.csdn.net/longxinchen_ml/article/details/50543337
http://blog.csdn.net/han_xiaoyang/article/details/50545650
声明:版权所有,转载请联系作者并注明出处
1. 如果让你破译“三体”人文字你会怎么办?
我们试着开一下脑洞:假如你有一个优盘,里面存了大量“三体”人(刘慈欣小说中的高智能外星人)的网络文本信息,你会怎样通过这些信息去了解外星文明并从中获取有价值的技术情报?当然,“三体”人的文字都长这样儿:

“全是乱码,根本摸不着头脑!”
好吧,的确是这样。其实在计算机的眼中,人类的语言跟外星人的语言也没什么两样。
让计算机“理解”人类语言中的种种信息,甚至像人类一样做出反应,这些是自然语言处理的主要内容。
那我们怎么分析呢?首先,我们尝试找出最小观察对象,发现外星人文字好像是一块一块的方块字,每一个方块字可以作为我们的一个分析的基本语言单位。我们对这些方块字做一些基本的统计,大致就能知道“三体”人语言的基本词汇量、常用词、罕见词、常用固定搭配等等。可见统计方法是一个比较有用的利器。
而且,我们发现,有些方块字直接由一个空格将其隔开。因此将方块字区分成不同的区域,每一个区域是否可以理解成一句话?这个工作就是“断句”,也是自然语言处理当中的一个典型问题。
然后空行可以作为分段。按照人类语言的经验,可能段首第一句话会包含更多的信息。
还能继续分析吗?似乎比较难了。可是后来你发现,这个优盘中的外星人语料库有些是“标记”了的。比如有些信息是像在豆瓣网站中那样被组织的。里面每段话都有一些类似“好评”“差评”的标记。基于这些标记,你可以统计出某些词在好评中出现的概率比差评的更高,这些词可能就是“褒义词”。类似的,你也可以统计出一些“贬义词”。基于这些褒、贬义词,可以去判断其他文本的褒贬性。这就是自然语言处理中的“褒贬分析”过程。
……
由此可见,当面对一种一无所知的语言的时候,似乎最直接的方法就是掌握大量的语料库,而且这些语料最好是经过各种方式标注了的。然后对其进行各种各样的统计,发掘一些有价值的信息。这是传说中自然语言处理的经验主义视角。
2. 自然语言处理要解决的问题:
其实,自然语言处理的应用非常广泛,如:
垃圾邮件识别
通过自动分析邮件中的文本内容,判断该邮件是否垃圾邮件。
中文输入法
通过识别输入的拼音字符串,识别用户希望输入的汉字。
机器翻译
将文本从一种语言转成另一种语言,如中英文机器翻译。
自动问答、客服机器人
用文本输入一个问题,再返回一段文本作为问题的答案。
……
这里简单罗列了一些NLP的常见领域:分词,词性标注,命名实体识别,句法分析,语义识别,垃圾邮件识别,拼写纠错,词义消歧,语音识别,音字转换,机器翻译,自动问答……
如果对自然语言处理的应用场景不太了解,可以去腾讯的中文语义平台简单玩几个例子就熟悉了。
3. 自然语言处理的发展现状
根据stafford教授Dan Jurafsky的介绍:
有些问题得到了基本解决,如:词性标注、命名实体识别、垃圾邮件识别。
有些问题取得长足进展,如:情感分析、共指消解、词义消歧、句法分析、机器翻译、信息抽取。
有些问题依然充满挑战,如:自动问答、复述、文摘提取、会话机器人等。
4. 用算法统摄问题
大家可能感受到了,自然语言处理的问题非常庞杂,一时还真不太好系统地梳理。
然而,从我们的学习自然语言处理的经验来看,通过机器学习的基本思路,可以将很多问题都抽象成同样的算法和模型来处理,这样会清晰很多。
比如,词性标注,垃圾邮件识别,褒贬分析,拼写纠错等问题都可以归结成简单的分类问题。这就好用我们之前掌握的机器学习分类方法去很好地处理。
又比如,对于机器翻译,语音识别,音字转换等等领域,都可以抽象成运用隐马尔科夫模型去处理,而这本身是一个更加复杂的分类问题。
因此本系列文章尽量从算法原理的角度去梳理自然语言处理的问题,把这些原理在具体场景的不同变换方式给展示出来。
5. 文本处理基础
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.2 垃圾邮件识别:判断一封邮件是“正常邮件”还是“垃圾邮件”。
多分类:单选题
2.1 词性标注:判断一个词语是名词、动词、形容词、副词等等。
2.2 拼写纠错:判断多个侯选词中的哪个词可以作为最终的纠正词。
2.3 中文分词:从多种分词序列中挑选最优序列。
2.4 机器翻译:从多个备选翻译句子中,判断出最优翻译语句。
类重叠分类:多选题
3.1 主题分析:判断一个新闻同时包含哪几类主题(美食、食品安全、健康等)

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

7. 小结
本文主要是讲了一些自然语言处理的浅层内容。我们从从破译外星人文字导出自然语言处理过程中的经验主义视角。因为业务场景十分繁杂,我们打算从机器学习算法的角度去观察这些业务场景,以便有个清晰的认识。文本处理的一些基础内容,如正则表达式、分词断句等是自然语言预处理过程中的常用手段。编辑距离是衡量两个字符串相似性的尺度。了解这些基础之后,就可以进行一些典型的自然语言处理问题了,比如文本分类。我们将在接下来的文章中一一介绍。
NLP系列(1)_从破译外星人文字浅谈自然语言处理基础的更多相关文章
- NLP系列(1)_从破译外星人文字浅谈自然语言处理的基础
作者:龙心尘 &&寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50543337, h ...
- NLP系列(5)_从朴素贝叶斯到N-gram语言模型
作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50646528 ...
- NLP系列(2)_用朴素贝叶斯进行文本分类(上)
作者:龙心尘 && 寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50597149 h ...
- NLP系列(4)_朴素贝叶斯实战与进阶
作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50629608 htt ...
- NLP系列(4)_朴素贝叶斯实战与进阶(转)
http://blog.csdn.net/han_xiaoyang/article/details/50629608 作者: 寒小阳 && 龙心尘 时间:2016年2月. 出处:htt ...
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50629110 ...
- OO_JAVA_JML系列作业_单元总结
OO_JAVA_JML系列作业_单元总结 (1)梳理JML语言的理论基础.应用工具链情况 简单梳理 以下三者是jml规格里的核心,对一个方法功能和属性的限制: requires子句:规定方法的前置条件 ...
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 【公众号系列】浅谈SAP项目管理的技能
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[[公众号系列]浅谈SAP项目管理的技能 写 ...
随机推荐
- [Micropython]TPYBoard v10x拼插编程实验 点亮心形点阵
一.什么是TPYBoard开发板 TPYBoard是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一款MicroPython开发板,它基于STM32F405单片机, ...
- Unity依赖注入
一.简介 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的 ...
- UWP中的文件相关操作
最近开始做UWP开发,图省事儿就把自己之前一个Winform项目的一部分代码拷贝到了新写的UWP项目中来.整出了一些幺蛾子,下面做一个记录. 首先提一个重点就是:UWP里关于文件的操作尽量用Stora ...
- [LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列
Given an unsorted array of integers, find the length of longest continuous increasing subsequence. E ...
- 认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法
(一)认识JQuery JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法 JQuery的主旨:以更少的代码,实现更多的功能 (二)JQue ...
- poj 2886 线段树+反素数
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 12744 Acc ...
- [bzoj4866] [Ynoi2017]由乃的商场之旅
来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场 ...
- Spring源码分析(一)--BeanProcessor
一.何谓BeanProcessor BeanProcessor是SpringFramework里非常重要的核心接口之一,我先贴出一段源代码: /* * Copyright 2002-2015 the ...
- Python中byte与str
原文传送门:请点击 现在计算机中,在内存中采用unicode编码方式. 可以看到上图中,字节型数据t并没有像想象中的一样显示0,1字符串.显示仍然是b,这是因为t是采用utf-8来编码,而utf-8与 ...
- java 第三次作业
(一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Gr ...