自然语言处理(NLP)笔记 第一章 词典分词

自然语言处理笔记

自然语言处理(NLP)笔记 第一章 词典分词-CSDN博客

自然语言处理笔记 第二章 二元语法与中文分词-CSDN博客

自然语言处理笔记 第三章 隐马尔科夫模型与序列标注-CSDN博客

自然语言处理 第四章 感知机分类与序列标注-CSDN博客

自然语言处理笔记 第五章 条件随机场与序列标注-CSDN博客

自然语言处理笔记 第六章 词性标注-CSDN博客

自然语言处理笔记 第七章 命名实体识别-CSDN博客

机器翻译综述-CSDN博客

领域词性标注-CSDN博客


两种流派:

基于规则的专家系统:针对需求设计规则死板不稳定

基于统计学的机器学习:通过构建语料库让计算机学习

语料库:分为中文分词语料库、词性标注语料库等等,实现一种功能就需要一种语料库

词典分词基本介绍:

词典分典

词的定义:具有独立意义的最小单位

词频:二八定律

词典:记录大量词的词库

Hanlp词典

切分算法:

1、完全切分---找出文本中的所有词,不是标准意义上的分词

从文本(长度为n)的第i个字开始(i初始=0)。匹配[i,i+1]一直到[i,n]。然后i++。直到i=n。 问题:会重复匹配(如:出租车à出租,出租车)

2、正向最长匹配

最长匹配不是返回一个最长词,而是多个最长词

从文本(长度为n)的第i个字开始(i初始=0)。匹配[i,i+1]一直到[I,n]。选择其中最长的放到word_list待输出;第二轮匹配i从上一轮的最长词之后第一个字开始,找第二个最长词。如果没有匹配到任何一个词,word_list就加入当前的单个字作为这一轮的最长词。

3、逆向最长匹配

与正向相似,只是倒着来

但正向匹配和逆向匹配的结果未必相同

如:我一个人吃饭   正向:  逆向:

4、双向最长匹配

优先返回逆向的原因:统计学规律,逆向匹配正确率高

速度:正向逆向速度差不多;python比java慢

字典树(前缀树)

每个字符串末尾添加一个\0(散列值=0),普通节点不需要分配内存标记颜色

 

从有限自动机DFA的角度看每个节点对应着一个状态(这个状态就是当前的前缀)

状态转移:向父节点询问该字符与子节点对应边(边上存储字符的整型值)的关系,若存在满足条件的边,则转移状态到子节点

首字散列其余二分的字典树

中文大多是二字词,因此第一次状态匹配的速度十分重要。

第一次匹配:创建一个长为 65536 的数组,将子节点按对应的字符整型值作为下标放入该数组即可。这样每次状态转移时,只需访问对应下标就行了。

前缀树的优点:

双数组字典树DAT

Base数组每个元素表示一个状态,check数组每个元素表示一个状态的前驱状态

每个字符串末尾添加一个\0(散列值=0),普通节点不需要分配内存标记颜色

状态转移:

当状态s接受字符c转移到状态t时,双数组满足

base[s]+c:s状态+c(s的前缀加c)得到了t状态。t状态的前驱状态为s状态。

  

查询:   (base[p]<0时,对应单词结尾)

最开始的状态b=0,待识别字符串为key。通过循环依次匹配key[i]和b,匹配成功则令当前状态b=本次匹配成功后的状态p。若在循环结束前p=-1则提前return跳出循环。

(p=最终状态b的前缀+结尾状态\0)(注意,这里的p

和循环里面的p完全无关)。令n=base[p]即末尾节点的前缀。第二个if的第一个条件是状态转移的判定 (此步是否有必要?)。第二个条件是判断末尾节点是不是单词结尾。

注意:该算法对于key[]串最后一个元素是不是/0有容忍性,有的话循环结束时不会记录(else中没有令b=p),没有的话后面会补上( ,c=/0)(应该是这样吧...);如果key[]中间就出现了/0的话,那么for循环到此为止,/0后面的就不管了。

AC自动机   

速度优于字典树,原因:

实现方法:

Goto表:

  其实就是前缀树

Output表:

Fail表:存储状态转移失败后应当转移到的节点

which?  节点状态为已匹配的字符串的最长后缀

例:节点7---his继续匹配,匹配失败后,节点3的状态---s,是his在表上的最长后缀;节点5---she继续匹配,匹配失败后,节点2的状态---he是she在表上的最长状态。

(双数组字典树DAT和AC自动机可以结合---ACDAT,提升性能)

准确率评测:

精度P:被判定为正样本里有多少真的是正样本

召回率R:所有正样本里有多少被判定为正样本

OOV:未登录词(out of vocabulary),新词

IV:“登录词”(in vocabulary),词典里有的词

定义F1值:

 

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值