Hugging Face实战——Hugging Face入门

193 阅读10分钟

本章内容包括

  • Hugging Face 的核心定位
  • Hugging Face Transformers 库
  • Hugging Face 托管的各类模型
  • Gradio 库

Hugging Face 是一个倡导构建、训练与部署开源机器学习模型的 AI 社区。它提供覆盖多个问题领域的最先进模型,如自然语言处理(NLP)、计算机视觉与音频任务。除工具之外,Hugging Face 还是一个托管预训练模型与数据集的平台。在当下 AI 高潮中,Hugging Face 位于这场变革的中心,因为:

  • 它释放了利用海量数据打造应用的新一波浪潮。
  • 许多互补技术正在涌现,比如面向大语言模型(LLM)应用的原型开发工具。
  • 开发者无需再专注于从零构建神经网络或研读算法原理,而能直接用 AI 构建应用解决问题——AI 已成为可直接使用的工具。
  • Hugging Face 的理念是推动开源贡献,它是 NLP、视觉及其他 AI 关键领域开源模型的枢纽。

本书将重点介绍 Hugging Face 提供的一些关键服务与平台,你将先睹为快地了解全书将要构建的应用类型。Hugging Face 最为人所知的是:用于开发 NLP 应用的 Transformers 库、用于分享机器学习模型与数据集的平台、用于托管用户自建机器学习应用的 Spaces,以及用于快速创建界面的 Gradio Python 库。接下来的小节会介绍 Hugging Face Hub 上的一些功能。后文我们还将覆盖如下进阶主题:

  • 使用 LangChain 构建你的 LLM 应用
  • Langflow 进行 LLM 应用的可视化原型设计
  • 探索 OpenAI GPT 的替代方案,如 GPT4All
  • 不泄露数据隐私的前提下开发基于 LLM 的应用
  • 创建能集成搜索引擎、代码解释器等工具的 Agent
  • 使用 Model Context Protocol (MCP) 将 AI 助手连接到外部数据源

1.1 Hugging Face Transformers 库

Transformers 是一个 Python 包,包含了用于文本、图像与音频任务的 Transformer 架构开源实现。它为开发者提供下载并使用预训练模型的 API。借助这些 SOTA 模型,开发者无需从零训练模型即可完成任务。看下面这段代码(在第 2、3 章会详细讲解安装与代码):

from transformers import pipeline

classifier = pipeline('text-classification',
             model = 'distilbert-base-uncased-finetuned-sst-2-english',
             revision = 'af0f99b')

这里我们用 transformers 包中的 pipeline() 来做文本分类,目标是构建一个检测段落情感的应用。只需指定模型 'distilbert-base-uncased-finetuned-sst-2-english' 及其版本 'af0f99b' 即可!你无需理解情感分类的内部机理,也不必自己训练模型。

在 Transformers 库中,pipeline 是一个高层、易用的 API,它把复杂的 NLP 工作流(如文本分类、命名实体识别、翻译、摘要等)简化为几行代码。第 3 章会进一步介绍 transformers 与 pipelines。

为了测试,向该 pipeline 传入一段文本,它会返回如下结果(格式化为 pandas DataFrame):

import pandas as pd

text = '''
I thought this was a wonderful way to spend time on a too hot summer
weekend, sitting in the air conditioned theater and watching a
light-hearted comedy. The plot is simplistic, but the dialogue is
witty and the characters are likable (even the well bread suspected
serial killer). While some may be disappointed when they realize
this is not Match Point 2: Risk Addiction, I thought it was proof
that Woody Allen is still fully in control of the style many of us
have grown to love.<br /><br />This was the most I'd laughed at one
of Woody's comedies in years (dare I say a decade?). While I've never
been impressed with Scarlet Johanson, in this she managed to tone
down her "sexy" image and jumped right into a average, but spirited
young woman.<br /><br />This may not be the crown jewel of his career
, but it was wittier than "Devil Wears Prada" and more interesting
than "Superman" a great comedy to go see with friends.
'''

