LLMs之PPL:解读多个权威文档(比如huggingface)中对PPL(困惑度)的定义、PPL的多种计算方式、多种代码实现

本文深入探讨了固定长度模型如GPT-2的困惑度(PPL)计算,包括两种近似算法:独立计算每个子序列的PPL和滑动窗口策略。滑动窗口策略虽然计算复杂度高,但能提供更精确的困惑度评估。通过GPT-2在WikiText-2数据集上的实例,展示了如何实施这两种策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LLMs之PPL:解读多个权威文档(比如huggingface)中对PPL(困惑度)的定义、PPL的多种计算方式、多种代码实现

导读:这篇文章主要分析了固定长度模型计算困惑度(perplexity)的问题。首先给出了困惑度的定义。困惑度反映了模型预测序列每个token的能力,是经常用于评估语言模型的一个重要指标。对于顺序语言模型,可以将序列分解为条件概率,然后计算困惑度。但对于固定长度模型,如GPT系列,由于模型有最大输入长度限制,无法得到条件上下文所有token的概率。文章提出了两种计算困惑度的方法:

T1、将序列切分为不相交的块,分别计算每个块的负对数似然,然后相加。这种方法计算简单,但近似不准,通常得到的困惑度值会更高

T2、使用滑动窗口策略。将上下文窗口按一定步长滑动计算每个token的条件概率。这种方法近似真实分解,通常能得到更佳的困惑度值。但计算代价较高

文中以GPT-2为例,加载WikiText-2数据集,使用不同步长的滑动窗口策略计算困惑度。步长等于最大输入长度时,等效于第一种方法。步长减小可以使模型在预测每个token时拥有更多上下文,通常困惑度会更低。

总之,这篇文章系统介绍了固定长度模型计算语言模型困惑度的问题,给出了两种近似算法,并通过实验证明使用滑动窗口策略计算结果更准确且更佳。为固定长度模型下的困惑度计算提供了重要参考。

目录

两种近似算法计算固定长度语言模型的困惑度

Perplexity of fixed-length models固定长度模型困困惑度

PPL是GPT-Style模型的评估指标

PPL的具体计算公式

Calculating PPL with fixed-length models使用固定长度模型计算 PPL

T1、基序列分解策略计算PPL:独立计算每个子序列的PPL+简单快速+易导致较高的PPL值(因较少的上下文)

T2、基于滑动窗口策略计算PPL:重复滑动上下文窗口+每个预测步骤中有更多的上下文+计算较慢+但更有效

Example: Calculating perplexity with GPT-2 in Transformers用GPT-2计算Transformer中的困惑度

用GPT-2来演示

实现代码

加载WikiText-2数据集并使用几种不同的滑动窗口策略评估困惑度

### minimind LLMs 源码解读分析 #### full_sft.py 文件解析 `full_sft.py` 是一个用于实现基于 PyTorch 的分布式混合精语言模型全参数训练框架的脚本[^1]。该文件主要关注于如何高效地利用硬件资源,在大规模数据集上进行高效的训练。 为了支持分布式训练,此模块引入了 `torch.distributed.launch` 工具来启动多进程环境,并通过配置 GPU 设备来进行并行计算。对于优化器的选择,默认采用 AdamW 来更新权重参数;同时为了加速收敛过程以及提高数值稳定性,还应用了梯裁剪技术防止梯过大造成不稳定现象发生。 此外,考虑到现代深学习任务中常见的内存瓶颈问题,这里实现了自动混合精机制 (Automatic Mixed Precision, AMP),它允许网络中的某些部分以较低位宽的数据类型运行从而节省显存空间而不影响最终性能表现。 ```python from torch.cuda.amp import GradScaler, autocast scaler = GradScaler() with autocast(): outputs = model(inputs) loss.backward() scaler.step(optimizer) scaler.update() ``` #### eval.py 文件解析 另一方面,《eval.py》则专注于构建一个可以与用户实时互动交流的人工智能系统[^2]。具体来说就是创建了一个命令行界面(Command Line Interface, CLI), 让使用者能够输入自然语言查询语句得到相应的回复结果。 在这个过程中涉及到的关键组件包括但不限于: - **Tokenizer**: 负责将原始文本转换成 token 序列以便送入 Transformer 编解码架构处理; - **Model Inference Pipeline**: 定义好推理流程之后就可以调用预训练好的 checkpoint 进行预测操作了; - **Response Generation Logic**: 根据上下文信息动态调整生成策略确保对话连贯性和逻辑一致性. ```python tokenizer = AutoTokenizer.from_pretrained('pretrained_model_path') model = AutoModelForCausalLM.from_pretrained('pretrained_model_path') input_text = "你好" inputs = tokenizer(input_text, return_tensors="pt").to(device) outputs = model.generate(**inputs, max_length=50) response = tokenizer.decode(outputs[0], skip_special_tokens=True) print(response) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值