文章目录[隐藏]
NLP全景图
⽹络上有海量的⽂本信息,想要处理这些⾮结构化的数据就需要利⽤ NLP 技术。
NLP 为什么重要?
--⽐尔·盖茨
在⾮结构数据中,⽂本的数量是最多的,他虽然没有图⽚和视频占⽤的空间⼤,但是他的信息量是最⼤的。
为了能够分析和利⽤这些⽂本信息,我们就需要利⽤ NLP 技术,让机器理解这些⽂本信息,并加以利⽤。
什么是⾃然语⾔处理 - NLP
每种动物都有⾃⼰的语⾔,机器也是!
⾃然语⾔处理(NLP)就是在机器语⾔和⼈类语⾔之间沟通的桥梁,以实现⼈机交流的⽬的。
⼈类通过语⾔来交流,狗通过汪汪叫来交流。机器也有⾃⼰的交流⽅式,那就是数字信息。
不同的语⾔之间是⽆法沟通的,⽐如说⼈类就⽆法听懂狗叫,甚⾄不同语⾔的⼈类之间都⽆法直接交流,需要翻译才能交流。
⽽计算机更是如此,为了让计算机之间互相交流,⼈们让所有计算机都遵守⼀些规则,计算机的这些规则就是计算机之间的语⾔。
既然不同⼈类语⾔之间可以有翻译,那么⼈类和机器之间是否可以通过“翻译”的⽅式来直接交流呢?
NLP 就是⼈类和机器之间沟通的桥梁!
为什么是“⾃然语⾔”处理?
⾃然语⾔就是⼤家平时在⽣活中常⽤的表达⽅式,⼤家平时说的「讲⼈话」就是这个意思。
⾃然语⾔:我背有点驼(⾮⾃然语⾔:我的背部呈弯曲状)
NLP 的2⼤核⼼任务
NLP 有2个核⼼的任务:
- ⾃然语⾔理解 - NLU | NLI
- ⾃然语⾔⽣成 - NLG
⾃然语⾔理解 - NLU|NLI
⾃然语⾔理解的5个难点:
- 语⾔的多样性
- 语⾔的歧义性
- 语⾔的鲁棒性
- 语⾔的知识依赖
- 语⾔的上下⽂
⾃然语⾔⽣成 - NLG
NLG 是为了跨越⼈类和机器之间的沟通鸿沟,将⾮语⾔格式的数据转换成⼈类可以理解的语⾔格式,如⽂章、报告等。
NLG 的6个步骤:
- 内容确定 - Content Determination
- ⽂本结构 - Text Structuring
- 句⼦聚合 - Sentence Aggregation
- 语法化 - Lexicalisation
- 参考表达式⽣成 - Referring Expression Generation|REG
- 语⾔实现 - Linguistic Realisation
sNLP 的5个难点
- 语⾔是没有规律的,或者说规律是错综复杂的。
- 语⾔是可以⾃由组合的,可以组合复杂的语⾔表达。
- 语⾔是⼀个开放集合,我们可以任意的发明创造⼀些新的表达⽅式。
- 语⾔需要联系到实践知识,有⼀定的知识依赖。
- 语⾔的使⽤要基于环境和上下⽂。
NLP 的4个典型应⽤
情感分析
互联⽹上有⼤量的⽂本信息,这些信息想要表达的内容是五花⼋⻔的,但是他们抒发的情感是⼀致的:正⾯/积极的 - 负⾯/消极的。
通过情感分析,可以快速了解⽤户的舆情情况。
聊天机器⼈
过去只有 Siri、⼩冰这些机器⼈,⼤家使⽤的动⼒并不强,只是当做⼀个娱乐的⽅式。但是最近⼏年智能⾳箱的快速发展让⼤家感受到了聊天机器⼈的价值。
⽽且未来随着智能家居,智能汽⻋的发展,聊天机器⼈会有更⼤的使⽤价值。
语⾳识别
语⾳识别已经成为了全⺠级的引⽤,微信⾥可以语⾳转⽂字,汽⻋中使⽤导航可以直接说⽬的地,⽼年⼈使⽤输⼊法也可以直接语⾳⽽不⽤学习拼⾳...
机器翻译
⽬前的机器翻译准确率已经很⾼了,⼤家使⽤ Google 翻译完全可以看懂⽂章的⼤意。传统的⼈⾁翻译未来很可能会失业。
NLP 的 2 种途径、3 个核⼼步骤
NLP 可以使⽤传统的机器学习⽅法来处理,也可以使⽤深度学习的⽅法来处理。2 种不同的途径也对应着不同的处理步骤。详情如下:
⽅式 1 :传统机器学习的 NLP 流程
- 语料预处理
- 中⽂语料预处理 4 个步骤
- 英⽂语料预处理的 6 个步骤
- 特征⼯程
- 特征提取
- 特征选择
- 选择分类器
⽅式 2 :深度学习的 NLP 流程
- 语料预处理
- 中⽂语料预处理 4 个步骤
- 英⽂语料预处理的 6 个步骤
- 设计模型
- 模型训练
英⽂ NLP 语料预处理的 6 个步骤
- 分词 - Tokenization
- 词⼲提取 - Stemming
- 词形还原 - Lemmatization
- 词性标注 - Parts of Speech
- 命名实体识别 - NER
- 分块 - Chunking
中⽂ NLP 语料预处理的 4 个步骤
- 中⽂分词 - Chinese Word Segmentation
- 词性标注 - Parts of Speech
- 命名实体识别 - NER
- 去除停⽤词
总结
⾃然语⾔处理(NLP)就是在机器语⾔和⼈类语⾔之间沟通的桥梁,以实现⼈机交流的⽬的。
⾃然语⾔理解 - NLU | NLI
⾃然语⾔理解(NLU)跟 NLP 是什么关系?为什么说它是⼈⼯智能领域⾥⼀个难点?
NLU 的发展史历史和⽬前最现⾦的⽅法是什么?
下文将解答上⾯的问题,全⾯了解⾃然语⾔理解(NLU)。
什么是⾃然语⾔理解(NLU)?
⼤家最常听到的是 NLP,⽽ ⾃然语⾔理解(NLU) 则是 NLP 的⼀部分:
⾃然语⾔理解就是希望机器像⼈⼀样,具备正常⼈的语⾔理解能⼒,由于⾃然语⾔在理解上有很多难点(下⾯详细说明),所以 NLU 是⾄今还远不如⼈类的表现。
下⾯⽤⼀个具体的案例来深度说明⼀下⾃然语⾔理解(NLU):
对话系统这个事情在2015年开始突然⽕起来了,主要是因为⼀个技术的普及:机器学习特别是深度学习带来的语⾳识别和NLU(⾃然语⾔理解)——主要解决的是识别⼈讲的话。
这个技术的普及让很多团队都掌握了⼀组关键技能:意图识别和实体提取。
这意味着什么?我们来看⼀个例⼦。
在⽣活中,如果想要订机票,⼈们会有很多种⾃然的表达:
可以说“⾃然的表达” 有⽆穷多的组合(⾃然语⾔)都是在代表 “订机票” 这个意图的。而听到这些表达的⼈,可以准确理解这些表达指的是“订机票”这件事。
⽽要理解这么多种不同的表达,对机器是个挑战。在过去,机器只能处理“结构化的数据”(⽐如关键词),也就是说如果要听懂⼈在讲什么,必须要⽤户输⼊精确的指令。
所以,⽆论你说“我要出差”还是“帮我看看去北京的航班”,只要这些字⾥⾯没有包含提前设定好的关键词“订机票”,系统都⽆法处理。⽽且,只要出现了关键词,⽐如“我要退订机票”⾥也有这三个字,也会被处理成⽤户想要订机票。
⾃然语⾔理解这个技能出现后,可以让机器从各种⾃然语⾔的表达中,区分出来,哪些话归属于这个意图;⽽那些表达不是归于这⼀类的,⽽不再依赖那么死板的关键词。⽐如经过训练后,机器能够识别“帮我推荐⼀家附近的餐厅”,就不属于“订机票”这个意图的表达。
并且,通过训练,机器还能够在句⼦当中⾃动提取出来“上海”,这两个字指的是⽬的地这个概念(即实体);“下周⼆”指的是出发时间。
这样⼀来,看上去“机器就能听懂⼈话啦!”。
⾃然语⾔理解(NLU)的应⽤
⼏乎所有跟⽂字语⾔和语⾳相关的应⽤都会⽤到NLU,下⾯举⼀些具体的例⼦
机器翻译
基于规则的翻译效果经常不太好,所以如果想提升翻译的效果,必须建⽴在对内容的理解之上。
如果是不理解上下⽂,就会出现下⾯的笑话:
机器客服
如果想实现问答,就要建⽴在多轮对话的理解基础之上,⾃然语⾔理解是必备的能⼒。
下⾯的例⼦对于机器来说就很难理解:
智能⾳箱
智能⾳箱中,NLU 也是重要的⼀个环节。很多语⾳交互都是很短的短语,⾳箱不但需要能否识别⽤户在说什么话,更要理解⽤户的意图。
⽤户并没有提到空调,但是机器需要知道⽤户的意图——空调有点冷,需要把温度调⾼。
⾃然语⾔理解(NLU)的难点
下⾯先列举⼀些机器不容易理解的案例:
- 校⻓说⾐服上除了校徽别别别的
- 过⼏天天天天⽓不好
- 看⻅⻄⻔吹雪点上了灯,叶孤城冷笑着说:“我也想吹吹吹雪吹过的灯”,然后就吹灭了灯。
- 今天多得谢逊出⼿相救,在这⾥我想真⼼感谢“谢谢谢逊⼤侠出⼿”
- 灭霸把美队按在地上⼀边摩擦⼀边给他洗脑,被打残的钢铁侠说:灭霸爸爸叭叭叭叭⼉的在那叭叭啥呢
- 姑姑你估估我⿎⿎的⼝袋⾥有多少⾕和菇!!
- “你看到王刚了吗”“王刚刚刚刚⾛”
- 张杰陪俩⼥⼉跳格⼦:俏俏我们不要跳跳跳跳过的格⼦啦
那么对于机器来说,NLU 难点⼤致可以归为5类:
难点1 :语⾔的多样性
⾃然语⾔没有什么通⽤的规律,你总能找到很多例外的情况。
另外,⾃然语⾔的组合⽅式⾮常灵活,字、词、短语、句⼦、段落…不同的组合可以表达出很多的含义。例如:
难点2 :语⾔的歧义性
如果不联系上下⽂,缺少环境的约束,语⾔有很⼤的歧义性。例如:
难点3:语⾔的鲁棒性
⾃然语⾔在输⼊的过程中,尤其是通过语⾳识别获得的⽂本,会存在多字、少字、错字、噪⾳等问题。例如:
难点4:语⾔的知识依赖
语⾔是对世界的符号化描述,语⾔天然连接着世界知识,例如:
难点5:语⾔的上下⽂
上下⽂的概念包括很多种:对话的上下⽂、设备的上下⽂、应⽤的上下⽂、⽤户画像...
NLU 的实现⽅式
⾃然语⾔理解跟整个⼈⼯智能的发展历史类似,⼀共经历了3次迭代:
- 基于规则的⽅法
- 基于统计的⽅法
- 基于深度学习的⽅法
最早⼤家通过总结规律来判断⾃然语⾔的意图,常⻅的⽅法有:CFG、JSGF等。
后来出现了基于统计学的 NLU ⽅式,常⻅的⽅法有:SVM、ME等。
随着深度学习的爆发,CNN、RNN、LSTM 都成为了最新的"统治者"。
到了2019年,BERT 和 GPT-2 的表现震惊了业界,他们都是⽤了 Transformer,下⾯将重 s点介绍 Transformer,因为他是⽬前「最先进」的⽅法。
语义特征提取能⼒
从语义特征提取能⼒来说,⽬前实验⽀持如下结论:Transformer在这⽅⾯的能⼒⾮常显著地超过RNN和CNN(在考察语义类能⼒的任务WSD中,Transformer超过RNN和CNN⼤约4-8个绝对百分点),RNN和CNN两者能⼒差不太多。
⻓距离特征捕获能⼒
原⽣CNN特征抽取器在这⽅⾯极为显著地弱于RNN和Transformer,Transformer微弱优于 RNN 模 型 ( 尤其在主语谓语距离⼩于 13 时 ) ,能⼒由强到弱排序为Transformer>RNN>>CNN; 但在⽐较远的距离上(主语谓语距离⼤于13),RNN微弱优于Transformer,所以综合看,可以认为Transformer和RNN在这⽅⾯能⼒差不太多,⽽CNN则显著弱于前两者。
任务综合特征抽取能⼒
Transformer综合能⼒要明显强于RNN和CNN(你要知道,技术发展到现在阶段,BLEU绝对值提升1个点是很难的事情),⽽RNN和CNN看上去表现基本相当,貌似CNN表现略好⼀些。
并⾏计算能⼒及运算效率
Transformer Base最快,CNN次之,再次Transformer Big,最慢的是RNN。RNN⽐前两者慢了3倍到⼏⼗倍之间。
⾃然语⾔⽣成 - NLG
⾃然语⾔⽣成 - NLG 是 NLP 的重要组成部分,他的主要⽬的是降低⼈类和机器之间的沟通鸿沟,将⾮语⾔格式的数据转换成⼈类可以理解的语⾔格式。
下⽂除了介绍 NLG 的基本概念,还会介绍 NLG 的3个 Level、6个步骤和3个典型的应⽤。
⾃然语⾔⽣成 - NLG 是 NLP 的重要组成部分。NLU 负责理解内容,NLG 负责⽣成内容。
以智能⾳箱为例,当⽤户说“⼏点了?”,⾸先需要利⽤ NLU 技术判断⽤户意图,理解⽤户想要什么,然后利⽤ NLG 技术说出“现在是6点50分”。
自然语言生成-NLG是什么?
NLG 是为了跨越⼈类和机器之间的沟通鸿沟,将⾮语⾔格式的数据转换成⼈类可以理解的语⾔格式,如⽂章、报告等。
⾃然语⾔⽣成 - NLG 有2种⽅式:
- text - to - text:⽂本到语⾔的⽣成
- data - to - text :数据到语⾔的⽣成
NLG 的3个 LEVEL
简单的数据合并:⾃然语⾔处理的简化形式,这将允许将数据转换为⽂本(通过类似Excel的函数)。为了关联,以邮件合并(MS Word mailmerge)为例,其中间隙填充了⼀些数据,这些数据是从另⼀个源(例如MS Excel中的表格)中检索的。
模板化的 NLG :这种形式的NLG使⽤模板驱动模式来显示输出。以⾜球⽐赛得分板为例。数据动态地保持更改,并由预定义的业务规则集(如if / else循环语句)⽣成。
⾼级 NLG :这种形式的⾃然语⾔⽣成就像⼈类⼀样。它理解意图,添加智能,考虑上下⽂,并将结果呈现在⽤户可以轻松阅读和理解的富有洞察⼒的叙述中。
NLG 的6个步骤
第⼀步:内容确定 - Content Determination
作为第⼀步,NLG 系统需要决定哪些信息应该包含在正在构建的⽂本中,哪些不应该包含。通常数据中包含的信息⽐最终传达的信息要多。
第⼆步:⽂本结构 - Text Structuring
确定需要传达哪些信息后,NLG 系统需要合理的组织⽂本的顺序。例如在报道⼀场篮球⽐赛时,会优先表达「什么时间」「什么地点」「哪2⽀球队」,然后再表达「⽐赛的概况」,最后表达「⽐赛的结局」。
第三步:句⼦聚合 - Sentence Aggregation
不是每⼀条信息都需要⼀个独⽴的句⼦来表达,将多个信息合并到⼀个句⼦⾥表达可能会更加流畅,也更易于阅读。
第四步:语法化 - Lexicalisation
当每⼀句的内容确定下来后,就可以将这些信息组织成⾃然语⾔了。这个步骤会在各种信息之间加⼀些连接词,看起来更像是⼀个完整的句⼦。
第五步:参考表达式⽣成 - Referring Expression Generation|REG
这个步骤跟语法化很相似,都是选择⼀些单词和短语来构成⼀个完整的句⼦。不过他跟语法化的本质区别在于“REG需要识别出内容的领域,然后使⽤该领域(⽽不是其他领域)的词汇”。
第六步:语⾔实现 - Linguistic Realisation
最后,当所有相关的单词和短语都已经确定时,需要将它们组合起来形成⼀个结构良好的完整句⼦。
NLG 的3种典型应⽤
NLG 的不管如何应⽤,⼤部分都是下⾯的3种⽬的:
- 能够⼤规模的产⽣个性化内容
- 帮助⼈类洞察数据,让数据更容易理解
- 加速内容⽣产
下⾯列⼀些⽐较典型的应⽤:
⾃动写新闻
某些领域的新闻是有⽐较明显的规则的,⽐如体育新闻。⽬前很多新闻已经借助 NLG 来完成了。
《腾讯机器⼈⽇均写稿过千篇 你读的新闻可能是AI写的》
聊天机器⼈
⼤家了解聊天机器⼈都是从 Siri 开始的,最近⼏年⼜出现了智能⾳箱的热潮。
除了⼤家⽇常⽣活中很熟悉的领域,客服⼯作也正在被机器⼈替代,甚⾄⼀些电话客服也是机器⼈。
BI 的解读和报告⽣成
⼏乎各⾏各业都有⾃⼰的数据统计和分析⼯具。这些⼯具可以产⽣各式各样的图表,但是输出结论和观点还是需要依赖⼈。NLG 的⼀个很重要的应⽤就是解读这些数据,⾃动的输出结论和观点。(如下图所示)
分词 - TOKENIZATION
分词是 NLP 的基础任务,将句⼦,段落分解为字词单位,⽅便后续的处理的分析。
本⽂将介绍分词的原因,中英⽂分词的3个区别,中⽂分词的3⼤难点,分词的3种典型⽅法。最后将介绍中⽂分词和英⽂分词常⽤的⼯具。
什么是分词?
分词是 ⾃然语⾔理解 - NLP 的重要步骤。
分词就是将句⼦、段落、⽂章这种⻓⽂本,分解为以字词为单位的数据结构,⽅便后续的处理分析⼯作。
为什么要分词?
1. 将复杂问题转化为数学问题
在 机器学习的⽂章 中讲过,机器学习之所以看上去可以解决很多复杂的问题,是因为它把这些问题都转化为了数学问题。⽽ NLP 也是相同的思路,⽂本都是⼀些「⾮结构化数据」,我们需要先将这些数据转化为「结构化数据」,结构化数据就可以转化为数学问题了,⽽分词就是转化的第⼀步。
2. 词是⼀个⽐较合适的粒度
词是表达完整含义的最⼩单位。
字的粒度太⼩,⽆法表达完整含义,⽐如”⿏“可以是”⽼⿏“,也可以是”⿏标“。
⽽句⼦的粒度太⼤,承载的信息量多,很难复⽤。⽐如”传统⽅法要分词,⼀个重要原因是传统⽅法对远距离依赖的建模能⼒较弱。”
3. 深度学习时代,部分任务中也可以「分字」
深度学习时代,随着数据量和算⼒的爆炸式增⻓,很多传统的⽅法被颠覆。
分词⼀直是 NLP 的基础,但是现在也不⼀定了,感兴趣的可以看看这篇论⽂:《Is Word Segmentation Necessary for Deep Learning of Chinese Representations?》。
不过在⼀些特定任务中,分词还是必要的。如:关键词提取、命名实体识别等。
中英⽂分词的3个典型区别
区别1 :分词⽅式不同,中⽂更难
英⽂有天然的空格作为分隔符,但是中⽂没有。所以如何切分是⼀个难点,再加上中⽂⾥⼀词多意的情况⾮常多,导致很容易出现歧义。下⽂中难点部分会详细说明。
区别2 :英⽂单词有多种形态
英⽂单词存在丰富的变形变换。为了应对这些复杂的变换,英⽂NLP相⽐中⽂存在⼀些独特的处理步骤,我们称为词形还原(Lemmatization)和词⼲提取(Stemming)。中⽂则不需要
词性还原:does,done,doing,did 需要通过词性还原恢复成 do。
词⼲提取:cities,children,teeth 这些词,需要转换为 city,child,tooth”这些基本形态
区别3:中⽂分词需要考虑粒度问题
例如「中国科学技术⼤学」就有很多种分法:
中国科学技术⼤学
中国 \ 科学技术 \ ⼤学
中国 \ 科学 \ 技术 \ ⼤学
粒度越⼤,表达的意思就越准确,但是也会导致召回⽐较少。所以中⽂需要不同的场景和
要求选择不同的粒度。这个在英⽂中是没有的。
中⽂分词的3⼤难点
难点 1 :没有统⼀的标准
⽬前中⽂分词没有统⼀的标准,也没有公认的规范。不同的公司和组织各有各的⽅法和规
则。
难点 2 :歧义词如何切分
例如「兵乓球拍卖完了」就有2种分词⽅式表达了2种不同的含义:
- 乒乓球 \ 拍卖 \ 完了
- 乒乓 \ 球拍 \ 卖 \ 完了
难点 3:新词的识别
信息爆炸的时代,三天两头就会冒出来⼀堆新词,如何快速的识别出这些新词是⼀⼤难点。⽐如当年「蓝瘦⾹菇」⼤⽕,就需要快速识别。
3种典型的分词⽅法
分词的⽅法⼤致分为 3 类:
- 基于词典匹配
- 基于统计
- 基于深度学习
给予词典匹配的分词⽅式
优点:速度快、成本低
缺点:适应性不强,不同领域效果差异⼤
基本思想是基于词典匹配,将待分词的中⽂⽂本根据⼀定规则切分和调整,然后跟词典中的词语进⾏匹配,匹配成功则按照词典的词分词,匹配失败通过调整或者重新选择,如此反复循环即可。代表⽅法有基于正向最⼤匹配和基于逆向最⼤匹配及双向匹配法。
基于统计的分词⽅法
优点:适应性较强
缺点:成本较⾼,速度较慢
这类⽬前常⽤的是算法是HMM、CRF、SVM、深度学习等算法,⽐如stanford、Hanlp分词⼯具是基于CRF算法。以CRF为例,基本思路是对汉字进⾏标注训练,不仅考虑了词语出现的频率,还考虑上下⽂,具备较好的学习能⼒,因此其对歧义词和未登录词的识别都具有良好的效果。
基于深度学习
优点:准确率⾼、适应性强
缺点:成本⾼,速度慢
例如有⼈员尝试使⽤双向LSTM+CRF实现分词器,其本质上是序列标注,所以有通⽤性,命名实体识别等都可以使⽤该模型,据报道其分词器字符准确率可⾼达97.5%。常⻅的分词器都是使⽤机器学习算法和词典相结合,⼀⽅⾯能够提⾼分词准确率,另⼀⽅
⾯能够改善领域适应性。
中⽂分词⼯具
下⾯排名根据 GitHub 上的 star 数排名:
- Hanlp
- Stanford 分词
- ansj 分词器
- 哈⼯⼤ LTP
- KCWS分词器
- jieba
- IK
- 清华⼤学THULAC
- ICTCLAS
英⽂分词⼯具
- Keras
- Spacy
- Gensim
- NLTK
词⼲提取STEMMING和词形还原LEMMATISATION
词⼲提取和词形还原是英⽂语料预处理中的重要环节。虽然他们的⽬的⼀致,但是两者还是存在⼀些差异。 下⽂将介绍他们的概念、异同、实现算法等。
词⼲提取和词形还原在 NLP 中在什么位置?
词⼲提取是英⽂语料预处理的⼀个步骤(中⽂并不需要),⽽语料预处理是 NLP 的第⼀步,下⾯这张图将让⼤家知道词⼲提取在这个知识结构中的位置。
什么是词⼲提取和词形还原?
词⼲提取 - Stemming
词⼲提取是去除单词的前后缀得到词根的过程。
常⻅的前后词缀有「名词的复数」、「进⾏式」、「过去分词」...
词形还原 - Lemmatisation
词形还原是基于词典,将单词的复杂形态转变成最基础的形态。
词形还原不是简单地将前后缀去掉,⽽是会根据词典将单词进⾏转换。⽐如「drove」会转换为「drive」。
为什么要做词⼲提取和词形还原?
⽐如当我搜索「play basketball」时,Bob is playing basketball 也符合我的要求,,但是 play 和 playing 对于计算机来说是 2 种完全不同的东⻄,所以我们需要将 playing转换成 play。
词⼲提取和词形还原的⽬的就是将⻓相不同,但是含义相同的词统⼀起来,这样⽅便后续的处理和分析。
词⼲提取和词形还原的 4 个相似点
- ⽬标⼀致。词⼲提取和词形还原的⽬标均为将词的屈折形态或派⽣形态简化或归并
为词⼲(stem)或原形的基础形式,都是⼀种对词的不同形态的统⼀归并的过程。 - 结果部分交叉。词⼲提取和词形还原不是互斥关系,其结果是有部分交叉的。⼀部分词利⽤这两类⽅法都能达到相同的词形转换效果。如“dogs”的词⼲为“dog”,其
原形也为“dog”。 - 主流实现⽅法类似。⽬前实现词⼲提取和词形还原的主流实现⽅法均是利⽤语⾔中存在的规则或利⽤词典映射提取词⼲或获得词的原形。
- 应⽤领域相似。主要应⽤于信息检索和⽂本、⾃然语⾔处理等⽅⾯,⼆者均是这些应⽤的基本步骤。
词⼲提取和词形还原的 5 个不同点
- 在原理上,词⼲提取主要是采⽤“缩减”的⽅法,将词转换为词⼲,如将“cats”处理为“cat”,将“effective”处理为“effect”。⽽词形还原主要采⽤“转变”的⽅法,将词转变为其原形,如将“drove”处理为“drive”,将“driving”处理为“drive”。
- 在复杂性上,词⼲提取⽅法相对简单,词形还原则需要返回词的原形,需要对词形进⾏分析,不仅要进⾏词缀的转化,还要进⾏词性识别,区分相同词形但原形不同的词的差别。词性标注的准确率也直接影响词形还原的准确率,因此,词形还原更
为复杂。 - 在实现⽅法上,虽然词⼲提取和词形还原实现的主流⽅法类似,但⼆者在具体实现上各有侧重。词⼲提取的实现⽅法主要利⽤规则变化进⾏词缀的去除和缩减,从⽽达到词的简化效果。词形还原则相对较复杂,有复杂的形态变化,单纯依据规则⽆法很好地完成。其更依赖于词典,进⾏词形变化和原形的映射,⽣成词典中的有效词。
- 在结果上,词⼲提取和词形还原也有部分区别。词⼲提取的结果可能并不是完整的、具有意义的词,⽽只是词的⼀部分,如 “revival” 词⼲提取的结果
为“reviv”,“ailiner”词⼲提取的结果为“airlin”。⽽经词形还原处理后获得的结果是
具有⼀定意义的、完整的词,⼀般为词典中的有效词。 - 在应⽤领域上,同样各有侧重。虽然⼆者均被应⽤于信息检索和⽂本处理中,但侧重不同。词⼲提取更多被应⽤于信息检索领域,如Solr、Lucene等,⽤于扩展检索,粒度较粗。词形还原更主要被应⽤于⽂本挖掘、⾃然语⾔处理,⽤于更细粒度、更为准确的⽂本分析和表达
3 种主流的词⼲提取算法
Porter
这种词⼲算法⽐较旧。它是从20世纪80年代开始的,其主要关注点是删除单词的共同结尾,以便将它们解析为通⽤形式。它不是太复杂,它的开发停⽌了。
通常情况下,它是⼀个很好的起始基本词⼲分析器,但并不建议将它⽤于复杂的应⽤。相反,它在研究中作为⼀种很好的基本词⼲算法,可以保证重复性。与其他算法相⽐,它也是⼀种⾮常温和的词⼲算法。
「推荐」Snowball
种算法也称为 Porter2 词⼲算法。它⼏乎被普遍认为⽐ Porter 更好,甚⾄发明 Porter 的开发者也这么认为。Snowball 在 Porter 的基础上加了很多优化。Snowball 与 Porter 相⽐差异约为5%。
Lancaster
Lancaster 的算法⽐较激进,有时候会处理成⼀些⽐较奇怪的单词。如果在 NLTK 中使⽤词⼲分析器,则可以⾮常轻松地将⾃⼰的⾃定义规则添加到此算法中。
词形还原的实践⽅法
词形还原是基于词典的,每种语⾔都需要经过语义分析、词性标注来建⽴完整的词库,⽬前英⽂词库是很完善的。
Python 中的 NLTK 库包含英语单词的词汇数据库。这些单词基于它们的语义关系链接在⼀起。链接取决于单词的含义。特别是,我们可以利⽤ WordNet。
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("blogs"))
#Returns blog
词性标注 – PART OF SPEECH
维基百科上对词性的定义为:In traditional grammar, a part of speech (abbreviated
form: PoS or POS) is a category of words (or, more generally, of lexical items)
which have similar grammatical properties.
词性指以词的特点作为划分词类的根据。词类是⼀个语⾔学术语,是⼀种语⾔中词的语法分类,是以语法特征(包括句法功能和形态变化)为主要依据、兼顾词汇意义对词进⾏划分的结果。
从组合和聚合关系来说,⼀个词类是指:在⼀个语⾔中,众多具有相同句法功能、能在同样的组合位置中出现的词,聚合在⼀起形成的范畴。词类是最普遍的语法的聚合。词类划分具有层次性。如汉语中,词可以分成实词和虚词,实词中⼜包括体词、谓词等,体词中⼜可以分出名词和代词等。
词性标注就是在给定句⼦中判定每个词的语法范畴,确定其词性并加以标注的过程,这也是⾃然语⾔处理中⼀项⾮常重要的基础性⼯作,所有对于词性标注的研究已经有较⻓的时间,在研究者⻓期的研究总结中,发现汉语词性标注中⾯临了许多棘⼿的问题。
中⽂词性标注的难点
汉语是⼀种缺乏词形态变化的语⾔,词的类别不能像印欧语那样,直接从词的形态变化上来判别。
常⽤词兼类现象严重。《现代汉语⼋百词》收取的常⽤词中,兼类词所占的⽐例⾼达22.5%,⽽且发现越是常⽤的词,不同的⽤法越多。由于兼类使⽤程度⾼,兼类现象涉及汉语中⼤部分词类,因⽽造成在汉语⽂本中词类歧义排除的任务量巨⼤。
研究者主观原因造成的困难。语⾔学界在词性划分的⽬的、标准等问题上还存在分歧。⽬前还没有⼀个统的被⼴泛认可汉语词类划分标准,词类划分的粒度和标记符号都不统⼀。
词类划分标准和标记符号集的差异,以及分词规范的含混性,给中⽂信息处理带来了极⼤的困难。
词性标注4种常⻅⽅法
关于词性标注的研究⽐较多,这⾥介绍⼀波常⻅的⼏类⽅法,包括基于规则的词性标注⽅法、基于统计模型的词性标注⽅法、基于统计⽅法与规则⽅法相结合的词性标注⽅法、基于深度学习的词性标注⽅法等。
基于规则的词性标注⽅法
基于规则的词性标注⽅法是⼈们提出较早的⼀种词性标注⽅法,其基本思想是按兼类词搭配关系和上下⽂语境建造词类消歧规则。早期的词类标注规则⼀般由### ⼈⼯构建。
随着标注语料库规模的增⼤,可利⽤的资源也变得越来越多,这时候以⼈⼯提取规则的⽅法显然变得不现实,于是乎,⼈们提出了基于机器学习的规则⾃动提出⽅法。
基于统计模型的词性标注⽅法
统计⽅法将词性标注看作是⼀个序列标注问题。其基本思想是:给定带有各⾃标注的词的序列,我们可以确定下⼀个词最可能的词性。
现在已经有隐⻢尔可夫模型(HMM)、条件随机域(CRF)等统计模型了,这些模型可以使⽤有标记数据的⼤型语料库进⾏训练,⽽有标记的数据则是指其中每⼀个词都分配了正确的词性标注的⽂本。
基于统计⽅法与规则⽅法相结合的词性标注⽅法
理性主义⽅法与经验主义相结合的处理策略⼀直是⾃然语⾔处理领域的专家们不断研究和探索的问题,对于词性标注问题当然也不例外。这类⽅法的主要特点在于对统计标注结果的筛选,只对那些被认为可疑的标注结果,才采⽤规则⽅法进⾏歧义消解,⽽不是对所有情况都既使⽤统计⽅法⼜使⽤规则⽅法。
基于深度学习的词性标注⽅法
可以当作序列标注的任务来做,⽬前深度学习解决序列标注任务常⽤⽅法包括LSTM+CRF、BiLSTM+CRF等。
值得⼀提的是,这⼀类⽅法近年来⽂章⾮常多,想深⼊了解这⼀块的朋友们可以看这⾥:
NLP-progress – GitHub
最后再放⼀个词性标注任务数据集 – ⼈⺠⽇报1998词性标注数据集(https://pan.baidu.com/s/1fW908EQmyMv0XB5i0DhVyQ)
词性标注⼯具推荐
Jieba
“结巴”中⽂分词:做最好的 Python 中⽂分词组件,可以进⾏词性标注。
SnowNLP
SnowNLP是⼀个python写的类库,可以⽅便的处理中⽂⽂本内容。
THULAC
THULAC(THU Lexical Analyzer for Chinese)由清华⼤学⾃然语⾔处理与社会⼈⽂计算
实验室研制推出的⼀套中⽂词法分析⼯具包,具有中⽂分词和词性标注功能。
StanfordCoreNLP
斯坦福NLP组的开源,⽀持python接⼝。
HanLP
HanLP是⼀系列模型与算法组成的NLP⼯具包,由⼤快搜索主导并完全开源,⽬标是普及
⾃然语⾔处理在⽣产环境中的应⽤。
NLTK
NLTK是⼀个⾼效的Python构建的平台,⽤来处理⼈类⾃然语⾔数据。
SpaCy
⼯业级的⾃然语⾔处理⼯具,遗憾的是不⽀持中⽂。
Gihub地址 | 官⽹
命名实体识别 – NAMED-ENTITY RECOGNITION | NER
什么是命名实体识别?
命名实体识别(Named Entity Recognition,简称NER),⼜称作“专名识别”,是指识别⽂本中具有特定意义的实体,主要包括⼈名、地名、机构名、专有名词等。简单的讲,就是识别⾃然⽂本中的实体指称的边界和类别。
命名实体识别的发展历史
NER⼀直是NLP 领域中的研究热点,从早期基于词典和规则的⽅法,到传统机器学习的⽅法,到近年来基于深度学习的⽅法,NER研究进展的⼤概趋势⼤致如下图所示。
阶段 1:早期的⽅法,如:基于规则的⽅法、基于字典的⽅法
阶段 2:传统机器学习,如:HMM、MEMM、CRF
阶段 3:深度学习的⽅法,如:RNN – CRF、CNN – CRF
阶段 4:近期新出现的⼀些⽅法,如:注意⼒模型、迁移学习、半监督学习的⽅法
4类常⻅的实现⽅式
早期的命名实体识别⽅法基本都是基于规则的。之后由于基于⼤规模的语料库的统计⽅法在⾃然语⾔处理各个⽅⾯取得不错的效果之后,⼀⼤批机器学习的⽅法也出现在命名实体
类识别任务。宗成庆⽼师在统计⾃然语⾔处理⼀书粗略的将这些基于机器学习的命名实体识别⽅法划分为以下⼏类:有监督的学习⽅法:这⼀类⽅法需要利⽤⼤规模的已标注语料对模型进⾏参数训练。⽬前常⽤的模型或⽅法包括隐⻢尔可夫模型、语⾔模型、最⼤熵模型、⽀持向量机、决策树和条件随机场等。值得⼀提的是,基于条件随机场的⽅法是命名实体识别中最成功的⽅法。
半监督的学习⽅法:这⼀类⽅法利⽤标注的⼩数据集(种⼦数据)⾃举学习。
⽆监督的学习⽅法:这⼀类⽅法利⽤词汇资源(如WordNet)等进⾏上下⽂聚类。
混合⽅法:⼏种模型相结合或利⽤统计⽅法和⼈⼯总结的知识库。
值得⼀提的是,由于深度学习在⾃然语⾔的⼴泛应⽤,基于深度学习的命名实体识别⽅法也展现出不错的效果,此类⽅法基本还是把命名实体识别当做序列标注任务来做,⽐较经典的⽅法是LSTM+CRF、BiLSTM+CRF。
叨叨几句... NOTHING