自然语言处理怎么最快入门?

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

本文整理自知乎上的一个问答,分享给正在学习自然然语言处理的朋友们!

一、自然语言处理是什么?

自然语言处理说白了,就是让机器去帮助我们完成一些语言层面的事情,典型的比如:情感分析、文本摘要、自动问答等等。我们日常场景中比较常见到的类似Siri、微软小冰之类的,这些的基础都是自然语言处理,另外还有一些语音处理,这就暂且不表了。总之,你看到的机器与人利用语言交互,用机器模拟人脑阅读,对话,评论等等这些的基础都是自然语言处理的范畴之内。

二、自然语言处理怎么学?

自然语言处理的实际入门步骤来说,假如单单从应用来说,我觉得还是直接先从简单的应用搞起更好一点,上来就是理论的话可能对一些人还是比较枯燥,我认为一个好的过程是:实践-理论-实践,先由实践搞起,加深兴趣,然后理论研究,深化理解,最后继续实践,知行合一。闲言少叙,下面说下自己的入门步骤:

1、分词

针对中文而言(当然假如你处理英文,可直接跳过这一步),首先就是分词的问题,因为中文相对于英文,并不是空格分隔的,另外进行自然语言处理的相关实践,也不大可能直接一长段文本进行操作,所以分词还是首当其中的。分词的原理暂且不说(比如CRF、霍夫曼等等,有兴趣可自己去了解),这里主要推荐一下常用到(Java)的几个分词工具:

(1)、HanLP 是一个中文自然语言处理的基础包,它囊括了包含分词在内的几乎所有的自然语言处理涉及的基础操作,同时工具包来说,分为data版和ptotable版,对于一般的分词而言,protable完全就可以满足要求。另外还有一些其他的操作,例如词性识别,也是实际应用中比较多的。当然其他的类似关键词提取,情感识别做个参考也就好了,实际还是要自己优化;

(2)、LTP 是哈工大的一个分词组件,相较于HanLP而言,其包含的依存句法分析以及语义依存分析的方法,对于我们基于文本进行更高级一点的操作(比如提取句子的主语、谓语;行动关系等,另外基于此进行分词优化实践也有一定的提升),可以说是比较方便的;但是与此同时,LTP提供分词的方式是利用http接口的方式,这就让它在实际的应用中有那么一点落后,虽然它也提供了自搭服务的方式,但也逃不出请求接口。最后的最后,貌似现在已经和讯飞合作了,开放接口都需要申请,而且还不一定能用。。允悲。

(3)、jieba 说起分词,就不得不提jieba,包括最基础的python版本,然后还有衍生出来的java版、C#版等等,实际使用起来也是比较方便,当然对于java版而言,它没有词性的功能,这也是我在实际应用中使用表少的一个原因吧。

另外,分词工具还有ansj、StanfordNLP中工具等等,用的不多也就不瞎说了。

2、关键词提取

对于中文文本而言,分词完毕,接下来我们要做的事情,大致逃不出那么几件:关键词提取、句子相似性、文本摘要等,这其中一个比较典型的应用就是关键词提取。相应的实践方式主要有以下几种:

(1)、TF-IDF 是关键词提取一个可以说是首先想到的解决方案,它说自己第二,没人敢说第一。当然它的理论也是比较好理解的,归结起来一句话:在一篇文本中那些不常出现(此处指的文本集)的词在当前文本中大量出现,那它就是关键词;TF、IDF也相应的就是两个概念,想看理论,查查便知;具体到应用层级来说,对于大量文本,语料比较丰富的场景下,这种方式提取关键词来说,确实也是比较方便和准确的,但在语料不足的情况下,可能也就just soso了。但是思想是最重要的,这也是我们入门的基础。

(2)、TextRank 是基于Google的PageRank的一个应用于文本的一个关键词提取算法,基于词语窗口的思想,利用相互投票的方式,提取文本关键词。TextRank有一个最大的好处就是不依赖额外文本,针对单篇文本,处理得当也就可以提取出看的过去的关键词,简单实用。关于其优化方式,比如改变词语网络窗口的大小,分词的预过滤,词性权重投票等等,都是一个不错的方向,效果也还算显著。其对应的实现都有开源的版本,GitHub上动动手就有了。

(3)、LDA 从严谨的角度而言,它并不是一个提取关键词的方式,但是对于我们预先有一定分类的文本而言,利用LDA提取文本的中心词,或者说针对类别的关键词,某些情况下效果也是不错的。具体到实现上,Java开源的有JGIbbLDA、当然python的scikit-learn,以及Spark Mllib中都包含了对应的LDA版本,可以一试。

具体到实际的使用场景,对于有大量语料,首推TF-IDF;对于单篇文本,当然还是TextRank;对于类别文本,LDA也不失为一种选择。总之,看你实际应用需求。

3、词向量

从关键词提取直接跳转到词向量,感觉是一个比较大的跳跃,但实际而言,词向量是我们后续进行机器学习或者深度学习的处理,因为机器处理的始终还是二进制,你不可能改变计算机底层的实现(当然说的是现在,没准后来有人就真成了呢,我们当那是一个美好的愿景吧)。词向量说白了,就是用向量的形式表示词,这就牵涉到一个问题了,我们怎么把一个中文词语转化成一个向量呢。这里主要有以下几种方式:

