在 Colab 中打开GitHub 上执行、查看或下载此 notebook

语音识别指标

评估语音识别模型的准确性并非易事。词错误率 (WER) 和字符错误率 (CER) 是标准指标,但一些研究一直在尝试开发与人工评估更相关的替代指标(如 SemDist)。

本教程介绍了一些替代的 ASR 指标及其在 SpeechBrain 中的灵活集成,这可以帮助你研究、使用或开发新指标,并提供可直接复制粘贴的超参数。

SpeechBrain v1.0.1 通过 PR #2451 引入了对 Qualitative Evaluation of Language Model Rescoring in Automatic Speech Recognition 中建议的指标的支持和工具。我们建议你阅读这篇文章,因为这里不会详细解释某些指标。

%%capture
# Installing SpeechBrain via pip
BRANCH = 'develop'
!python -m pip install git+https://github.com/speechbrain/speechbrain.git@$BRANCH
%pip install spacy
%pip install flair

接下来是一些样板代码和测试数据下载…

from hyperpyyaml import load_hyperpyyaml
from collections import defaultdict
%%capture
!wget https://raw.githubusercontent.com/thibault-roux/hypereval/main/data/Exemple/refhyp.txt -O refhyp.txt
!head refhyp.txt
bonsoir à tous bienvenue c' est bfm story en direct jusqu' à dix neuf heures à la une	à tous bienvenue c' est bfm story en direct jusqu' à dix neuf heures	_
de bfm story ce soir la zone euro va t elle encore vivre un été meurtrier l' allemagne première économie européenne pourrait perdre son triple a la situation se détériore en espagne	bfm story ce soir la zone euro va t elle encore vive été meurtrier allemagne première économie européenne pourrait perdre son triple a la situation se détériore en espagne	_
pourquoi ces nouvelles tensions nous serons avec un spécialiste de l' espagne et nous serons avec le député socialiste rapporteur du budget en direct de l' assemblée nationale christian eckert	ces nouvelles tensions sont avec un spécialiste de l' espagne et nous serons avec le député socialiste rapporteur du budget de l' assemblée nationale christian eckert	_
à la une également la syrie et les armes chimiques la russie demande au régime de bachar al assad de ne pas utiliser ces armes	la une également la syrie et les armes chimiques la russie demande au régime de bachar el assad ne pas utiliser ses armes	_
de quel arsenal dispose l' armée syrienne	quelle arsenal dispose l' armée syrienne	_
quels dégats pourraient provoquer ces armes chimiques	dégâts pourraient provoquer ses armes chimiques	_
un spécialiste jean pierre daguzan nous répondra sur le plateau de bfm story et puis	spécialistes ont bien accusant nous répondra sur le plateau de bfm story puis	_
après la droite populaire la droite humaniste voici la droite forte deux jeunes pousses de l' ump guillaume peltier et geoffroy didier lancent ce nouveau mouvement pourquoi faire ils sont mes invités ce soir	la droite populaire la droite humaniste voici la droite forte deux jeunes pousses de l' ump guillaume peltier geoffroy didier migaud pour quoi faire ils sont mes invités ce soir	_
et puis c(ette) cette fois ci c' est vraiment la fin la fin de france soir liquidé par le tribunal de commerce nous en parlerons avec son tout dernier rédacteur en chef dominique de montvalon	cette fois ci c' est vraiment la fin à la fin de france soir liquidé par le tribunal de commerce nous en parlerons avec tout dernier rédacteur en chef dominique de montvalon	_
damien gourlet bonsoir avec vous ce qu' il faut retenir ce soir dans l' actualité l' actualité ce sont encore les incendies en espagne	damien gourlet bonsoir olivier avec vous ce qu' il faut retenir ce soir dans l' actualité actualité se sont encore les incendies en espagne	_
refs = []
hyps = []

# some preprocessing for the example file + load uposer mapping to a test file

