没有合适的资源?快使用搜索试试~ 我知道了~
NLP分词算法,源码
需积分: 24 29 下载量 50 浏览量
2017-11-12
17:49:40
上传
评论 1
收藏 220KB DOC 举报
温馨提示
试读
21页
最大概率分词算法,带详细源码 基于最大概率的汉语切分 目标:采用最大概率法进行汉语切分。 其中:n-gram用bigram,平滑方法至少用Laplace平滑。 输入:接收一个文本,文本名称为:corpus_for_test.txt 输出:切分结果文本, 其中:切分表示:用一个字节的空格“ ”分隔,如:我们 在 学习 。 每个标点符号都单算一个切分单元。 输出文件名为:学号.txt
资源推荐
资源详情
资源评论
NLP 基于最大概率的汉语切分
Ytinrete
要求:
基于最大概率的汉语切分
目标:采用最大概率法进行汉语切分。
其中:n-gram 用 bigram,平滑方法至少用 Laplace 平滑。
输入:接收一个文本,文本名称为:corpus_for_test.txt
输出:切分结果文本,
其中:切分表示:用一个字节的空格“ ”分隔,如:我们 在 学习 。
每个标点符号都单算一个切分单元。
输出文件名为:学号.txt
Bigram 参数训练语料:corpus_for_train.txt
注:请严格按此格式输出,以便得到正确评测结果
切分性能评价:
分
切分结果评测
F*100, F=2P*R/(P+R)
特别注意:代码雷同问题
本次作业最后得分会综合考虑:切分性能、代码、文档等几个方面。
第三次作业上交的截止时间:2014 年 1 月 7 日 24:00
1.关于最大概率分词
基本思想是:
一个待切分的汉字串可能包含多种分词结果,将其中概率最大的作为该字串的分词结
果。
根据:
由于语言的规律性,句子中前面出现的词对后面可能出现的词有很强的预示作用。
公式 1:
其中 w 表示词, s 表示待切分字符串。
公式 2:
例如:
S:有意见分歧
W1: 有/ 意见/ 分歧/
W2: 有意/ 见/ 分歧/
P(W1)=P(有)×P(意见)×P(分歧) =1.8*10-9
P(W2)=P(有意)×P(见)×P(分歧) =1*10-11
P(W1)> P(W2)
所以选择 W1
历史信息过长,计算存在困难
p(wi|w1w2…wi-1)
为了便于计算,通常考虑的历史不能太长,一般只考虑前面 n-1 个词构成的历史。
即: p(wi|wi-n+1…wi-1)
n-gram
n 较大时:
提供了更多的语境信息,语境更具区别性。但是,参数个数多、计算代价大、训练语料
需要多、参数估计不可靠。
n 较小时:
语境信息少,不具区别性。但是,参数个数少、计算代价小、训练语料,无需太多、参
数估计可靠。
题目要求使用 bigram,即考虑前一个词,即考虑左邻词。
左邻词
假设对字串从左到右进行扫描,可以得到 w1 ,w2 ,…,wi-1 wi,…等若干候选词,如果
wi-1 的尾字跟 wi 的首字邻接,就称 wi-1 为 wi 的左邻词。比如上面例中,候选词“有”就是
候选词“意见”的左邻词,“意见”和“见”都是“分歧”的左邻词。字串最左边的词没有左邻词。
最佳左邻词
如果某个候选词 wi 有若干个左邻词 wj , wk ,…等等,其中累计概率最大的候选词称
为 wi 的最佳左邻词。比如候选词“意见”只有一个左邻词“有”,因此,“有”同时也就是“意见”
的最佳左邻词;候选词“分歧”有两个左邻词“意见”和“见”,其中“意见”的累计概率大于“见”累
计概率,因此“意见”是“分歧”的最佳左邻词。
数据稀疏问
若某 n-gram 在训练语料中没有出现,则该 n-gram 的概率必定是 0。解决的办法是扩大训
练语料的规模。但是无论怎样扩大训练语料,都不可能保证所有的词在训练语料中均出现
由于训练样本不足而导致所估计的分布不可靠的问题,称为数据稀疏问题。在 NLP 领域中,
数据稀疏问题永远存在,不太可能有一个足够大的训练语料,因为语言中的大部分词都属
于低频词。
解决办法: 平滑技术
把在训练样本中出现过的事件的概率适当减小。
把减小得到的概率密度分配给训练语料中没有出现过的事件。
这个过程有时也称为 discounting(减值)。
目前已经提出了很多数据平滑技术,如:
Add-one 平滑
Add-delta 平滑
Witten-Bell 平滑
Good-Turing 平滑
Church-Gale 平滑
Jelinek-Mercer 平滑
Katz 平滑
这里我使用 laplace 平滑
Add-one 平滑(Laplace’s law)
规定任何一个 n-gram 在训练语料至少出现一次(即规定没有出现过的 n-gram 在训练
语料中出现了一次)。
没有出现过的 n-gram 的概率不再是 0。
2.算法描述
1) 对一个待分词的字串 S,按照从左到右的顺序取出全部候选词 w1 ,w2 ,
…,wi-1 wi,… wn;
2) 到词典中查出每个候选词的概率值 P(wi),当候选词没有出现时,由 laplace
平滑设其概率为 1/(字典数+1),记录每个候选词的全部左邻词;
3) 按照公式 1 计算每个候选词的累计概率,同时比较得到每个候选词的最佳
左 邻词;
4) 如果当前 wn 是字串 S 的尾词,且累计概率 P’(wn)最大, wn 就是 S 的终 点
词。
5) 从 wn 开始,按照从右到左的顺序,依次将每个词的最佳左邻词输出,即为
S 的分词结果。
3.程序设计
整个程序我分为两个阶段,字典生成阶段和分词阶段。
(make_dic.cpp)字典生成:
目标:
输入为训练语料(corpus_for_train.txt),输出为字典(dic.txt),字典内容为单词和单词出
现在字典中的频率,首行为词典总词数。
实现步骤:
首先读入训练,通过空格和换行符作为判定,分出单个单词。若单词没有在字典中出
现,则将其加入字典,单词自身频数加一,单词总数加一;若单词在字典中出现,则单词
自身频数加一。将数据存入 map 中,然后再遍历 map,创建一个输出流,输出为字典文件,
数据为具体单词和他的出现概率(自身频数/单词总数)。
剩余20页未读,继续阅读
资源评论
Mays_changzhi
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 人工智能ai相关教学课程快
- Suno的冲击-AI音乐来了-学习备用.pdf
- KIMI大模型浏览器插件
- b61fa64a08a02de0e0d49d53bb84c444.amr
- 分布式系统中Java后端开发技术及其应用实践.pdf
- 5ffd9193f6aec31bbf16030a46680dc7.avi
- DA14531-蓝牙传感器连接传输数据固件
- 极限存在准则与两个重要极限
- logisim实验MIPS运算器(ALU)设计(内含4位先行进位74182、四位快速加法器、32位快速加法器)-Educoder_logisim里面连线,实现4位先行进位74182和4位快速加法器-C
- 高等数学第一章第二节数列的极限
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功