文章目录
- 一、NLP定义及歧义性(视频3)
- 二、机器翻译case study(视频4-5)
- 三、NLP的应用场景(视频6)
- 四、NLP关键技术介绍(视频7)
- 五、算法复杂度(视频8-16)
- 六、问答系统介绍(视频17)
- 七、心理学的一些启发(视频18-19)
- 八、自然语言处理流程pipeline(视频20)
- 九、分词(视频21-24)
- 十、分词,考虑语言模型(视频23)
- 十一、分词-维特比算法(视频24) 了解即可不必深究
- 十二、拼写错误纠正(视频25-27)
- 十三、停用词过滤
- 十四、文本的表示word presentation(向量)
- 十五、计算两个句子的相似度
- 十六、tf-idf对文本进行表示(视频31)
- 十七、词向量(视频32-33)
- 十八、倒排序(视频34)
- 十九、Noisy channel model(视频35)
- 二十、语言模型Language model(36)
- 二十一、动态规划(视频44-46)
- 二十二、利用语言模型生成句子(视频50)
- 二十三、专家系统与基于概率的AI系统(视频51)
- 二十四、专家系统expert system(视频52-55 )
- 二十五、机器学习介绍(视频56-57)
- 二十六、朴素贝叶斯介绍,垃圾邮件分类(视频58-59)
- 二十七、python,pandas的lambda表达式,三元运算符(60)
- 二十八、python,map函数(61)
- 二十九、python的filter函数(62)
- 三十、python的reduce函数(63)
- 三十一、列表\集合\字典推导式(64)
- 三十二、闭包(65)
- 三十三、装饰器、语法糖、注解(66-67)
- 三十四、numpy介绍(68-75)
一、NLP定义及歧义性(视频3)
NLP = NLU + NLG
Natural Language Understanding:通过文本理解其意思
Natural Language Generation:通过意思meaning生成文本
为什么NLP 比CV(computer vision)更难?
因为计算机视觉,图像所见即所得,而人看文本是看他背后所蕴含的意思。
一个含义meaning能有多种表达的方式:Multiple ways to express
一词多义:Ambiguity
举例:Interest这个词,有三种意思
如果单独看这个词没有上下文,只能靠猜,或者统计,比如说通过大量文本统计,15%是利息的意思,80%是兴趣的意思
二、机器翻译case study(视频4-5)
2.1 如何做一个简单的机器翻译呢?
给如下12对,两种语言的配对。 a和b是两种语言,意思相同。最简单的方式就是通过统计,找到每个词在另一种语言句子中对应的位置,统计a语言里的词在b语言中哪里出现。渐渐形成配对
1.运行速度慢
2.语义歧义解决不了
3.上下文不连贯
4.语法不对
5.需要大量的人工设计规则进行统计
改进思路,解决语法问题↓
用到LM语言模型就肯定会有排列组合爆炸的缺点,所包含的词越多,要算的条件概率越复杂
2.2
将上面两步:翻译模型+语言模型 合并成一起,用到了decoding algorithm(Viterbi algorithm维特比算法)
维特比算法的核心是动态规划
上面计算P概率值的方法分别就是unigram,bigram,trigram模型了,统称n-gram模型
三、NLP的应用场景(视频6)
医疗场景用的比较多,AI医生。
四、NLP关键技术介绍(视频7)
自然语言处理技术四个维度
Morphology单词层面的技术:分词,POS词性标注,NER命名实体识别 Named entity recognition
Syntax句子结构:句法分析(按照主谓宾),依存分析(Dependency,一个动词指向谁),
Semantic语义分析:机器学习,情感分析
依存分析:
五、算法复杂度(视频8-16)
看不懂,对项目没什么帮助,略
六、问答系统介绍(视频17)
先要有知识库,或者说问答对pair,当用户输入一个问题时,要计算,这个问题跟知识库里的问题的相似度,找出相似度最高的问题,返回其答案
核心点就是:文本的表示:切词,去除停用词,删除特定字符,转化为向量;以及相似度计算
七、心理学的一些启发(视频18-19)
八、自然语言处理流程pipeline(视频20)
九、分词(视频21-24)
常用分词工具:
LTP是哈工大的,最常用是jieba
9.1 介绍了前向最大匹配分词 forward max matching:
首先要有个词典库,里面存了很多词,找到词典库里最长的词的长度n(或者自己定义max-len),然后对要分词的句子从n进行从左到右匹配,看第一个n个字符串是否出现在词典库中,如果没有缩减到n-1个字符串,看是否出现在字典库中,以此类推,直到找到词出现在字典库中后,切词,从切好词的后面一个字符开始,再继续如上步骤
例子:我们经常有意见分歧 ,n取5
我们经常有 x
我们经常 x
我们经 x
我们 ✔
经常有意见 x
经常有意 x
经常有 x
经常 ✔
需要注意的是max—len不一定要设置为词库中最长单词的长度,因为越长,算法复杂度越大,可以适当按照28原则,找到80%词最长的长度
9.2 后向匹配+双向匹配
略
9.3 前后双向分词缺点
贪心算法,只能做到局部最优;效率低;歧义,不会考虑语义
十、分词,考虑语言模型(视频23)
考虑语义semantic
思路:通过各种分词方法,假设n种分词方法,得到n个分词结果,每个分词结果传到一个工具中,这个工具能判断或是说返回一个值判断,分词的结果是否符合语义,对符合语义的分词结果打高分。
这个工具就是language model。(利用条件概率)
计算每个词的概率时可能会遇到超出计算机浮点型范围的情况,因为一个词出现的次数太少导致概率值太小了。
在概率前计上log能解决这一问题
语言模型的缺点:复杂度非常高。
十一、分词-维特比算法(视频24) 了解即可不必深究
上一章说了寻求最好的分词结果,可以通过分词后,对每个分词结果,用某种工具进行打分,分词和打分是两个步骤,是分开的
效率不高。
维比特将两步合起来。
对句子分词,给定一个词典(没出现在词典中的词的概率可以分配一个P(其他)=0.00001),里面的词都有计算好的概率,再对这些词的概率取-log,-log(x)越小,其概率越大。
把分词-log(x)套到如下链条中,这样就会有好几条路径,找到和最小的路径,就是P概率最大的路径。
维特比算法:
定义:
f
(
8
)
f(8)
f(8): 从节点1 到 8最短路径的值
f
(
7
)
f(7)
f(7): 从节点1 到 7最短路径的值
f
(
x
)
f(x)
f(x): 从节点1 到 x最短路径的值
动态规划:
f(8)的计算有3种方式,因为有三个箭头(路径)通向节点8
f
(
8
)
f(8)
f(8) =
f
(
5
)
f(5)
f(5) + 3 (计算节点1-5的路径的值,再加上节点5-8的值)
f
(
8
)
f(8)
f(8) =
f
(
6
)
f(6)
f(6) + 1.6 (计算节点1-6的路径的值,再加上节点6-8的值)
f
(
8
)
f(8)
f(8) =
f
(
7
)
f(7)
f(7) + 20 (计算节点1-7的路径的值,再加上节点7-8的值)
f(7)的计算只有1种方式:
f
(
7
)
f(7)
f(7) =
f
(
6
)
f(6)
f(6) + 2.3 (计算节点1-5的路径的值,再加上节点5-8的值)
f(6)的计算有3种方式,因为有三个箭头(路径)通向节点6:
f
(
6
)
f(6)
f(6) =
f
(
5
)
f(5)
f(5) + 3
f
(
6
)
f(6)
f(6) =
f
(
4
)
f(4)
f(4) + 1.6
f
(
6
)
f(6)
f(6) =
f
(
3
)
f(3)
f(3) + 2.3
得到如下:
f(8),最短路径是从节点1-6,加上节点6-8得来的,f(6)又是f(3)再加上节点3-6得来的。找经过的节点是通过反推的
分出来的结果: 经常/有意见/分歧 (只是举例,最好的应该是经常/有/意见/分歧)
十二、拼写错误纠正(视频25-27)
英文上可能是两种场景:拼写错误,时态错误
通过计算编辑距离,来看错误的词与哪些词最近,编辑距离指的是从错误的单词修改成正确的单词需要几步
时间复杂度是O(v):v是词库里的所有单词。
这就意味着每出现一次错误单词,都要跟词典里的每个单词进行比对
生成的编辑距离为1,2的字符串的个数可能有10的4次方-6次方那么多。如何过滤呢?
数学中argmax的的定义是求使得某个函数取最大值时,里面的参数是多少?
上面的意思是,已知一个可能输错的字符串s,求正确字符串c的最大概率时,c是哪个字符串(c属于候选集中)
利用贝叶斯定理进行转换
P(S)可以省略掉,因为把它看作是一个恒定的常数,只要求如下部分就好
P©:也就是正确字符串的概率,在字典中统计得到
P(s|c):可以通过大数据,后台统计已经写错的字符串,看他们本应该是什么正确的字符串
十三、停用词过滤
在NLP的应用中,要去掉停用词,出现频率很低的词汇
stemming:词根还原,通过时态,规则进行词性还原
十四、文本的表示word presentation(向量)
1.词的表示
最经典,最简单的one-hot encoding。
构建一个字典,里面包含n个词,第i个词的表示方式,是一个一维向量,在第i的位置上是1,其他位置是0
2.句子的表示
方法一:boolean布尔值表示,用一个句子里的词是否出现在字典中来表示,所表示的维度长度是字典的大小
十五、计算两个句子的相似度
通过one-hot的简单的对文本的表示并不能很好的提取信息。
出现越多的词并不意味着它越重要,出现的越少的词有时候反而很重要
十六、tf-idf对文本进行表示(视频31)
计算句子的tf-idf值
十七、词向量(视频32-33)
one-hot representation来表示词/句子时,是无法得出句子与句子之间,词与词之间的相似度的。
且one-hot表示得到的向量太过稀疏了
所以引入词向量
有很多种训练词向量的方法,最常用的还是skip-gram和cbow
一般来说向量的维度不超过300维
十八、倒排序(视频34)
回顾下,如何做自动回答系统:
1.要有个知识库,里面包含了问题-回答pair
2.用户输入一个问题,输入跟知识库里的question进行相似度匹配
3.找到相似度最高的问题,返回知识库中对应的答案
如果知识库里有n个问答对,就要计算n次相似度
时间复杂度:O(N) ✖ 每次相似度计算的复杂度
如何减少复杂度?
核心思路:层次过滤思想,过滤掉大概率不是我想要的答案
第一层过滤要选择最快的,也就是时间复杂度要小。逐层往下时间复杂度越来越复杂
过滤怎么做呢?就要用到倒排表inverted index。
1.有一个词典
2.词典中的每个词要有一个倒排表记录,这个词出现在哪些文档中doc1.doc2…
3.当一个搜索输入进系统后,分词,看下问题中的词通过倒排表找到,这个词出现在哪些文档中
4.就返回出现词最多的的文档
十九、Noisy channel model(视频35)
那个符号是等比于的意思
二十、语言模型Language model(36)
1.介绍
如何训练一个pre-trained的模型来判断一个句子符合语义的概率大于另一个?
2.chain rule
条件概率,联合概率
某个词A出现在一些词B,C,D…的后面的概率,是通过在语料库中,大量检索统计的来的。
但句子的组合千变万化,很可能没有这种句子,大部分短语在语料库中找不到,那么统计出来的概率就很稀疏
如何解决呢?用到马尔可夫假设:用来估计概率的
3.马尔可夫假设
只考虑最近的一个词出现后下个词出现的概率
举例,淘宝推荐系统,会参考一个用户的购买记录,日期越近的购买记录,权重越大,越需要考虑。
以此类推
4. unigram,bigram,N-gram
Unigram模型就是假设,句子中的每个词都是相互独立的,不考虑周围次的出现
Unigram语言模型,无法考虑单词的顺序
bigram会考虑到前面一个词出现的概率
5.如何构造语言模型
核心就是对文本的统计
Unigram语言模型的计算:如何得到每个单词的概率
1.统计语料库中总共有多少个单词:比如说有10的6次方个词
2.统计语料库中某个单词出现的次数,比如说“我们”这个词在语料库中出现了7万次
3.P(我们) = 7万/10的6次方
可能遇到如下一种情况,有个词没出现在语料库,那么他的概率就是0,进而影响到整句话的概率都为0
怎么解决这一问题呢,对不存在的词的分子添加一个很小的数,让它不为0
Bigram计算
6.评估一个语言模型
第二种思路:
就是让语言模型做个填空,来预测下一个词会出现什么
引入perplexity评估标准,
一个语言模型越好,x值越大,perplexity就越小。
维度越高,perplexity越小,也就是越好的。
7.解决概率会为0的问题(视频41)
前几节讲了,如果一个词没出现在语料库,那么它的概率会为0,影响整句话的出现概率
如何解决?
add-one smoothing (Laplace smoothing) 也叫拉普拉斯平滑
在朴素贝叶斯中经常用到
MLE: Maximum likelihood expectation 最大似然估计,这是最原始的对一个词的概率估计
Padd-1概率:是在分子加了1,分母加了V,V指的是语料库中词的个数(unique的词的个数)
add-k smoothing(视频42)
比add-1高级一点点
如何选择k值?
通过优化perplexity,找到最合适的k
interpolation插补 平滑(视频43)
目前没看到这些词,短语的出现,不代表未来不会出现。未必它们的概率就是0
如上,kitchen出现的概率比arboretum高,但in the kitchen 暂时没出现在文本库中,但我们可以预测
in the kitchen 比 in the arboretum 在未来出现的概率要高
也就是对未出现的短语的概率估计,要考虑unigram的概率,既in the kitchen 未出现,我们可以考虑kitchen的概率
对于一个未出现的三字短语(trigram)的预测,要考虑unigram,bigram,trigram三种,并对每种概率分配权重
good turning smoothing(视频48-49)
引入问题:
具体操作:
sam:出现了2次
I出现了3次
am出现了2次
do出现了1次
not出现了1次
eat出现了1次
N指的是语料库中有多少个词(可以重复,非unique的词的数量总和)
缺点是,要知道一个出现r次得词的概率时,需要知道r+1次词的数量
二十一、动态规划(视频44-46)
略
二十二、利用语言模型生成句子(视频50)
略
二十三、专家系统与基于概率的AI系统(视频51)
AI系统分两大类:
专家系统:数据少/没有数据,通过专家来制定规则
概率系统:大量的数据
二十四、专家系统expert system(视频52-55 )
实际工作中还是有很多场景会用到专家系统而不是机器学习系统
二十五、机器学习介绍(视频56-57)
机器学习定义
机器学习的分类
supervised learning
unsupervised learning
generative model 生成模型:可以用来生成一些数据:图片,视频,句子
discriminative Model 判别模型(需要条件概率)
机器学习步骤:
数据→数据清洗→特征工程→建模→预测
特征工程决定了机器学习的上限,模型的选择和调优只是为了逼近这个上限
二十六、朴素贝叶斯介绍,垃圾邮件分类(视频58-59)
二十七、python,pandas的lambda表达式,三元运算符(60)
lambda表达式是python的匿名函数,不需要def命名
add_lambda = lambda x,y:x+y
add_lambda(2,3)
#等同于
def add(x,y):
return x+y
add(2,3)
二十八、python,map函数(61)
jupyter小技巧,shift+tab键能调出一个函数的使用说明
传入多个参数
二十九、python的filter函数(62)
三十、python的reduce函数(63)
reduce只输出一个结果
要导入functools包
这里的10,是作为初始化参数,从10开始相加,10+1+2…
三十一、列表\集合\字典推导式(64)
集合推导式
字典推导式
三十二、闭包(65)
def 外层函数(参数):
def 内层函数():
print("内层函数执行", 参数)
return 内层函数
内层函数的引用 = 外层函数("传入参数")
内层函数的引用()
三十三、装饰器、语法糖、注解(66-67)
略
三十四、numpy介绍(68-75)
1.介绍
2.array创建
3.矢量化运算(70)
广播运算
4.索引和切片操作(71)
5. numpy 数组转置和轴对换(72)
6. 条件逻辑转数组(73)
np.where
7.numpy数学运算,排序(74)
8.numpy文件处理,存储读取(75)
保存成压缩文件