def split_norm_text(s: str):
    # s = s.replace("' ", "'")

    if s != "":
        return s.split(" ")

    return s

with open("refhyp.txt") as f:
    for refhyp in f.read().splitlines():
        if len(refhyp) <= 1:
            continue

        refhyp = refhyp.split("\t")
        refs.append(split_norm_text(refhyp[0]))
        hyps.append(split_norm_text(refhyp[1]))

with open("uposer.json", "w") as wf:
    wf.write("""[
    ["ADJ", "ADJFP", "ADJFS", "ADJMP", "ADJMS"],
    ["NUM", "CHIF"],
    ["CCONJ", "COCO", "COSUB"],
    ["DET", "DETFS", "DETMS", "DINTFS", "DINTMS"],
    ["X", "MOTINC"],
    ["NOUN", "NFP", "NFS", "NMP", "NMS"],
    ["PRON", "PDEMFP", "PDEMFS", "PDEMMP", "PDEMMS", "PINDFP", "PINDFS",
    "PINDMP", "PINDMS", "PPER1S", "PPER2S", "PPER3FP", "PPER3FS", "PPER3MP",
    "PPER3MS", "PPOBJFP", "PPOBJFS", "PPOBJMP", "PPOBJMS", "PREF", "PREFP",
    "PREFS", "PREL", "PRELFP", "PRELFS", "PRELMP", "PRELMS"],
    ["ADP", "PREP"],
    ["VERB", "VPPFP", "VPPFS", "VPPMP", "VPPMS"],
    ["PROPN", "XFAMIL"],
    ["PUNCT", "YPFOR"]
]
""")

词错误率 (WER)

常见的 WER 指标,它来源于参考文本和假设文本(即真实值和预测值)中之间的 Levenshtein 距离。结果通常以百分比表示,但实际上可以超过 100%,例如,如果你有很多插入错误。

当然,能够达到的 WER 很大程度上取决于数据集,并在一定程度上取决于语言。在一些简单的数据集上,WER 可以低至 1%,而在更难的数据集上,好的模型可能难以达到 15%,甚至在具有挑战性的条件下表现更差。

