01、Hugging Face 核心组件介绍

in #ai4 days ago

Hugging Face 核心组件介绍

在当今的 AI 开发领域,大模型已经成为推动自然语言处理(NLP)和多模态应用的核心力量。Hugging Face 是一个广受欢迎的 AI 模型平台,提供了丰富的开源模型和工具,帮助开发者快速上手和应用大模型。本文将详细介绍如何使用 Hugging Face 平台,包括环境搭建、模型下载、本地调用以及简单的应用开发。

一、Hugging Face 平台简介

Hugging Face 是一个类似于 AI 领域的 GitHub 的平台,提供了大量的开源 AI 模型和数据集。这些模型涵盖了自然语言处理、计算机视觉、音频处理等多个领域。Hugging Face 的核心组件包括:

  • Transformers:用于自然语言处理的模型库,支持多种预训练模型,如 GPT、BERT 等。
  • Datasets:提供了丰富的开源数据集,方便开发者进行模型训练和测试。
  • API 调用:支持通过 API 在线调用模型,但受限于网络条件,国内用户通常需要通过其他方式访问。

Hugging Face 平台的优势在于其模型的多样性和易用性,但需要注意的是,由于其服务器在国外,国内用户在使用时可能会遇到网络限制。因此,建议通过科学上网的方式访问该平台。

二、环境搭建

在开始使用 Hugging Face 平台之前,我们需要搭建一个适合运行 AI 模型的开发环境。以下是详细的环境搭建步骤:

(一)安装基础环境

  1. 安装 Python 集成开发环境

    • 推荐安装 Anaconda,它是一个集成了 Python 和众多科学计算库的开发环境。
    • 下载地址:Anaconda 官网
    • 安装时注意选择“Just Me”选项,并确保将 Anaconda 的路径添加到系统环境变量中。
  2. 安装 CUDA 和 cuDNN(如果使用 GPU 加速):

    • 如果你的电脑配备了 NVIDIA 显卡(显存至少 16GB),可以安装 CUDA 和 cuDNN 来加速模型训练。
    • 下载地址:NVIDIA CUDA 官网cuDNN 官网
    • 安装时请确保 CUDA 和 cuDNN 的版本与你的 GPU 驱动和 PyTorch 版本兼容。
  3. 安装 PyTorch

    • PyTorch 是一个流行的深度学习框架,Hugging Face 的 Transformers 库基于 PyTorch 开发。
    • 下载地址:PyTorch 官网
    • 安装命令(以 GPU 版本为例):
    pip install torch torchvision torchaudio
    

(二)安装 Hugging Face 库

安装 Hugging Face 的 Transformers 和 Datasets 库:

pip install transformers datasets

(三)注册 Hugging Face 账号并获取 API Token

  1. 访问 Hugging Face 官网,点击右上角的“Sign Up”注册账号。
  2. 登录后,点击右上角的头像,选择“Settings”。
  3. 在“Access Tokens”部分,点击“New Token”,创建一个新的 API Token。
  4. 保存生成的 Token,后续用于 API 调用。

三、模型下载与本地调用

Hugging Face 提供了丰富的预训练模型,可以通过以下步骤将模型下载到本地,并进行本地调用。

(一)下载模型

  1. 搜索模型

    • 在 Hugging Face 官网的 Models 页面 中搜索需要的模型,例如“gpt2-chinese-cluecorpussmall”。
    • 点击模型名称,进入模型详情页面,复制模型全名。
  2. 下载模型

    • 使用 Hugging Face 提供的 transformers 库下载模型。以下是 Python 代码示例:
      from transformers import AutoModelForCausalLM, AutoTokenizer  
      
      # 模型名称
      model_name = "uer/gpt2-chinese-cluecorpussmall"  
      # 模型保存路径
      cache_dir = "model/uer/gpt2-chinese-cluecorpussmall"  
       
      # 下载模型,如果路径下已存在,则不会进行下载
      AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)  
      # 下载分词器  ,如果路径下已存在,则不会进行下载
      AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)  
       
      print(f"模型分词器{model_name}已下载到{cache_dir}")
      

