来源丨乐百一家

咱们先聊聊华为这篇论文的核心目标——解决ASR(自动语音识别)里“专有名词老认错”的问题。比如像“ChatGPT”“长江白鲟”这种领域特定的命名实体,ASR(比如Whisper)在通用场景里挺准,但遇到这些词常转错,后续用这些转录文本做任务就全乱了。

01、先说说背景:现有方法的坑在哪?

现在主流的NEC(命名实体纠正)方法分两类:一类是“边生成边纠正”,得改ASR系统本身,第三方云服务(比如讯飞、亚马逊的ASR)根本用不了;另一类是“生成后再纠正”,更通用,其中最常见的是PED-NEC(基于语音编辑距离的方法)。

但PED-NEC有个大毛病——如果错的文本和真实实体“长得太不一样”,就彻底歇菜。比如:
  • “大语言模型”被ASR转成“大原模型”,俩词字面差挺多;
  • “Midjourney”转成“米德仲尼”(英文变中文音译);
  • “灵耀X”转成“01X”(汉字变数字);
  • “ChatGPT”转成“Check GPT”(拼写差一截)。
这时候PED-NEC没法定位错词,自然就纠正不了,这就是论文要解决的核心问题。

02、创新点:SS+GL方法,不看“脸”看“声音”+“智能标注”


论文提出的新方法叫“生成式标注NEC”,核心是两步:SS(语音特征检索候选实体)+ GL(生成式标注错误文本)。简单说,不依赖文本长得像不像,而是靠语音特征找候选,再让模型“智能标出”错词,最后替换——完美解决“长得不一样”的问题。
论文是基于Whisper-base(预训练的ASR模型)做的,具体分三步走:
1. 第一步:先建个“实体语音数据库”
咱们得先给收集到的实体(比如“ChatGPT”“长江白鲟”这些)做个“语音身份证”:
  • 用TTS(文本转语音)把每个实体转成语音,比如把“ChatGPT”读出来生成音频;
  • 用ASR的编码器处理这个音频,再加个CNN层降维,提取出这个实体的“语音特征”(相当于身份证号);
  • 最后存成“语音特征-实体”的键值对,比如“ChatGPT的语音特征 → ChatGPT”,以后查的时候用。
2. 第二步:给输入语音“找候选实体”
当有一段新的语音输入时,咱们要先判断里面可能有哪些实体:
  • 先把这段语音也用同样的编码器+CNN,提取出它的语音特征;
  • 用SAN(自注意力网络)和FFN(前馈网络)算一算:这段语音的特征和数据库里哪个实体的特征“更像”,得出一个概率(比如和“ChatGPT”的相似度是0.8,和“长江白鲟”是0.2);
  • 选概率高于0.3的Top 5个实体当“候选”,比如选到“ChatGPT”“GPT-4”这俩,下一步就用它们来纠正。
3. 第三步:生成式标注错词,精准纠正

这步是关键,相当于让模型“圈出错词”再改:
  • 先做个“提示词(Prompt)”:用“|||”把候选实体拼起来,再用“”接上ASR的错误转录本。比如候选是“ChatGPT”,转录本是“You can ask ChatGBT how to use it”,Prompt就是“ChatGPT|||You can ask ChatGBT how to use it”;
  • 让纠正模型读这个Prompt,自动“标出”转录本里的错词——这里就会标出“ChatGBT”;
  • 如果没找到对应错词(比如这段语音里根本没有候选实体),模型会生成“”,意思是“不用改”,避免瞎纠正(比如把“韩语”错改成“韩宇”);
  • 最后把标出的错词,换成数据库里对应的正确实体,比如把“ChatGBT”换成“ChatGPT”,搞定!

03、实验怎么做的?挺细致的

论文为了验证方法好用,做了挺全面的实验,咱们看看具体设置:
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纠正)。

04、实验结果:SS+GL直接“封神”,图表说话!

1. 第一个测试集:Aishell测试集

  • 原始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甩得更远。
2. 第二个测试集: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是真的行。
3. 具体案例,更直观

  • 案例1:“长江白鲟”被转错
    • ASR转录:“到上世纪50年代后长江白旭云就只分布于长江及出海口”(把“鲟xún”转成“旭云xù yún”);
    • PED-NEC纠正:“到上世纪50年代后蓝箭白旭云就只分布于长江及出海口”(居然把“长江”改成“蓝箭”,更错了);
    • SS+GL纠正:精准改回“长江白鲟”——因为它看的是语音特征,不管“旭云”和“鲟”字面差多少。
  • 案例2:“Midjourney”被转成中文音译
    • ASR转录:“米德仲尼真的是一个非常非常棒的绘图软件”;
    • PED-NEC:完全没法改,只能保留“米德仲尼”;
    • SS+GL:直接改回“Midjourney”——英文变中文音译也不怕,语音特征能对上。
  • 案例3:“灵耀X”被转成“01X”
    • ASR转录:“华硕01X双屏Pro在外观设计还是性能上都有很高水准”;
    • PED-NEC:只改了一部分,变成“华硕灵耀01X双屏Pro”(还留着“01”);
    • SS+GL:精准改回“华硕灵耀X双屏Pro”——数字和汉字的差异也能搞定。
论文里还有更多例子,比如“ChatGLM-6B”被转成“ChestJM6B”、“D”被转成“第”,PED-NEC都没法改,SS+GL全改对了,这里就不一一说了。
4. 关键图表分析:证明方法为啥有效
图4:注意力热力图——证明“关联没搞错”

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

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

这个案例特别典型:候选实体是“韩宇”(人名),ASR转录本里有两个发音一样的词——“韩雨”(另一个人名,需要改)和“韩语”(语言,不用改)。
  • PED-NEC:因为发音一样,把俩都改成“韩宇”了,造成过纠正;
  • SS+GL:只把“韩雨”改成“韩宇”,“韩语”不动——因为GL模块能结合语境判断,知道“韩语”不是人名,不用改,避免了瞎改的问题。

05、这方法的优势:不止“改得对”,还“很智能”

除了纠正效果好,SS+GL还有三个大优势:
  • 联合标注有效:图4已经证明了,模型能精准关联“语音-候选实体-错词”,不会标错对象;
  • 实体拒绝能力强:检索时能滤掉低相似度的候选,GL还能生成“”跳过不用改的,所以检索时可以放宽阈值,多找候选也不怕,反而能提高召回率;
  • 自带CED功能:CED是“错误实体检测”,传统PED-NEC得单独加个CED模块才能找错词,而SS+GL的GL模块在生成错词的过程中,就已经完成了“检测错词”的步骤,不用额外加模块,更简洁。

06、结论和小局限

结论:
  • SS+GL真的解决了“错词和实体长得不一样”的核心问题,在开源ASR(Whisper)和商业ASR(讯飞、亚马逊Transcribe)上都好用,通用性强;
  • 论文里的训练数据和测试集都开源了(地址:https://github.com/L6-NLP/Generative-Annotation-NEC),别人也能复现实验。
小局限:
当实体数据库里的实体特别多的时候,SS的检索步骤会有点慢;论文说未来计划用向量搜索引擎来加速,这样就能解决耗时问题了。
总的来说,这篇论文的方法挺实在的,针对现有方法的痛点做了创新,实验也做得很扎实,不管是通用场景还是新词、外来词这种难点场景,效果都很突出,实用性挺强的。