大模型入门第一课:Hugging Face,开启大模型之旅的必备工具

大模型基础:先搞懂“什么是大模型”

定义:以参数量界定“大”的标准

在 AI 的世界里,大模型的界定有着明确的标准,那就是参数量。一般来说,参数量达到 10 亿(10 亿 = 1B)以上的 AI 模型,我们称之为大模型,而参数量在 10 亿以下的则属于小模型。

本质:作为“数学模型”的 AI 模型

AI 模型与我们传统认知中的代码有着本质的区别。它实际上是一种进行矩阵运算的数学模型,这就导致了它的输出并非像传统代码那样具有固定的结果,而是存在一定的随机性。比如说,同样的输入,在不同的运行中,模型可能会给出稍有差异的输出,这正是其基于数学运算和概率的特性所决定的。

关键突破:智能涌现现象

2019 年,OpenAI 有了一个重大发现:当模型的参数量超过 10 亿这个门槛后,模型的能力会呈现出指数级增长的态势。就好像模型突然“开窍”了一样,从只能进行简单的对话,摇身一变能够完成复杂的推理任务。这种神奇的现象,我们称之为“智能涌现”,它为大模型的发展带来了质的飞跃。

核心地位:自然语言大模型是多模态模型的基石

自然语言大模型在整个大模型体系中占据着核心基础的地位。你看,那些能够实现文本生成图像、视频等功能的多模态模型,都是在自然语言大模型的基础上发展起来的。就拿 ChatGPT 来说,它的出现引发了广泛关注,随后才诞生了像 MidJourney 这样基于文本生成精美图像的模型,这充分体现了自然语言大模型的基础性和引领性。

在这里需要明确的是,我们现阶段主要的目标并非去“开发”大模型,而是巧妙地“使用”现有的大模型,将它们应用到实际场景中,实现各种有趣且有价值的功能。

Hugging Face 平台:AI 界的“GitHub”,大模型的“宝库”

平台定位:全球最大的开源 AI 模型社区

Hugging Face 堪称全球最大的开源 AI 社区,它就像一个巨大的宝库,几乎囊括了所有主流的大模型,无论是 GPT 系列、BERT,还是 LLaMA 等,应有尽有。也正因如此,它被形象地比作“AI 界的 GitHub”,为广大开发者提供了丰富的资源。

实操 1:Hugging Face API 调用——在线使用大模型

用 API Token 调用:获取 Token 与代码实现

  1. 获取 Token:登录 Hugging Face 平台后,进入“Settings→Access Tokens”,在这里创建属于你的 Token,并一定要妥善保存,因为它只会显示一次,如果不小心丢失,就需要重新创建。
  2. 代码示例
import requests
API_URL = "https://api - inference.huggingface.co/models/gpt2-chinese"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
def query(payload):
    response = requests.post(API_URL, headers = headers, json = payload)
    return response.json()
output = query({"inputs": "你好,Hugging Face"})
print(output)

这段代码的作用是通过 API 调用模型,将“你好,Hugging Face”作为输入,获取模型生成的续写内容。这里的 API_URL 指定了要调用的模型地址,headers 则包含了我们的 Token 信息。

常见问题:网络超时与 Token 无效

  1. 网络超时:如果遇到网络超时的问题,确保网络连接稳定。
  2. Token 无效:要是出现 Token 无效的情况,那就需要重新生成 Token,再次确认保存好新的 Token 后重试。

实操 2:模型下载与本地调用——离线玩转大模型

模型下载:代码方式与手动下载

  1. 代码方式:使用 from_pretrained 方法可以方便地自动下载模型,但前提是要保证联网状态。示例代码如下:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "gpt2-chinese"
model = AutoModelForCausalLM.from_pretrained(model_name, cache_dir = "./models")
tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir = "./models")

