Kenlm python接口用法详细介绍
2021/10/30 20:13:24
本文主要是介绍Kenlm python接口用法详细介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 加载LM模型
- model.score()
- model.full_scores()
- model.BaseScore()
- 参考代码
Kenlm的安装和训练方法见 KenLM使用教程。
加载LM模型
import kenlm # Kenlm训练的LM的路径 LM = 'lm.apra' # 加载LM model = kenlm.LanguageModel(LM) # 查看N-gram print('{0}-gram model'.format(model.order))
model.score()
该api可以用于对一整句话进行打分,获取对应的分数。
sentence = '今 天 天 气 真 不 错' print(sentence, model.score(sentence))
输出结果:
model.full_scores()
用于查看一句话中每个token的分数,但是这个api使用前提是你得先获取这一整句话。
# Show scores and n-gram matches words = ['<s>'] + sentence.split() + ['</s>'] for i, (prob, length, oov) in enumerate(model.full_scores(sentence)): print('{0} {1}: {2}'.format(prob, length, ' '.join(words[i + 2 - length:i + 2]))) if oov: print('\t"{0}" is an OOV'.format(words[i + 1])) # Find out-of-vocabulary words for w in words: if not w in model: print('"{0}" is an OOV'.format(w))
输出结果:
由于这里的分数都取log了,所以将每个字的分数相加就是整句话的分数,与model.score()得到的结果一致。
log P ( S ) = log ( P ( S 1 ∣ S 0 ) ∗ P ( S 2 ∣ S 0 S 1 ) ∗ P ( S 3 ∣ S 0 S 1 S 2 ) … P ( S n ∣ S 0 … S n − 1 ) ) = ∑ i = 1 n log P ( S i ∣ S 0 … S i − 1 ) \begin{aligned} \log P(S) &=\log (P(S_1|S_0)*P(S_2|S_0S_1)*P(S_3|S_0S_1S_2)\dots P(S_n|S_0\dots S_{n-1})) \\ &=\sum_{i=1}^{n}\log P(S_i|S_0\dots S_{i-1}) \end{aligned} logP(S)=log(P(S1∣S0)∗P(S2∣S0S1)∗P(S3∣S0S1S2)…P(Sn∣S0…Sn−1))=i=1∑nlogP(Si∣S0…Si−1)
model.BaseScore()
在实际解码过程中,一般使用自回归方法每个token依次出来,使用model.BaseScore()接口可以对预测的下一个token进行打分。
model.BaseScore(pre_state, token, cur_state)
- pre_state: 前一个token对应的state
- token: 当前要打分的token
- cur_state: 当前token对应的state
# 设置起始状态 state_pre = kenlm.State() model.BeginSentenceWrite(state_pre) for ch in sentence.split(' '): state = kenlm.State() score = model.BaseScore(state_pre, ch, state) print(ch, score) state_pre = state state = kenlm.State() print('</s>', model.BaseScore(state_pre, '</s>', state))
输出结果:
参考代码
- https://github.com/kpu/kenlm/blob/master/python/example.py
这篇关于Kenlm python接口用法详细介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例