(二)本地调用模型

  1. 加载模型和分词器

    • 使用本地路径加载模型和分词器:(可以采用上面下载模型的方法加载模型,这里使用另一种单纯加载模型的方法)
      from transformers import AutoModelForCausalLM, AutoTokenizer
      from transformers import pipeline
      
      # 设置模型地址(包含config.json文件的目录),支持绝对路径和相对路径
      model_path = r'.\model\uer\gpt2-chinese-cluecorpussmall\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021f8e07a3'
      
      # 加载模型和分词器
      model = AutoModelForCausalLM.from_pretrained(model_path)
      tokenizer = AutoTokenizer.from_pretrained(model_path)
      
  2. 创建 Pipeline 并生成文本

    • 使用 pipeline 工具进行文本生成:
      # 创建文本生成 pipeline
      generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
      
      # 生成文本
      prompt = "你好,我是一款语言模型,"
      output = generator(prompt, max_length=50, num_return_sequences=1)
      print(output)
      

(三)调整生成参数

为了优化生成效果,可以通过调整以下参数来控制文本生成的随机性和多样性:

  • Temperature:控制生成文本的随机性。值越低,生成的文本越保守;值越高,生成的文本越多样。默认值为 1.0。
  • Top-k:限制生成时仅从概率最高的 k 个词中选择下一个词。值越小,生成结果越一致。
  • Top-p:限制生成时仅从累积概率达到 p 的词中选择下一个词。值越高,生成的文本越多样。

以下是调整参数后的代码示例:

output = generator(  
    "你好,我是一款语言模型,",#生成文本的输入种子文本(prompt)。模型会根据这个初始文本,生成后续的文本  
    max_length=50,#指定生成文本的最大长度。这里的 50 表示生成的文本最多包含 50 个标记(tokens)  
    num_return_sequences=1,#参数指定返回多少个独立生成的文本序列。值为 1 表示只生成并返回一段文本。  
    truncation=True,#该参数决定是否截断输入文本以适应模型的最大输入长度。如果 True,超出模型最大输入长度的部分将被截断;如果 False,模型可能无法处理过长的输入,可能会报错。  
    temperature=0.7,#该参数控制生成文本的随机性。值越低,生成的文本越保守(倾向于选择概率较高的词);值越高,生成的文本越多样(倾向于选择更多不同的词)。0.7 是一个较为常见的设置,既保留了部分随机性,又不至于太混乱。  
    top_k=50,#该参数限制模型在每一步生成时仅从概率最高的 k 个词中选择下一个词。这里 top_k=50 表示模型在生成每个词时只考虑概率最高的前 50 个候选词,从而减少生成不太可能的词的概率。  
    top_p=0.9,#该参数(又称为核采样)进一步限制模型生成时的词汇选择范围。它会选择一组累积概率达到 p 的词汇,模型只会从这个概率集合中采样。top_p=0.9 意味着模型会在可能性最强的 90% 的词中选择下一个词,进一步增加生成的质量。  
    clean_up_tokenization_spaces=True#该参数控制生成的文本中是否清理分词时引入的空格。如果设置为 True,生成的文本会清除多余的空格;如果为 False,则保留原样。默认值即将改变为 False,因为它能更好地保留原始文本的格式。  
)  
  
print(output)

四、分类模型的使用

除了生成模型,Hugging Face 还提供了用于分类任务的模型,如 BERT。以下是使用 BERT 模型进行文本分类的步骤:

(一)下载 BERT 模型

from transformers import BertForSequenceClassification, BertTokenizer

model_name = "bert-base-chinese"
save_directory = "./models/bert-base-chinese"

# 下载模型,并保存到指定路径
model = BertForSequenceClassification.from_pretrained(model_name)
model.save_pretrained(save_directory)

# 下载分词器
tokenizer = BertTokenizer.from_pretrained(model_name)
tokenizer.save_pretrained(save_directory)

(二)加载模型并创建分类 Pipeline

from transformers import BertForSequenceClassification, BertTokenizer
from transformers import pipeline

model_dir = "./models/bert-base-chinese"

# 加载模型和分词器
model = BertForSequenceClassification.from_pretrained("bert-base-chinese", cache_dir=model_dir)
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese",cache_dir=model_dir)

# 创建文本分类 pipeline 通过device可以定义使用cuda(gpu)还是cpu,默认是使用cpu
classifier = pipeline("text-classification", model=model, tokenizer=tokenizer, device='cpu')

# 进行文本分类
text = "我是一款语言模型"
output = classifier(text)
print(output)

五、总结

本文详细介绍了 Hugging Face 平台的使用方法,包括环境搭建、模型下载、本地调用以及分类模型的使用。通过这些步骤,开发者可以快速上手并应用大模型进行自然语言处理任务。在后续的学习中,我们还将探索如何对模型进行微调训练,以满足特定的业务需求。希望本文能为你的大模型学习之旅提供帮助!