趋近智
虽然标准的束搜索解码器通过保留多个候选转录结果改进了贪婪搜索,但其决策仅基于声学证据。为了生成符合语言学逻辑的输出,我们必须将语言模型的分数直接整合到束搜索过程中。这通过修改在每一步中用于对假设进行排序的评分函数来实现。
解码器的目标从找到声学上最可能的路径转变为找到同时最好地满足声学模型和语言模型的路径。束中每个假设的分数使用前面介绍的组合公式进行更新:
要生成语言连贯的输出,需要将语言模型的分数直接整合到束搜索过程中。这通过修改用于在每一步中评估假设的评分函数来实现。修改后的评分函数如下:
分数(W)=声学分数+α⋅语言模型分数+β⋅词数让我们分解一下每个部分是如何纳入的:
α会优先考虑语法正确性,有时会牺牲声学准确性,而较低的α则使解码器更信任声学模型。语言模型的整合在解码过程中发生在特定时刻。束搜索算法按时间步进行,用新字符扩展每个假设。声学分数随着每个新字符的出现而更新。然而,语言模型分数只在识别到词边界时才计算并添加,这通常是在假设中附加空格字符时。
考虑束中两个相互竞争的假设:“recognize”和“wreck a nice”。当音频的下一部分听起来像“speech”时,声学模型可能会为字符s-p-ee-ch生成高概率。
s、p等。声学分数在每次字符扩展时更新。同时,“wreck a nice”假设被扩展为“wreck a nice beach”。当“wreck a nice ”确定后,将查询语言模型以获取“beach”跟在“wreck a nice”后面的概率。尽管这个短语在语音上是可信的,但它不太常见,因此语言模型会为其分配较低的分数。结果,“recognize speech”假设可能会获得更高的总分并保留在束中,而“wreck a nice beach”可能会被剪枝。
上图显示了两个假设是如何评分的。即使“wreck a beach”的声学分数略高,语言模型为“recognize speech”分配的高概率也可以提高其最终分数,使其成为优选的转录结果。
为了使此过程更具体,以下是一个包含n-gram语言模型的CTC束搜索解码器的高级算法。
# 算法的简化表示
def ctc_beam_search_decoder(acoustic_probs, beam_width, lm, alpha, beta):
# beam = [(前缀文本, 声学分数, 语言模型状态)]
# lm_state 存储假设的n-gram历史
initial_lm_state = lm.initial_state()
beam = [("", 0.0, initial_lm_state)]
for timestep_probs in acoustic_probs:
new_beam = []
for prefix, acoustic_score, lm_state in beam:
for char, char_prob in timestep_probs.items():
# 处理空白符和重复字符的标准CTC逻辑
# (此部分为清晰起见已省略)
new_prefix = prefix + char
new_acoustic_score = acoustic_score + log(char_prob)
# 检查是否刚完成一个词
if char == ' ':
# 使用语言模型对完成的词进行评分
word = get_last_word(new_prefix)
lm_score = lm.score(word, state=lm_state)
# 获取下一个词的新的语言模型状态
new_lm_state = lm.update_state(word, lm_state)
# 用语言模型分数和词奖励更新总分
total_score = new_acoustic_score + alpha * lm_score + beta
new_beam.append((new_prefix, total_score, new_lm_state))
else:
# 不是词边界,只需沿用语言模型状态
total_score = new_acoustic_score
new_beam.append((new_prefix, total_score, lm_state))
# 剪枝束:按分数排序并保留前 `beam_width` 个假设
beam = sorted(new_beam, key=lambda x: x[1], reverse=True)[:beam_width]
# 从最终束中最佳假设返回文本
sorted(beam, key=lambda x: x[1], reverse=True)[0]
return best_hypothesis[0]
n-1个词。这确保了下一个词的概率是基于其正确语境计算的。α和β: α和β的值并非固定不变。它们是重要的超参数,必须在验证集上进行调整,以找到最适合您的特定声学模型和语言模型的最佳平衡。这通常通过使用不同值运行解码并选择产生最低词错误率(WER)的组合来完成。通过将语言模型整合到解码搜索中,您将ASR系统从一个简单的声学到音素转录器转变为一个更能理解和应用语言规则的智能系统,大幅提高了最终转录的质量和可读性。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造