- 论文题目:《Generative Annotation for ASR Named Entity Correction》
- 论文地址:https://arxiv.org/pdf/2508.20700
- 资源地址:https://github.com/L6-NLP/Generative-Annotation-NEC
核心:基于音频特征+实体词库,使用神经网络检索可能最的实体词,然后通过LLM进行纠错
华为这篇论文的核心目标——解决ASR(自动语音识别)里“专有名词老认错”的问题。比如像“ChatGPT”“长江白鲟”这种领域特定的命名实体,ASR(比如Whisper)在通用场景里挺准,但遇到这些词常转错,后续用这些转录文本做任务就全乱了。
命名实体纠错 (NEC) 方法是指用于纠正ASR转录文本中的命名实体错误,现在主流的命名实体纠错 (NEC)方法分两类:
(1) 在转录文本生成过程中同时纠正错误;一般需要训练额外的模块,使 ASR 模型具备上下文偏置能力,或者利用上下文信息来纠正 ASR 模型中的命名实体错误。 这些方法需要对ASR系统进行修改,使其具备纠错能力,因此这些方法很难应用于第三方 ASR 系统。
(2) 在转录文本生成后纠正错误,即后编辑错误。不需要对 ASR 系统进行任何修改,因此后编辑 NEC 方法更具适用性。其中最常见的是PED-NEC(基于语音编辑距离的方法),当 ASR 转录文本中实体和相关错误文本的词形相似时,我们可以通过遍历实体数据存储轻松定位错误,但PED-NEC有个大毛病——如果错的文本和真实实体“长得太不一样”,就彻底歇菜。比如:
- “大语言模型”被ASR转成“大原模型”,俩词字面差挺多;
- “Midjourney”转成“米德仲尼”(英文变中文音译);
- “灵耀X”转成“01X”(汉字变数字);
- “ChatGPT”转成“Check GPT”(拼写差一截)。

这时候PED-NEC没法定位错词,自然就纠正不了,这就是论文要解决的核心问题。
为了解决上述问题,创新性地提出了一种基于生成式方法的 NEC(命名实体校正) 方法,用于在转录文本中自动标注待纠正片段。具体来说,利用语音声学特征、候选命名实体以及 ASR 转录结果,生成(标注)出转录文本中需要被纠正的词语,并据此进行修正。该基于错误标注的 NEC 方法能够在识别出待纠正文本后,实现端到端的文本纠错,无需考虑词形变化,因此相比以往基于规则的替换方法具有更高的优越性。

Method:核心是两步:SS(语音特征检索候选实体)+ GL(生成式标注错误文本)。简单说,不依赖文本长得像不像,而是基于语音相似性进行实体检索,再让模型“智能标出”错词,最后替换——完美解决“长得不一样”的问题。
纠错流程如图2所示。首先预先构建一个数据存储库(datastore),用于保存实体的音频-文本对。在获得语音片段和 ASR 转录结果后,执行语音检索【SAN(自注意力网络)和FFN(前馈网络)】,以判断该语音片段的某一部分是否与数据存储库中某个候选实体的语音特征相似。
如果存在相似的候选实体,就将该候选实体与 ASR 转录文本拼接在一起,作为提示(prompt)输入纠错模型,以引导模型生成 ASR 转录中可能错误的词语(即与正确实体对应的错误文本)。最后,将检测出的错误文本替换为数据存储库中的正确实体。

Datastore Creation:收集实体列表 X={x1,x2,…xn} ,以及基于TTS合成对应的的语音:

将 TTS 生成的音频输入到编码器,并将编码器最后一层的输出作为实体 xi 的语音表示。为了提高检索准确率并降低内存占用,我们在编码器的末尾添加了一个CNN层

数据存储存储键值(表示实体)对:

Entity Retrieval:用户的输入音频片段 s 输入到编码器中,并从编码器最后一层的输出中得到它的表示 s’:

引入自注意力网络(SAN)和前馈网络(FFN)来计算数据存储区 s 包含候选实体 xi′ 的概率 pi :

最后应用平均池化,获取最终的分类:

判断数据存储中是否存在语音片段中的实体。如果概率 pi 高于我们设定的阈值,则选择前 K 个候选实体进行进一步校正。
Error Correction:通过上述实体检索方法获得若干候选实体,用符号“|||”连接实体,然后用引号将实体字符串与 ASR 转录文本连接起来。实体+转录文本字符串用作提示,引导纠错模型在转录文本中生成与候选实体具有相似语音特征的错误实体。该过程实际上是一种生成式标注方法,因为纠错模型会在原始 ASR 转录文本中输出一个或多个单词。
方法还具备实体拒绝功能。如果模型无法将候选实体与转录文本中可能存在的错误实体匹配,则会生成符号<empty> 表示没有返回结果。

