自然语言处理(NLP Natural Language Processing)是一种专业分析人类语言的人工智能。就是在机器语⾔和⼈类语言之间沟通的桥梁,以实现人机交流的目的。
在人工智能出现之前,机器智能处理结构化的数据(例如Excel里的数据)。但是网络中 大部分的数据都是非结构化的,例如:文章、图片、音频、视频...
在非结构数据中,文本的数量是最多的,他虽然没有图片和视频占用的空间大,但是他的 信息量是最大的。
为了能够分析和利用这些文本信息,我们就需要利用NLP技术,让机器理解这些文本信息,并加以利用。
NLP 的主要内容大概如下:
2个核⼼心任务:
- 自然语言理解 - NLU
- 自然语言生成 - NLG
5个难点:
- 语言是没有规律的,或者说规律是错综复杂的。
- 语言是可以*组合的,可以组合复杂的语言表达。
- 语言是一个开放集合,我们可以任意的发明创造一些新的表达方式。
- 语言需要联系到实践知识,有一定的知识依赖。
- 语言的使用要基于环境和上下文。
4个典型应用:
- 情感分析
- 聊天机器人
- 语音识别
- 机器翻译
6个实现步骤:
- 分词-tokenization
- 次干提取-stemming
- 词形还原-lemmatization
- 词性标注-pos tags
- 命名实体识别-ner
- 分块-chunking
自然语言理解 - NLU
1. 什么是自然语言理解(NLU)?
自然语言处理(N LP , Natural Language Processing)是使用自然语言同计算机进行通讯的技术, 因为处理自然语言的关键是要让计算机“理解”自然语言,所以自然语言处理又叫做自然语言理解(NLU ,Natural Language Understanding), 也称为计算语言学(Computational Ling uistics)。一方面它是语言信息处理的一个分支 , 另一方面它是人工智能(AI , Artificial Intelligence)的核心课题之一 。
比如我们平时用的智能音箱:
我想听歌
放首歌
来点音乐
...
人们会有很多种自然的表达,可以说“自然的表达”有无穷多的组合都是在代表“听歌”这个意图的。而要理解这么多种不同的表达,对机器是个挑战。早些时候,机器只能处理结构化的数据(比如关键词),也就是说如果要听懂人在讲什么,必须要用户输入精确的指令。
而这些指令的关键词肯定在不同表达中会被误判,所以显得很笨。自然语言理解这个技能出现后,可以让机器从各种自然语言的表达中,区分出来,哪些话 归属于这个意图;而那些表达不是归于这一类的,而不再依赖那么死板的关键词。
再比如说智能音响:
“太吵了”
机器:“已帮您调小音量”
用户并没有提到音量,但是机器需要知道用户的意图——音量太高,需要把音量调小。
2. 自然语言理解(NLU)的应用
- 机器翻译(有道、百度翻译等)
- 机器客服(各种app里面的机器客户)
- 智能音箱(小爱音箱、天猫精灵等)
3. 自然语言理解(NLU)的难点
难点1:语言的多样性
自然语言有很多不同的表达,组合方式非常灵活,不同的组合可以表达多种含义,总能找到很多例外的情况。
难点2:语言的歧义性
如果不联系上下文,缺少环境的约束,语言有很大的歧义性。
难点3:语言的鲁棒性
自然语言在输入的过程中,尤其是通过语音识别获得的文本,会存在多字、少字、错字、噪音等问题。
难点4:语言的知识依赖
语言是对世界的符号化描述,语言天然连接着世界知识。
难点5:语言的上下文
上下文的概念包括很多种:对话的上下文、设备的上下文、应用的上下文、用户画像。
4. NLU的实现方式
自然语言理解一共经历了 3次迭代:
- 基于规则的方法
- 基于统计的方法
- 基于深度学习的方法
总结规律来判断自然语言的意图,常见的方法有:CFG、JSGF等。
基于统计学的NLU方式,常见的方法有:SVM、ME等。
随着深度学习的爆发,CNN、RNN、LSTM都成为了最新的主流,Transformer是目前最先进的方法。
自然语言生成 - NLG
NLG是为了跨越人类和机器之间的沟通鸿沟,将非语言格式的数据转换成人类可以理解的 语言格式,如文章、报告等
1. 自然语言生成-NLG有2种方式:
- text - to - text:文本到语言的生成
- data - to - text :数据到语言的生成
2. NLG的3个LEVEL
简单的数据合并:自然语言处理的简化形式,这将允许将数据转换为文本(通过类似 Excel的函数)。
模板化的NLG:这种形式的NLG使用模板驱动模式来显示输出。。数据动态地保持更改,并由预定义的业务规则集(如if/else循环语句)生成。
高级NLG:这种形式的自然语言生成就像人类一样。它理解意图,添加智能,考虑上下 文,并将结果呈现在用户可以轻松阅读和理解的富有洞察力的叙述中。
3. NLG的6个步骤
第一步:内容确定-Content Determination
作为第一步,NLG系统需要决定哪些信息应该包含在正在构建的文本中,哪些不应该包 含。通常数据中包含的信息比最终传达的信息要多。
第二步:文本结构-Text Structuring
确定需要传达哪些信息后,NLG系统需要合理的组织文本的顺序。例如在报道一场篮球比 赛时,会优先表达「什么时间」「什么地点」「哪2支球队」,然后再表达「比赛的概 况」,最后表达「比赛的结局」。
第三步:句子聚合-Sentence Aggregation
不是每一条信息都需要一个独立的句子来表达,将多个信息合并到一个句子里表达可能会 更加流畅,也更易于阅读。
第四步:语法化-Lexicalisation
当每一句的内容确定下来后,就可以将这些信息组织成自然语言了。这个步骤会在各种信 息之间加一些连接词,看起来更像是一个完整的句子。
第五步:参考表达式生成-Referring Expression Generation|REG
这个步骤跟语法化很相似,都是选择一些单词和短语来构成一个完整的句子。不过他跟语 法化的本质区别在于“REG需要识别出内容的领域,然后使用该领域(而不是其他领域) 的词汇"。
第六步:语言实现-Linguistic Realisation
最后,当所有相关的单词和短语都已经确定时,需要将它们组合起来形成一个结构良好的 完整句子。
4. NLG的3种典型应用
自动写作(自动写新闻,自动写论文等)
聊天机器人 (各种手机开发的内置聊天机器人,智能音响,商场导航机器人等)
BI的解读和报告生成 (各行各业解读报告生成比如体检报告)
分词-TOKENIZATION
分词就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的 处理分析工作。随着深度学习,部分工作中也可以进行【分字】。
一般分词我们使用到中英文分词,中英文分词有不同
- 区别1:分词方式不同,中文更难
英文有天然的空格作为分隔符,但是中文没有。所以如何切分是一个难点,再加上中文里 一词多意的情况非常多,导致很容易出现歧义。 - 区别2:英文单词有多种形态
英文单词存在丰富的变形变换。为了应对这些复杂的变换,英文NLP相比中文存在一些独 特的处理步骤,我们称为词形还原(Lemmatization)和词干提取(Stemming)。中文 则不需要
词性还原:does, done, doing, did需要通过词性还原恢复成do。
词干提取:cities, children, teeth这些词,需要转换为city, child, tooth"这些基本形态。 - 区别3:中文分词需要考虑粒度问题
粒度越大,表达的意思就越准确,但是也会导致召回比较少。
分词的方法大致分为3类:
- 基于词典匹配
- 基于统计
- 基于深度学习
给予词典匹配的分词方式
优点:速度快、成本低
缺点:适应性不强,不同领域效果差异大
我的这篇博文就是一个基于词典匹配的分词方法:C#实现前向最大匹配、字典树(分词、检索)
基于统计的分词方法
优点:适应性较强
缺点:成本较高,速度较慢
这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如Stanford、Hanlp分 词工具是基于CRF算法。
基于深度学习
优点:准确率高、适应性强 缺点:成本高,速度慢
例如有人员尝试使用双向LSTM+CRF实现分词器,其本质上是序列标注,所以有通用性, 命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达97.5%。
中文分词工具
下面排名根据GitHub上的star数排名:
- Hanlp
- Stanford 分词
- ansj分词器
- 哈工大LTP
- KCWS分词器
- jieba
- IK
- 清华大学THULAC
- ICTCLAS
英文分词工具
- Keras
- Spacy
- Gensim
- NLTK
词干提取STEMMING 和词形还原 LEMMATISATION
词干提取和词形还原是英文语料预处理中的重要环节,英文单词有多种形态,需要词性还原和词干提取,中文不需要!
词干提取是去除单词的前后缀得到词根的过程。大家常见的前后词缀有「名词的复数」、「进行式」、「过去分词」...等等提取出词干来。比如[dogs]提取[dog]。
词干提取更多被应用于信息检索领域,如Solr、Lucene等,用于扩展检 索,粒度较粗。
词形还原是基于词典,将单词的复杂形态转变成最基础的形态。词形还原不是简单地将前后缀去掉,而是会根据词典将单词进行转换。比如[drove] 转换为[drive]。
形还原更主要被应用于文本挖掘、自然语言处理,用于更细粒 度、更为准确的文本分析和表达。
三种主流词干提取算法:Porter、Snowball、Lancaster
词性标注-PART OF SPEECH
词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category disambiguation),是语料库语言学(corpus linguistics)中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术 。
词性标注就是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程,如下是汉语的词性部分对照表:
命名实体识别 NAMED-ENTITYRECOGNITION | NER
命名实体识别(Named Entity Recognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。
命名实体识别,那什么是实体,简单的理解,实体,可以认为是某一个概念的实例。
例如,“人名”是一种概念,或者说实体类型,那么“孙权”就是一种“人名”实体了。“时间”是一种实体类型,那么“国庆节”就是一种“时间”实体了。
所谓实体识别,就是将你想要获取到的实体类型,从一句话里面挑出来的过程。只有好的实体识别才会让其它任务的开展更有效,比如事件抽取、关系抽取等。
分块-chunking
文本分块是将一大段文本分割成几段小文本,其目的是比如想获取一段文本中的一小部分,或分割得到固定单词数目的小部分等,经常用于非常大的文本。
注意文本分块和分词不一样,分词的目的是把一段文本分割成单词,而文本分块的目的是把一大段文本分割成多个小段文本。
组块分析 (Chunking):标出句子中的短语块,例如名词短语(NP),动词短语(VP)等。
最后
NLP里面有很多工作和技术需要做,上面只是简单的介绍了NLP的内容和一些概念,目前有的方法。每一个步骤都可以分开来在不同的应用中发挥作用,也可以联系起来做成很棒的产品。
NLP中常见的任务
这是学习NLP开篇需要了解的内容和总结,其中很多解释和句子摘抄至https://easyai.tech/ai-definition/nlp/(侵告删)。
后面会学一些NLP的相关知识,包括【hanlp】的使用,有时间再分享。