speechbrain.decoders.transducer 模块
用于Transducer序列的解码器和输出归一化。
- Author:
阿卜杜勒瓦哈布·赫巴 2020 叶松林 2020
摘要
类:
该类实现了用于传感器模型的束搜索算法。 |
|
用于封装transducer贪婪搜索器隐藏状态的简单包装器。 |
函数:
用于自定义排序顺序的参数函数(在sorted和max中)。 |
参考
- class speechbrain.decoders.transducer.TransducerGreedySearcherStreamingContext(hidden: Any | None = None)[source]
基础:
Module用于换能器贪婪搜索器隐藏状态的简单包装。 由
transducer_greedy_decode_streaming()使用。隐藏状态;通常是一个张量或张量的元组。
- class speechbrain.decoders.transducer.TransducerBeamSearcher(decode_network_lst, tjoint, classifier_network, blank_id, beam_size=4, nbest=5, lm_module=None, lm_weight=0.0, state_beam=2.3, expand_beam=2.3)[source]
基础:
Module该类实现了用于转换器模型的束搜索算法。
- Parameters:
decode_network_lst (list) – 预测网络(PN)层的列表。
tjoint (transducer_joint 模块) – 该模块执行 TN 和 PN 之间的连接。
classifier_network (list) – 输出层列表(在执行TN和PN之间的联合操作后) 例如:(TN,PN) => 联合 => classifier_network_list [DNN块, 线性..] => 字符概率
blank_id (int) – 空白符号/索引。
beam_size (int) – 光束的宽度。当beam_size = 1时,使用贪心搜索。
nbest (int) – 要保留的假设数量。
lm_module (torch.nn.ModuleList) – 用于语言模型的神经网络模块。
lm_weight (float) – 执行束搜索时LM的权重(λ)。 log P(y|x) + λ log P_LM(y)。(默认值:0.3)
state_beam (float) – 用于决定A中的假设(process_hyps)是否可能与B中的假设(beam_hyps)竞争的阈值系数(以对数空间表示),如果不竞争,则结束while循环。 参考:https://arxiv.org/pdf/1911.01629.pdf
expand_beam (float) – 用于限制在A(process_hyp)中添加的扩展假设数量的阈值系数。 参考:https://arxiv.org/pdf/1911.01629.pdf 参考:https://github.com/kaldi-asr/kaldi/blob/master/src/decoder/simple-decoder.cc (参见 PruneToks)
Example
- searcher = TransducerBeamSearcher(
解码网络列表=[hparams[“emb”], hparams[“dec”]], 联合=hparams[“Tjoint”], 分类器网络=[hparams[“transducer_lin”]], 空白标识=0, 束大小=hparams[“beam_size”], 最佳数量=hparams[“nbest”], 语言模型模块=hparams[“lm_model”], 语言模型权重=hparams[“lm_weight”], 状态束=2.3, 扩展束=2.3,
) >>> from speechbrain.nnet.transducer.transducer_joint import Transducer_joint >>> import speechbrain as sb >>> emb = sb.nnet.embedding.Embedding( … num_embeddings=35, … embedding_dim=3, … consider_as_one_hot=True, … blank_id=0 … ) >>> dec = sb.nnet.RNN.GRU( … hidden_size=10, input_shape=(1, 40, 34), bidirectional=False … ) >>> lin = sb.nnet.linear.Linear(input_shape=(1, 40, 10), n_neurons=35) >>> joint_network= sb.nnet.linear.Linear(input_shape=(1, 1, 40, 35), n_neurons=35) >>> tjoint = Transducer_joint(joint_network, joint=”sum”) >>> searcher = TransducerBeamSearcher( … decode_network_lst=[emb, dec], … tjoint=tjoint, … classifier_network=[lin], … blank_id=0, … beam_size=1, … nbest=1, … lm_module=None, … lm_weight=0.0, … ) >>> enc = torch.rand([1, 20, 10]) >>> hyps, _, _, _ = searcher(enc)
- forward(tn_output)[source]
- Parameters:
tn_output (torch.Tensor) – 转录网络的输出,形状为 [batch, time_len, hiddens]。
- Return type:
Topk 假设
- transducer_greedy_decode(tn_output, hidden_state=None, return_hidden=False)[source]
- Transducer greedy decoder is a greedy decoder over batch which apply Transducer rules:
- 1- for each time step in the Transcription Network (TN) output:
- -> Update the ith utterance only if
之前的目标 != 新的目标(我们保存了隐藏状态和目标)
-> 否则: —> 保留解码器中的先前目标预测
- Parameters:
tn_output (torch.Tensor) – 转录网络的输出,形状为 [batch, time_len, hiddens]。
hidden_state ((torch.Tensor, torch.Tensor)) – 初始提供给解码网络的隐藏状态。这在结合
return_hidden使用时非常有用,以便能够在流式上下文中执行束搜索,从而可以在多次调用中重用最后的隐藏状态作为初始状态。return_hidden (bool) – 返回的元组是否应包含一个额外的第5个元素,该元素为最后一步的隐藏状态。参见
hidden_state。
- Returns:
4或5个元素的元组(如果
return_hidden)。第一个元素 (List[List[int]]) – 解码后的令牌列表
第二个元素 (torch.Tensor) – 输出一个logits张量 [B,T,1,Output_Dim];填充尚未移除。
第三个元素 (None) – nbest;与贪婪解码无关
第四个元素 (None) – nbest分数;与贪婪解码无关
第五个元素 (如果
return_hidden存在,(torch.Tensor, torch.Tensor)) – 表示在流式上下文中调用transducer_greedy_decode所需的隐藏状态的元组。
- transducer_greedy_decode_streaming(x: Tensor, context: TransducerGreedySearcherStreamingContext)[source]
transducer_greedy_decode()的轻量级封装,其 API 使其适合作为流式处理的decoding_function传递。- Parameters:
x (torch.Tensor) – 预测网络的输出(等同于
tn_output)上下文 (TransducerGreedySearcherStreamingContext) – 可变的流式上下文对象,在流式处理时必须指定并在调用之间重复使用。 您可以通过初始化默认对象来获取初始上下文。
- Returns:
hyp
- Return type:
torch.Tensor
- transducer_beam_search_decode(tn_output)[source]
- Transducer beam search decoder is a beam search decoder over batch which apply Transducer rules:
- 1- for each utterance:
- 2- for each time steps in the Transcription Network (TN) output:
-> 在PN和联合网络上进行前向传播 -> 选择topK <= beam -> 执行一个while循环,扩展假设直到达到空白
-> 否则: –> 使用新标记扩展假设
- Parameters:
tn_output (torch.Tensor) – 转录网络的输出,形状为 [batch, time_len, hiddens]。
- Returns:
输出一个logits张量[B,T,1,Output_Dim];填充尚未被移除。
- Return type:
torch.Tensor