speechbrain.decoders.transducer 模块

Transducer 序列的解码器和输出归一化。

作者

Abdelwahab HEBA 2020 Sung-Lin Yeh 2020

摘要

TransducerBeamSearcher

此类实现了 transducer 模型的束搜索算法。

TransducerGreedySearcherStreamingContext

transducer 贪婪搜索器的隐藏状态的简单包装器。

函数

get_transducer_key

用于自定义排序顺序(在 sorted 和 max 中)的参数函数。

参考

class speechbrain.decoders.transducer.TransducerGreedySearcherStreamingContext(hidden: Any | None = None)[source]

基类:Module

transducer 贪婪搜索器的隐藏状态的简单包装器。由 transducer_greedy_decode_streaming() 使用。

hidden: Any | None = None

隐藏状态;通常是一个张量或张量元组。

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

speechbrain.decoders.transducer.get_transducer_key(x)[source]

用于自定义排序顺序(在 sorted 和 max 中)的参数函数。用作 key=partial(get_transducer_key)

参数:

x (dict) – 比较中的一个项

返回:

归一化对数得分。

返回类型:

float