WER 定义如下(其中 # 表示“数量”)

\(\dfrac{\#插入 + \#替换 + \#删除}{\#参考词数}\)

要理解插入/替换/删除具体是什么,你应该了解 Levenshtein 距离,这是一种编辑距离。
大致来说,插入是你的模型预测了一个词,但该词不存在于参考文本中;替换是你的模型预测的词错误或拼写错误;删除是你的模型错误地省略了一个词。

WER 的一个局限性在于它对所有错误一视同仁。例如,从“processing”到“procesing”的拼写错误并不会显著改变含义,但从“car”到“scar”的错误可能会显著改变含义,然而这两种错误都被视为一个词错误和一个字符错误。这可能导致 WER/CER 与人工评估之间存在巨大差异。

wer_hparams = load_hyperpyyaml("""
wer_stats: !new:speechbrain.utils.metric_stats.ErrorRateStats
""")
wer_hparams["wer_stats"].clear()
wer_hparams["wer_stats"].append(
    ids=list(range(len(refs))),
    predict=hyps,
    target=refs,
)
wer_hparams["wer_stats"].summarize()
{'WER': 15.451152223304122,
 'SER': 90.83899394161924,
 'num_edits': 19042,
 'num_scored_tokens': 123240,
 'num_erroneous_sents': 4948,
 'num_scored_sents': 5447,
 'num_absent_sents': 0,
 'num_ref_sents': 5447,
 'insertions': 1868,
 'deletions': 7886,
 'substitutions': 9288,
 'error_rate': 15.451152223304122}

字符错误率 (CER)

典型的 CER 度量,作为参考。CER 的工作方式与 WER 相同,但它是在字符级别(而不是词或 token 级别)上操作。
最终,CER 对各种错误的惩罚方式不同。小的拼写错误(例如遗漏重音符号)在使用 WER 时会导致一个完整的替换错误,但使用 CER 时只会导致一个字符替换错误。这不一定是优点,因为单字符错误仍然可能改变含义。

由于需要在相对长得多的序列上计算编辑距离,因此运行速度较慢。

cer_hparams = load_hyperpyyaml("""
cer_stats: !new:speechbrain.utils.metric_stats.ErrorRateStats
    split_tokens: True
""")
cer_hparams["cer_stats"].clear()
cer_hparams["cer_stats"].append(
    ids=list(range(len(refs))),
    predict=hyps,
    target=refs,
)
cer_hparams["cer_stats"].summarize()
{'WER': 8.728781317403753,
 'SER': 90.83899394161924,
 'num_edits': 57587,
 'num_scored_tokens': 659737,
 'num_erroneous_sents': 4948,
 'num_scored_sents': 5447,
 'num_absent_sents': 0,
 'num_ref_sents': 5447,
 'insertions': 10426,
 'deletions': 36910,
 'substitutions': 10251,
 'error_rate': 8.728781317403753}

词性错误率 (POSER)

poser_hparams = load_hyperpyyaml("""
wer_stats_dposer: !new:speechbrain.utils.metric_stats.ErrorRateStats

uposer_dict: !apply:speechbrain.utils.dictionaries.SynonymDictionary.from_json_path
    path: ./uposer.json
wer_stats_uposer: !new:speechbrain.utils.metric_stats.ErrorRateStats
    equality_comparator: !ref <uposer_dict>

pos_tagger: !apply:speechbrain.integrations.nlp.FlairSequenceTagger.from_hf
    source: "qanastek/pos-french"
    save_path: ./pretrained_models/
""")
2024-03-28 16:27:25.399507: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2024-03-28 16:27:25.399759: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2024-03-28 16:27:25.671596: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2024-03-28 16:27:26.262645: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
2024-03-28 16:27:30.960021: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
2024-03-28 16:28:03,311 SequenceTagger predicts: Dictionary with 69 tags: <unk>, O, DET, NFP, ADJFP, AUX, VPPMS, ADV, PREP, PDEMMS, NMS, COSUB, PINDMS, PPOBJMS, VERB, DETFS, NFS, YPFOR, VPPFS, PUNCT, DETMS, PROPN, ADJMS, PPER3FS, ADJFS, COCO, NMP, PREL, PPER1S, ADJMP, VPPMP, DINTMS, PPER3MS, PPER3MP, PREF, ADJ, DINTFS, CHIF, XFAMIL, PRELFS, SYM, NOUN, MOTINC, PINDFS, PPOBJMP, NUM, PREFP, PDEMFS, VPPFP, PPER3FP
refs_poser = poser_hparams["pos_tagger"](refs)
hyps_poser = poser_hparams["pos_tagger"](hyps)
print(" ".join(refs_poser[0]))
print(" ".join(hyps_poser[0]))
INTJ PREP DET NFS PDEMMS AUX PROPN XFAMIL PREP NMS PREP PREP CHIF CHIF NFP PREP DETFS NFS
PREP DET NFS PDEMMS AUX PROPN XFAMIL PREP NMS PREP PREP CHIF CHIF NFP

dPOSER

我们不是计算输入词的 WER,而是提取输入句子的(最好是全部)词性。然后根据这些词性标签序列计算 WER。

poser_hparams["wer_stats_dposer"].clear()
poser_hparams["wer_stats_dposer"].append(
    ids=list(range(len(refs))),
    predict=hyps_poser,
    target=refs_poser,
)
poser_hparams["wer_stats_dposer"].summarize()
{'WER': 14.70402051648298,
 'SER': 88.87460987699652,
 'num_edits': 18118,
 'num_scored_tokens': 123218,
 'num_erroneous_sents': 4841,
 'num_scored_sents': 5447,
 'num_absent_sents': 0,
 'num_ref_sents': 5447,
 'insertions': 2064,
 'deletions': 8076,
 'substitutions': 7978,
 'error_rate': 14.70402051648298}

uPOSER

引用的论文提出了一个使用广泛词性类别的变体 (uPOSER),以防所使用的词性模型类别非常具体。这可以通过使用一个同义词词典来轻松实现,该词典可以轻松地将等效标签分组。

poser_hparams["wer_stats_uposer"].clear()
poser_hparams["wer_stats_uposer"].append(
    ids=list(range(len(refs))),
    predict=hyps_poser,
    target=refs_poser,
)
poser_hparams["wer_stats_uposer"].summarize()
{'WER': 12.26687659270561,
 'SER': 86.50633376170369,
 'num_edits': 15115,
 'num_scored_tokens': 123218,
 'num_erroneous_sents': 4712,
 'num_scored_sents': 5447,
 'num_absent_sents': 0,
 'num_ref_sents': 5447,
 'insertions': 2089,
 'deletions': 8101,
 'substitutions': 4925,
 'error_rate': 12.26687659270561}

词形错误率 (LER)

我们不是计算词的 WER,而是计算词形归一化后的词的 WER。

%%capture
!spacy download fr_core_news_md
ler_hparams = load_hyperpyyaml("""
ler_model: !apply:speechbrain.integrations.nlp.SpacyPipeline.from_name
    name: fr_core_news_md
    exclude: ["tagger", "parser", "ner", "textcat"]

wer_stats_ler: !new:speechbrain.utils.metric_stats.ErrorRateStats
""")
refs_ler = ler_hparams["ler_model"].lemmatize(refs)
hyps_ler = ler_hparams["ler_model"].lemmatize(hyps)
print(" ".join(refs_ler[0]))
print(" ".join(hyps_ler[0]))
bonsoir à tout bienvenue c ' être bfm story en direct jusqu ' à dix neuf heure à le un
à tout bienvenue c ' être bfm story en direct jusqu ' à dix neuf heure
ler_hparams["wer_stats_ler"].clear()
ler_hparams["wer_stats_ler"].append(
    ids=list(range(len(refs))),
    predict=hyps_ler,
    target=refs_ler,
)
ler_hparams["wer_stats_ler"].summarize()
{'WER': 14.426271595988885,
 'SER': 88.61758766293373,
 'num_edits': 19105,
 'num_scored_tokens': 132432,
 'num_erroneous_sents': 4827,
 'num_scored_sents': 5447,
 'num_absent_sents': 0,
 'num_ref_sents': 5447,
 'insertions': 2160,
 'deletions': 10219,
 'substitutions': 6726,
 'error_rate': 14.426271595988885}

嵌入错误率 (EmbER)

典型的 WER 计算,但如果词语被认为足够相似,我们会对每次词语替换的惩罚进行加权。这使得你可以减少例如细微拼写错误对含义影响不大的情况。

设置稍微复杂一些,但要点是你需要

  • 一个常规的 ErrorRateStats 对象,你将向其 .append()

  • 你将使用的嵌入,例如使用 FlairEmbeddings 包装器,

  • EmbER 配置,它将指向嵌入(此处绑定到 ember_embeddings.embed_word),

  • WeightedErrorRateStats 继承自基础的 ErrorRateStats,并连接到上面定义的 EmbER 相似度函数。

ember_hparams = load_hyperpyyaml("""
wer_stats: !new:speechbrain.utils.metric_stats.ErrorRateStats

ember_embeddings: !apply:speechbrain.integrations.nlp.FlairEmbeddings.from_hf
    embeddings_class: !name:flair.embeddings.FastTextEmbeddings
    source: facebook/fasttext-fr-vectors
    save_path: ./pretrained_models/

ember_metric: !new:speechbrain.utils.metric_stats.EmbeddingErrorRateSimilarity
    embedding_function: !name:speechbrain.integrations.nlp.FlairEmbeddings.embed_word
        - !ref <ember_embeddings>
    low_similarity_weight: 1.0
    high_similarity_weight: 0.1
    threshold: 0.4

weighted_wer_stats: !new:speechbrain.utils.metric_stats.WeightedErrorRateStats
    base_stats: !ref <wer_stats>
    cost_function: !ref <ember_metric>
    weight_name: ember
""")
ember_hparams["wer_stats"].clear()
ember_hparams["wer_stats"].append(
    ids=list(range(len(refs))),
    predict=hyps,
    target=refs,
)
ember_hparams["weighted_wer_stats"].clear()
ember_hparams["weighted_wer_stats"].summarize()
WARNING:gensim.models.fasttext:could not extract any ngrams from '()', returning origin vector
{'ember_wer': 12.225677015059036,
 'ember_insertions': 1868.0,
 'ember_substitutions': 5541.300000000059,
 'ember_deletions': 7886.0,
 'ember_num_edits': 15295.30000000006}

BERTScore

简而言之,BERTScore 的工作原理是比较从类似 BERT 的 LM 编码器获得的所有目标嵌入和预测嵌入的余弦相似度。这种方法效果相当好,因为嵌入被训练用于嵌入其上下文中的信息。

这最好通过指标本身的代码和文档来解释。

bertscore_hparams = load_hyperpyyaml("""
bertscore_model_name: camembert/camembert-large
bertscore_model_device: cuda

bertscore_stats: !new:speechbrain.utils.bertscore.BERTScoreStats
    lm: !new:speechbrain.integrations.huggingface.TextEncoder
        source: !ref <bertscore_model_name>
        save_path: pretrained_models/
        device: !ref <bertscore_model_device>
        num_layers: 8
""")
bertscore_hparams["bertscore_stats"].clear()
bertscore_hparams["bertscore_stats"].append(
    ids=list(range(len(refs))),
    predict=hyps,
    target=refs,
)
bertscore_hparams["bertscore_stats"].summarize()
{'bertscore-recall': tensor(0.9033),
 'bertscore-precision': tensor(0.9237),
 'bertscore-f1': tensor(0.9134)}

句子语义距离:SemDist

使用每个句子的单个嵌入(例如通过平均所有token的 LM 嵌入获得)的余弦相似度进行估计。

这里,分数越低越好。默认情况下,为了可读性,分数乘以1000进行标准化。

semdist_hparams = load_hyperpyyaml("""
semdist_model_name: camembert/camembert-large
semdist_model_device: cuda

semdist_stats: !new:speechbrain.utils.semdist.SemDistStats
    lm: !new:speechbrain.integrations.huggingface.TextEncoder
        source: !ref <semdist_model_name>
        save_path: pretrained_models/
        device: !ref <semdist_model_device>
    method: meanpool
""")
semdist_hparams["semdist_stats"].clear()
semdist_hparams["semdist_stats"].append(
    ids=list(range(len(refs))),
    predict=hyps,
    target=refs,
)
semdist_hparams["semdist_stats"].summarize()
{'semdist': 41.13104248046875}
semdist_hparams["semdist_stats"].scores[:5]
[{'key': 0, 'semdist': 11.317432403564453},
 {'key': 1, 'semdist': 14.37997817993164},
 {'key': 2, 'semdist': 8.182466506958008},
 {'key': 3, 'semdist': 7.842123508453369},
 {'key': 4, 'semdist': 13.874173164367676}]

一些比较

这部分有点仓促写成,如果你运行了所有内容并且没有耗尽内存,恭喜你 :)

for i in range(10):
    ref = " ".join(refs[i])
    hyp = " ".join(hyps[i])

    print(f"""\
=== REF: {ref}
=== HYP: {hyp}
WER:                  {wer_hparams['wer_stats'].scores[i]['WER']:.3f}%
CER:                  {cer_hparams['cer_stats'].scores[i]['WER']:.3f}%
dPOSER:               {poser_hparams['wer_stats_dposer'].scores[i]['WER']:.3f}%
uPOSER:               {poser_hparams['wer_stats_uposer'].scores[i]['WER']:.3f}%
EmbER:                {ember_hparams['weighted_wer_stats'].scores[i]['WER']:.3f}%
BERTScore recall:     {bertscore_hparams['bertscore_stats'].scores[i]['recall']:.5f}
BERTScore precision:  {bertscore_hparams['bertscore_stats'].scores[i]['precision']:.5f}
SemDist mean (x1000): {semdist_hparams['semdist_stats'].scores[i]['semdist']:.5f}
""")
=== REF: bonsoir à tous bienvenue c' est bfm story en direct jusqu' à dix neuf heures à la une
=== HYP: à tous bienvenue c' est bfm story en direct jusqu' à dix neuf heures
WER:                  22.222%
CER:                  20.000%
dPOSER:               22.222%
uPOSER:               22.222%
EmbER:                22.222%
BERTScore recall:     0.87673
BERTScore precision:  0.96040
SemDist mean (x1000): 11.31743

=== REF: de bfm story ce soir la zone euro va t elle encore vivre un été meurtrier l' allemagne première économie européenne pourrait perdre son triple a la situation se détériore en espagne
=== HYP: bfm story ce soir la zone euro va t elle encore vive été meurtrier allemagne première économie européenne pourrait perdre son triple a la situation se détériore en espagne
WER:                  12.500%
CER:                  5.525%
dPOSER:               15.625%
uPOSER:               15.625%
EmbER:                12.500%
BERTScore recall:     0.91836
BERTScore precision:  0.91983
SemDist mean (x1000): 14.37998

=== REF: pourquoi ces nouvelles tensions nous serons avec un spécialiste de l' espagne et nous serons avec le député socialiste rapporteur du budget en direct de l' assemblée nationale christian eckert
=== HYP: ces nouvelles tensions sont avec un spécialiste de l' espagne et nous serons avec le député socialiste rapporteur du budget de l' assemblée nationale christian eckert
WER:                  16.667%
CER:                  14.062%
dPOSER:               16.667%
uPOSER:               16.667%
EmbER:                13.667%
BERTScore recall:     0.92581
BERTScore precision:  0.96108
SemDist mean (x1000): 8.18247

=== REF: à la une également la syrie et les armes chimiques la russie demande au régime de bachar al assad de ne pas utiliser ces armes
=== HYP: la une également la syrie et les armes chimiques la russie demande au régime de bachar el assad ne pas utiliser ses armes
WER:                  16.000%
CER:                  5.556%
dPOSER:               12.000%
uPOSER:               12.000%
EmbER:                8.800%
BERTScore recall:     0.95685
BERTScore precision:  0.95836
SemDist mean (x1000): 7.84212

=== REF: de quel arsenal dispose l' armée syrienne
=== HYP: quelle arsenal dispose l' armée syrienne
WER:                  28.571%
CER:                  12.195%
dPOSER:               28.571%
uPOSER:               14.286%
EmbER:                28.571%
BERTScore recall:     0.93197
BERTScore precision:  0.93909
SemDist mean (x1000): 13.87417

=== REF: quels dégats pourraient provoquer ces armes chimiques
=== HYP: dégâts pourraient provoquer ses armes chimiques
WER:                  42.857%
CER:                  15.094%
dPOSER:               14.286%
uPOSER:               14.286%
EmbER:                30.000%
BERTScore recall:     0.76464
BERTScore precision:  0.85932
SemDist mean (x1000): 46.58437

=== REF: un spécialiste jean pierre daguzan nous répondra sur le plateau de bfm story et puis
=== HYP: spécialistes ont bien accusant nous répondra sur le plateau de bfm story puis
WER:                  40.000%
CER:                  23.810%
dPOSER:               40.000%
uPOSER:               33.333%
EmbER:                40.000%
BERTScore recall:     0.70336
BERTScore precision:  0.73710
SemDist mean (x1000): 48.69765

=== REF: après la droite populaire la droite humaniste voici la droite forte deux jeunes pousses de l' ump guillaume peltier et geoffroy didier lancent ce nouveau mouvement pourquoi faire ils sont mes invités ce soir
=== HYP: la droite populaire la droite humaniste voici la droite forte deux jeunes pousses de l' ump guillaume peltier geoffroy didier migaud pour quoi faire ils sont mes invités ce soir
WER:                  20.588%
CER:                  17.391%
dPOSER:               23.529%
uPOSER:               17.647%
EmbER:                20.588%
BERTScore recall:     0.88929
BERTScore precision:  0.92400
SemDist mean (x1000): 11.49768

=== REF: et puis c(ette) cette fois ci c' est vraiment la fin la fin de france soir liquidé par le tribunal de commerce nous en parlerons avec son tout dernier rédacteur en chef dominique de montvalon
=== HYP: cette fois ci c' est vraiment la fin à la fin de france soir liquidé par le tribunal de commerce nous en parlerons avec tout dernier rédacteur en chef dominique de montvalon
WER:                  14.286%
CER:                  11.518%
dPOSER:               14.286%
uPOSER:               14.286%
EmbER:                13.889%
BERTScore recall:     0.87325
BERTScore precision:  0.95048
SemDist mean (x1000): 8.85153

=== REF: damien gourlet bonsoir avec vous ce qu' il faut retenir ce soir dans l' actualité l' actualité ce sont encore les incendies en espagne
=== HYP: damien gourlet bonsoir olivier avec vous ce qu' il faut retenir ce soir dans l' actualité actualité se sont encore les incendies en espagne
WER:                  12.500%
CER:                  8.955%
dPOSER:               12.500%
uPOSER:               8.333%
EmbER:                8.400%
BERTScore recall:     0.97822
BERTScore precision:  0.94830
SemDist mean (x1000): 9.74524

引用 SpeechBrain

如果你在研究或业务中使用了 SpeechBrain,请使用以下 BibTeX 条目进行引用

@misc{speechbrainV1,
  title={Open-Source Conversational AI with {SpeechBrain} 1.0},
  author={Mirco Ravanelli and Titouan Parcollet and Adel Moumen and Sylvain de Langen and Cem Subakan and Peter Plantinga and Yingzhi Wang and Pooneh Mousavi and Luca Della Libera and Artem Ploujnikov and Francesco Paissan and Davide Borra and Salah Zaiem and Zeyu Zhao and Shucong Zhang and Georgios Karakasidis and Sung-Lin Yeh and Pierre Champion and Aku Rouhe and Rudolf Braun and Florian Mai and Juan Zuluaga-Gomez and Seyed Mahed Mousavi and Andreas Nautsch and Xuechen Liu and Sangeet Sagar and Jarod Duret and Salima Mdhaffar and Gaelle Laperriere and Mickael Rouvier and Renato De Mori and Yannick Esteve},
  year={2024},
  eprint={2407.00463},
  archivePrefix={arXiv},
  primaryClass={cs.LG},
  url={https://arxiv.org/abs/2407.00463},
}
@misc{speechbrain,
  title={{SpeechBrain}: A General-Purpose Speech Toolkit},
  author={Mirco Ravanelli and Titouan Parcollet and Peter Plantinga and Aku Rouhe and Samuele Cornell and Loren Lugosch and Cem Subakan and Nauman Dawalatabad and Abdelwahab Heba and Jianyuan Zhong and Ju-Chieh Chou and Sung-Lin Yeh and Szu-Wei Fu and Chien-Feng Liao and Elena Rastorgueva and François Grondin and William Aris and Hwidong Na and Yan Gao and Renato De Mori and Yoshua Bengio},
  year={2021},
  eprint={2106.04624},
  archivePrefix={arXiv},
  primaryClass={eess.AS},
  note={arXiv:2106.04624}
}