基于特定语料库生成HMM转移概率分布和发射概率分布用于词性标注 Python

复制这段内容后打开百度网盘手机App,操作更方便哦
链接:https://pan.baidu.com/s/1sB252goPWU5UruzWmBWO1A 提取码:4r13
上篇文章我们以Brown语料库中的一个特例讲解了HMM和Viterbi算法。
那么如何使用特定语料库通过HMM算法进行词性标注呢?我们可以从HMM的五元组入手。

大致步骤:

  1. 得到语料库中词性标注种类和个数==>得到隐序列;
  2. 对输入的句子进行分词==>得到观测序列;
  3. 对每个词性标注,计算该词性出现时的前一个词性的次数/该词性出现的总次数==>得到转移概率矩阵;
  4. 对每个观测状态,计算该状态不同词性出现的次数/该观测状态出现的总次数==>得到发射概率矩阵;
  5. 计算各词性初始概率: n c ( p o s − t a g ) n s u m \frac{n_{c(pos-tag)}}{n_{sum}} nsumnc(postag),某一个词性出现的次数/语料库总词性标记数;

在实际操作中某些小细节是需要引起我们关注的。

1 如何做数据平滑?

我们要考虑并处理发射矩阵和转移矩阵中条件概率为0而出现整条路径概率为0情况,因此我们需要做数据平滑。下面以他是创业大赛国赛金奖?为例展开分析:

数据平滑的方法有很多种,一开始我使用的是加一法,在测试的时候我发现无论输入什么句子,词性标注都是Rg。

他/Rg 是/Rg 创业/Rg 大赛/Rg 国/Rg 赛/Rg 金奖/Rg ?/Rg

平滑方法改进后:

他/r 是/v 创业/vn 大赛/vn 国/n 赛/vn 金奖/n ?/w

为什么会出现这样的情况呢?

我们回到语料库可以发现总词性种类有44种,而Rg只出现了10次,如果我们使用加一法平滑数据,对数据的概率影响还是比较大的,因此加一法在该语料库中的表现上效果不是特别理想。我们可以使用Laplace平滑方法,并使参数p足够小,对平滑方法进行改进,从而更好地弥补语料库数据量的不足。其他数据平滑方法还有Kneser-Ney、Katz等,在宗成庆的《统计自然语言处理》中有所提及。

# 加一法平滑方法
for row in range(transaction_matrix.shape[0]):
	transaction_matrix[row] += 1
	transaction_matrix[row] /= np.sum(transaction_matrix
  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值