speechbrain.utils.metric_stats 模块
metric_stats 模块提供了一个抽象类,用于存储实验过程中产生的统计数据并对其进行总结。
- Authors:
彼得·普兰廷加 2020
Mirco Ravanelli 2020
Gaëlle Laperrière 2021
萨哈尔·加奈 2021
摘要
类:
跟踪二元指标,如精确率、召回率、F1、EER等。 |
|
计算与多标签分类任务相关的统计信息,以及可以为了评估目的而松散解释为多标签分类的任务。 |
|
实现了EmbER度量中定义的相似度函数,如https://www.isca-archive.org/interspeech_2022/roux22_interspeech.pdf所述 |
|
用于跟踪错误率(例如,WER,PER)的类。 |
|
用于存储和总结任意指标的默认类。 |
|
一个同时评估多个指标的包装器 |
|
该指标使用任何选择的方法重新加权来自 |
函数:
计算EER(及其阈值)。 |
|
计算通常用于评估说话人验证系统的minDCF指标。 |
|
如果并行运行多个作业,则运行指标评估。 |
|
按顺序对输入进行度量评估。 |
参考
- class speechbrain.utils.metric_stats.MetricStats(metric, n_jobs=1, batch_eval=True)[source]
基础类:
object用于存储和总结任意指标的默认类。
通过子类化这个类可以创建更复杂的指标。
- Parameters:
Example
>>> from speechbrain.nnet.losses import l1_loss >>> loss_stats = MetricStats(metric=l1_loss) >>> loss_stats.append( ... ids=["utterance1", "utterance2"], ... predictions=torch.tensor([[0.1, 0.2], [0.2, 0.3]]), ... targets=torch.tensor([[0.1, 0.2], [0.1, 0.2]]), ... reduction="batch", ... ) >>> stats = loss_stats.summarize() >>> stats['average'] 0.050... >>> stats['max_score'] 0.100... >>> stats['max_id'] 'utterance2'
- speechbrain.utils.metric_stats.multiprocess_evaluation(metric, predict, target, lengths=None, n_jobs=8)[source]
如果并行运行多个作业,则运行度量评估。
- speechbrain.utils.metric_stats.sequence_evaluation(metric, predict, target, lengths=None)[source]
按顺序对输入进行度量评估。
- class speechbrain.utils.metric_stats.ErrorRateStats(merge_tokens=False, split_tokens=False, space_token='_', keep_values=True, extract_concepts_values=False, tag_in='', tag_out='', equality_comparator: ~typing.Callable[[str, str], bool] = <function _str_equals>)[source]
基础:
MetricStats一个用于跟踪错误率(例如,WER,PER)的类。
- Parameters:
merge_tokens (bool) – 是否合并连续的标记(用于例如,从字符标记创建单词)。 参见
speechbrain.dataio.dataio.merge_char。split_tokens (bool) – 是否拆分标记(用于例如从单词标记创建字符)。 参见
speechbrain.dataio.dataio.split_word。space_token (str) – 用于边界的字符。与
merge_tokens一起使用时,表示合并后要拆分的字符。 与split_tokens一起使用时,序列会与此标记连接,然后整个序列被拆分。keep_values (bool) – 是否保留概念的值。
extract_concepts_values (bool) – 处理预测和目标,仅保留概念和值。
tag_in (str) – 概念的开始(例如‘<’)。
tag_out (str) – 概念的结束(例如‘>’)。
equality_comparator (Callable[[str, str], bool]) – 用于检查两个单词是否相等的函数。
Example
>>> cer_stats = ErrorRateStats() >>> i2l = {0: 'a', 1: 'b'} >>> cer_stats.append( ... ids=['utterance1'], ... predict=torch.tensor([[0, 1, 1]]), ... target=torch.tensor([[0, 1, 0]]), ... target_len=torch.ones(1), ... ind2lab=lambda batch: [[i2l[int(x)] for x in seq] for seq in batch], ... ) >>> stats = cer_stats.summarize() >>> stats['WER'] 33.33... >>> stats['insertions'] 0 >>> stats['deletions'] 0 >>> stats['substitutions'] 1
- append(ids, predict, target, predict_len=None, target_len=None, ind2lab=None)[source]
向相关容器添加统计信息。
参见 MetricStats.append()
- Parameters:
ids (list) – 对应于话语的ID列表。
predict (torch.tensor) – 一个预测输出,用于与目标输出进行比较
target (torch.tensor) – 正确的参考输出,用于与预测进行比较。
predict_len (torch.tensor) – 预测的相对长度,用于在预测中存在填充时撤销填充。
target_len (torch.tensor) – 目标输出的相对长度,用于在目标中存在填充时取消填充。
ind2lab (可调用) – 可调用对象,用于从索引映射到标签,操作于批次上,用于写入对齐。
- class speechbrain.utils.metric_stats.WeightedErrorRateStats(base_stats: 错误率统计, cost_function: Callable[[str, str | None, str | None], float], weight_name: str = 'weighted')[source]
基础:
MetricStats该指标使用任何选择的方法重新加权来自
ErrorRateStats的WER。这不会编辑找到的编辑序列(插入/删除/替换),但会将它们对指标的影响乘以成本函数返回的0到1之间的值。- Parameters:
- append(*args, **kwargs)[source]
附加函数,不应用于加权错误率统计。请附加到指定的
base_stats。WeightedErrorRateStats重用了基础类ErrorRateStats的分数。
- summarize(field=None)[source]
返回一个包含一些详细WER统计信息的字典,该字典通过
cost_function确定每个编辑的权重(无错误时返回0.0,默认错误行为时返回1.0,以及介于两者之间的任何值)。不需要调用
summarize()。完整的字段集,每个字段都以`
_`为前缀 : -wer: 加权WER(比率*100) -insertions: 加权插入 -substitutions: 加权替换 -deletions: 加权删除 -num_edits: 加权插入/替换/删除的总和此外,此函数为每对句子填充了一个
scores列表。该列表的每个条目都是一个字典,包含以下字段: -key: 话语的ID。 -WER,insertions,substitutions,deletions,num_edits包含与上述相同的语义,但在句子级别而不是全局级别。
- Parameters:
field (str, optional) – 如果您只对其中的一个字段感兴趣,则返回该字段。 如果指定,则返回一个
float,否则返回一个字典。- Returns:
从字符串到浮点数的字典,如果
field is None– 上述文档中字段的字典。浮点数,如果
field is not None– 由field选择的单个字段。
- write_stats(filestream)[source]
将所有相关信息写入文件;这里,只写入由
summarize返回的加权信息。 参见write_stats()。
- class speechbrain.utils.metric_stats.EmbeddingErrorRateSimilarity(embedding_function: Callable[[str], Tensor | None], low_similarity_weight: float, high_similarity_weight: float, threshold: float)[source]
基础类:
object实现由https://www.isca-archive.org/interspeech_2022/roux22_interspeech.pdf定义的EmbER度量中的相似度函数
该指标涉及一个字典,用于将标记映射到单个词嵌入。当嵌入足够相似时,WER中的替换会被加权降低。目标是减少具有较小语义影响的替换错误的影响。只有替换错误会被加权。
这是通过计算两个嵌入之间的余弦相似度来完成的,然后如果
similarity >= threshold,则用low_similarity_weight来加权替换,否则用high_similarity_weight来加权替换(例如,高相似度的替换可能会被加权到只有低相似度替换的10%的重要性)。注意
引用的论文推荐
(1.0, 0.1, 0.4)作为fastTexst法语嵌入的默认值,这是根据经验选择的。当使用不同的嵌入时,您可能希望测试其他值;因此我们不提供默认值。- Parameters:
embedding_function (Callable[[str], Optional[torch.Tensor]]) – 从单词返回嵌入(作为
torch.Tensor)的函数。如果找不到该单词的对应嵌入,则应返回None。在这种情况下,将选择low_similarity_weight。low_similarity_weight (float) – 如果
cosine_similarity < threshold,则应用于替换的权重。high_similarity_weight (float) – 如果
cosine_similarity >= threshold,则应用于替换的权重。threshold (float) – 用于选择替换错误应如何权衡该词的余弦相似度阈值。
- class speechbrain.utils.metric_stats.BinaryMetricStats(positive_label=1)[source]
基础:
MetricStats跟踪二进制指标,如精确率、召回率、F1、EER等。
- summarize(field=None, threshold=None, max_samples=None, beta=1, eps=1e-08)[source]
使用完整的分数集计算统计信息。
- Full set of fields:
TP - 真正例
TN - 真阴性
FP - 假阳性
FN - 假阴性
FAR - 错误接受率
FRR - 错误拒绝率
DER - 检测错误率(如果没有传递阈值,则为EER)
threshold - 阈值(如果没有传递阈值,则为EER阈值)
precision - 精确度(正预测值)
recall - 召回率(灵敏度)
F分数 - 精确率和召回率的平衡(当beta=1时相等)
MCC - 马修斯相关系数
- Parameters:
- Returns:
如果指定了字段,则仅返回该字段的分数。 如果字段为None,则返回完整的字段集。
- Return type:
摘要
- speechbrain.utils.metric_stats.EER(positive_scores, negative_scores)[source]
计算EER(及其阈值)。
- Parameters:
positive_scores (torch.tensor) – 来自同一类别条目的分数。
negative_scores (torch.tensor) – 来自不同类别条目的分数。
- Returns:
EER (float) – EER分数。
threshold (float) – EER分数对应的阈值。
Example
>>> positive_scores = torch.tensor([0.6, 0.7, 0.8, 0.5]) >>> negative_scores = torch.tensor([0.4, 0.3, 0.2, 0.1]) >>> val_eer, threshold = EER(positive_scores, negative_scores) >>> val_eer 0.0
- speechbrain.utils.metric_stats.minDCF(positive_scores, negative_scores, c_miss=1.0, c_fa=1.0, p_target=0.01)[source]
计算通常用于评估说话人验证系统的minDCF指标。min_DCF是在定义的阈值范围内计算的以下C_det函数的最小值:
C_det = c_miss * p_miss * p_target + c_fa * p_fa * (1 -p_target)
其中 p_miss 是缺失概率,p_fa 是误报概率。
- Parameters:
- Returns:
minDCF (float) – minDCF 分数。
threshold (float) – minDCF 分数对应的阈值。
Example
>>> positive_scores = torch.tensor([0.6, 0.7, 0.8, 0.5]) >>> negative_scores = torch.tensor([0.4, 0.3, 0.2, 0.1]) >>> val_minDCF, threshold = minDCF(positive_scores, negative_scores) >>> val_minDCF 0.0
- class speechbrain.utils.metric_stats.ClassificationStats[source]
基础:
MetricStats计算与多标签分类任务相关的统计信息,以及可以为了评估目的而松散解释为此类任务的任务。
Example
>>> import sys >>> from speechbrain.utils.metric_stats import ClassificationStats >>> cs = ClassificationStats() >>> cs.append( ... ids=["ITEM1", "ITEM2", "ITEM3", "ITEM4"], ... predictions=[ ... "M EY K AH", ... "T EY K", ... "B AE D", ... "M EY K", ... ], ... targets=[ ... "M EY K", ... "T EY K", ... "B AE D", ... "M EY K", ... ], ... categories=[ ... "make", ... "take", ... "bad", ... "make" ... ] ... ) >>> cs.write_stats(sys.stdout) Overall Accuracy: 75% Class-Wise Accuracy ------------------- bad -> B AE D : 1 / 1 (100.00%) make -> M EY K: 1 / 2 (50.00%) take -> T EY K: 1 / 1 (100.00%) Confusion --------- Target: bad -> B AE D -> B AE D : 1 / 1 (100.00%) Target: make -> M EY K -> M EY K : 1 / 2 (50.00%) -> M EY K AH: 1 / 2 (50.00%) Target: take -> T EY K -> T EY K : 1 / 1 (100.00%) >>> summary = cs.summarize() >>> summary['accuracy'] 0.75 >>> summary['classwise_stats'][('bad', 'B AE D')] {'total': 1.0, 'correct': 1.0, 'accuracy': 1.0} >>> summary['classwise_stats'][('make', 'M EY K')] {'total': 2.0, 'correct': 1.0, 'accuracy': 0.5} >>> summary['keys'] [('bad', 'B AE D'), ('make', 'M EY K'), ('take', 'T EY K')] >>> summary['predictions'] ['B AE D', 'M EY K', 'M EY K AH', 'T EY K'] >>> summary['classwise_total'] {('bad', 'B AE D'): 1.0, ('make', 'M EY K'): 2.0, ('take', 'T EY K'): 1.0} >>> summary['classwise_correct'] {('bad', 'B AE D'): 1.0, ('make', 'M EY K'): 1.0, ('take', 'T EY K'): 1.0} >>> summary['classwise_accuracy'] {('bad', 'B AE D'): 1.0, ('make', 'M EY K'): 0.5, ('take', 'T EY K'): 1.0}
- summarize(field=None)[source]
总结分类指标分数
计算以下统计量:
准确率:总体准确率(正确数 / 总数) 混淆矩阵:一个类型的字典
{(target, prediction): num_entries} 表示混淆矩阵
- classwise_stats: computes the total number of samples,
每个类别的正确分类数量和准确率
- keys: all available class keys, which can be either target classes
或(类别,目标)元组
- predictions: all available predictions all predictions the model
已经完成
- class speechbrain.utils.metric_stats.MultiMetricStats(metric, n_jobs=1, batch_eval=False)[source]
基础类:
object一个同时评估多个指标的包装器
- Parameters:
Example
>>> def metric(a, b): ... return { ... "sum": a + b, ... "diff": a - b, ... "sum_sq": a**2 + b**2 ... } >>> multi_metric = MultiMetricStats(metric, batch_eval=True) >>> multi_metric.append([1, 2], a=torch.tensor([2.0, 1.0]), b=torch.tensor([1.0, 2.0])) >>> multi_metric.append([3, 4], a=torch.tensor([4.0, 5.0]), b=torch.tensor([0.0, 1.0])) >>> multi_metric.append([5, 6], a=torch.tensor([2.0, 4.0]), b=torch.tensor([4.0, 2.0])) >>> multi_metric.append([7, 8], a=torch.tensor([2.0, 4.0]), b=torch.tensor([4.0, 2.0])) >>> multi_metric.summarize() {'sum': {'average': 5.0, 'min_score': 3.0, 'min_id': 1, 'max_score': 6.0, 'max_id': 4}, 'diff': {'average': 1.0, 'min_score': -2.0, 'min_id': 5, 'max_score': 4.0, 'max_id': 3}, 'sum_sq': {'average': 16.5, 'min_score': 5.0, 'min_id': 1, 'max_score': 26.0, 'max_id': 4}} >>> multi_metric.summarize(flat=True) {'sum_average': 5.0, 'sum_min_score': 3.0, 'sum_min_id': 1, 'sum_max_score': 6.0, 'sum_max_id': 4, 'diff_average': 1.0, 'diff_min_score': -2.0, 'diff_min_id': 5, 'diff_max_score': 4.0, 'diff_max_id': 3, 'sum_sq_average': 16.5, 'sum_sq_min_score': 5.0, 'sum_sq_min_id': 1, 'sum_sq_max_score': 26.0, 'sum_sq_max_id': 4}