0.1 什么是NLP?
NLP = NLU + NLG
- NLU:语音/文本 ——>语义 (text——>structure)
- NLG:语义——>文本/语音 (text——>structure)
The challenge : Mutilple ways to express.
The challenge : Ambiguity(一词多义)
解决方法:尽可能使用上下文信息
- 今天参观了苹果公司
- 现在正好是苹果收获的季节
The challenge : Multi-modal(多模态)
0.2 NLP常见应用场景
- Question Answering(问答系统)
Watson,IBM公司的问答系统,参加”危险边缘“电视节目,获得第一。
需要大量的语料库,输入知识库中储存,通过对问题的检索得出答案。具体细分为两个任务:
- 如何构建知识库?构建结构化文本存储,存储实体之间的关系。
- 如何将问题映射为答案?把问题转化为结构化语句,在知识库中检索答案。
- Sentiment Analysis(情感分析系统)
分析市场中人们的情绪、喜好、商品的评价等。
通常的做法:
- 手工提取特征方式:输入语句——特征工程——模型——情感值
- 深度神经网络提取特征方式:输入语句——深度学习模型——情感值
- Machine Translation(机器翻译)
机器翻译领域可提供具体的 评价指标,促使很多新的模型的出现。如:Seq2Seq模型,Transformer模型
- Text Summarization(自动摘要)
如何通过一个长的篇章生成其摘要,通过阅读摘要即可知道原文说了什么事情。
- 基于抽取式的摘要:一篇文章中抽几句话来概括
- 基于生成式的摘要:Seq2Seq模型。生成文章某种概括的句子,但生成的性能有限
- Information Extraction(信息抽取)
从非结构化文本中抽取出结构化信息。
涉及技术:NER(命名实体识别)、关系抽取 - Dialogue System(对话系统)
领域仍不完善。
0.3 NLP任务的基本Pipeline
文本预处理:分词、清洗(拼写纠错、停用词过滤等)、词的标准化(把词的不用表示统一为相同表示)
特征提取:将词转化为向量,输入模型
0.3.1 分词(Word Segmentation)技术
- Jieba分词
- SnowNLP
- LTP
- HanNLP
最大匹配分词方法
- 前向最大匹配(forward-max matching)
从前往后,先按照词典中最长的字符串去逐一匹配,若前面未能匹配成功,则缩短字符串长度,继续匹配。
如上图:最大长度为2,从前往后,“他说”并未在词典中,则拆为 ”他“ 和 ”说“,匹配完成。
- 后向最大匹配(backward-max matching)
跟前向最大匹配类似,只是扫描的方向改变了,变为从后往前。
缺点: 基于匹配(规则)的分词方法事实上是没有考虑语义的。
基于语言模型的分词方法
语言模型是NLP中最重要的工具,可以判断某个语句的出现概率(也就是这句话是不是人话),该话越通顺,则其概率越高,反之则概率越低。
计算思路:
计算词序列的概率,然后选择最大概率的词序列。使用条件概率来减少 数据稀疏的情况。
进一步,对词序列作出有向图:
词典中出现了的词,在图中对应了一条有向边。因此图中从头到尾的一次遍历,即可看成为一次词序列的分词过程。
根据词典中词的概率为每条有向边赋予一个权重,那么寻找最有可能的分词方式的问题转化为了图中的DP问题,找到图中一条使得路径上所有有向边概率乘积最大的路径,即完成分词。
0.3.2 重点:Minimun Edit Distance(MED)
编辑距离(Edit Distance): 从一个字符串变到另一个字符串所需要的最小的操作数。
操作: Insert、Delete、Replacement
如:“ABC” 与 “AB” 的编辑距离为1。
进一步,看下图:”INTENTION“ 与 ”EXECUTION” 的编辑距离。
如何计算最小编辑距离?
动态规划。两个字符串之间的最小编辑距离可化为计算他们字串的最小编辑距离来实现。
做出如下表格,可计算子串之间的编辑距离是多少。
如:3(图中2行5列)的含义为 ”EXE“ 与 ”I“ 之间的最小编辑距离。
经过遍历可得到结果:
0.3.3 拼写纠正
常见拼写纠正问题可分为两种情况:
- 本来写的就是错的,如错别字(如:1、2)
- 在拼写的时候没有存在任何错别字,而是存在语法问题(如:3)
错别字解决方法: 根据某种度量方式,找到与措词最相近的词,提供给用户供其选择。
度量方式: edit distance(编辑距离)
如何过滤掉一些语义不符的词?
0.3.4 停用词过滤
0.3.5 词的标准化
Stemming:词干提取(结果并不一定是合法的词)
Lemmatization:词形还原(结果一定是一个合法的词)
0.4 文本表示基础
0.4.1 词袋模型
- Word Representation
词典:[我们,去,爬山,今天,你们,昨天,跑步]
每个单词采用 ONE-HOT 表示:
我们:[1,0,0,0,0,0,0]
爬山:[0,0,1,0,0,0,0]
以此类推。。。
- Sentence Representation(boolean)
词典:[我们,又,去,爬山,今天,你们,昨天,跑步]
每个句子表示:
我们 今天 去 爬山:[1,0,1,1,1,0,0,0]
即出现的词对于位置的bool值为0。与词出现的次数无关。
- Sentence Representation(count)
词典:[我们,又,去,爬山,今天,你们,昨天,跑步]
每个句子表示:
你们 又 去 爬山 又 去 跑步:[0,2,2,1,0,1,0,1]
即按照词出现的次数表示一个句向量。
0.4.2 计算句的相似程度
使用距离公式计算句子的相似程度。
存在缺陷:并不是词出现的越多就越重要,并不是词出现的越少就越不重要。
0.4.3 TF-IDF方法
TF-IDF对词袋模型进行修正,他可以评估 某个词对一句话或者一个文档的重要性程度。
TF思想: 一个词的重要性与当前文档中它出现的次数成正比。
IDF思想: 如果这个词频繁出现在其他文档中,那么这个词的重要性会下降。
举个例子:
0.4.4 衡量两个单词之间的相似度
如果我们使用ONE-HOT去表示单词的话,我们就很难使用向量之间的距离去衡量两个单词的相似度。
解决方式:采用分布式表示方式。