Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wenet] Add the context decoding graph, which supports context biasin… #1931

Merged
merged 4 commits into from
Aug 3, 2023

Conversation

kaixunhuang0
Copy link
Collaborator

添加python版本的基于热词图的热词偏置代码,均使用wenet给出的预训练模型进行测试,U-WER和B-WER分别指热词之外单词的词错误率和在热词上的词错误率

WenetSpeech biasing子集organization-name测试集,使用attention rescoring解码应用热词图前后结果:

method CER U-CER B-CER
baseline 1.62 1.55 1.83
context graph 1.43 1.54 1.05

热词列表大小298,context score=2.0
数据集、热词列表路径:https://github.com/thuhcsi/Contextual-Biasing-Dataset/

Librispeech test-other测试集,使用attention rescoring解码应用热词图前后结果:

method WER U-WER B-WER
baseline 8.77 5.58 36.84
context graph 7.9 5.61 28.02

热词列表大小3838,合并了test-other每条数据包含的热词,context score=2.0
热词列表路径:https://github.com/facebookresearch/fbai-speech/tree/main/is21_deep_bias

@@ -433,6 +434,101 @@ def _ctc_prefix_beam_search(
hyps = [(y[0], log_add([y[1][0], y[1][1]])) for y in cur_hyps]
return hyps, encoder_out

def _ctc_prefix_beam_search_with_bias(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we add context_graph directly in _ctc_prefix_beam_search?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I directly add the context_graph into _ctc_prefix_beam_search in the new commit

@robin1001
Copy link
Collaborator

@pengzhendong please follow the PR.

reverse=True)
cur_hyps = next_hyps[:beam_size]
hyps = [(y[0], log_add([y[1][0], y[1][1]])) for y in cur_hyps]
if context_graph is None:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if we refer https://github.com/wenet-e2e/wenet/blob/main/runtime/core/decoder/ctc_prefix_beam_search.cc#L168 for how to combine the logic with/without context together?

@robin1001 robin1001 merged commit 9df6577 into wenet-e2e:main Aug 3, 2023
@robin1001
Copy link
Collaborator

Great job!

@dahu1
Copy link

dahu1 commented Nov 27, 2023

@kaixunhuang0 你好凯勋,想问一下这里的 3838 条热词是怎么获得的,我在 这里最多只看到 2000 条的 ref。你是重新构造了一个 3838 条热词的 ref 吗?( 构造方式:ref 的第 4 列是第 3 列 热词的超集,第 4 列从 all_rare_words.txt 抽取出 3838 条来)

我的问题是:

  1. 我这样构造 3838 条热词的方式对吗?
  2. 为啥不用现成的 2000 条测呢?
  3. 我在 2000 条上测的 baseline 的 wer 你看是否有效。

image

哦,我找到3838条词表了,在你上传的bias_model 里有

@kaixunhuang0
Copy link
Collaborator Author

@kaixunhuang0 你好凯勋,想问一下这里的3838条热词是怎么获得的,我在这里最多只看到2000条的ref。你是重新构造了一个3838条热词的ref吗?( 构造方式:ref的第4列是第3列 热词的超集,第4列从all_rare_words.txt抽取出3838条来)

我的问题是:

  1. 我这样构造3838条热词的方式对吗?
  2. 为啥不用现成的 2000条测呢?
  3. 我在2000条上测的baseline 的wer 你看是否有效。

image

3838热词是我通过合并test other上的所有真实热词得到的结果,这里2000的ref是对每条数据构建的,里面有很多干扰项。如果要用这个2000的热词列表,需要改下代码为每条数据构建一个热词解码图。你没有改的话很可能只是用了第一条数据的热词列表,这样实际上对于后面的句子都完全没有增强,你的结果中的整体wer和baseline比确实也没什么变化。关于你的uwer、bwer结果,我建议也测一个不带热词的结果来进行比较,因为大家算uwer和bwer的代码好像得出来的结果都不太一样,所以和自己测的BWER比会比较稳妥。

@dahu1
Copy link

dahu1 commented Nov 27, 2023

3838 热词是我通过合并 test other 上的所有真实热词得到的结果,这里 2000 的 ref 是对每条数据构建的,里面有很多干扰项。如果要用这个 2000 的热词列表,需要改下代码为每条数据构建一个热词解码图。你没有改的话很可能只是用了第一条数据的热词列表,这样实际上对于后面的句子都完全没有增强,你的结果中的整体 wer 和 baseline 比确实也没什么变化。关于你的 uwer、bwer 结果,我建议也测一个不带热词的结果来进行比较,因为大家算 uwer 和 bwer 的代码好像得出来的结果都不太一样,所以和自己测的 BWER 比会比较稳妥。

嗯,理解了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants