lmppl 项目介绍
什么是lmppl?
lmppl 是一款用于计算文本困惑度(Perplexity)的Python库。困惑度是衡量语言模型预测文本能力的指标,得分越低,说明文本越流畅或越符合典型性。lmppl 支持使用各种预训练语言模型(Language Models, LMs)来计算文本的困惑度,适用于循环网络模型(例如GPT3)、编码器-解码器模型(例如BART、T5)以及掩码语言模型(例如BERT)。
如何快速开始?
用户可以通过pip安装lmppl:
pip install lmppl
安装完成后,即可在Python环境中使用该库来进行困惑度的计算。例如,在情感分析场景下,用户可以比较两段文本的困惑度,选择困惑度较低的文本作为模型的预测结果。
示例应用
- 循环网络模型(Recurrent LM) :适用于GPT系列模型。
import lmppl
scorer = lmppl.LM('gpt2')
text = [
'情感分类:我把笔记本掉在膝盖上,还有人偷了我的咖啡。我很开心。',
'情感分类:我把笔记本掉在膝盖上,还有人偷了我的咖啡。我很难过。'
]
ppl = scorer.get_perplexity(text)
print(list(zip(text, ppl)))
print(f"预测结果: {text[ppl.index(min(ppl))]}")
- 掩码语言模型(Masked LM) :适用于BERT系列模型。
import lmppl
scorer = lmppl.MaskedLM('microsoft/deberta-v3-small')
text = [
'情感分类:我把笔记本掉在膝盖上,还有人偷了我的咖啡。我很开心。',
'情感分类:我把笔记本掉在膝盖上,还有人偷了我的咖啡。我很难过。'
]
ppl = scorer.get_perplexity(text)
print(list(zip(text, ppl)))
print(f"预测结果: {text[ppl.index(min(ppl))]}")
- 编码器-解码器模型(Encoder-Decoder LM) :适用于T5和BART这类模型。
import lmppl
scorer = lmppl.EncoderDecoderLM('google/flan-t5-small')
inputs = [
'情感分类:我把笔记本掉在膝盖上,还有人偷了我的咖啡。',
'情感分类:我把笔记本掉在膝盖上,还有人偷了我的咖啡。'
]
outputs = [
'我很开心。',
'我很难过。'
]
ppl = scorer.get_perplexity(input_texts=inputs, output_texts=outputs)
print(list(zip(outputs, ppl)))
print(f"预测结果: {outputs[ppl.index(min(ppl))]}")
支持的模型
lmppl 支持多种流行的语言模型,每种模型皆适用于相应的模型类型。以下是一些例子:
- BERT:
google-bert/bert-base-uncased
(MaskedLM) - GPT 2:
gpt2-xl
(LM) - T5:
google/flan-ul2
(EncoderDecoderLM)
使用提示
- 最大Token长度:不同的语言模型有其对应的最大token长度设置,可通过调整此参数优化计算效率,需根据实际需求进行实验与调整。
- 批量大小:可以通过设置
get_perplexity
函数的batch_size
参数来调整计算批次。默认情况下,所有文本会一次性处理,若文本数量过多可能产生内存错误,适当设置批量大小可避免此问题。