speechbrain.decoders.transducer 模块
Transducer 序列的解码器和输出归一化。
- 作者
Abdelwahab HEBA 2020 Sung-Lin Yeh 2020
摘要
类
此类实现了 transducer 模型的束搜索算法。 |
|
transducer 贪婪搜索器的隐藏状态的简单包装器。 |
函数
用于自定义排序顺序(在 sorted 和 max 中)的参数函数。 |
参考
- class speechbrain.decoders.transducer.TransducerGreedySearcherStreamingContext(hidden: Any | None = None)[source]
基类:
Module
transducer 贪婪搜索器的隐藏状态的简单包装器。由
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
此类实现了 transducer 模型的束搜索算法。
- 参数:
decode_network_lst (list) – 预测网络 (PN) 层的列表。
tjoint (transducer_joint module) – 此模块执行 TN 和 PN 之间的联合。
classifier_network (list) – 输出层列表(执行 TN 和 PN 联合之后)示例:(TN,PN) => 联合 => classifier_network_list [DNN block, Linear..] => 字符概率
blank_id (int) – 空白符号/索引。
beam_size (int) – 束的宽度。当 beam_size = 1 时使用贪婪搜索。
nbest (int) – 要保留的假设数量。
lm_module (torch.nn.ModuleList) – 用于 LM 的神经网络模块。
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)
示例
- searcher = TransducerBeamSearcher(
decode_network_lst=[hparams[“emb”], hparams[“dec”]], tjoint=hparams[“Tjoint”], classifier_network=[hparams[“transducer_lin”]], blank_id=0, beam_size=hparams[“beam_size”], nbest=hparams[“nbest”], lm_module=hparams[“lm_model”], lm_weight=hparams[“lm_weight”], state_beam=2.3, expand_beam=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]
- 参数:
tn_output (torch.Tensor) – 来自转录网络的输出,形状为 [batch, time_len, hiddens]。
- 返回类型:
Topk 假设
- transducer_greedy_decode(tn_output, hidden_state=None, return_hidden=False)[source]
- Transducer 贪婪解码器是一个跨批次的贪婪解码器,它应用 Transducer 规则
- 1- 对于转录网络 (TN) 输出中的每个时间步
- -> 仅在以下情况下更新第 i 个话语
上一个目标 != 新目标(我们保存隐藏状态和目标)
-> 否则:—> 保留解码器之前的目标预测
- 参数:
tn_output (torch.Tensor) – 来自转录网络的输出,形状为 [batch, time_len, hiddens]。
隐状态 ((torch.Tensor, torch.Tensor)) – 用于最初馈送给解码网络的隐状态。这与
return_hidden
结合使用时很有用,以便能够在流式上下文中执行集束搜索,从而可以在多次调用之间重用上一个隐状态作为初始状态。return_hidden (bool) – 返回元组是否应包含一个额外的第 5 个元素,其中包含最后一步的隐藏状态。参见
hidden_state
。
- 返回:
包含 4 或 5 个元素的元组(如果
return_hidden
为 True)。第一个元素 (List[List[int]]) – 解码后的 token 列表
第二个元素 (torch.Tensor) – 输出一个 logits 张量 [B,T,1,Output_Dim];填充尚未移除。
第三个元素 (None) – nbest;与贪婪解码无关
第四个元素 (None) – nbest 分数;与贪婪解码无关
第五个元素 (如果
return_hidden
为 True 则存在,(torch.Tensor, torch.Tensor)) – 元组,表示在流式上下文中继续调用transducer_greedy_decode
所需的隐藏状态。
- transducer_greedy_decode_streaming(x: Tensor, context: TransducerGreedySearcherStreamingContext)[source]
transducer_greedy_decode()
的微小包装器,其 API 使其适合作为流式decoding_function
传递。- 参数:
x (torch.Tensor) – 预测网络的输出(等同于
tn_output
)context (TransducerGreedySearcherStreamingContext) – 可变的流式上下文对象,在流式处理时必须指定并在跨调用时重用。你可以通过初始化一个默认对象来获得初始上下文。
- 返回:
hyp
- 返回类型:
torch.Tensor
- transducer_beam_search_decode(tn_output)[source]
- Transducer 束搜索解码器是一个跨批次的束搜索解码器,它应用 Transducer 规则
- 1- 对于每个话语
- 2- 对于转录网络 (TN) 输出中的每个时间步
-> 在 PN 和联合网络上执行前向传播 -> 选择 topK <= beam -> 执行 while 循环扩展假设,直到到达空白
-> 否则:–> 通过新 token 扩展假设
- 参数:
tn_output (torch.Tensor) – 来自转录网络的输出,形状为 [batch, time_len, hiddens]。
- 返回:
输出一个 logits 张量 [B,T,1,Output_Dim];填充尚未移除。
- 返回类型:
torch.Tensor