【发布时间】:2019-12-16 14:28:14
【问题描述】:
我想对音素概率值矩阵(给出的 ASR 模型的输出)执行 CTC Beam Search。 Tensorflow 有一个 CTC Beam Search implementation,但它的文档记录很差,我没有给出一个有效的例子。我想编写一个代码以将其用作基准。
到目前为止,这是我的代码:
import numpy as np
import tensorflow as tf
def decode_ctcBeam(matrix, classes):
matrix = np.reshape(matrix, (matrix.shape[0], 1,matrix.shape[1]))
aa_ctc_blank_aa_logits = tf.constant(matrix)
sequence_length = tf.constant(np.array([len(matrix)], dtype=np.int32))
(decoded_list,), log_probabilities = tf.nn.ctc_beam_search_decoder(inputs=aa_ctc_blank_aa_logits,
sequence_length=sequence_length,
merge_repeated=True,
beam_width=25)
out = list(tf.Session().run(tf.sparse_tensor_to_dense(decoded_list)[0]))
print(out)
return out
if __name__ == '__main__':
classes = ['AA', 'B', 'CH']
mat = np.array([[0.4, 0, 0.6, 0.2], [0.4, 0, 0.6, 0.2]], dtype=np.float32)
actual = decode_ctcBeam (mat, classes)
我在理解代码方面遇到问题:
- 在示例中 mat 的形状为 (2, 4),但 tensorflow 模块需要 (2, 1, 4) 形状,因此我将 mat 重塑为
matrix = np.reshape(matrix, (matrix.shape[0], 1,matrix.shape[1]))但这在数学上意味着什么? mat 和 matrix 是一样的吗?还是我在这里混在一起?中间的 1 是我理解的批量大小。 - decode_ctcBeam 函数返回一个列表,在它给出的示例中 [2],这应该表示已定义类中的“CH”。如果我有一个更大的输入矩阵,比如说 40 个音素,我该如何概括这一点并找到识别的音素序列?
期待您的回答/cmets!谢谢!
【问题讨论】:
标签: python tensorflow beam-search ctc