speechbrain.decoders.transducer 模块

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

Author:

阿卜杜勒瓦哈布·赫巴 2020 叶松林 2020

摘要

类:

TransducerBeamSearcher

该类实现了用于传感器模型的束搜索算法。

TransducerGreedySearcherStreamingContext

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

函数:

get_transducer_key

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

参考

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

基础:Module

用于换能器贪婪搜索器隐藏状态的简单包装。 由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

该类实现了用于转换器模型的束搜索算法。

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

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

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

Parameters:

x (dict) – 比较项之一

Returns:

归一化的对数分数。

Return type:

float