[NLP]自然语言的处理步骤
目录获取语料语料预处理特征工程特征选择模型训练模型评估模型预测NLP,NaturalLanguageProcessing即自然语言处理。是人工智能的一个子领域,就是用计算机计算处理自然语言。进行自然语言处理一般需要以下步骤。
获取语料预料,即语言材料,文本的集合成为语料库。在机器学习中,我们通常处理把用于模型训练的一行数据称为一个文本。但是日常中我们一般把一个文件称为一个文本,这个概念对初学者就很容易引起误解。比如处理数据是读入多个文件,但是经过预处理、特征工程后,这些文件可能被合并成一行,这时输入的一个文件不能成为一个文本,自然语言处理的文本概念是相对特征工程后形态而言的。
语料的获取方法:
(1)已有语料,即由自身业务积累下来的语料
(2)网上抓取,即通过爬虫等工具在网上获取的语料
(3)公共语料,一些企业或研究机构公开的语料
语料预处理在自然语然的工程应用中,语料的预处理大概占总工作量50%以上。因此开发人员大部分的工作都在进行语料的预处理。预处理通常有以下几方面的重要工作:
(1)数据清洗,就是在语料中找到有用的东西。比如去重,对齐,删除,合并、拆分等。
(2)分词,语料中通常是句子和段落,尤其是中文语料词之间没有明显的间隔。这个时候就需要对句子或段落分词。分词的方法通常有:
1)基于理解的分词方法;
2)基于规则的分词方法;
3)基于统计的分词方法;
4)基于字符串的分词方法。
3)词性标注,就是个词语打上标签,比如形容词、动词、名词等。词性标注并不是必须的,比如对应文本分类就不需要标注词性,情感分析就需要关心词性的问题。
4)去停用词,对程序处理无用或者贡献很小的词称为停用词。比如人称、语气、标点符号等无用的词在分词后一般需要删除。
特征工程语料预处理后,就要考虑如何把词和词语转换为计算机能够处理的类型;如中文转换为数字。常用的处理方法有:
(1)词袋模型BOW,即不考虑词语出现的先后顺序,把词语放入集合中,然后按照出现的次数进行统计计数。
(2)向量模型,把词语转换为向量矩阵。如one-hot,wordToVec。
特征选择特征工程后,一般会存在非常多的特征向量。特征选择就是选择那些对模型训练作用最大的特征。这个过程非常重要,对于经验丰富和对模型理论较好的开发人员往往能够选择正确特征向量,极大的减少训练时间,提高效率。
模型训练对不同的业务问题,选择合适的模型进行训练。这些模型可以用开源的算法框架,也可以自己开发。比如采用NaïveBayes,SVM、FP-Growth、LSTM等。训练过程中需要注意过拟合和欠拟合的问题,比如过拟合可以通过增加训练数据、增加正则化项;欠拟合则可以增加模型复杂度,减少正则化,增加特征维度等。
模型评估模型评估就是对训练后的模型测量是否达到既定目标。常用的评估方法有:
(1)准确率、精确率、召回率、查全率、特异度、灵敏度
(2)F-Measure、ROC曲线、AUC、PR曲线
模型预测模型训练和评估后,就可以用来对业务的数据进行预测了。在实际生产业务中,同一个业务通常用多种模型进行预测,分析比较。
自然语言处理(NLP)知识结构总结
自然语言处理(NLP)知识结构总结
自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,内容来源主要参考黄志洪老师的自然语言处理课程,主要参考书为宗成庆老师的《统计自然语言处理》,可能很多内容写的不清楚,但好像中文NLP书籍就这一本全一些,如果想看好的英文资料,可以到我的GitHub上下载:
http://github.com/lovesoft5/ml
下面直接开始正文:
▌一、自然语言处理概述
1)自然语言处理:利用计算机为工具,对书面实行或者口头形式进行各种各样的处理和加工的技术,是研究人与人交际中以及人与计算机交际中的演员问题的一门学科,是人工智能的主要内容。
2)自然语言处理是研究语言能力和语言应用的模型,建立计算机(算法)框架来实现这样的语言模型,并完善、评测、最终用于设计各种实用系统。
3)研究问题(主要):
信息检索
机器翻译
文档分类
问答系统
信息过滤
自动文摘
信息抽取
文本挖掘
舆情分析
机器写作
语音识别
研究模式:自然语言场景问题,数学算法,算法如何应用到解决这些问题,预料训练,相关实际应用
自然语言的困难:
场景的困难:语言的多样性、多变性、歧义性
学习的困难:艰难的数学模型(hmm,crf,EM,深度学习等)
语料的困难:什么的语料?语料的作用?如何获取语料?
▌二、形式语言与自动机
语言:按照一定规律构成的句子或者字符串的有限或者无限的集合。
描述语言的三种途径:
穷举法
文法(产生式系统)描述
自动机
自然语言不是人为设计而是自然进化的,形式语言比如:运算符号、化学分子式、编程语言形式语言理论朱啊哟研究的是内部结构模式这类语言的纯粹的语法领域,从语言学而来,作为一种理解自然语言的句法规律,在计算机科学中,形式语言通常作为定义编程和语法结构的基础形式语言与自动机基础知识:
集合论
图论
自动机的应用:
单词自动查错纠正
词性消歧(什么是词性?什么的词性标注?为什么需要标注?如何标注?)
形式语言的缺陷:
对于像汉语,英语这样的大型自然语言系统,难以构造精确的文法
不符合人类学习语言的习惯
有些句子语法正确,但在语义上却不可能,形式语言无法排出这些句子
解决方向:基于大量语料,采用统计学手段建立模型
▌三、语言模型
1)语言模型(重要):通过语料计算某个句子出现的概率(概率表示),常用的有2-元模型,3-元模型
2)语言模型应用:
语音识别歧义消除例如,给定拼音串:tashiyanyanjiusaunfade
可能的汉字串:踏实烟酒算法的他是研究酸法的他是研究算法的,显然,最后一句才符合。
3)语言模型的启示:
开启自然语言处理的统计方法
统计方法的一般步骤:
收集大量语料
对语料进行统计分析,得出知识
针对场景建立算法模型
解释和应用结果
4)语言模型性能评价,包括评价目标,评价的难点,常用指标(交叉熵,困惑度)
5)数据平滑:
数据平滑的概念,为什么需要平滑?
平滑的方法,加一法,加法平滑法,古德-图灵法,J-M法,Katz平滑法等。
6)语言模型的缺陷:
语料来自不同的领域,而语言模型对文本类型、主题等十分敏感。
n与相邻的n-1个词相关,假设不是很成立。
▌四、概率图模型,生成模型与判别模型,贝叶斯网络,马尔科夫链与隐马尔科夫模型(HMM)
1)概率图模型概述(什么的概率图模型,参考清华大学教材《概率图模型》)
2)马尔科夫过程(定义,理解)
3)隐马尔科夫过程(定义,理解)
HMM的三个基本问题(定义,解法,应用)
注:第一个问题,涉及最大似然估计法,第二个问题涉及EM算法,第三个问题涉及维特比算法,内容很多,要重点理解,(参考书李航《统计学习方法》,网上博客,笔者github)
▌五、马尔科夫网,最大熵模型,条件随机场(CRF)
1)HMM的三个基本问题的参数估计与计算
2)什么是熵
3)EM算法(应用十分广泛,好好理解)
4)HMM的应用
5)层次化马尔科夫模型与马尔科夫网络
提出原因,HMM存在两个问题
6)最大熵马尔科夫模型
优点:与HMM相比,允许使用特征刻画观察序列,训练高效
缺点:存在标记偏置问题
7)条件随机场及其应用(概念,模型过程,与HMM关系)
参数估计方法(GIS算法,改进IIS算法)
CRF基本问题:特征选取(特征模板)、概率计算、参数训练、解码(维特比)
应用场景:
词性标注类问题(现在一般用RNN+CRF)
中文分词(发展过程,经典算法,了解开源工具jieba分词)
中文人名,地名识别
8)CRF++
▌六、命名实体识别,词性标注,内容挖掘、语义分析与篇章分析(大量用到前面的算法)
1)命名实体识别问题
相关概率,定义
相关任务类型
方法(基于规程->基于大规模语料库)
2)未登录词的解决方法(搜索引擎,基于语料)
3)CRF解决命名实体识别(NER)流程总结:
训练阶段:确定特征模板,不同场景(人名,地名等)所使用的特征模板不同,对现有语料进行分词,在分词结果基础上进行词性标注(可能手工),NER对应的标注问题是基于词的,然后训练CRF模型,得到对应权值参数值
识别过程:将待识别文档分词,然后送入CRF模型进行识别计算(维特比算法),得到标注序列,然后根据标注划分出命名实体
4)词性标注(理解含义,意义)及其一致性检查方法(位置属性向量,词性标注序列向量,聚类或者分类算法)
▌七、句法分析
1)句法分析理解以及意义
1、句法结构分析
完全句法分析
浅层分析(这里有很多方法。。。)
2、依存关系分析
2)句法分析方法
基于规则的句法结构分析
基于统计的语法结构分析
▌八、文本分类,情感分析
1)文本分类,文本排重
文本分类:在预定义的分类体系下,根据文本的特征,将给定的文本与一个或者多个类别相关联
典型应用:垃圾邮件判定,网页自动分类
2)文本表示,特征选取与权重计算,词向量
文本特征选择常用方法:
基于本文频率的特征提取法
信息增量法
X2(卡方)统计量
互信息法
3)分类器设计
SVM,贝叶斯,决策树等
4)分类器性能评测
召回率
正确率
F1值
5)主题模型(LDA)与PLSA
LDA模型十分强大,基于贝叶斯改进了PLSA,可以提取出本章的主题词和关键词,建模过程复杂,难以理解。
6)情感分析
借助计算机帮助用户快速获取,整理和分析相关评论信息,对带有感情色彩的主观文本进行分析,处理和归纳例如,评论自动分析,水军识别。
某种意义上看,情感分析也是一种特殊的分类问题
7)应用案例
▌九、信息检索,搜索引擎及其原理
1)信息检索起源于图书馆资料查询检索,引入计算机技术后,从单纯的文本查询扩展到包含图片,音视频等多媒体信息检索,检索对象由数据库扩展到互联网。
点对点检索
精确匹配模型与相关匹配模型
检索系统关键技术:标引,相关度计算
2)常见模型:布尔模型,向量空间模型,概率模型
3)常用技术:倒排索引,隐语义分析(LDA等)
4)评测指标
▌十、自动文摘与信息抽取,机器翻译,问答系统
1)统计机器翻译的的思路,过程,难点,以及解决
2)问答系统
基本组成:问题分析,信息检索,答案抽取
类型:基于问题-答案,基于自由文本
典型的解决思路
3)自动文摘的意义,常用方法
4)信息抽取模型(LDA等)
▌十一、深度学习在自然语言中的应用
1)单词表示,比如词向量的训练(wordvoc)
2)自动写文本
写新闻等3)机器翻译
4)基于CNN、RNN的文本分类
5)深度学习与CRF结合用于词性标注
自然语言处理(NLP)——简介
自然语言处理(NLPNaturalLanguageProcessing)是一种专业分析人类语言的人工智能。就是在机器语⾔和⼈类语言之间沟通的桥梁,以实现人机交流的目的。在人工智能出现之前,机器智能处理结构化的数据(例如Excel里的数据)。但是网络中大部分的数据都是非结构化的,例如:文章、图片、音频、视频...在非结构数据中,文本的数量是最多的,他虽然没有图片和视频占用的空间大,但是他的信息量是最大的。为了能够分析和利用这些文本信息,我们就需要利用NLP技术,让机器理解这些文本信息,并加以利用。
NLP的主要内容大概如下:
2个核⼼心任务:自然语言理解-NLU自然语言生成-NLG5个难点:语言是没有规律的,或者说规律是错综复杂的。语言是可以自由组合的,可以组合复杂的语言表达。语言是一个开放集合,我们可以任意的发明创造一些新的表达方式。语言需要联系到实践知识,有一定的知识依赖。语言的使用要基于环境和上下文。4个典型应用:情感分析聊天机器人语音识别机器翻译6个实现步骤:分词-tokenization次干提取-stemming词形还原-lemmatization词性标注-postags命名实体识别-ner分块-chunking自然语言理解-NLU1.什么是自然语言理解(NLU)?自然语言处理(NLP,NaturalLanguageProcessing)是使用自然语言同计算机进行通讯的技术,因为处理自然语言的关键是要让计算机“理解”自然语言,所以自然语言处理又叫做自然语言理解(NLU,NaturalLanguageUnderstanding),也称为计算语言学(ComputationalLinguistics)。一方面它是语言信息处理的一个分支,另一方面它是人工智能(AI,ArtificialIntelligence)的核心课题之一。
比如我们平时用的智能音箱:
我想听歌放首歌来点音乐...
人们会有很多种自然的表达,可以说“自然的表达”有无穷多的组合都是在代表“听歌”这个意图的。而要理解这么多种不同的表达,对机器是个挑战。早些时候,机器只能处理结构化的数据(比如关键词),也就是说如果要听懂人在讲什么,必须要用户输入精确的指令。而这些指令的关键词肯定在不同表达中会被误判,所以显得很笨。自然语言理解这个技能出现后,可以让机器从各种自然语言的表达中,区分出来,哪些话归属于这个意图;而那些表达不是归于这一类的,而不再依赖那么死板的关键词。再比如说智能音响:
“太吵了”机器:“已帮您调小音量”
用户并没有提到音量,但是机器需要知道用户的意图——音量太高,需要把音量调小。
2.自然语言理解(NLU)的应用机器翻译(有道、百度翻译等)机器客服(各种app里面的机器客户)智能音箱(小爱音箱、天猫精灵等)3.自然语言理解(NLU)的难点难点1:语言的多样性自然语言有很多不同的表达,组合方式非常灵活,不同的组合可以表达多种含义,总能找到很多例外的情况。
难点2:语言的歧义性如果不联系上下文,缺少环境的约束,语言有很大的歧义性。
难点3:语言的鲁棒性自然语言在输入的过程中,尤其是通过语音识别获得的文本,会存在多字、少字、错字、噪音等问题。
难点4:语言的知识依赖语言是对世界的符号化描述,语言天然连接着世界知识。
难点5:语言的上下文上下文的概念包括很多种:对话的上下文、设备的上下文、应用的上下文、用户画像。
4.NLU的实现方式自然语言理解一共经历了3次迭代:
基于规则的方法基于统计的方法基于深度学习的方法总结规律来判断自然语言的意图,常见的方法有:CFG、JSGF等。基于统计学的NLU方式,常见的方法有:SVM、ME等。随着深度学习的爆发,CNN、RNN、LSTM都成为了最新的主流,Transformer是目前最先进的方法。自然语言生成-NLGNLG是为了跨越人类和机器之间的沟通鸿沟,将非语言格式的数据转换成人类可以理解的语言格式,如文章、报告等
1.自然语言生成-NLG有2种方式:text-to-text:文本到语言的生成data-to-text:数据到语言的生成2.NLG的3个LEVEL简单的数据合并:自然语言处理的简化形式,这将允许将数据转换为文本(通过类似Excel的函数)。模板化的NLG:这种形式的NLG使用模板驱动模式来显示输出。。数据动态地保持更改,并由预定义的业务规则集(如if/else循环语句)生成。高级NLG:这种形式的自然语言生成就像人类一样。它理解意图,添加智能,考虑上下文,并将结果呈现在用户可以轻松阅读和理解的富有洞察力的叙述中。
3.NLG的6个步骤第一步:内容确定-ContentDetermination作为第一步,NLG系统需要决定哪些信息应该包含在正在构建的文本中,哪些不应该包含。通常数据中包含的信息比最终传达的信息要多。第二步:文本结构-TextStructuring确定需要传达哪些信息后,NLG系统需要合理的组织文本的顺序。例如在报道一场篮球比赛时,会优先表达「什么时间」「什么地点」「哪2支球队」,然后再表达「比赛的概况」,最后表达「比赛的结局」。第三步:句子聚合-SentenceAggregation不是每一条信息都需要一个独立的句子来表达,将多个信息合并到一个句子里表达可能会更加流畅,也更易于阅读。第四步:语法化-Lexicalisation当每一句的内容确定下来后,就可以将这些信息组织成自然语言了。这个步骤会在各种信息之间加一些连接词,看起来更像是一个完整的句子。第五步:参考表达式生成-ReferringExpressionGeneration|REG这个步骤跟语法化很相似,都是选择一些单词和短语来构成一个完整的句子。不过他跟语法化的本质区别在于“REG需要识别出内容的领域,然后使用该领域(而不是其他领域)的词汇"。第六步:语言实现-LinguisticRealisation最后,当所有相关的单词和短语都已经确定时,需要将它们组合起来形成一个结构良好的完整句子。
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数排名:
HanlpStanford分词ansj分词器哈工大LTPKCWS分词器jiebaIK清华大学THULACICTCLAS英文分词工具
KerasSpacyGensimNLTK词干提取STEMMING和词形还原LEMMATISATION词干提取和词形还原是英文语料预处理中的重要环节,英文单词有多种形态,需要词性还原和词干提取,中文不需要!词干提取是去除单词的前后缀得到词根的过程。大家常见的前后词缀有「名词的复数」、「进行式」、「过去分词」...等等提取出词干来。比如[dogs]提取[dog]。词干提取更多被应用于信息检索领域,如Solr、Lucene等,用于扩展检索,粒度较粗。
词形还原是基于词典,将单词的复杂形态转变成最基础的形态。词形还原不是简单地将前后缀去掉,而是会根据词典将单词进行转换。比如[drove]转换为[drive]。形还原更主要被应用于文本挖掘、自然语言处理,用于更细粒度、更为准确的文本分析和表达。
三种主流词干提取算法:Porter、Snowball、Lancaster
词性标注-PARTOFSPEECH词性标注(Part-Of-Speechtagging,POStagging)也被称为语法标注(grammaticaltagging)或词类消疑(word-categorydisambiguation),是语料库语言学(corpuslinguistics)中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术。词性标注就是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程,如下是汉语的词性部分对照表:
命名实体识别NAMED-ENTITYRECOGNITION|NER命名实体识别(NamedEntityRecognition,NER)是NLP中一项非常基础的任务。NER是信息提取、问答系统、句法分析、机器翻译等众多NLP任务的重要基础工具。命名实体识别,那什么是实体,简单的理解,实体,可以认为是某一个概念的实例。
例如,“人名”是一种概念,或者说实体类型,那么“孙权”就是一种“人名”实体了。“时间”是一种实体类型,那么“国庆节”就是一种“时间”实体了。所谓实体识别,就是将你想要获取到的实体类型,从一句话里面挑出来的过程。只有好的实体识别才会让其它任务的开展更有效,比如事件抽取、关系抽取等。
分块-chunking文本分块是将一大段文本分割成几段小文本,其目的是比如想获取一段文本中的一小部分,或分割得到固定单词数目的小部分等,经常用于非常大的文本。注意文本分块和分词不一样,分词的目的是把一段文本分割成单词,而文本分块的目的是把一大段文本分割成多个小段文本。组块分析(Chunking):标出句子中的短语块,例如名词短语(NP),动词短语(VP)等。
最后NLP里面有很多工作和技术需要做,上面只是简单的介绍了NLP的内容和一些概念,目前有的方法。每一个步骤都可以分开来在不同的应用中发挥作用,也可以联系起来做成很棒的产品。NLP中常见的任务
这是学习NLP开篇需要了解的内容和总结,其中很多解释和句子摘抄至:https://easyai.tech/ai-definition/nlp/(侵告删)。
后面会学一些NLP的相关知识,包括【hanlp】的学习分享。