指标评价工具
HuggingFace提供了统一的评价指标工具,训练和测试一个模型时往往需要计算不同的评价指标,如正确率、查准率、查全率、F1值等,具体需要的指标往往和处理的数据集、任务类型有关。
Hugging Face Datasets 库中的 list_metrics
函数用于列出可用的评估指标(metrics)。这些评估指标通常用于评估模型在特定任务上的性能。例如,在文本分类任务中,常用的评估指标包括准确率(accuracy)、精确率(precision)、召回率(recall)和 F1 分数等。
通过调用 list_metrics()
函数,您可以获取 Hugging Face Datasets 库中当前支持的所有评估指标的列表。这样您就可以在训练或评估模型时选择适当的指标来衡量其性能。
from datasets import list_metrics
# 获取可用评估指标列表
metrics_list = list_metrics()
# 打印可用评估指标
print(f"Available metrics:{len(metrics_list)}")
for metric in metrics_list:
print(metric)
Available metrics:227
accuracy
bertscore
bleu
bleurt
brier_score
cer
character
charcut_mt
chrf
...
🔰上述是评估指标的名称,用于衡量自然语言处理任务中模型的性能。以下是其中一些常见指标的简要解释:
- Accuracy(准确率):正确预测的样本数与总样本数之比。在分类任务中特别常见,用于衡量模型在整个数据集上的分类准确性。
- BERTScore:一种评估自然语言生成质量的指标,通过比较生成文本与参考文本之间的相似性来评估生成文本的质量。
- BLEU:BLEU(Bilingual Evaluation Understudy)是一种用于评估机器翻译质量的指标,它通过比较生成的翻译文本与参考翻译文本之间的匹配程度来进行评估。
- BLEURT:BLEURT 是一种评估生成文本质量的指标,特别用于评估文本生成模型的性能。
- Brier Score:一种衡量概率预测的准确性的指标,通常用于评估二分类模型的性能。
- CER(Character Error Rate):字符错误率,用于衡量文本识别系统的性能,它衡量识别结果与参考文本之间的字符级别的编辑距离。
- Character:计算两个字符串之间的编辑距离,常用于文本生成任务中的评估。
list_metrics()函数
def load_metric(
path: str,
config_name: Optional[str] = None,
process_id: int = 0,
num_process: int = 1,
cache_dir: Optional[str] = None,
experiment_id: Optional[str] = None,
keep_in_memory: bool = False,
download_config: Optional[DownloadConfig] = None,
download_mode: Optional[Union[DownloadMode, str]] = None,
revision: Optional[Union[str, Version]] = None,
trust_remote_code: Optional[bool] = None,
**metric_init_kwargs,
) -> Metric:
以下是函数的参数解释:
- path:要加载评估指标的路径。这可以是本地文件系统中的路径,也可以是 Hugging Face Hub 或其他支持的远程资源的路径。
- config_name:(可选)要加载的评估指标的配置名称。一些评估指标具有不同的配置,可以使用此参数来指定要加载的配置。默认为
None
。 - process_id:(可选)进程的唯一标识符,用于并行加载。默认为 0。
- num_process:(可选)要用于并行加载的进程数量。默认为 1。
- cache_dir:(可选)用于缓存加载的评估指标的目录路径。如果提供了此参数,加载的评估指标将被缓存在该目录中,以加快后续的加载速度。默认为
None
,表示不缓存评估指标。 - experiment_id:(可选)要加载的评估指标的实验标识符。如果提供了此参数,将加载指定实验标识符下的评估指标。默认为
None
。 - keep_in_memory:(可选)如果为
True
,则将评估指标保留在内存中。这对于在磁盘上加载的大型评估指标特别有用。默认为False
。 - download_config:(可选)一个
DownloadConfig
对象,用于指定下载行为的配置。默认为None
。 - download_mode:(可选)下载模式,用于指定下载的行为。默认为
None
。 - revision:(可选)要加载的评估指标的版本或修订版本。默认为
None
。 - trust_remote_code:(可选)是否信任远程代码。默认为
None
。 - metric_init_kwargs:其他评估指标初始化参数,用于进一步定制加载的评估指标对象。
该函数返回一个评估指标对象,可以用于评估模型的性能。
metric = load_metric(path="accuracy") # 加载accuracy指标
accuracy_metric = datasets.load_metric("accuracy")
#对结果进行比较
results = accuracy_metric.compute(references=[0, 1, 2, 0, 1, 2], predictions=[0, 1, 1, 2, 1, 0])
print(results)
#输出准确率
>>> {'accuracy': 0.5}
配合数据集加载一个评价指标
评价指标往往和对应的数据集配套使用,此处以glue数据集的mrpc子集为例,代码如下:
#加载一个评价指标
from datasets import load_metric
metric = load_metric(path='glue', config_name='mrpc')
print(metric.inputs_description)
#计算一个评价指标
predictions=[0, 1, 0]
references=[0, 1, 1]
metric.compute(predictions=predictions, references=references)
>>> glue_metric=datasets.load_metric('glue', 'mrpc') #'mrpc' or 'qqp'
>>> references=[0, 1]
>>> predictions=[0, 1]
>>> results=glue_metric.compute(predictions=predictions, references=
references)
>>> print(results)
{'accuracy': 1.0, 'f1': 1.0}
#计算一个评价指标
{'accuracy': 0.6666666666666666, 'f1': 0.6666666666666666}
HuggingFace管道工具
🔰Hugging Face管道工具是一组用于执行各种NLP(自然语言处理)任务的工具,它们利用了Hugging Face提供的预训练模型和相关资源。这些管道工具可以简化NLP任务的处理流程,并提供易于使用的API,使用户能够轻松地执行文本分类、命名实体识别、摘要生成等任务。
以下是Hugging Face管道工具的一些主要特点和用途:
- 简化流程:管道工具封装了底层模型的复杂性,使用户无需了解模型的内部结构和参数设置,即可执行各种NLP任务。
- 多任务支持:Hugging Face管道工具支持多种NLP任务,包括文本分类、命名实体识别、问答、摘要生成等。
- 灵活性:用户可以通过设置不同的参数来定制管道工具的行为,以满足特定任务的需求。
- 预训练模型支持:管道工具基于Hugging Face提供的预训练模型,这些模型在大型文本语料库上进行了预训练,并且在各种NLP任务上表现出色。
- 开源和社区支持:Hugging Face管道工具是开源的,并且受到一个活跃的社区的支持,用户可以从社区中获取帮助、分享经验和贡献代码。
使用管道工具时,调用者需要做的只是告诉管道工具要进行的任务类型,管道工具会自动分配合适的模型,直接给出预测结果,如果这个预测结果对于调用者已经可以满足需求,则不再需要再训练也就是常说的Zero Shot Learning。隐藏了大量复杂的底层代码,即使是非专业人员也能轻松使用。
🔰零样本学习(Zero Shot Learning):旨在解决分类任务中缺乏某些类别的样本数据的问题。在零样本学习中,模型被要求从训练集中学习到的知识来推广到未见过的类别,而不是仅仅依赖于已经观察到的类别的样本。
传统的监督学习方法通常要求训练集中包含所有可能的类别,然后模型才能进行有效的分类。然而,在现实世界中,获取所有类别的样本数据是非常困难甚至不可能的,因此零样本学习成为了一种有吸引力的方法。
零样本学习的一个挑战是如何有效地学习到泛化能力强的特征表示,以及如何将类别信息嵌入到特征空间中。近年来,深度学习和元学习等技术已经取得了一些突破,为零样本学习提供了更有效的解决方案。
管道工具的使用
from transformers import pipeline
# huggingface远程模型名
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
# 创建管道,并指定要使用的模型和版本
classifier = pipeline("sentiment-analysis", model=model_name)
# 进行情感分析
result = classifier("I hate you")[0]
print(result)
result = classifier("I love you")[0]
print(result)
{'label': 'NEGATIVE', 'score': 0.9991129040718079}
{'label': 'POSITIVE', 'score': 0.9998656511306763}
这段代码演示了如何使用 Hugging Face 的 Transformers 库中的 pipeline
函数进行情感分析。
- 首先,我们从
transformers
模块中导入pipeline
函数。 - 然后,我们指定了要使用的 Hugging Face 远程模型的名称为
distilbert-base-uncased-finetuned-sst-2-english
。这是一个在 SST-2 数据集上微调过的 DistilBERT 模型,用于情感分析任务。 - 接下来,我们通过调用
pipeline
函数创建了一个情感分析的管道,并传递了模型名称作为参数。由于我们未指定版本号,所以将使用默认的模型版本。 - 最后,我们使用创建的管道进行情感分析。对于每个输入句子,我们打印了模型返回的结果,其中包括情感分类标签和相应的置信度。
通过这段代码,您可以轻松地利用 Hugging Face 提供的预训练模型来执行情感分析任务。