问题标签 [beam-search]

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 投票
1 回答
591 浏览

python - 矢量化波束搜索解码器在 GPU 上并不快 - Tensorflow 2

我正在尝试以tf.keras.Model矢量化方式运行 RNN 波束搜索,以使其在 GPU 上完全工作。然而,尽管tf.function我可以将所有内容都设为矢量化,但无论有没有 GPU,它的运行速度都完全相同。附件是一个带有假模型的最小示例。实际上,对于 n=32,k=32,steps=128,这是我想要使用的,这需要 20 秒(每个 n=32 个样本)来解码,无论是在 CPU 上还是在 GPU 上!

我肯定错过了什么。当我训练模型时,在 GPU 上,批量大小为 512 的训练迭代(128 步)需要 100 毫秒,而在 CPU 上,批量大小为 32 的训练迭代需要 1 秒。GPU 在批量大小为 512 时并未饱和。我知道我有开销来自单独执行这些步骤并执行每个步骤的阻塞操作,但就计算而言,与模型的其余部分相比,我的开销可以忽略不计。

我也知道tf.keras.Model以这种方式使用 a 可能并不理想,但是是否有另一种方法可以通过函数将输出张量连接回输入张量,尤其是重新连接状态?

完整的工作示例: https ://gist.github.com/meowcat/e3eaa4b8543a7c8444f4a74a9074b9ae

0 投票
1 回答
335 浏览

tensorflow - TensorFlow2 中的 tf.nn.ctc_beam_search_decoder() 不支持 GPU 吗?

现在,我尝试tf.nn.ctc_beam_search_decoder()在 GPU 上使用。
但我有一个问题,它不使用 GPU。

我能够检查其他 tensorflow 函数(例如ReshapeSigmoidGrad)是否在 GPU 上运行。
但有些包括ctc_beam_search_decoder()只在 CPU 上运行,而且ctc_beam_search_decoder()速度很慢。

那么,我有两个问题。一、 TensorFlow2
不支持GPU? 其次,如果支持,你能告诉我如何实现或功能(或方法)吗?ctc_beam_search_decoder()

我在下面展示一个简单的例子。

程序代码。

结果(标准输出)。

忽略输入和输出数据并专注于正在使用的设备。
在这种情况下,ExpandDimsStridedSlice在 GPU 上执行。但CTCBeamSearchDecoder并未在 GPU 上执行。

0 投票
0 回答
271 浏览

deep-learning - 为什么词级语言模型应该有助于 ASR 中的波束搜索解码?

我正在尝试对经过自动语音识别任务训练的CTC损失训练的声学模型进行波束搜索解码。我使用的版本是基于这篇论文的。然而,尽管许多资料将相似词级语言模型的集成描述为有利于词错误率性能,但在我的情况下,LM 的集成使结果恶化。

这其实并没有让我太惊讶,因为语言模型只给词尾加完词的前缀打分,而打分的意思是把前缀的概率乘以LM概率,这样就降低了整个前缀的概率。这样,语言模型系统地降低了以词汇表中的单词结尾的前缀的概率,而未以完整单词结尾的前缀则根本不被 LM 评分。在每个时间步,以完整单词结尾的前缀似乎由于分数降低而被丢弃,而不完整的前缀则保留在光束中。

我的问题是,如果单词级 LM 集成降低了有效前缀的概率,为什么它应该起作用?我会理解一些在每一步都对所有内容进行评分的字符级 LM 或一些前瞻单词级 LM 可能会有所帮助。例如, Graves通过使用给定前缀的所有可能单词的概率总和以及在每个时间步应用 LM 更新来描述词级语言模型的集成,这似乎是合理的,即使计算成本可能要大得多。

0 投票
2 回答
3538 浏览

python - pytorch 中的批量光束搜索

我正在尝试在文本生成模型中实现波束搜索解码策略。这是我用来解码输出概率的函数。

现在你可以看到这个函数是在考虑到 batch_size 1 的情况下实现的。为批量大小添加另一个循环将使算法O(n^4)。和现在一样慢。有什么办法可以提高这个功能的速度。我的模型输出通常是(32, 150, 9907)遵循格式的大小(batch_size, max_len, vocab_size)

0 投票
1 回答
82 浏览

nlp - Spacy 束搜索内存泄漏?

使用spacy的beam search时,会出现内存泄漏问题,请问如何解决?导致内存泄漏的代码如下:

0 投票
0 回答
169 浏览

tensorflow - 如何使用 TensorFlow BeamSearchDecoder?

我认为我使用tensorflow_addons.seq2seq2.BeamSearchDecoder不正确。我收到了关于不良张量形状的各种神秘信息。我想这个问题与它们的平铺方式有关initial_statestart_tokens或者可能与未指定的批量大小有关。文档没有正确指定这些参数应该如何工作。

调用decoder引发错误:

有人可以解释这里的错误是什么以及如何解决它吗?

TensorFlow 2.3.0
TensorFlow 插件 0.12.1

0 投票
0 回答
65 浏览

python - tfa.seq2seq.BeamSearchDecoder 输出空时间步输出

我正在使用 tensorflow 插件在 tensorflow 2 中构建一个编码器-解码器模型。对于预测,我尝试使用tfa.seq2seq.BeamSearchDecoder该类。不幸的是,我在输出中得到了一个没有时间步长的张量。

该错误很可能在我的解码器类的调用方法中。

如果您需要任何进一步的信息或对如何解决此问题有想法,请告诉我。

谢谢,祝你有美好的一天,

索伦

0 投票
0 回答
24 浏览

python - 为堆叠的双向编码器-解码器 seq 添加波束解码器到 seq 模型

我希望在 TF-keras 中实现的 NMT 的 seq2seq 模型的编码器-解码器堆叠 LSTM 层的末尾进行波束搜索。我在用

在解码器类

#in beam_search_evaluate

我需要将解码器 RNN 单元更改为堆叠层解码器。我不确定如何将此decoder.rnn_cell 转换为堆叠层LSTM。我应该使用 keras.stackedRNNCell 层吗?任何在解码器中具有堆叠 RNN 层的 TFa 波束搜索解码器的代码片段(使用 tfa.seq2seq.AttentionWrapper)都会非常有帮助。

0 投票
0 回答
18 浏览

tensorflow - 在 PG 网络中实现 tri-gram 重复阻塞

我正在尝试将 tri-gram 阻塞应用于 TensorFlow https://github.com/abisee/pointer-generator中实现的指针生成器网络的代码

我试图在这里理解参考代码:https ://github.com/nlpyang/hiersumm/blob/476e6bf9c716326d6e4c27d5b6878d0816893659/src/abstractive/beam.py#L153

任何人都可以帮我解决这个问题吗?我真的需要它,因为我想改进我的摘要代码中的 rouge-l 结果。

0 投票
0 回答
7 浏览

nlp - BART-base 配置中的“beam_search”参数是什么意思?

Huggingface上的预训练facebook/bart-base模型可用模型,将“beam_search”参数设置为 4。[检查附加的字段配置文件]

这是否意味着模型隐式使用“beam_search=4”,并且我们在使用 model.generate 函数时不需要提供额外的 beam_search 参数?

以下是模型的 config.json 文件