You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测文本中的重复词语序列?ASR转录文本优化问询

ASR转录后文本重复序列优化方案

对ASR输出做字符串后处理来修复重复幻觉完全可行,这是低成本提升转录质量的有效手段,尤其适合处理像Seamless M4T Large-V2这类模型偶尔出现的连续重复问题。

你提到的正则只能处理固定模式的连续重复,而可变长度缓冲区的思路更灵活,能覆盖不同长度的重复序列,具体实现可以参考以下逻辑:

  • 先设定重复序列的长度范围(比如2-8个词),从长序列往短序列检测,避免短序列误判长重复
  • 用滑动窗口维护缓冲区,实时对比后续文本片段是否和缓冲区内容完全匹配
  • 一旦检测到重复序列,直接跳过后续重复部分,只保留第一份
  • 最后统一处理大小写、标点,修正转录中的格式问题

示例实现(Python)

def remove_repeated_sequences(text, min_seq_len=2, max_seq_len=8):
    words = text.split()
    processed = []
    i = 0
    total_words = len(words)
    
    while i < total_words:
        processed.append(words[i])
        i += 1
        duplicate_found = False
        
        # 从最大序列长度开始检测,优先处理长重复
        for seq_len in range(min(max_seq_len, total_words - i), min_seq_len - 1, -1):
            if i + seq_len > total_words:
                continue
            # 取已处理的最后seq_len个词作为缓冲区
            buffer = processed[-seq_len:]
            # 对比后续的同长度片段
            if buffer == words[i:i+seq_len]:
                # 跳过重复的序列
                i += seq_len
                duplicate_found = True
                break
        if not duplicate_found:
            continue
    
    # 修正标点和大小写格式
    corrected_text = ' '.join(processed).replace(' ,', ',').replace(' .', '.').capitalize()
    return corrected_text

测试效果

输入你的示例文本:

"I'm not well, I think I wont be going to i wont be going to i wont be going to i wont be going to i wont be going to i wont be going to i wont be going to. Maybe tomorrow..."

处理后输出:
"I'm not well, I think I wont be going to. Maybe tomorrow..."

注意事项

  • 缓冲区长度范围建议根据目标模型的幻觉特点调整,比如针对Seamless M4T,可设为3-7个词,适配它常见的重复序列长度
  • 加入大小写归一化(比如统一转为小写后检测,再恢复原格式),避免因大小写差异漏检重复
  • 如果需要处理近似语义重复(而非完全字面重复),可以结合轻量词向量做相似度匹配,但会增加计算成本,普通场景用精确匹配足够

内容的提问来源于stack exchange,提问作者Awais Nawaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:49:54