machine-learning - Huggingface gpt2语言模型代码中perplexity计算在哪里?

标签 machine-learning huggingface-transformers gpt perplexity

我看到一些 github 评论说 model() 调用的损失的输出是以 perplexity 的形式:
https://github.com/huggingface/transformers/issues/473

但是当我查看相关代码时...
https://huggingface.co/transformers/_modules/transformers/modeling_openai.html#OpenAIGPTLMHeadModel.forward

    if labels is not None:
        # Shift so that tokens < n predict n
        shift_logits = lm_logits[..., :-1, :].contiguous()
        shift_labels = labels[..., 1:].contiguous()
        # Flatten the tokens
        loss_fct = CrossEntropyLoss()
        loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))
        outputs = (loss,) + outputs

    return outputs  # (loss), lm_logits, (all hidden states), (all attentions)

我看到正在计算交叉熵,但没有转换为困惑。损失最终在哪里转化?或者是否已经存在我不理解的转变?

最佳答案

啊好吧,我找到了答案。代码实际上是返回交叉熵。在 github 评论中,他们说这是令人困惑的……他们是这样说的,因为 OP 确实如此

return math.exp(loss)

它将熵转化为困惑:)

关于machine-learning - Huggingface gpt2语言模型代码中perplexity计算在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60832547/

相关文章:

java - 如何在 Apache Mahout 中对数值数据进行分类?

python - Keras 2d 散乱预测

huggingface-transformers - 拥抱脸变形金刚 : cannot import BitsAndBytesConfig from transformers

python - T5 微调模型输出 而不是大括号和其他特殊字符

gpt - Google发布商代码,如何从服务中删除事件监听器

machine-learning - 导入错误: DLL load failed: The specified procedure could not be found

machine-learning - 使用 One-Class SVM 计算异常检测的异常分数

pytorch - 如何正确提示Transformer模型的解码器?

google-dfp - 如何知道 "disableInitialLoad"是否在 GPT 上被调用?