自然语言处理要解决的问题
自然语言处理要解决的问题:
其实,自然语言处理的应用非常广泛,如:
-
垃圾邮件识别
通过自动分析邮件中的文本内容,判断该邮件是否垃圾邮件。
-
中文输入法
通过识别输入的拼音字符串,识别用户希望输入的汉字。
-
机器翻译
将文本从一种语言转成另一种语言,如中英文机器翻译。
-
自动问答、客服机器人
用文本输入一个问题,再返回一段文本作为问题的答案。
……
这里简单罗列了一些NLP的常见领域:分词,词性标注,命名实体识别,句法分析,语义识别,垃圾邮件识别,拼写纠错,词义消歧,语音识别,音字转换,机器翻译,自动问答……
如果对自然语言处理的应用场景不太了解,可以去腾讯的中文语义平台简单玩几个例子就熟悉了。
3. 自然语言处理的发展现状
根据stafford教授Dan Jurafsky的介绍:
-
有些问题得到了基本解决,如:词性标注、命名实体识别、垃圾邮件识别。
-
有些问题取得长足进展,如:情感分析、共指消解、词义消歧、句法分析、机器翻译、信息抽取。
-
有些问题依然充满挑战,如:自动问答、复述、文摘提取、会话机器人等。
4. 用算法统摄问题
大家可能感受到了,自然语言处理的问题非常庞杂,一时还真不太好系统地梳理。
然而,从我们的学习自然语言处理的经验来看,通过机器学习的基本思路,可以将很多问题都抽象成同样的算法和模型来处理,这样会清晰很多。
比如,词性标注,垃圾邮件识别,褒贬分析,拼写纠错等问题都可以归结成简单的分类问题。这就好用我们之前掌握的机器学习分类方法去很好地处理。
又比如,对于机器翻译,语音识别,音字转换等等领域,都可以抽象成运用隐马尔科夫模型去处理,而这本身是一个更加复杂的分类问题。
因此本系列文章尽量从算法原理的角度去梳理自然语言处理的问题,把这些原理在具体场景的不同变换方式给展示出来。
5. 文本处理基础
5.1 正则表达式
对于英文等字符串类型的自然语言,正则表达式能够很好地做一些简单的处理工作。如词干提取,大小写转换等。
现在主流的编程语言对正则表达式都有较好的支持,如Grep、Awk、Sed、Python、Perl、Java、C/C++。可以通过简单的编程完成一些基本任务。
5.2 分词
对于英文,分词比较直观。一般被空格区分开来的就是不同的词。但是有些不同的词汇表达需要我们细心判断:
![分词复杂性](http://7xnkcs.com1.z0.glb.clouddn.com/20160119_image002.jpg)
这需要我们根据不同的条件做一些简单的判断规则。
这样的方法对英语这种包含固定分隔符的语言行之有效。但对于汉语、日语、德语以及我们上面的“三体文”等文本则不再适用,需要有专门的分词技术。我们将在之后的文章中进行探讨。
- 莎拉波娃现在居住在美国东南部的佛罗里达。
- 莎拉波娃 现在 居住 在 美国 东南部 的 佛罗里达
5.3 编辑距离
编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数。
允许的编辑操作包括:
- 将一个字符替换成另一个字符(substitution,s)
- 插入一个字符(insert,i)
- 删除一个字符(delete,d)
一个简单的示意图如下:
![编辑距离](http://7xnkcs.com1.z0.glb.clouddn.com/20160119_image003.jpg)
我们可以使用动态规划算法解最小编辑距离,其形式化定义如下:
![动态规划](http://7xnkcs.com1.z0.glb.clouddn.com/20160119_image005.jpg)
通过这种方法,给字符串之间定义了一个量化的“距离”的概念,而且很有解释力。
在机器学习中,有了“距离”就可以做很多事情。比如判断两个字符串的相似性,做一些分类、聚类的工作。
在工程上,编辑距离可以用来提供用于拼写纠错的侯选单词。比如我用英文输入法输入一个“girlfriand”的单词。但是词库中没有“girlfriand”这个词。则可以寻找与“girlfriand”编辑距离为1或2的其他字符串,如“girlfriend”、“girlfriends”,作为纠正拼写错误的候选词。剩下的问题就是判断哪个侯选词的作为纠正词的概率更高而已。
6. 分类问题基础
由于自然语言处理中相当一部分都可以抽象成分类问题去处理。我们在这里补充一些分类问题的基本知识,方便以后探讨。
6.1 分类问题的多种类型
-
二分类:判断题
1.1 褒贬分析:判断一段文本是“褒”还是“贬”。
1.2 垃圾邮件识别:判断一封邮件是“正常邮件”还是“垃圾邮件”。
-
多分类:单选题
2.1 词性标注:判断一个词语是名词、动词、形容词、副词等等。
2.2 拼写纠错:判断多个侯选词中的哪个词可以作为最终的纠正词。
2.3 中文分词:从多种分词序列中挑选最优序列。
2.4 机器翻译:从多个备选翻译句子中,判断出最优翻译语句。
-
类重叠分类:多选题
3.1 主题分析:判断一个新闻同时包含哪几类主题(美食、食品安全、健康等)
![主题分析](http://7xnkcs.com1.z0.glb.clouddn.com/20160119_image006.jpg)
有时候管多选题叫做软分类,单选题叫硬分类。
6.2 多分类的评估指标
对于一般二分类,我们评估的指标有召回率、精确度和F值。对于多分类我们也有类似的评价标准。如果cij为有多少篇ci的文档被自动分类到cj类别下,则有:
![召回率、精确率](http://7xnkcs.com1.z0.glb.clouddn.com/20160119_image008.jpg)
7. 小结
本文主要是讲了一些自然语言处理的浅层内容。我们从从破译外星人文字导出自然语言处理过程中的经验主义视角。因为业务场景十分繁杂,我们打算从机器学习算法的角度去观察这些业务场景,以便有个清晰的认识。文本处理的一些基础内容,如正则表达式、分词断句等是自然语言预处理过程中的常用手段。编辑距离是衡量两个字符串相似性的尺度。了解这些基础之后,就可以进行一些典型的自然语言处理问题了,比如文本分类。我们将在接下来的文章中一一介绍。
zhuan:hanxiaoyang
相关文章
- flask基础之请求处理核心机制(五)
- Airtest解决“自动装包”过程中需要输入密码的问题(同适用于随机弹框处理)
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- iOS接收null的处理方法
- 干货 | 解决 App 自动化测试的常见痛点(弹框及首页启动加载完成判断处理)
- 报错"the geometry has no Z values"处理
- python扩展库numpy中函数meshgrid()的使用[当你想要两个for循环嵌套处理时,就该想到它]
- C/C++的“文件包含”处理时头文件被重复包含的问题探究及解决方法(用最简单的例子进行说明)
- 重磅启动!翻译斯坦福大学课程:深度学习与自然语言处理
- linux命令行下如何格式化json并进行各种json处理操作
- linux内核在挂载ramdisk的过程中报错"RAMDISK: incomplete write (10739 != 32768)"如何处理?
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
- Struts2 与 js 处理Get方式提交的中文参数乱码问题
- 中文维基百科语料获取与处理
- 基于Python+MySQL实现物联网引论课程一个火警报警及应急处理系统【100010366】
- 解决悬浮的<header>、<footer>遮挡内容的处理技巧
- SpringSecurity认证处理流程
- 《嵌入式系统数字视频处理权威指南》—— 导读
- 解决页面加载时显示{{}}问题-v-cloak,v-text 解决处理文本里边包含标签关键字--v-html
- vlan报文处理概述
- SpringSecurity整合JWT一些异常了解及处理io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature解决及UnsupportedJwtException:Signed Claims JWSs are not supported
- vue-cli4 配置gzip文件处理、nginx配置解决vue单页面打包文件大首次加载慢的问题
- AOP编程 - 淘宝京东网络处理
- Java 处理 XML 的三种主流技术及介绍