数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
一、基本概念
Evaluate
是一个用于轻松评估机器学习模型和数据集的库。只需一行代码,你就可以获得不同领域(NLP
、计算机视觉、强化学习等等)的几十种评估方法,无论是在本地机器上还是在分布式训练中。安装:
pip install evaluate
确认安装成功:
python -c "import evaluate; print(evaluate.load('exact_match').compute(references=['hello'], predictions=['hello']))"
应该返回:
{'exact_match': 1.0}
。一个典型的机器学习
pipeline
有不同的方面可以被评估,每个方面都可以通过Evaluate
所提供的工具来评估:Metric
:一个metric
用于评估模型的性能,通常涉及模型的prediction
以及一些ground-truth
标签。例如,accuracy, exact match, IoUO
。你可以在
evaluate-metric
找到所有的集成的metrics
。Comparison
:一个comparison
用来比较两个模型的。例如,可以将它们的prediction
与ground-truth
标签进行比较并计算它们的一致性agreement
。例如,McNemar Test
是一个paired
非参数统计假设检验,它将两个模型的预测结果进行比较,目的是衡量模型的预测是否有分歧。它输出的P
值从0.0
到1.0
不等,表示两个模型的预测之间的差异,P
值越低表示差异越明显。你可以在
evaluate-comparison
找到所有的集成的comparisons
。Measurement
:数据集和模型一样重要。通过measurements
,人们可以探查数据集的属性。例如,数据集的平均word
长度。你可以在
evaluate-measurement
中找到所有的集成的measurements
。
这些评估模块中的每一个都作为一个空间存在于
Hugging Face Hub
上。每个metric, comparison, measurement
都是一个独立的Python
模块,但是有一个通用入口:evaluate.load()
:xxxxxxxxxx
import evaluate accuracy = evaluate.load("accuracy")你也可以显式指定模块类型:
xxxxxxxxxx
word_length = evaluate.load("word_length", module_type="measurement")有三种
high-level category
的metrics
:通用指标:可以应用于各种情况和数据集,如
precision
、accuracy
、以及perplexity
。要看到一个给定
metric
的输入结构,你可以看一下它的metric card
。task-specific metrics
:仅限于特定任务,如机器翻译任务通常使用BLEU
或ROUGE
指标、命名实体识别任务通常使用seqeval
指标。dataset-specific metrics
:只在评估模型在特定benchmark
上的表现,如GLUE benchmark
有一个专门的评估指标。
可以通过
evaluate.list_evaluation_modules()
来列出所有可用的评估模块:xxxxxxxxxx
evaluate.list_evaluation_modules( module_type="comparison", include_community=False, with_details=True) # [{'name': 'mcnemar', 'type': 'comparison', 'community': False, 'likes': 1}, # {'name': 'exact_match', 'type': 'comparison', 'community': False, 'likes': 0}]所有
evalution
模块都有一些属性,这些属性存储在EvaluationModuleInfo
对象中:xxxxxxxxxx
Attribute Description description A short description of the evaluation module. citation A BibTex string for citation when available. features A Features object defining the input format. inputs_description This is equivalent to the modules docstring. homepage The homepage of the module. license The license of the module. codebase_urls Link to the code behind the module. reference_urls Additional reference URLs.当涉及到计算实际分数时,有两种主要的方法:
整体式
All-in-one
:在整体式方法中,输入一次性传递给compute()
来计算出分数(以字典的形式)。xxxxxxxxxx
accuracy.compute(references=[0,1,0,1], predictions=[1,0,0,1]) # {'accuracy': 0.5}增量式
Incremental
:在增量式方法中,输入通过EvaluationModule.add()
或EvaluationModule.add_batch()
添加到模块中,最后用EvaluationModule.compute()
计算出分数。x for ref, pred in zip([0,1,0,1], [1,0,0,1]): accuracy.add(references=ref, predictions=pred) accuracy.compute() # {'accuracy': 0.5} for refs, preds in zip([[0,1],[0,1]], [[1,0],[0,1]]): accuracy.add_batch(references=refs, predictions=preds) accuracy.compute() # {'accuracy': 0.5} for model_inputs, ground_truth in evaluation_dataset: predictions = model(model_inputs) metric.add_batch(references=ground_truth, predictions=predictions) metric.compute()
分布式评估:在分布式环境中计算
metrics
可能很棘手。metric
评估是在单独的Python
进程(或者说,节点)中执行的,在数据集的不同子集上。通常情况下,当一个metric score
是加性的( $ f(A\cup B) = f(A) + f(B) $ ),你可以使用分布式的reduce
操作来收集数据集的每个子集的分数。但是当一个指标是非加性的( $ f(A\cup B) \ne f(A) + f(B) $ ),就没有那么简单了。例如,你不能把每个数据子集的F1
分数之和作为你的final metric
。克服这个问题的一个常见方法是退而求其次,采用单个进程来评估。这些指标在单个
GPU
上进行评估,这就变得低效了。Evaluate
通过仅在第一个节点上计算final metric
来解决这个问题。predictions
和references
在每个节点上被独立地计算并提供给metric
。这些都被暂时存储在Apache Arrow table
中,避免了对GPU
或CPU
内存的干扰。当你准备compute() final metric
时,第一个节点能够访问存储在所有其他节点上的predictions
和references
。一旦第一个节点收集了所有的predictions
和references
,compute()
将执行final metric evaluation
。这个解决方案允许
Evaluate
执行分布式预测,这对分布式setting
中的评估速度很重要。同时,你也可以使用复杂的非加性的指标,而不浪费宝贵的GPU
或CPU
内存。结合多个
evaluations
:有时候人们需要多个指标。你可以加载一堆指标并依次调用它们。然而,一个更方便的方法是使用combine()
函数将它们打包在一起:xxxxxxxxxx
clf_metrics = evaluate.combine(["accuracy", "f1", "precision", "recall"]) clf_metrics.compute(predictions=[0, 1, 0], references=[0, 1, 1]) # { # 'accuracy': 0.667, # 'f1': 0.667, # 'precision': 1.0, # 'recall': 0.5 # }保存和
push
到Hub
:我们提供了evaluate.save()
函数来轻松保存metrics
结果:xxxxxxxxxx
result = accuracy.compute(references=[0,1,0,1], predictions=[1,0,0,1]) hyperparams = {"model": "bert-base-uncased"} evaluate.save("./results/"experiment="run 42", **result, **hyperparams)保存的
JSON
文件看起来像是如下:xxxxxxxxxx
{ "experiment": "run 42", "accuracy": 0.5, "model": "bert-base-uncased", "_timestamp": "2022-05-30T22:09:11.959469", "_git_commit_hash": "123456789abcdefghijkl", "_evaluate_version": "0.1.0", "_python_version": "3.9.12 (main, Mar 26 2022, 15:51:15) \n[Clang 13.1.6 (clang-1316.0.21.2)]", "_interpreter_path": "/Users/leandro/git/evaluate/env/bin/python" }我们还提供了
evaluate.push_to_hub()
函数从而将评估结果push
到Hub
:xxxxxxxxxx
evaluate.push_to_hub( model_id="huggingface/gpt2-wikitext2", # model repository on hub metric_value=0.5, # metric value metric_type="bleu", # metric name, e.g. accuracy.name metric_name="BLEU", # pretty name which is displayed dataset_type="wikitext", # dataset name on the hub dataset_name="WikiText", # pretty name dataset_split="test", # dataset split used task_type="text-generation", # task id, see https://github.com/huggingface/datasets/blob/master/src/datasets/utils/resources/tasks.json task_name="Text Generation" # pretty name for task )Evaluator
:evaluate.evalator()
提供自动评估,只需要一个模型、一个数据集、一个指标,而无需提供模型的predictions
。此时,模型推断在内部自动进行。目前支持的任务有:
xxxxxxxxxx
"text-classification": 使用 TextClassificationEvaluator "token-classification": 使用 TokenClassificationEvaluator "question-answering": 使用 QuestionAnsweringEvaluator "image-classification": 使用 ImageClassificationEvaluator "text2text-generation": 使用 Text2TextGenerationEvaluator "summarization": 使用 SummarizationEvaluator "translation": 使用 TranslationEvaluator每个任务对数据集格式和管道输出都有自己的一套要求。
text classification
:text classification evaluator
可用于评估分类数据集上的文本模型。除了模型、数据集和metric
输入外,它还需要以下可选输入:input_column="text"
:用这个参数可以指定pipeline
的数据列。evaluator
预期输入的数据具有一个"text"
列和一个"label"
列。如果你的数据不同,那么可以提供关键字参数input_column="text"
、label_column="label"
。label_column="label"
:用这个参数可以指定用于评估的标签列。label_mapping=None
:label mapping
将pipeline
输出中的标签与评估所需的标签对齐。例如,label_column
中的标签可以是整数(0/1
),而pipeline
可以产生诸如"positive"/"negative"
这样的标签名称。
默认情况下,计算
"accuracy"
指标。如果不指定设备,模型推理的默认值将是机器上的第一个
GPU
(如果有的话),否则就是CPU
。如果你想使用一个特定的设备,你可以将device
传递给compute
,其中:-1
将使用CPU
,而一个正整数(从0
开始)将使用相关的CUDA
设备。有几种方法可以将模型传递给
evaluator
:Hub
上的模型名字、直接加载的transformers model
、初始化好的transformers.Pipeline
。也可以传递任何的行为类似pipeline
的可调用对象。如:
xxxxxxxxxx
from datasets import load_dataset from evaluate import evaluator from transformers import AutoModelForSequenceClassification, pipeline data = load_dataset("imdb", split="test").shuffle(seed=42).select(range(1000)) task_evaluator = evaluator("text-classification") model = AutoModelForSequenceClassification.from_pretrained("lvwerra/distilbert-imdb") pipe = pipeline("text-classification", model="lvwerra/distilbert-imdb") eval_results = task_evaluator.compute( model_or_pipeline="lvwerra/distilbert-imdb", # Pass a model name or path # model_or_pipeline=model, # Pass an instantiated model # model_or_pipeline=pipe, # Pass an instantiated pipeline data=data, label_mapping={"NEGATIVE": 0, "POSITIVE": 1} ) print(eval_results) # { # 'accuracy': 0.918, # 'latency_in_seconds': 0.013, # 'samples_per_second': 78.887, # 'total_time_in_seconds': 12.676 # }注意,评估结果既包括要求的指标,也包括通过
pipeline
获得预测的时间信息。时间信息应该谨慎对待:- 它们包括在
pipeline
中进行的所有处理。这可能包括tokenizing
和后处理,这可能取决于模型的不同。 - 此外,这在很大程度上取决于运行评估的硬件。
- 此外,可能会通过优化诸如
batch size
来提高速度。
也可以通过
combine()
来评估多个指标:xxxxxxxxxx
eval_results = task_evaluator.compute( model_or_pipeline="lvwerra/distilbert-imdb", data=data, metric=evaluate.combine(["accuracy", "recall", "precision", "f1"]), label_mapping={"NEGATIVE": 0, "POSITIVE": 1} ) print(eval_results) # { # 'accuracy': 0.918, # 'f1': 0.916, # 'precision': 0.9147, # 'recall': 0.9187, # 'latency_in_seconds': 0.013, # 'samples_per_second': 78.887, # 'total_time_in_seconds': 12.676 # }仅仅计算
metric
的值往往不足以知道一个模型是否比另一个模型表现得明显更好。通过bootstrapping evaluation
计算置信区间和标准差,这有助于估计一个score
的稳定性:xxxxxxxxxx
results = eval.compute(model_or_pipeline=pipe, data=data, metric=metric, label_mapping={"NEGATIVE": 0, "POSITIVE": 1}, strategy="bootstrap", n_resamples=200) print(results) # {'accuracy': # { # 'confidence_interval': (0.906, 0.9406749892841922), # 'standard_error': 0.00865213251082787, # 'score': 0.923 # } # }token classification
:通过token classification evaluator
,我们可以评估诸如NER
或POS tagging
等任务的模型。它具有如下参数:input_column/label_column/label_mapping
:参考text classification
。join_by = " "
:大多数的数据集已经被tokenized
了,然而pipeline
预期一个字符串。因此在被传递给pipeline
之前,token
需要被拼接起来。默认情况下,使用一个空格来拼接。
示例:
xxxxxxxxxx
import pandas as pd from datasets import load_dataset from evaluate import evaluator from transformers import pipeline models = [ "xlm-roberta-large-finetuned-conll03-english", "dbmdz/bert-large-cased-finetuned-conll03-english", "elastic/distilbert-base-uncased-finetuned-conll03-english", "dbmdz/electra-large-discriminator-finetuned-conll03-english", "gunghio/distilbert-base-multilingual-cased-finetuned-conll2003-ner", "philschmid/distilroberta-base-ner-conll2003", "Jorgeutd/albert-base-v2-finetuned-ner", ] data = load_dataset("conll2003", split="validation").shuffle().select(1000) task_evaluator = evaluator("token-classification") results = [] for model in models: results.append( task_evaluator.compute( model_or_pipeline=model, data=data, metric="seqeval" ) ) df = pd.DataFrame(results, index=models) df[["overall_f1", "overall_accuracy", "total_time_in_seconds", "samples_per_second", "latency_in_seconds"]] print(df)question answering
:通过question-answering evaluator
,我们可以评估问答模型。它具有以下的参数:question_column="question"
:数据集中包含question
的列的名称。context_column="context"
:数据集中包含context
的列的名称。id_column="id"
:(question, answer) pair
的id field
的列的名称。label_column="answers"
:包含答案的列的名称。squad_v2_format=None
:数据集是否遵循squad_v2
数据集的格式,即question
在上下文中可能没有答案。如果没有提供这个参数,格式将被自动推断出来。
示例(包含置信度,
strategy="bootstrap"
,n_resamples
设置重采样的数量):xxxxxxxxxx
from datasets import load_dataset from evaluate import evaluator task_evaluator = evaluator("question-answering") data = load_dataset("squad", split="validation[:1000]") eval_results = task_evaluator.compute( model_or_pipeline="distilbert-base-uncased-distilled-squad", data=data, metric="squad", strategy="bootstrap", n_resamples=30 )image classification
:通过image classification evaluator
,我们可以评估图片分类模型。它具有以下的参数:input_column="image"
:包含PIL
图像文件的列的名称。label_column="label"
:包含标签的列的名称。label_mapping=None
:参考text classification
。
示例:
xxxxxxxxxx
data = load_dataset("imagenet-1k", split="validation", use_auth_token=True) pipe = pipeline( task="image-classification", model="facebook/deit-small-distilled-patch16-224" ) task_evaluator = evaluator("image-classification") eval_results = task_evaluator.compute( model_or_pipeline=pipe, data=data, metric="accuracy", label_mapping=pipe.model.config.label2id )
evaluator
可以与第三方pipeline
一起工作,如Scikit-Learn pipeline
和Spacy pipeline
。遵循TextClassificationPipeline
的惯例,pipeline
应该是可调用的,并返回一个字典的列表。xxxxxxxxxx
from datasets import load_dataset from sklearn.pipeline import Pipeline from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import TfidfTransformer from sklearn.feature_extraction.text import CountVectorizer ds = load_dataset("imdb") text_clf = Pipeline([ ('vect', CountVectorizer()), ('tfidf', TfidfTransformer()), ('clf', MultinomialNB()), ]) text_clf.fit(ds["train"]["text"], ds["train"]["label"]) class ScikitEvalPipeline: def __init__(self, pipeline): self.pipeline = pipeline self.task = "text-classification" def __call__(self, input_texts, **kwargs): return [{"label": p} for p in self.pipeline.predict(input_texts)] pipe = ScikitEvalPipeline(text_clf) from evaluate import evaluator eval = evaluator("text-classification") eval.compute(pipe, ds["test"], "accuracy") # {'accuracy': 0.82956}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论