result = classifier(text)
pd.DataFrame(result)

image.png

图 1.1 情感分析结果(以 pandas DataFrame 展示)

这段文本来自 IMDb 数据集(huggingface.co/datasets/st…),一个包含 50,000 条影评、带“正/负面”标签的二分类情感分析数据集。pipeline 返回的结果显示情感为正面

如你所见,借助 Transformers 与 pipeline API,只需寥寥数行代码即可完成原本相当复杂的情感分析任务。

1.2 Hugging Face 模型

Hugging Face Hub 的 Models 页面(huggingface.co/models;见图1.2)托管了海量适用于各种机器学习任务的预训练模型。所有预训练模型都存放在仓库中,Hub 也提供了便捷的方式浏览模型细节。

image.png

图 1.2 在 Hugging Face Hub 上探索预训练模型

许多模型页面内置小组件,可直接在浏览器里做推理测试。举例,搜索预训练模型 facebook/detr-resnet-50。这是一个 DETR(Detection Transformer)模型,用 COCO 2017 目标检测数据集(训练 118k 带标注图片、验证 5k)端到端训练而成。COCO 是一个大规模的目标检测、分割与图像描述数据集。

你可以用 facebook/detr-resnet-50 在图片中检测目标。模型页面:huggingface.co/facebook/de…(见图 1.3)。更重要的是,Hugging Face 提供了 Hosted Inference API,让你能在浏览器里直接测试模型。

Hosted Inference API 让开发者可以通过简单的 HTTP 请求免费测试和评估 150,000+ 个公开模型,或自己的私有模型,推理由 Hugging Face 的共享基础设施托管与加速。

image.png

图 1.3 使用 Hosted Inference API 在 Hub 上直接测试模型

例如,我将一张图片(见图 1.4)拖拽至该模型页面的 Hosted Inference API 区域,页面便自动显示出检测到的目标及其置信度。

此外,你也可以在自己的 Python 代码中使用该模型。点击 Use This Model(见图 1.5),在弹出的菜单中选择 Transformers。如图 1.6,页面会给出使用该模型的代码示例。

第 4 章我们会结合不同模型更系统地演示如何用 Transformers 做目标检测。

image.png

图 1.4 使用我上传的图片进行目标检测(图片:CC BY-SA 3.0)

image.png

图 1.5 定位 “Use This Model” 按钮

image.png

图 1.6 结合 Transformers 库使用该模型

1.3 Hugging Face Gradio Python 库

作为一名 AI 开发者,你会花大量时间来构建和训练机器/深度学习模型。当模型达到了你的预期,下一步通常是让用户试用。一般做法是开发专用的 UI(多为 Web 应用)或通过 REST API 暴露模型——但你需要耗时去搭建这些界面。有没有一种包能自动把你的模型“包起来”,让用户快速试用?这正是 Gradio 的用武之地。

Gradio 是一个开源的 Python 库,用来为机器学习模型和数据科学工作流快速创建可定制的用户界面。只需几行代码,就能把模型包装成一个基于网页的界面,用户可以上传输入(文本、图片或音频等)并实时查看输出。它广泛用于模型演示、收集用户反馈以及构建交互式 ML 应用。Gradio 还能与 Hugging Face Spaces 无缝集成,方便把应用分享给社区。

Gradio 由斯坦福大学博士生 Abubakar Abid 创立,他研究方向是医疗图像与视频上的深度学习。在学习期间,他开发了 Gradio(github.com/gradio-app/…),用于为机器学习模型创建 GUI 的开源 Python 库。2021 年 12 月 21 日,Hugging Face 宣布收购 Gradio。

为了理解 Gradio 的工作方式,来看一个例子。假设你有一个名为 transform_image() 的函数,它接收一张图片并返回其灰度版本:

from skimage.color import rgb2gray

