Max Matching|Segment|Term Frequency|Viterbi Algorithm(NLP L18-24笔记)

本文介绍了自然语言处理中的分词技术,包括最大匹配法(前向、后向和双向)以及Viterbi算法。讨论了词频在语言模型中的作用,并探讨了如何利用动态规划解决分词中的效率问题。
摘要由CSDN通过智能技术生成

L18

心理学与DL,RL
巴浦洛夫的狗:

消退:词向量需要不断更新
泛化:被蛇咬过,看到绳子也害怕。

过拟合
欠拟合
过拟合与欠拟合的区别在于,欠拟合在训练集和测试集上的性能都较差,而过拟合往往能较好地学习训练集数据的性质,而在测试集上的性能较差。

联结主义:
给一个行为:X-黑箱子-Y
多次重复该行为后,X与Y就有了联结

L19

斯金纳的鼠
操作性条件反射

那么反馈机制很重要:
在这里插入图片描述
强化学习的目标函数(李宏毅的PPT):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200301150451477.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA3Mzc3NTY=,size_16,color_FFFFFF,t_7
强化原理:正强化,负强化
reward机制:正惩罚,负惩罚

L20
Pipeline:
在这里插入图片描述
Word Segmentation
Spell Correction
Stop Words Removal
Stemming

L21

Word Segmentation
**在这里插入图片描述**

直接调用结巴(结巴底层有多种算法,未公开):
调用add_world(),词库中加入新词
在这里插入图片描述
分词工具的底层(算法讲解):

1.最大匹配:Max Matching
希望自己匹配到的单词越长越好

1.1前项最大匹配:

假设有以下词典库。定义参数:max_length=5.
在这里插入图片描述
Step1.卡前五个单字窗口,没有则减掉一个单字
【我们经常有】意见分歧
Step2.继续减
【我们经常】
【我们经】
【我们】
Step3.
【我们】作为单独的单词被识别,那么窗口后移
【经常有意见】分歧

继续上述操作,
最终得到【我们】【经常】【有】【意见】【分歧】

算法-贪心:选择当前情况下最优local optimal(而不能保证global optimal)

算法-DP: 降低算法复杂度后,可以获得全局最优解

*Beam Search 集束搜索

!自己做编写分词工具练习

1.2后向最大匹配:
在这里插入图片描述
我们经常【有意见分歧】
我们经常有【意见分歧】
我们经常有意【见分歧】
我们经常有意见【分歧】
‘’’’’’
我们【经常有意见】

我们经常【有意见】
,
【我们经常】

有些少数例子里面,前项与后项匹配的分词可能有微小差别。

1.3 双向最大匹配

参考:中文分词引擎 java 实现 — 正向最大、逆向最大、双向最大匹配法

语义层-句子层-单词层(max matching)
在这里插入图片描述

L23

考虑语义:Incorporate Semantic (考虑语义)

输入->生成所有可能的分割->选择其中最好的(工具)

最经典的工具:Language Model

经常|有|意见|分歧
经常|有|意见|分歧
经常有|意见分歧
经常|有意见分歧

找到多个可能性分割

Unigram Language Model =》每个单词看做是独立存在的单词
P(经常|有|意见|分歧)=P(经常)P(有)P(意见)P(分歧)=0.3
P(经常|有意见|分歧)=P(经常)P(有意见)P(分歧)=0.35

之后返回概率更大的那一项。

书内词语出现的概率 term frequency TF
经常=100次
有=1000次
意见=500次
分歧=200次

P(经常)=100/#of words in book

P(我们|今天|上课)=P(我们)(今天)(上课),可以通过term frequency计算出来

那么这个概率可能会非常非常小 可能是-inf /underflow

logP(经常|有|意见|分歧),加完log后,则可以将乘积拆分成加法,为logP(经常)+logP(有)+logP(意见)+logP(分歧)

为啥可以加上log:因为 如果P(S1)>P(S2),那么一定有logP(S1)>logP(S2)

在这里插入图片描述
伪代码
1.分词,获得所有结果
2.对于所有结果,计算所有分词可能性的概率
3,.返回最高概率的分词结果
在这里插入图片描述

以上方法缺点:
复杂度过高!
生成可能的组合数目太多了!效率问题!

L24 分词-维特比算法

如果把第一步第二步合起来看,能否提升效果?
引入Viterbi Algorithm (本质也是Dynamic Programming DP算法)

+本来求log(S)的最大值,现在如果是-log(S),则为求-log(S)的最小值。

给定每个单词的TF与-log(X)值

状态机

!!!!!!!!!!
加负号和log后(以常数e为底,即为ln),我们要求概率最小的路径。
!!!!!!!!!!

转换成了下图 1-8的最短路径问题,核心为动态规划
在这里插入图片描述

假定:
f(8):从节点1-8 最短路径的值 (最终目标)
f(7):从节点1-7 最短路径的值

f(2):从节点1-2 最短路径的值

那么先求 能够到达第八个节点的路径
f(8):f(5)+3 从第五个节点跳到8
f(6)+1.6 从第六个节点跳到8
f(7)+20 从第七个节点跳到8
求最小值

f(7): f(6)+2.3

f(6): f(3)+2.3
f(4)+1.6
f5)+3

所以采用和之前一样的动态规划,维护数组
计算f(1)-f(8)
在这里插入图片描述
记录pointer最短的node来源,代码中应该还有一个数组记录
在这里插入图片描述

课后自己写一遍伪代码!!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值