模型旨在找到语音相似且符合语言模型的待更正文本,最后一步是用数据存储中的真实实体替换错误文本。
Experimental :
1. 数据准备:训练+测试集都很实在训练数据:用了Aishell数据集里的54129个中文实体,正负样本1:10(正样本是含实体的音频文本对,负样本是不含的);还特意让20%的Prompt里加了“无关实体”(比如该纠正“ChatGPT”,却加了“Midjourney”当候选),练模型生成“”的能力,避免过纠正。测试集:搞了两个,一个是开源的,一个是自己建的:
- Aishell测试集:从Aishell的开发集和测试集里挑了3101个去重实体,测通用场景;
- BuzzWord测试集:自己建的“难点集”,1500段2023-2024年的语音——500段是“正例”(含新词、外来词、数字实体,比如“ChatGLM-6B”“苍兰诀”“Matebook D16”),1000段是“负例”(不含实体),还特意平衡了男女说话人,模拟真实场景。
评估指标:看四个关键数据,别嫌麻烦,这些数能直接看出效果:
- CER:整体字符错误率(越低越好);
- NNE-CER:非实体部分的错误率(越低越好,要是这数高了,说明把不该改的改了,过纠正);
- NE-CER:实体部分的错误率(越低越好);
- NE-Recall:实体召回率(越高越好,意思是“能把多少实体从错的里捞对”)。
对比的基线方法:跟四种方法比,确保新方法真的好:
- 原始Whisper(没纠正的ASR结果);
- PED-NEC(传统的基于编辑距离的方法);
- PED+GL(用PED找候选,用新的GL纠正);
- SS+NEC(用新的SS找候选,用传统PED纠正)。

- 原始Whisper最差,实体召回率才70.85%;
- PED-NEC比Whisper好,但有个问题:NNE-CER从10.00升到10.42,说明它有点“瞎改”,把非实体的内容也改坏了(过纠正);
- 而SS+GL呢?所有指标都最优:整体CER最低(9.85),实体错误率最低(7.41),实体召回率最高(87.31,比PED-NEC高4个百分点),而且NNE-CER几乎和Whisper一样(10.01),没怎么过纠正——这就很牛了!
论文还特意从Aishell里挑了50个“错词和实体长得特别不一样”的案例做了个“词形差异集”,SS+GL在这上面表现更突出,把PED-NEC甩得更远。
BuzzWord难点集这是最能体现新方法优势的地方,因为这里面全是ASR最容易认错的新词、外来词,数据更惊艳:

- 原始Whisper在这直接“崩了”,实体召回率才12.22%——10个实体里才对1个多,可见这些新词多难认;
- PED-NEC虽然比Whisper好,但召回率也才61.82%,实体错误率还有23.62%;
- 再看SS+GL:实体召回率直接冲到87.47%,比PED-NEC高了26个百分点!实体错误率也降到7.26%,而且NNE-CER还是15.29,没瞎改非实体内容——这就证明,对付“长得不一样”的新词、外来词,SS+GL是真的行。

关键图表分析:证明方法为啥有效:

这图看的是模型的注意力分布,能看到:
- 模型标注的错误文本(比如“米德仲尼”)、候选实体(比如“Midjourney”),还有对应的语音片段,这三者之间的注意力值特别高;
- 这就说明模型真的把“错词-候选实体-语音”三者关联起来了,不是瞎标错词,标注是有依据的。

这图横坐标是检索时的概率阈值(比如0.1、0.2…0.9),纵坐标一边是检索的F1值(越高说明检索越准),一边是纠正的CER(越低说明纠正越好)。
- 有意思的是:不是检索F1越高,纠正效果越好;反而当阈值低一点(比如0.3左右),检索召回率高、精度低的时候,纠正的CER最低;
- 原因很简单:SS+GL的GL模块能“容错”——就算检索多找了几个不太准的候选,GL也能通过生成“”排除掉,不用怕候选里有“杂质”。
实体拒绝案例——证明“不瞎改”:

这个案例特别典型:候选实体是“韩宇”(人名),ASR转录本里有两个发音一样的词——“韩雨”(另一个人名,需要改)和“韩语”(语言,不用改)。
- PED-NEC:因为发音一样,把俩都改成“韩宇”了,造成过纠正;
- SS+GL:只把“韩雨”改成“韩宇”,“韩语”不动——因为GL模块能结合语境判断,知道“韩语”不是人名,不用改,避免了瞎改的问题。
除了纠正效果好,SS+GL还有三个大优势:
- 联合标注有效:图4已经证明了,模型能精准关联“语音-候选实体-错词”,不会标错对象;
- 实体拒绝能力强:检索时能滤掉低相似度的候选,GL还能生成“”跳过不用改的,所以检索时可以放宽阈值,多找候选也不怕,反而能提高召回率;
- 自带CED功能:CED是“错误实体检测”,传统PED-NEC得单独加个CED模块才能找错词,而SS+GL的GL模块在生成错词的过程中,就已经完成了“检测错词”的步骤,不用额外加模块,更简洁。
基于生成式的纠错方法只对“待纠正文本”进行标注,从而使得时间消耗极小,但当数据存储库(datastore)中包含大量实体时,实体检索部分可能会变得非常耗时。
在这种情况下:
- 一方面,我们可以用 PED(即前文提到的 PED+GL 方法) 替代检索步骤,以降低整体延迟;
- 另一方面,未来我们计划将当前的检索方法改进为向量检索(vector search),借助现有成熟的向量搜索引擎,大幅提升检索速度。
