问题标签 [language-model]

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 回答
44 浏览

python - 保持通过多个程序运行加载的语言模型

word2vec在 Python 中加载了一个大型语言模型。每次运行程序时,我都需要将模型加载到内存中。

我正在使用来自 shell 脚本的不同命令行参数运行相同的程序,例如

在程序完成运行后,我可以做些什么来将语言模型保存在内存中,还是我只需要修改 python 代码本身以在加载模型后循环不同的迭代?

0 投票
2 回答
1530 浏览

machine-learning - 来自 Keras 中 lm_1b 的字符-词嵌入

我想在 Keras NN 模型中使用一些预训练的词嵌入,这些模型已由 Google 在一篇非常著名的文章中发表。他们提供了训练新模型的代码,以及此处的嵌入。

但是,从文档中不清楚如何从简单的 python 函数调用中从给定的字符串(单词)中检索嵌入向量。许多文档似乎都集中在将向量转储到文件中以获取整个句子,大概是为了进行情感分析。

到目前为止,我已经看到您可以使用以下语法输入预训练的嵌入:

但是,将不同的文件及其结构转换pre_trained_matrix_here为我不太清楚。

他们有几个 softmax 输出,所以我不确定哪个属于 - 以及如何将我输入中的单词与他们拥有的单词字典对齐。

是否有一种简单的方法可以在 keras 中使用这些词/字符嵌入和/或在 keras 中构建模型的字符/词嵌入部分,以便可以为其他 NLP 任务添加更多层?

0 投票
1 回答
803 浏览

nlp - 如何使用 n-gram 进行多标签分类?

我正在开展一个项目,根据他们用英语交流的方式来确定他们的国籍。我有 10 个国籍和 1000 个文件,每个国籍 100 个。我正在使用 n-gram 作为特征并希望验证我的方法。我的数据结构将具有不同的 n-gram(字符 n-gram、bi-gram,作为列)作为特征和国籍作为标签(作为行)我的步骤是:

  1. 提取给定国籍的所有文件 (FINE)。1.1。将它们组合在一起形成一个文本语料库(例如将 100 个文件组合成一个大文件)。我最初考虑一次获取一个文件并根据它们的出现更新 n-gram 的计数。但是对于每个新的 n-gram,我必须进行查找以查看它是否已经发生,然后针对给定的标签更新其频率。这会是更好的方法吗?
  2. 提取二元/三元并获取每克的频率。(NLTK 有 FreqDist 为每个计数)
  3. 存储这些信息,以便我使用它来对我的测试集进行分类。(我如何存储这些信息。更多信息如下)

问题是我应该将 n-gram 和频率信息存储在矩阵中(具有所有 n-gram 和标签的单个矩阵或每个标签的单独矩阵)还是应该将其存储为地图(每个标签的地图,具有 n -gram 及其频率计数)。我想要一个数据结构(用于存储提取的信息),分类器很容易将其作为输入并处理它们。我无法预见,哪种数据结构会是更好的选择。

0 投票
1 回答
4676 浏览

python - 了解 Keras LSTM 中的字符级嵌入

我是在 Keras RNN 结构中实现语言模型的新手。我有一个离散单词的数据集(不是来自单个段落),它具有以下统计信息,

  1. 单词样本总数:1953
  2. 不同字符总数:33 个(包括 START、END 和 *)
  3. 一个单词的最大长度(字符数)为 10

现在,我想建立一个模型来接受一个字符并预测单词中的下一个字符。我已经填充了所有单词,使它们具有相同的长度。所以我的输入是 Word_input ,形状为1953 x 9,目标是1953 x 9 x 33。我也想使用嵌入层。所以我的网络架构是

例如,带有填充的单词“CAT”表示

网络输入 -- START CAT END * * * * (9 个字符)

相同的目标 --- CAT END * * * * *(9 个字符)

因此,TimeDistributed我正在使用输出测量网络预测和目标的差异。我还将 设置batch_size为 1。因此,在读取每个示例单词后,网络会重置其状态。

