Hugging Face是一家专注于自然语言处理(NLP)和人工智能(AI)的公司,可以认为是AI领域的Github。(下面简称HF)
- 一方面整理、收集了NLP等AI任务常用的数据集,预训练模型;
- 另一方面提供系列工具库,用以高效地训练AI模型。具体包括如下几个核心库。
- Transformers
- Datasets
- Tokenizers
1. 获取模型/数据集
HF提供了大量的公开AI数据集以及预训练数据集,同时也提供了下载的方式
- 下载数据集
- 如下,会自动下载https://huggingface.co/datasets/lhoestq/demo1数据集
|
|
- 加载模型,会有两种使用场景
- 调用模型的分词器(tokenizer)
- 调用预训练模型本身(model checkpoint)
|
|
如上,至少在国内的下载速度非常慢。可以使用它的镜像源网站,下载数据集/模型到本地。然后在上面的命令中,提供路径参数即可
|
|
|
|
!下面学习相关用法时,均先将数据集/模型下载到datasets文件夹后,再加载。
2. 加载模型
2.1 完整模型
-
HF目前有收集了大量不同NLP任务的微调后模型,可根据微调任务进行分类。详见:https://huggingface.co/docs/transformers/v4.45.2/en/main_classes/pipelines#transformers.pipeline
-
可以在https://huggingface.co/models?pipeline_tag=token-classification&sort=trending 查看每种task下,可以调用的模型
-
主要可通过
pipeline
函数调用,执行特定场景的推理任务
|
|
2.2 预训练模型
- 首先,预训练模型需要接受原始输入的词元化表示(tokenizer)
|
|
在对输入序列进行tokenizer词元化处理时,有两个关键参数:
- padding参数进行短序列进行词元补长,此时attention_mask将对于填充词元注意力设置为0;
- truncation参数限制最大词元长度,此时需要另外通过max_length设置预期最大长度。
|
|
!model对于输入词元的要求:(1) tensor,(2) list of list。即上面
tokenizer()
的结果
- 加载模型的预训练部分
|
|
2.3 经典模型
- HF的Transformers模块提供了大量经典的AI大模型,涉及test/vision/audio等领域。我们可以很方便的加载其架构,以及预训练参数
- 例如 Bert:https://huggingface.co/docs/transformers/model_doc/bert (Transformer/API/MODELS/TEXT MODELS/BERT)
|
|
3. 模型微调
如下演示一个基于bert的微调示例
- 加载模型框架
|
|
AutoModelForSequenceClassification
表示基于预训练模型进行序列分类的微调任务的训练API。此外也有适用其它微调任务的API,参考:https://huggingface.co/transformers/v3.0.2/model_doc/auto.html#
- 微调数据集
- (1)加载
|
|
- (2)词元化处理
|
|
- (3)数据清洗
|
|
- (4)小批量迭代器:每次迭代一个字典
|
|
- 训练参数
- (1)优化器
|
|
- (2)学习率调度器
|
|
- 开始训练
- train step
|
|
- evaluation step
|
|
此外,TF也提供了accelerate库用于方便的执行分布式训练。但在实操过程中,遇到了如下问题
NotImplementedError: Using RTX 4000 series doesn’t support faster communication broadband via P2P or IB. Please set NCCL_P2P_DISABLE=“1” and NCCL_IB_DISABLE=“1” or use accelerate launch which will do this automatically.
可通过如下方式避免报错
1
import os
os.environ[“NCCL_IB_DISABLE”] = “1” os.environ[“NCCL_P2P_DISABLE”] = “1”
1 2 3
- https://huggingface.co/learn/nlp-course/chapter3/3?fw=pt - https://huggingface.co/learn/nlp-course/chapter3/4?fw=pt