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

Hugging Face 是一个 AI 研究实验室和中心,建立了一个由学者、研究人员和爱好者组成的社区。在短时间内,Hugging Face 在 AI 领域获得了显著的存在感。包括 Google、Amazon 和 Nvidia 在内的科技巨头为 AI 创业公司 Hugging Face 提供了大量投资,使其估值达到 4.5 亿美元。
在本指南中,我们将介绍变压器、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
完成后,您可以使用 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 受益于 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 可以被所有人访问的未来。

