我的问题是我在概念上做对了吗?每当我进行训练时,准确率都会停留在 56% 左右。

请赐教。谢谢。

0 投票
1 回答
275 浏览

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

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

0 投票
1 回答
376 浏览

tensorflow - 使用 Tensorflow LSTM PTB 示例对句子进行评分

我尝试使用一个示例 LSTM,根据Tensorflow LSTM 示例进行训练。这个例子允许在整个测试集上获得困惑。但是我需要使用经过训练的模型分别对每个句子进行评分(获取 loglikes)(对 STT 解码器输出的假设进行评分)。我稍微修改了阅读器并使用了代码:

因此,使用该代码,我可以独立获得每个句子的分数。如果我通过 5 个句子,它可以正常工作。但是如果我将 1k 个句子传递给这段代码,它会运行得非常慢并且占用大量内存,因为我创建了 1k 个模型 mtest。那么,你能告诉我实现目标的另一种方法吗?谢谢你。

0 投票
0 回答
665 浏览

neural-network - 基于 10 亿字语言模型基准的语言模型的困惑度计算

最近一直在尝试基于这篇文章实现RNNLM 。有一个带有一些 LSTM 分解技巧的实现,但类似于作者的原始实现。

序言

1)数据集被分割成文件,然后文件的行在训练时被打乱,在测试时被顺序输入。(链接):

2)批次连续成型

* 符号代表句子的开始\结尾。每个矩阵代表一个巴赫。代码链接。所以:

  1. 如果句子长于 num_steps,则在同一行的下一批继续。

  2. 如果句子较短,则批处理行正在填充另一个句子。

3)他们计算批量平均损失。num_steps - LSTM 的内存。代码

4) LSTM 单元在每次训练迭代后更新,并在评估时归零。

他们将其声明为局部变量声明

然后它会在火车时间更新。并在评估时归零

5)在评估时间,作者以这种方式计算困惑度(链接):

这意味着他们测量批量平均困惑度。

话虽如此,我有两个主要问题。

问题

  1. 考虑序言 1)、2) 和 4)。

为什么批次是这样形成的?

LSTM 单元不会在每个句子之后归零,因此它会保留前一个句子的记忆。

在顶部的示例中,当神经网络处理第 №1 批次时,第 2 行表示单词“Half”,它会记住单词 Music 和 start\end 标记的上下文。如果句子没有被打乱并且是真实的文本,这可能是有意义的,但是它们打乱并且没有相互连接。

我实现了这两种方法,无限批次提供更好的性能。

  1. 考虑序言 3) 和 5)。

为什么我们要估计批平均困惑度?

考虑到第一个问题,我不清楚当我们以这种方式测量困惑度时,我们真的可以估计我们的模型有多好。但是句子平均困惑似乎更有效。

如果我的逻辑有缺陷,如果您指出这一点,我将不胜感激。

0 投票
2 回答
559 浏览

tensorflow - 张量流中的字符级双向语言模型

受 Andrej Karpathy Char-RNN 的启发,有一个 char-rnn sherjilozair/char-rnn-tensorflow 的 Tensorflow 实现:使用 Tensorflow 在 Python 中用于字符级语言模型的多层循环神经网络(LSTM,RNN)。我想从此代码实现双向字符级语言模型。我更改了model.py并编写了一个简单的代码:

在训练阶段,我看到了快速收敛。经过近 3000 次迭代,损失达到 0.003。在测试阶段,所有字符的概率为 1.0。我认为有一个错误。我很高兴能得到一些帮助来找到我的错误。

0 投票
1 回答
751 浏览

python - 在gensim word2vec模型中获取文本给定词嵌入模型的概率

我正在尝试使用 gensim word2vec 模型获得最可能的单词序列。我找到了一个提供这些文件的预训练模型:

这是我试图用这个模型得到句子概率的代码:

运行此代码时,我收到此错误:

谁能帮我弄清楚如何解决这个问题。一般来说,我想使用一些预训练模型来获得单词序列一起出现的概率。