def transform_image(img):
    return rgb2gray(img)

如果要试这个函数,你需要自己写 UI 来接收用户上传的图片,然后把灰度图展示给用户。Gradio 极大简化了这个过程:它会创建一个基于 Web 的界面,允许用户拖拽图片并显示转换结果。下面的代码展示了 Gradio 如何绑定到 transform_image()

import gradio as gr

demo = gr.Interface(fn = transform_image,
                    inputs = gr.Image(),
                    outputs = "image")
demo.launch()

运行后,Gradio 会在本机托管你的代码并创建一个 UI(见图 1.7)。

image.png

把图片拖到页面左侧,点击 Submit 按钮,图片会被发送到 transform_image(),右侧显示灰度结果(见图 1.8)。

image.png

我会在本书中多次讲到 Gradio。接下来的章节,你将学习如何以多种方式定制 Gradio 的外观与交互。

1.4 理解 Hugging Face 的“心智模型”

如你所见,Hugging Face 不只是一个模型仓库,它也是一条完整的 AI 流水线,把用户从“问题”系统化地带到“解决方案”。

可以把 Hugging Face 想象成“全球最大的 AI 模型库 + 执行平台”。每天有数百万开发者、研究者和企业按一个基本路径,从“遇到 AI 问题”走到“得到结果”。图 1.9 给出了 Hugging Face 核心流程的可视化心智模型:从模型到结果——这一过程每天在平台上发生数百万次。

image.png

下面分步骤说明用户如何用 Hugging Face 解决问题。

1.4.1 第一步:用户需求

一切从一个具体问题开始。开发者坐在电脑前想:“我要把这条客户评论判为正面还是负面”,或“我要把这段英文翻译成法文”。这不是抽象问题,而是有真实数据、真实业务需求在等待处理。

1.4.2 第二步:模型 Hub 搜索与发现

用户前往 Hugging Face 的 Model Hub,这里有 100 万+ 预训练模型。Hub 不是“堆放场”,而是一个强大的搜索与筛选系统。用户可按任务(情感分析、翻译、图像分类等)、模型架构(BERT、GPT、ResNet 等)、语言或性能指标来搜索。平台会把用户从“我有问题”引导到“这是能解决它的具体模型”。

1.4.3 第三步:模型卡(Model Card)

这是 Hugging Face 的亮点。每个模型都有详尽的模型卡,既是文档也是入口。模型卡包含使用示例(可复制的代码片段)、性能基准、训练细节以及使用说明。模型卡是“发现”与“落地”的桥梁

1.4.4 第四步:两条执行路径

此时用户有两种选择:

  • 路径 A:Hosted Inference API——更快上手。直接向 Hugging Face 的服务器(托管在 GPU 集群上)发 HTTP 请求即可。无需部署;发一个 POST 请求带上文本,就能得到 JSON 结果。该路径每天处理数以百万计的 API 调用,并可随需求自动扩缩。
  • 路径 B:直接下载——适合希望本地运行或整合到自有基础设施的用户。底层使用 Git LFS 处理多 GB 的模型文件。用户下载模型权重与配置,用 Transformers 库运行。

1.4.5 第五步:得到结果

两条路径最终都会把答案送达。比如情感分类返回 {"label": "POSITIVE", "score": 0.9998},问题解决,任务完成。

小结

  • Hugging Face 是一条完整的 AI 解题流水线,系统地把用户从问题带到解决方案。
  • Transformers 是一个 Python 包,包含 Transformer 架构在文本/图像/音频任务上的开源实现。
  • 在 Transformers 中,pipeline 是高层、友好的 API,可把复杂的 NLP 流程简化为几行代码。
  • Hugging Face Hub 的 Models 页面 托管了适用于多种任务的海量预训练模型。
  • Gradio 是一个 Python 库,可为你的机器学习模型快速创建 Web UI,便于在无需自建前端的情况下测试模型。