(1)、词袋模型,顾名思义就是把所有的词都放进一个袋子里,然后指定每个词的位置。所以这样生成的向量,就是长度等同于单词总数,尽在词对应的位置置1,其他位置均为0。这样你也应该能想到,实际应用而言,不太现实。

(2)、HashTF,对应词袋模型的困境,人们首先想到的就是怎么缩小向量的维度,同时表示相同的单词呢,HashTF的基本思想也就是为了解决这个问题,利用Hash的思想,将大量的单词映射到一个小维度向量中,来解读维度爆炸的问题,当然有利有弊,仍然不能很好的解决词语映射的问题。

(3)、Word2Vec是工业上比较常用的一个词向量模型工具,也是实际应用中采用的。其思想包括CBOW和Skip-Gram,基本思想都是词语和词语周围单词间的一个共现关系,它在一定程度上考虑了语境和语义的影响,是一个可以实际使用的工具。

概括来说,在我们后期利用机器学习或者深度学习处理问题的时候,词向量是我们必不可少的一步,word2vec也是我们可以考虑的一个比较不错的选择。

4、文本分类

文本分类是一个比较大的概念,具体到应用,其中包括了情感识别、敏感识别等,具体到实现方式,包括二类分类、多类别分类、多标签分类等。就是为了把一组文本按照指定要求利用机器进行区分。具体到实现算法而言,不胜枚举。。Spark Mllib中包含了大量的分类算法,可以进行实践,这也是入门的一种比较快速的方式,先会后懂然后深入。

5、自动问答

自动问答是一个比较热的概念,也是一个应用比较广泛的自然语言处理案例,当前业界最高水平R-Net已经可以达到80%多的准确率,已经是一个比较了不起的成就了,但是实际操作起来,也还是有一定难度,我也在不断摸索,暂时不瞎说了。

三、自然语言处理的深入

谈到自然语言处理的深入,这个可以做的就比较多了,上面列举的各个方面都与比较大的优化空间。但总体而言,最大的几个问题在于分词、词向量的转化以及文本特征的提取,这也是一定程序上困扰我们继续提高的几大阻碍。拿分词来说,无论是基于词典和算法的分词还是目前基于深度学习的分词方式,都只能说一定程度上进行分词实现,想要达到人脑的分词效果,实际上还是前路漫漫;词向量的转化在一定程序上也依赖于大量的语料,而我们也不可能在训练模型时囊括所有的词语,所有的语境,所有的文本,这些也都是不现实的,只能说时优化算法或者选择一种更好的方式;文本特征的提取也是一个我们在后期进行学习过程中一个绕不过去的坎。总而言之,自然语言处理说简单也简单,说难也难,就看你想要达到什么样的高度。

作者:郑海伦

 

转载于:https://my.oschina.net/u/3793864/blog/2962080

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

点分治题表

poj1741: tree bzoj2152: 聪聪可可 bzoj2599: [IOI2011]Race [SPOJ1825]免费旅行 bzoj4016: [FJOI2014]最短路径树问题 (字典序挺骚) 转载于:https://www.cnblogs.com/TSHugh/p/8179241.html

dotnet-exec 0.8.0 released

dotnet-exec 0.8.0 releasedIntrodotnet-exec 是一个 C# 程序的小工具,可以用来运行一些简单的 C# 程序而无需创建项目文件,而且可以自定义项目的入口方法,支持但不限于 Main 方法Install/Updatedotnet-exec 是一个 dotnet tool,可…

政策推动加速5G发展 全球统一标准成大势所趋

2017IMT-2020(5G)峰会6月12日至13日在京召开。英特尔院士、通信与设备事业部无线标准首席技术专家吴耕对本网记者表示,未来5G技术不仅仅会以单个技术的身份去发展,它会和行业进行更多的融合。随着行业的发展、平台的发展、跨行业的融合,人们会…

普通高中段计算机学科知识,高中计算机学科的特点及教学内容浅探

摘要:为培养跨世纪接班人,发展和提高我国的计算机技术和水平,培养学生的计算机意识,普及计算机文化,提高科学文化素质,许多中学都相继开设了计算机课程,计算机课程将逐步成为中小学的一门独立的知识性与技能性相结合的基础性学科.计算机课程的开设,丰富了基础教育的…

Siamese Network理解

提起siamese network一般都会引用这两篇文章: 《Learning a similarity metric discriminatively, with application to face verification》和《 Hamming Distance Metric Learning》。 本文主要通过论文《Learning a Similarity Metric Discriminatively, with A…

HashMap是如何工作的

2019独角兽企业重金招聘Python工程师标准>>> 1 HashMap在JAVA中的怎么工作的? 基于Hash的原理 2 什么是哈希? 最简单形式的 hash,是一种在对任何变量/对象的属性应用任何公式/算法后, 为其分配唯一代码的方法。 一个真…

英特尔布局5G 提供端到端的解决方案

