问题标签 [perplexity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5331 浏览

python - 如何使用 KenLM 计算困惑度?

假设我们在此基础上建立了一个模型:

从困惑公式(https://web.stanford.edu/class/cs124/lec/languagemodeling.pdf

应用逆对数公式之和得到内部变量,然后取n次根,困惑数异常小:

用数据中找不到的一句话再试一次:

并再次尝试完全超出域数据:

虽然预计较长的句子具有较低的困惑度,但奇怪的是差异小于 1.0 并且在小数范围内。

以上是用 KenLM 计算困惑度的正确方法吗?如果没有,是否有人知道如何通过 Python API 对 KenLM 进行计算机处理?

0 投票
1 回答
212 浏览

tensorflow - Tensorflow RNN PTB 教程测试测量和状态重置是不是错了?

我对 Tensorflow PTB RNN 教程代码ptb_word_lm.py有两个问题。下面的代码块来自代码。

  1. 可以为每个批次重置状态吗?

    在第 133 行,我们将初始状态设置为零。然后,第 153 行,我们使用零状态作为 rnn 步骤的起始状态。这意味着批次的每个起始状态都设置为零。我相信如果我们想应用 BPTT(通过时间的反向传播),我们应该在先前数据完成的步骤中进行外部(非零)状态输入,例如有状态 RNN(在 Keras 中)。

    我发现将起始状态重置为零实际上可行。但是有什么理论背景(或论文)可以解释为什么会这样吗?

  2. 可以像这样测量测试困惑吗?

    与上一个问题相关......该模型将每个批次的初始状态固定为零。但是,在第 337 ~ 338 行,我们将批量大小设置为 1,将步骤数设置为 1 以进行测试配置。然后,对于测试数据,我们将每次放入单个数据并在没有上下文(!)的情况下预测下一个数据,因为每个批次的状态都为零(只有一个时间步长)。

    这是测试数据的正确度量吗?是否所有其他语言模型论文都将测试困惑度衡量为在没有上下文的情况下预测下一个单词?

我运行了这段代码,得到了与代码和原始论文类似的结果。如果这段代码是错误的,我希望不会,你知道如何复制论文结果吗?如果我修改问题,也许我可以提出拉取请求。

0 投票
1 回答
290 浏览

machine-learning - 每次显着下降之间的困惑度计算都会上升

我正在使用 LSTM 和 tensorflow 的翻译模型训练会话代理。我使用批量训练,导致每个 epoch 开始后训练数据的困惑度显着下降。这种下降可以通过我批量读取数据的方式来解释,因为我保证我的训练数据中的每个训练对每个时期都只处理一次。当一个新的 epoch 开始时,模型在之前的 epoch 中所做的改进将在再次遇到训练数据时显示其收益,表示为图中的下降。其他批处理方法,例如 tensorflow 的翻译模型中使用的方法,不会导致相同的行为,因为它们的方法是将整个训练数据加载到内存中,并从中随机选择样本。

在此处输入图像描述

步骤,困惑

  • 330000, 19.36
  • 340000, 19.20
  • 350000, 17.79
  • 360000, 17.79
  • 370000, 17.93
  • 380000, 17.98
  • 390000, 18.05
  • 400000, 18.10
  • 410000, 18.14
  • 420000, 18.07
  • 430000, 16.48
  • 440000, 16.75

(从 perplexity 中截取的小片段显示在 350000 和 430000 处下降。在下降之间,perplexity 略有上升)

但是,我的问题是关于下跌后的趋势。从图中可以清楚地看出,困惑度略有上升(对于 step ~350000 之后的每个 epoch),直到下一次下降。有人可以就为什么会发生这种情况给出答案或理论吗?

0 投票
1 回答
770 浏览

python-2.7 - 使用 ldamulticore 确定 log_perplexity 以获得最佳主题数量

我正在尝试使用 python 中的 log perplexity 来确定我的 LDA 模型的最佳主题数。也就是说,我正在绘制一系列主题的日志困惑度并确定最小困惑度。但是,我获得的图表对 log perplexity 具有负值,而它应该具有介于 0 和 1 之间的正值。

0 投票
1 回答
275 浏览

python - 语言模型的困惑度怎么可能介于 0 和 1 之间?

在 Tensorflow 中,我得到的输出是 0.602129 或 0.663941。看起来更接近 0 的值意味着更好的模型,但似乎困惑度应该被计算为 2^loss,这意味着损失是负数。这没有任何意义。

0 投票
1 回答
8881 浏览

python - 如何解释 Sklearn LDA 困惑分数。为什么它总是随着主题数量的增加而增加?

我尝试使用 sklearn 的 LDA 模型找到最佳主题数量。为此,我通过参考https://gist.github.com/tmylk/b71bf7d3ec2f203bfce2上的代码来计算困惑度。

但是当我增加话题的数量时,困惑总是不合理地增加。我在实现上是错的还是它给出了正确的值?

对 LDA 使用 tf(原始术语计数)功能。

计算(5、10、15 ... 100 个主题)的 Perplexity

困惑度计算结果

0 投票
1 回答
680 浏览

language-model - 语言模型评估如何处理未知单词?

因此,为了构建语言模型,将超出词汇量的频率较低的单词替换为“UNK”。

我的问题是,如何评估这种基于“UNK”评估概率的语言模型?假设我们想在测试集上评估这种语言模型的困惑度,对于模型未知的单词,我们得到的概率是基于未知单词的“包”来评估的。

这似乎有问题,因为如果我们将词汇量设置为 1,即所有单词都是未知的,那么这个无所事事的语言模型的 perplexity 将是 1。

0 投票
0 回答
861 浏览

scikit-learn - 小数据集的 t-sne 困惑

我正在使用t-SNE来可视化细胞计数数据。我发现的大多数指南(https://distill.pub/2016/misread-tsne/)都警告过困惑超参数的选择如何影响结果。

然而,我的数据集非常小,因为每个集群只可视化一个点,所以总是期望 10-30 个点。在这种情况下,是否存在一个恒定的、可靠的困惑值或如何估计它的方法。

0 投票
0 回答
266 浏览

scikit-learn - 用于主题提取、困惑度和评分的 Sk-learn LDA

大家好!

作为项目的一部分,我需要使用我拥有的标记数据构建一个文本分类器。一个数据点由单个句子和每个句子的 3 个类别之一组成。我用 LDA 从这个数据库中提取了 5 个主题。

我想尝试的是,我想使用这些主题来确定一个看不见的句子属于哪个类。我正在考虑训练一个有 5 个指标的监督模型,该模型显示给定这 5 个主题的句子的主题分布。

问题是我无法为给定句子的每个主题获得单独的可能性。我对 LDA 模型的困惑和分数表示什么感到困惑。它们似乎返回单个浮点值。

另外,我知道 LDA 的监督版本。我想知道我的方法是否有意义。

提前致谢!

0 投票
1 回答
1380 浏览

r - 如何使用吉布斯采样计算 LDA 的困惑度

我在 R 中对 200 多个文档(总共 65k 字)的集合执行 LDA 主题模型。文档已经过预处理并存储在文档术语矩阵dtm中。从理论上讲,我应该期望在语料库中找到 5 个不同的主题,但我想计算困惑度分数,看看模型如何适应主题数量的变化。下面是我使用的代码。问题是当我尝试计算困惑度分数时它给了我一个错误,我不知道如何解决它(我是 R 新手)。错误在代码的最后一行。我将不胜感激任何帮助。