这里通过指定 cache_dir 参数,我们可以将模型下载到本地的 ./models 目录下,方便后续离线使用。
2. 手动下载:如果网络状况不佳,自动下载老是失败,也可以选择从平台手动下载权重文件,然后将其放入 cache_dir 所指定的路径中。

GPT - 2 生成模型调用:参数详解与示例

  1. 核心参数
    • temperature:这个参数用于控制生成结果的随机性。当 temperature = 0 时,生成结果是固定的;而设置为 0.7 左右时,能够在随机性和稳定性之间找到较好的平衡。就像调节水龙头的水流大小,temperature 决定了生成结果的“变化幅度”。
    • top_k:它限制了候选词的范围。比如设置 top_k = 50,模型在生成下一个词时,只会从概率前 50 的词中进行选择,这样可以让生成结果更加合理和可控。
  2. 示例代码
from transformers import pipeline
generator = pipeline("text - generation", model = model, tokenizer = tokenizer, device = 0)  # device = 0 用 GPU
output = generator(
    "你好,我是一款语言模型。",
    max_length = 50,
    temperature = 0.7,
    top_k = 50,
    num_return_sequences = 1
)
print(output[0]["generated_text"])

在这段代码中,我们使用 pipeline 函数创建了一个文本生成器,设置了输入文本、最大生成长度、温度和候选词范围等参数。最后输出模型生成的文本。
3. 结果分析:由于 GPT - 2 模型参数量相对较小(400M),生成的文本可能会出现一些“废话”,但整体上还是能够体现出续写的逻辑。这也让我们明白,模型的表现与参数量有着密切的关系。

BERT 分类模型调用:用途、示例与原理

  1. 用途:BERT 模型主要用于文本分类任务,比如情感分析,它会输出文本属于各个类别的概率。就像一个裁判,对输入的文本进行“判断”,给出它属于不同类别的可能性。
  2. 示例代码
from transformers import BertTokenizer, BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained("bert - base - chinese", cache_dir = "./models")
tokenizer = BertTokenizer.from_pretrained("bert - base - chinese", cache_dir = "./models")
classifier = pipeline("text - classification", model = model, tokenizer = tokenizer)
output = classifier("这个产品很好用!")
print(output)  # 输出如[{'label': 'LABEL_1','score': 0.92}]

这里我们首先从预训练模型中加载 BERT 分类模型和分词器,然后使用 pipeline 创建分类器,将“这个产品很好用!”作为输入,最后输出分类结果。
3. 原理:模型默认是二分类任务,在实际应用中,我们通常需要通过微调,让它适应具体的任务需求,比如情感分析中的“正向/负向”分类。这就像给模型进行“特训”,让它更擅长特定类型的判断。

生成模型 vs 分类模型:两种核心大模型的“用法与区别”

生成模型(如 GPT - 2):擅长创作,参数控随机

  1. 核心能力:生成模型以文本续写、创作故事、代码等内容为主要能力,能够根据给定的输入,创作出全新的文本内容,就像一位富有创造力的作家。
  2. 特点:它采用单向注意力机制,仅依靠上文信息来预测下文。同时,通过调整参数可以控制生成结果的随机性,让生成的内容既符合逻辑,又具有一定的变化性。

分类模型(如 BERT):专注判断,输出概率分布

  1. 核心能力:分类模型主要用于对文本进行分类,比如判断文本的情感倾向、主题等,还能从文本中提取关键信息,就像一个精准的分拣员,把文本归类到不同的类别中。
  2. 特点:它运用双向注意力机制,能够充分理解上下文的信息,从而更准确地进行分类。输出结果是文本属于各个类别的概率分布,让我们清晰地了解模型对文本类别的判断倾向。

核心差异:创造与判断的本质区别

生成模型的本质是“创造内容”,它通过学习大量的文本数据,能够生成新的文本;而分类模型则是“做判断”,根据文本的特征将其划分到不同的类别中。这两种模型在功能和应用场景上有着明显的差异,我们可以根据实际需求选择合适的模型来解决问题。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