错失了移动互联设备市场的英特尔,想在5G和物联网上抢得先机。 在英特尔5G行业发展沙龙上,英特尔院士、通信与设备事业部无线标准首席技术专家吴耕表示,全球对5G产业有相当高的期待,下一代网的研发重心就是从以人为本的网向以物为本…

计算机网络实验进入实时模式,计算机网络实验1 PacketTrace基本使用.doc

计算机网络实验1 PacketTrace基本使用太原理工大学现代科技学院计算机通信网络课程 实验报告专业班级学 号姓 名指导教师 实验名称 同组人专业班级 学号 姓名 成绩一、实验目的掌握Cisco Packet Tracer 软件的使用方法。二、实验任务在Cisco Packet Tracer 中用HUB 组建局域网&…

adb不识别设备(手机)的若干情形及解决方法

1.执行adb root 提示adb: unable to connect for root: no devices/emulators found;执行adb devices ,List下无设备 》往往是数据线或USB插口问题,换根数据线或换个USB插口试试 2.执行adb devices List下提示 “592b925b no permissions (verify ud…

如何做到十五分钟领略PowerBI的DAX精华及框架

有小伙伴问,如何最快速理解整套 DAX 精华体系,例如:15分钟。这虽然是个不可能完成的任务,但在借助脑图PPT的强大能力下,还是可以做到的。如果你从没接触过 DAX,但未来要学习 DAX,以下视频值得看…

php html 转xml,用PHP生成XML文档(转义字符)

用PHP生成XML文档(转义字符)我正在从PHP脚本生成XML文档,并且需要转义XML特殊字符。我知道应该转义的字符列表; 但是正确的方法是什么?应该使用反斜杠(\)来转义字符还是正确的方法?有内置的PHP函数可以为我处理此问题吗&#xff1…

【例题 8-13 UVA - 11093】Just Finish it up

【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 尺取法。 假设现在取[l..r]这一段。 然后发现累加的和小于0了。 那么方法只能是不走l..l1这一段了 即delta递减(p[l]-q[l]); 直到delta>0为止。 某个时刻如果发现r1l 或者l1且rn 则合法。 如果发现l大于n了.…

springboot配置允许跨域访问

2019独角兽企业重金招聘Python工程师标准>>> 因springboot框架通常用于前后端分离项目,因此需配置后台允许跨域访问(具体看注释),配置类如下,将该类加入工程中即可。 import org.springframework.context.a…

机器视觉传感器选型,交互作用决定取舍

目前,如何选择机器视觉传感器在当代的应用可谓是越来越广泛,如何选择机器视觉传感器是值得我们好好学习的,现在我们就深入了解如何选择机器视觉传感器。 相机是机器视觉系统的眼睛,而相机的心脏是图像传感器。传感器的选择取决于准…

大连交通大学计算机网络,计算机网络题库(大连交通大学)chapter5.doc

计算机网络题库(大连交通大学)chapter5Chapter 5 The Link Layer and Local Area Network1.A ( ) protocol is used to move a datagram over an individual link.Aapplication-layerBtransport-layerCnetwork-layerDlink-layer2.The units of data exch…

使用qrcode类制作二维码

<?phprequire_once ./phpqrcode/phpqrcode.php;/** 地址:http://phpqrcode.sourceforge.net/ 下载qrcode类* param string $url 要生成的链接* param bool $local 是否生成本地文件 * param string $logo 中间图片地址 */ echo qrcode(https://www.cnblogs.co…

《Hadoop大明白》【1】Hadoop的核心组件

为什么80%的码农都做不了架构师&#xff1f;>>> 本书适用于想对大数据平台Hadoop有深入了解的程序员朋友&#xff0c;会帮助你以后在应用开发方面趟平一些坑。 1&#xff0c;Hadoop 是一个系列大数据组件构成的应用平台&#xff0c;可由多个廉价机器搭建集群&#…

计算机专业学教育技术优势,西南交通大学教育技术学(040110)专业介绍

一、学科概况“教育技术学”是教育学一级学科下的一个二级学科&#xff0c;教育技术学是教育学和计算机信息技术发展下新兴的跨专业交叉性学科&#xff0c;也是一个理论与实践相结合的应用学科。主要研究信息技术特别是计算机网络技术、多媒体技术与教育技术的有效整合&#xf…

.NET7是如何优化Guid.Equals性能的?

简介在之前的文章中&#xff0c;我们多次提到 Vector - SIMD 技术&#xff0c;也答应大家在后面分享更多.NET7 中优化的例子&#xff0c;今天就带来一个使用 SIMD 优化Guid.Equals()方法性能的例子。为什么 Guid 能使用 SIMD 优化&#xff1f;首先就需要介绍一些背景知识&#…

go语言载入json的一个坑

问题简介 go语言标准库汇总内置了对 json 文件的处理&#xff0c;非常方便&#xff0c;最近在写一个应用的时候&#xff0c;需要从 json 文件中载入 配置&#xff0c;由于是 go 新手&#xff0c;忽略一个细节&#xff0c;导致载入内容始终为空 代码演示 代码是最好的说明载体 p…