AI 工具 101
完整初学者指南:Hugging Face LLM 工具

Hugging Face 是一个 AI 研究实验室和中心,建立了一个由学者、研究人员和爱好者组成的社区。在短时间内,Hugging Face 在 AI 领域获得了巨大的关注。包括 Google、Amazon 和 Nvidia 在内的科技巨头为 AI 创业公司 Hugging Face 提供了大量投资,使其估值达到 45 亿美元。
在本指南中,我们将介绍变压器、LLM 和 Hugging Face 库在促进开源 AI 社区方面的重要作用。我们还将逐步介绍 Hugging Face 的基本功能,包括管道、数据集、模型等,并提供 Python 示例。
在 NLP 中的变压器
2017 年,康奈尔大学发表了一篇有影响力的论文,介绍了变压器。这是一种用于 NLP 的深度学习模型。这种发现促进了像 ChatGPT 这样的大型语言模型的发展。
大型语言模型或 LLM 是使用变压器来理解和生成类似人类的文本的 AI 系统。然而,创建这些模型的成本很高,通常需要数百万美元,这限制了它们对大公司的可访问性。
Hugging Face 于 2016 年成立,旨在使 NLP 模型对所有人都可访问。尽管它是一家商业公司,但它提供了一系列开源资源,帮助个人和组织以负担得起的方式构建和使用变压器模型。机器学习是关于教计算机通过识别模式来执行任务,而深度学习是机器学习的一个子集,它创建一个可以独立学习的网络。变压器是一种深度学习架构,能够有效、灵活地使用输入数据,因此它是构建大型语言模型的热门选择,因为它需要较少的训练时间。
Hugging Face 如何促进 NLP 和 LLM 项目
Hugging Face 通过提供以下内容使得与 LLM 合作更加简单:
- 提供一系列预训练模型供选择。
- 提供工具和示例来细化这些模型以满足您的特定需求。
- 提供易于部署的选项以适应各种环境。
Hugging Face 提供的一个很好的资源是 Open LLM Leaderboard。它作为一个综合平台,系统地监测、排名和衡量大型语言模型 (LLM) 和聊天机器人的效率,提供对开源领域进步的细致分析。
LLM 基准测试通过四个指标来衡量模型:
- AI2 推理挑战 (25 次尝试) – 一系列关于小学科学课程的问题。
- HellaSwag (10 次尝试) – 一个常识推理测试,对于人类来说很简单,但对于最先进的模型来说,这是一个重大挑战。
- MMLU (5 次尝试) – 一个多面评估,涉及文本模型在 57 个不同领域的专业知识,包括基本数学、法律和计算机科学等。
- TruthfulQA (0 次尝试) – 一个工具,用于确定模型重复在线上常见的虚假信息的倾向。
基准测试中使用的术语,如“25 次尝试”、“10 次尝试”、“5 次尝试”和“0 次尝试”,表示在评估过程中提供给模型的示例提示数量,以衡量其在各个领域的性能和推理能力。在“少次尝试”范式中,模型提供少量示例来指导其响应,而在“0 次尝试”设置中,模型没有提供示例,必须仅依赖其预先存在的知识来响应。
Hugging Face 的组件
管道
“管道”是 Hugging Face 变压器库的一部分,它有助于轻松利用 Hugging Face 存储库中可用的预训练模型。它为一系列任务提供了直观的 API,包括情感分析、问答、掩码语言建模、命名实体识别和总结。
管道集成了 Hugging Face 的三个核心组件:
- 标记器:通过将其转换为模型可以理解的格式来准备您的文本。
- 模型:管道的核心,实际预测基于预处理输入进行。
- 后处理器:将模型的原始预测转换为人类可读的形式。
这些管道不仅减少了大量的编码工作,还提供了一个用户友好的界面来完成各种 NLP 任务。
使用 Hugging Face 库的变压器应用
Hugging Face 库的亮点是变压器库,它通过连接模型与必要的预处理和后处理阶段来简化 NLP 任务,简化分析过程。要安装和导入库,请使用以下命令:
pip install -q transformers from transformers import pipeline
完成后,您可以执行 NLP 任务,首先是情感分析,它将文本分类为正面或负面情绪。库的强大 pipeline() 函数充当一个中心,涵盖其他管道,并促进任务特定应用在音频、视觉和多模态领域。
实用应用
文本分类
使用 Hugging Face 的 pipeline() 函数,文本分类变得轻而易举。以下是如何启动文本分类管道:
classifier = pipeline("text-classification")
为了获得实践经验,将字符串或字符串列表输入管道以获得预测,这些预测可以使用 Python 的 Pandas 库进行整齐的可视化。以下是 Python 代码片段,演示如何执行此操作:
sentences = ["我很高兴向您介绍人工智能的奇妙世界。", "希望它不会让您失望。"]
# 获取每个句子的分类结果
results = classifier(sentences)
# 循环遍历每个结果并打印标签和分数
for i, result in enumerate(results):
print(f"结果 {i + 1}:")
print(f" 标签:{result['label']}")
print(f" 分数:{round(result['score'], 3)}\n")
输出
结果 1: 标签:正面 分数:1.0 结果 2: 标签:正面 分数:0.996
命名实体识别(NER)
NER 在从文本中提取实际对象(称为“命名实体”)方面至关重要。利用 NER 管道可以有效地识别这些实体:
ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "埃隆·马斯克是 SpaceX 的 CEO。"
outputs = ner_tagger(text)
print(outputs)
输出
埃隆·马斯克:人,SpaceX:组织
问答
问答涉及从给定的上下文中提取对特定问题的精确答案。初始化问答管道并输入您的问题和上下文以获得所需的答案:
reader = pipeline("question-answering")
text = "Hugging Face 是一家为 NLP 创建工具的公司。它位于纽约,并于 2016 年成立。"
question = "Hugging Face 位于哪里?"
outputs = reader(question=question, context=text)
print(outputs)
输出
{‘score’:0.998,‘start’:51,‘end’:60,‘answer’:‘纽约’} Hugging Face 的 pipeline 函数提供了一系列预建管道,用于不同任务,除了文本分类、NER 和问答。以下是可用任务的详细信息:
表:Hugging Face 管道任务
| 任务 | 描述 | 管道标识符 |
| 文本生成 | 根据给定的提示生成文本 | pipeline(task=”text-generation”) |
| 总结 | 总结长文本或文档 | pipeline(task=”summarization”) |
| 图像分类 | 标记输入图像 | pipeline(task=”image-classification”) |
| 音频分类 | 对音频数据进行分类 | pipeline(task=”audio-classification”) |
| 视觉问答 | 使用图像和问题回答查询 | pipeline(task=”vqa”) |
有关详细描述和更多任务,请参阅 Hugging Face 网站上的管道文档。
为什么 Hugging Face 正在将焦点转向 Rust
Hugging Face (HF) 生态系统开始在其库中使用 Rust,例如 safesensors 和 tokenizers。
Hugging Face最近发布了一个名为 Candle 的新机器学习框架。与使用 Python 的传统框架不同,Candle 是用 Rust 构建的。使用 Rust 的目标是提高性能,简化用户体验,并支持 GPU 操作。
Candle 的主要目标是实现无服务器推理,使部署轻量级二进制文件成为可能,并从生产工作负载中删除 Python,这有时会由于其开销而减慢过程。
让我们探索为什么 Rust 正变得比 Python 更受青睐。
- 速度和性能 – Rust 以其令人难以置信的速度而闻名,超过了传统上在机器学习框架中使用的 Python。Python 的性能有时会由于其全局解释器锁 (GIL) 而减慢,但 Rust 不会遇到这个问题,承诺更快的任务执行和更好的性能。
- 安全性 – Rust 提供内存安全保证,而无需垃圾收集器,这对于确保并发系统的安全至关重要。在安全性在处理数据结构方面至关重要的领域(如 safetensors),这非常重要。
Safetensors
Safetensors 受益于 Rust 的速度和安全功能。Safetensors 涉及张量的操作,张量是一种复杂的数学实体,Rust 确保这些操作不仅快速,还安全,避免了可能由于内存处理不当而出现的常见错误和安全问题。
标记器
标记器 处理将句子或短语分解为较小的单位,例如单词或术语。Rust 通过加速执行时间来帮助此过程,确保标记化过程不仅准确,还快速,提高了自然语言处理任务的效率。
Hugging Face 标记器的核心是子词标记化的概念,它在单词级别和字符级别标记化之间取得平衡,以优化信息保留和词汇量。它通过创建子标记(如“##ing”和“##ed”)来工作,保留语义丰富性,同时避免词汇量过大。
子词标记化涉及一个训练阶段,以确定字符级别和词级别标记化之间最有效的平衡。它超出了简单的前缀和后缀规则,需要对大型文本语料库中的语言模式进行全面分析,以设计一个高效的子词标记器。生成的标记器能够处理新词,将其分解为已知的子词,保持高水平的语义理解。
标记化组件
标记器库将标记化过程分为几个步骤,每个步骤都解决标记化的一个不同方面。让我们深入了解这些组件:
- 归一化器:对输入字符串进行初始转换,应用必要的调整,例如小写转换、Unicode 正则化和剥离。
- 预标记器:负责将输入字符串分成预分段,根据预定义的规则确定分隔符,例如空格分隔符。
- 模型:监督发现和创建子标记的过程,适应输入数据的具体特征,并提供训练功能。
- 后处理器:增强构造功能,以实现与许多基于变压器的模型(如 BERT)的兼容性,通过添加标记(如 [CLS] 和 [SEP])来实现这一点。
要开始使用 Hugging Face 标记器,请使用命令 pip install tokenizers 安装库,并将其导入 Python 环境。该库可以在很短的时间内标记化大量文本,从而为更密集的任务(如模型训练)节省宝贵的计算资源。
标记器库使用 Rust,它继承了 C++ 的语法相似性,同时引入了编程语言设计中的新概念。结合 Python 绑定,它确保您在 Python 环境中享受到低级语言的性能。
数据集
数据集是 AI 项目的基础。Hugging Face 提供了大量适合各种 NLP 任务的数据集。要有效地利用它们,了解如何加载和分析它们至关重要。以下是 Python 脚本,演示如何探索 Hugging Face 上可用的数据集:
from datasets import load_dataset
# 加载数据集
dataset = load_dataset('squad')
# 显示第一个条目
print(dataset[0])
此脚本使用 load_dataset 函数加载 SQuAD 数据集,这是问答任务的热门选择。
利用预训练模型并将所有内容整合在一起
预训练模型是许多深度学习项目的骨干,允许研究人员和开发人员在不从头开始的情况下启动他们的项目。Hugging Face 促进了对多样化预训练模型的探索,如下代码所示:
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
# 加载预训练模型和标记器
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
# 显示模型的架构
print(model)
加载模型和标记器后,我们可以创建一个函数,接受文本和问题作为输入,并从文本中提取答案。我们将使用标记器来处理输入文本和问题,将其转换为与模型兼容的格式,然后将处理后的输入输入模型以获得答案:
def get_answer(text, question): # 标记化输入文本和问题 inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True) outputs = model(**inputs) # 获取答案的开始和结束分数 answer_start = torch.argmax(outputs.start_logits) answer_end = torch.argmax(outputs.end_logits) + 1 answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end])) return answer
在代码片段中,我们从 transformers 包中导入必要的模块,然后使用 from_pretrained 方法加载预训练模型及其对应的标记器。我们选择了一个在 SQuAD 数据集上微调的 BERT 模型。
让我们看一下使用此函数的示例用例,假设我们有一个段落和一个问题,我们想从段落中提取答案:
text = """
埃菲尔铁塔位于法国巴黎,是世界上最具标志性的地标之一。它由古斯塔夫·埃菲尔设计,于 1889 年竣工。铁塔高 324 米,当时是世界上最高的建筑。
"""
question = "谁设计了埃菲尔铁塔?"
# 获取问题的答案
answer = get_answer(text, question)
print(f"问题的答案是:{answer}")
# 输出:问题的答案是:古斯塔夫·埃菲尔
在此脚本中,我们构建了一个 get_answer 函数,接受文本和问题,标记化它们,并利用预训练的 BERT 模型从文本中提取答案。它演示了使用 Hugging Face 的 transformers 库构建简单而强大的问答系统的实际应用。为了更好地理解这些概念,建议使用 Google Colab 笔记本 进行实践实验。
结论
通过其广泛的开源工具、预训练模型和用户友好的管道,Hugging Face 为专业人士和新手提供了一个轻松进入 AI 世界的机会。另外,Hugging Face 将焦点转向 Rust 的举动(由于其速度和安全功能)凸显了其在 AI 应用中推动创新、确保效率和安全性的承诺。Hugging Face 的变革性工作不仅使高级 AI 工具民主化,还培养了一个协作的学习和开发环境,促进了一个 AI 可以被所有人访问的未来。





