0、NLP前言
-
·NLTK(Python自然语言工具包)用于诸如标记化、词形还原、词干化、解析、POS标注等任务。该库具有几乎所有NLP任务的工具。
-
·Spacy是NLTK的主要竞争对手。这两个库可用于相同的任务。
-
·Scikit-learn为机器学习提供了一个大型库。此外还提供了用于文本预处理的工具。
-
·Gensim是一个主题和向量空间建模、文档集合相似性的工具包。
-
·Pattern库的一般任务是充当Web挖掘模块。因此,它仅支持自然语言处理(NLP)作为辅助任务。
-
·Polyglot是自然语言处理(NLP)的另一个Python工具包。它不是很受欢迎,但也可以用于各种NLP任务。
- 参考:
https://blog.csdn.net/yimingsilence/article/details/54934516 ---------- 自然语言处理NLP基本知识小结
https://blog.csdn.net/weixin_34061482/article/details/87072382 ---------- NLP常用算法总结
https://blog.csdn.net/u013510838/article/details/81907121 ------- 自然语言处理3 -- 词性标注
https://www.cnblogs.com/pinard/category/894695.html --------- 自然语言处理随笔,作者:刘建平Pinard
- 目录
自然语言处理(简称NLP),是研究计算机处理人类语言的一门技术,包括:
0.基本要求:分词 词法分析(词性标注) 句法分析 命名实体识别 关键字抽取 文档分类 自动摘要 知识图谱
0.1 分词:
• 常规的分词技术:
• 规则分词:通过维护词典,通过切分语句的时候,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,
否则不予切分。主要包括:
• 正向最大匹配法
• 逆向最大匹配法
• 双向最大匹配法
特点:分词快,采用TRIE索引树,哈希索引,
• 统计分词:通过统计各个词在训练文本中出现的次数得到词的可信度,当连续的各个字出现的频度超过某个值的
时候,就可以认为这个连续的各个字属于一个词。主要包括:
• n-gram模型(分词消岐)
• HMM、CRF
特点:能很好处理歧义和未登陆词,单需要大量人工标注
• 混合分词
技术:大体为2种手段:
① 基于字典匹配的方式
最大正向匹配
最大逆向匹配
双向匹配(解决分词歧义)
- 分词歧义的解决手段:
- 第一种方式:语言模型 N-gram:
词嵌入、N-gram查看链接:
https://blog.csdn.net/qq_16555103/article/details/98748593 ----- wordembeding、N-garm、Doc2vec
- 第二种解决分词歧义的方式:
添加/删除 jieba 自定义词典,并更改分词词频
② 基于统计学模型
HMM、CRF、LSTM + CRF ---------- 分类问题:BMES
通常来说用到的第三方库为: jieba 、 hanlp ......
jieba分词的基本功能
• 1. 分词
• 前缀字典匹配、HMM模型Viterbi算法
• 2. 自定义词典添加
• 3. 关键词抽取
• TF-IDF、TextRank; 还可以用 LDA 提取关键字(jieba没有这个功能)
• 4. 词性标注
• HMM模型Viterbi算法
• 5. 并行分词
• 当前版本不支持windows
0.2 词性标注
技术:HMM、CRF、LSTM + CRF ---------- 分类问题:
BMES 与 词性分类 的 笛卡尔积
基于HMMs词性标注思想:
1. 分词序列为观察序列;
2. 词性序列为隐藏状态序列;
3. 如果语料已经标注根据统计得出状态转移阵和发射阵; ***********
4. 每个词性出现的次数,每个词性及其后继词性出现的次数和词性对应的词;
5. 如果语料未标注利用前向-后向算法训练(EM)得出状态转移阵和发射阵; ***********
6. 使用Viterbi算法确定最优的隐藏状态序列;
0.3 分词纠错
技术:① n-gram ② 添加自定义词典、改变自定义词典词频大小 ③
0.4 实体命名识别
技术:① HMM、crf ② LSTM + CRF
NER 也是一个分类问题:
• NER标注方法:
• BIO标注法: I(Inside)、O(Outside)、B(Begin)
• I-xxx:在xxx类命名实体的内部(外开始外的所有位置);
• O:不属于实体;
• B-xxx:是xxx类命名实体的开始;
• BIOES标注法:B(Begin)、I(Inside)、O(Outside)、E(End)、S(Single)
• B-xxx:是xxx类命名实体的开始;
• I-xxx:在xxx类命名实体的内部;
• O:不属于实体;
• E-xxx:在xxx类命名实体的结尾;
• S-xxx:单独属于xxx类命名实体。
0.5 自动摘要
技术:① LDA主题模型 ② seq2seq + attention / transformer / bert ...
0.6 情感分析
① 基于情感词典的方法:
①建立带类别(喜、怒、哀、乐等)和 分值等级 与 极性的情感词典;
②建立带分值的程度词典(非常、有点、稍微等);
③建立否定词字典
依存句法分析 去修饰词分割句子 得到 情感动词,算分公式:sum(程度词分值*情感词分值*否定词*极性);
扩充情感字典的思想:
对于新词 使用 word2vec 中skip-gram 找出 周围相近的词,用这些
词评分的平均值作为新词的平均值。
做法过程:
依存句法分析(核心谓词 是 情感词,然后找出程度词、否定词)提信息 + 词典匹配 + 评分 的方法:
https://blog.csdn.net/qq_16555103/article/details/100710191 ------- 第一章的第二小节
基于情感字典模型优化的两个方向:
1) 扩充 情感字典的方法:
对于新词 使用 word2vec 中skip-gram 找出 周围相近的词,用这些
词评分的平均值作为新词的平均值。
2) 情感评分公式的优化:
用一些复杂的考虑多方位的公式 代替 简单的 情感词分*程度词分*情感词极性
② 基于机器学习或深度学习的方法:
输入为语料中的句子;
输出为打情感的label和分数;
评级并标记label较为困难;
技术:情感分析是一个分类的模型
① 基于模型:
深度学习:
word2vec + LSTM / ....
机器学习:
doc2vec + 机器学习分类器(贝叶斯、KNN、svm、LR)
tf-idf + 贝叶斯(需要用PCA降维并获取独立特征)、svm ....
基于情感词典:
eg:我十分喜欢旅游 label:正 score:45 (基本的手段:程度词 分数 * 情感词 分数)
eg:我有点讨厌旅游 label:负 score:-10
0.7 意图识别
https://blog.csdn.net/qq_16555103/article/details/100767984 ------------- 意图识别
0.8 句法分析 ----------- 偏向于做情感分析
技术: ① 依存句法分析
②
https://blog.csdn.net/qq_16555103/article/details/100710191 ------ 句法分析(偏 情感分析)、语义分析 (偏 信息抽取)
1.语义分析: ----------- 偏向于做 信息抽取
对于给定的句子,进行分词、词性标记、命名实体识别和链接、句法分析、语义角色识别和多义词消歧。
技术:常用方法:
1.语义角色、语义网hownet很差
2.RDF/OWL 基于有结构或bootstrapping抽取(基于分词、依存句法分析等 去掉修饰词等获得 主
干字典:{('n','谓语动词','n'):2,...} ;它是一个半监督的模板),知识图谱
3.LDA(pLSA)、TF_IDF、word2vector、sentence2vector
4.长句切分与指代消解、语义角色标注 切分最好:SVM
5.语义角色标注SRL(三元组)
https://blog.csdn.net/sinat_26917383/article/details/55683599 ------- NLP+语义分析(四)
https://blog.csdn.net/qq_16555103/article/details/100710191 ------- 语义角色标准 SRL(偏信息抽取)
2.信息抽取(关系抽取):从给定文本中抽取重要的信息,比如,时间、地点、人物、事件、原因、结果、数字、日期、货币、
专有名词等等。
通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。涉及到实体识别、时间抽取、因
果关系抽取等关键技术。
技术: ① 语义角色标注((去掉修饰词) >>>>>>> 三元组)、依存句法分析
② bootstrapping 抽取主干(主 谓 宾),本质上是规则模板,需要机器人共同半监督扩展模板库。
目的:做 知识图谱、建立问答系统的问答库
详请链接:https://blog.csdn.net/qq_16555103/article/details/103792301 ---- 信息抽取(booststra
ping、深度学习..)
3.文本挖掘(或者文本数据挖掘):包括文本聚类、分类、信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式
的表达界面。目前主流的技术都是基于统计机器学习的。
4.机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。根据输入媒介不同,可以细分为文本翻译、语音翻译、
手语翻译、图形翻译等。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网
络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。
5.信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可利用1,2,3的技术来建立更
加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹
配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。
6.问答系统: 对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,
包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。
7.对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引
擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。同时,为了体现个性化,要开发用户画像以
及基于用户画像的个性化回复。
随着深度学习在图像识别、语音识别领域的大放异彩,人们对深度学习在NLP的价值也寄予厚望。再加上AlphaGo的成功,人工
智能的研究和应用变得炙手可热。自然语言处理作为人工智能领域的认知智能,成为目前大家关注的焦点。很多研究生都在进入自然
语言领域,寄望未来在人工智能方向大展身手。但是,大家常常遇到一些问题。俗话说,万事开头难。如果第一件事情成功了,学生
就能建立信心,找到窍门,今后越做越好。否则,也可能就灰心丧气,甚至离开这个领域。这里针对给出我个人的建议,希望我的这
些粗浅观点能够引起大家更深层次的讨论。
一、NLP常用到的算法
1、文章目录
本章节目录如下:
1、人工智能学习算法分类
1. 纯算法类
2.建模方面
2、详细算法
1.分类算法
2.回归算法
3.聚类算法
4.降维算法
5.概率图模型算法
6.文本挖掘算法
7.优化算法
8.深度学习算法
3、建模方面
1.模型优化·
2.数据预处理
2、人工智能学习算法分类
人工智能算法大体上来说可以分类两类:基于统计的机器学习算法(Machine Learning)和深度学习算法(Deep Learning)
总的来说,在sklearn中机器学习算法大概的分类如下:
(1)纯算法类
(1).回归算法
(2).分类算法
(3).聚类算法
(4)降维算法
(5)概率图模型算法
(6)文本挖掘算法
(7)优化算法
(8)深度学习算法
(2)建模方面
(1).模型优化
(2).数据预处理
2、详细算法
(1)分类算法
(1).LR (Logistic Regression,逻辑回归又叫逻辑分类)
(2).SVM (Support Vector Machine,支持向量机)
(3).NB (Naive Bayes,朴素贝叶斯)
(4).KNN
(5).DT (Decision Tree,决策树))
- 1).C4.5
- 2).ID3
- 3).CART
(5).集成算法
- 1).Bagging
- 2).Random Forest (随机森林)
- 3).GB(梯度提升,Gradient boosting)
- 4).GBDT (Gradient Boosting Decision Tree)
- 5).AdaBoost
- 6).Xgboost
(6).最大熵模型 ----------------------------------------- ?
(2)回归算法
(1).LR (Linear Regression,线性回归)
(2).SVR (支持向量机回归)
(3). RR (Ridge Regression,岭回归)
(3).聚类算法
(2).Kmeans 算法
(3).层次聚类
(4).密度聚类
(4)降维算法(模型优化计算参数)
(1).SGD (随机梯度下降)
(2)牛顿法、拟牛顿法
(3)坐标轴下降法
(5)概率图模型算法
(1).贝叶斯网络
(2).HMM
(3).CRF (条件随机场)
(6)文本挖掘算法
(1).模型
- 1).LDA (主题生成模型,Latent Dirichlet Allocation)
- 2).最大熵模型
(2).关键词提取
- 1).tf-idf
- 2).bm25
- 3).textrank
- 4).pagerank
- 5).左右熵 :左右熵高的作为关键词
- 6).互信息:
(3).词法分析
- 1).分词
– ①HMM (因马尔科夫)
– ②CRF (条件随机场) - 2).词性标注
- 3).命名实体识别
(4).句法分析
- 1).句法结构分析
- 2).依存句法分析
(5).文本向量化
- 1).tf-idf
- 2).word2vec
- 3).doc2vec
- 4).cw2vec
(6).距离计算
- 1).欧氏距离
- 2).相似度计算
(7)优化算法
(1).正则化
- 1).L1正则化
- 2).L2正则化
(8)深度学习算法
(1).BP
(2).CNN
(3).DNN
(3).RNN
(4).LSTM
2、建模方面
(1)模型优化·
- (1).特征选择
- (2).梯度下降、坐标轴下降、牛顿法拟牛顿法、凸优化
- (3).交叉验证
- (4).参数调优
- (5).模型评估:准确率、召回率、F1、AUC、ROC、损失函数
(2)数据预处理
- (1).标准化
- (2).异常值处理
- (3).二值化、区间化
- (4).缺失值填充: 支持均值、中位数、特定值补差、多重插补
深度学习网络用到数据预处理较少:
① 缺省值处理:不管机器还是深度 都需要
② 中心化(标准化,它是以 列为单位)、正则化(以行为单位)、白化(先SVD降维,在标准化)
二、自然语言处理(NLP)知识结构
原文作者链接:https://blog.csdn.net/meihao5/article/details/79592667?tdsourcetag=s_pcqq_aiomsg
自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自
己总结了一份知识体系结构,不足之处,欢迎指正。内容来源主要参考黄志洪老师的自然语言处理课程。主要参考书为宗成庆老师的
《统计自然语言处理》,虽然很多内容写的不清楚,但好像中文NLP书籍就这一本全一些,如果想看好的英文资料,可以到我的Git
Hub上下载: http://github.com/lovesoft5/ml
2、自然语言处理概述
1)自然语言处理:利用计算机为工具,对书面实行或者口头形式进行各种各样的处理和加工的技术,是研究人与人交际中以及人与计
算机交际中的演员问题的一门学科,是人工智能的主要内容。
2)自然语言处理是研究语言能力和语言应用的模型,建立计算机(算法)框架来实现这样的语言模型,并完善、评测、最终用于设计
各种实用系统。
3)研究问题(主要):
信息检索
机器翻译
文档分类
问答系统
信息过滤
自动文摘
信息抽取
文本挖掘 -------- 贝叶斯、
情感分析
机器写作
语音识别
研究模式:自然语言场景问题,数学算法,算法如何应用到解决这些问题,预料训练,相关实际应用
自然语言的困难:
场景的困难:语言的多样性、多变性、歧义性
学习的困难:艰难的数学模型(hmm,crf,EM,深度学习等)
语料的困难:什么的语料?语料的作用?如何获取语料?
2、形式语言与自动机
1、语言:按照一定规律构成的句子或者字符串的有限或者无限的集合。
2、描述语言的三种途径:
穷举法
文法(产生式系统)描述
自动机
3、自然语言不是人为设计而是自然进化的。形式语言比如:运算符号、化学分子式、编程语言,形式语言理论研究的是内部结构模式
这类语言的纯粹的语法领域,从语言学而来,作为一种理解自然语言的句法规律,在计算机科学中,形式语言通常作为定义编程和
语法结构的基础
形式语言与自动机基础知识:
集合论
图论
自动机的应用:
1,单词自动查错纠正
2,词性消歧(什么是词性?什么的词性标注?为什么需要标注?如何标注?)
形式语言的缺陷:
1、对于像汉语,英语这样的大型自然语言系统,难以构造精确的文法
2、不符合人类学习语言的习惯
3、有些句子语法正确,但在语义上却不可能,形式语言无法排出这些句子
4、解决方向:基于大量语料,采用统计学手段建立模型
3、语言模型
1)语言模型(重要):通过语料计算某个句子出现的概率(概率表示),常用的有2-元模型,3-元模型
2)语言模型应用:
语音识别歧义消除例如,给定拼音串:ta shi yan jiu suan fa de
可能的汉字串:踏实烟酒算法的 他是研究酸法的 他是研究算法的,显然,最后一句才符合。
3)语言模型的启示:
1、开启自然语言处理的统计方法
2、统计方法的一般步骤:
收集大量语料
对语料进行统计分析,得出知识
针对场景建立算法模型
解释和应用结果
4) 语言模型性能评价,包括评价目标,评价的难点,常用指标(交叉熵,困惑度)
5)数据平滑:
数据平滑的概念,为什么需要平滑
平滑的方法,加一法,加法平滑法,古德-图灵法,J-M法,Katz平滑法等
6)语言模型的缺陷:
语料来自不同的领域,而语言模型对文本类型、主题等十分敏感
n与相邻的n-1个词相关,假设不是很成立。
4、概率图模型
生成模型与判别模型,贝叶斯网络,马尔科夫链与隐马尔科夫模型(HMM)?
1)概率图模型概述(什么的概率图模型,参考清华大学教材《概率图模型》)
2)马尔科夫过程(定义,理解)
3)隐马尔科夫过程(定义,理解)
HMM的三个基本问题(定义,解法,应用)
注:第一个问题,涉及最大似然估计法,第二个问题涉及EM算法,第三个问题涉及维特比算法,内容很多,要重点理解,
(参考书李航《统计学习方法》,网上博客,笔者github)
5、马尔科夫网,最大熵模型,条件随机场(CRF)
1)HMM的三个基本问题的参数估计与计算
2)什么是熵
3)EM算法(应用十分广泛,好好理解)
4)HMM的应用
5)层次化马尔科夫模型与马尔科夫网络
提出原因,HMM存在两个问题
6)最大熵马尔科夫模型
优点:与HMM相比,允许使用特征刻画观察序列,训练高效
缺点: 存在标记偏置问题
7)条件随机场及其应用(概念,模型过程,与HMM关系)
参数估计方法(GIS算法,改进IIS算法)
CRF基本问题:特征选取(特征模板)、概率计算、参数训练、解码(维特比)
应用场景:
词性标注类问题(现在一般用RNN+CRF)
中文分词(发展过程,经典算法,了解开源工具jieba分词)
中文人名,地名识别
8) CRF++
6、命名实体 识别,词性标注,内容挖掘、语义分析与篇章分析
注:大量用到前面的算法
1)命名实体识别问题
相关概率,定义
相关任务类型
方法(基于规程->基于大规模语料库)
2)未登录词的解决方法(搜索引擎,基于语料)
3)CRF解决命名实体识别(NER)流程总结:
训练阶段:确定特征模板,不同场景(人名,地名等)所使用的特征模板不同,对现有语料进行分词,在分词结果基础上进行
词性标注(可能手工),NER对应的标注问题是基于词的,然后训练CRF模型,得到对应权值参数值
识别过程:将待识别文档分词,然后送入CRF模型进行识别计算(维特比算法),得到标注序列,然后根据标注划分出命名实体
4)词性标注(理解含义,意义)及其一致性检查方法(位置属性向量,词性标注序列向量,聚类或者分类算法)
7、句法分析
1)句法分析理解以及意义
1、句法结构分析
完全句法分析
浅层分析(这里有很多方法。。。)
2、 依存关系分析
2)句法分析方法
1、基于规则的句法结构分析
2、基于统计的语法结构分析
8、文本分类,情感分析
1)文本分类,文本排重
文本分类:在预定义的分类体系下,根据文本的特征,将给定的文本与一个或者多个类别相关联
典型应用:垃圾邮件判定,网页自动分类
2)文本表示,特征选取与权重计算,词向量
文本特征选择常用方法:
1、基于本文频率的特征提取法
2、信息增量法
3、X2(卡方)统计量
4、互信息法
3)分类器设计
SVM,贝叶斯,决策树、KNN、主题模型预处理(提取文本特征、降维)等
4)分类器性能评测
1、召回率
2、正确率
3、F1值
5)主题模型(LDA)与PLSA
LDA模型十分强大,基于贝叶斯改进了PLSA,可以提取出本章的主题词和关键词,建模过程复杂,难以理解。
6)情感分析
借助计算机帮助用户快速获取,整理和分析相关评论信息,对带有感情色彩的主观文本进行分析,处理和归纳例如,评论
自动分析,水军识别。
某种意义上看,情感分析也是一种特殊的分类问题
7)应用案例
九、信息检索,搜索引擎及其原理
1)信息检索起源于图书馆资料查询检索,引入计算机技术后,从单纯的文本查询扩展到包含图片,音视频等多媒体信息检索,检索
对象由数据库扩展到互联网。
1、点对点检索
2、精确匹配模型与相关匹配模型
3、检索系统关键技术:标引,相关度计算
2)常见模型:布尔模型,向量空间模型,概率模型
3)常用技术:倒排索引,隐语义分析(LDA等)
4)评测指标
10、自动文摘与信息抽取,机器翻译,问答系统
1)统计机器翻译的的思路,过程,难点,以及解决
2)问答系统
基本组成:问题分析,信息检索,答案抽取
类型:基于问题-答案, 基于自由文本
典型的解决思路
3)自动文摘的意义,常用方法
4)信息抽取模型(LDA等)
11、深度学习在自然语言中的应用
1)单词表示,比如词向量的训练(wordvoc)
2)自动写文本写新闻等
3)机器翻译
4)基于CNN、RNN的文本分类
5)深度学习与CRF结合用于词性标注
...............