CTC decoder 时怎么知道哪个序号是我的 <blk>
Antonio-hi opened this issue · 3 comments
Line 27 in f41e335
在这里项目里面,您的 /< /BLK> 应该对应的 index 是 37 也可以理解为 max len sequnce - 1, 也可以理解为 index -1 , 在训练的时候 ctc loss 我们可以特别指定 blank_index 是任意值,但是在 decoder 的时候,函数里面就没有这个 blank_index 参数了,请问假设我在训练的时候 blank_index 随便赋予了一个 index 666,decoder 的时候这个 666 对应的blk字符 就会被显示在输出 string 里面,这个问题怎么理解,有没有好的解决方案
TF 解码器API中缺失了这个参数,已经有PR在进行中,不知道什么时候会更新。你可以自行解码。
比如:
def map_to_chars(inputs, table, blank_index=0, merge_repeated=False):
"""Map to chars.
Args:
inputs: list of char ids.
table: char map.
blank_index: the index of blank.
merge_repeated: True, Only if tf decoder is not used.
Returns:
lines: list of string.
"""
lines = []
for line in inputs:
text = ""
previous_char = -1
for char_index in line:
if merge_repeated:
if char_index == previous_char:
continue
previous_char = char_index
if char_index == blank_index:
continue
text += table[char_index]
lines.append(text)
return lines
Line 27 in f41e335
在这里项目里面,您的 /< /BLK> 应该对应的 index 是 37 也可以理解为 max len sequnce - 1, 也可以理解为 index -1 , 在训练的时候 ctc loss 我们可以特别指定 blank_index 是任意值,但是在 decoder 的时候,函数里面就没有这个 blank_index 参数了,请问假设我在训练的时候 blank_index 随便赋予了一个 index 666,decoder 的时候这个 666 对应的blk字符 就会被显示在输出 string 里面,这个问题怎么理解,有没有好的解决方案
默认值是num_classes - 1,TF API文档上有说明。
Line 27 in f41e335
在这里项目里面,您的 /< /BLK> 应该对应的 index 是 37 也可以理解为 max len sequnce - 1, 也可以理解为 index -1 , 在训练的时候 ctc loss 我们可以特别指定 blank_index 是任意值,但是在 decoder 的时候,函数里面就没有这个 blank_index 参数了,请问假设我在训练的时候 blank_index 随便赋予了一个 index 666,decoder 的时候这个 666 对应的blk字符 就会被显示在输出 string 里面,这个问题怎么理解,有没有好的解决方案
默认值是num_classes - 1,TF API文档上有说明。
感谢问题已解决,主要是考虑到我把类别设置成一个大于当前已有类别的数值,将来客户让新加文字模型 fine-tuning 方便