Connect with us

AI 工具 101

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

mm
HUGGING FACE - COMPLETE GUIDE

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 生态系统 - 模型、数据集、指标、变压器、加速器、标记器

Hugging Face 通过提供以下内容使得与 LLM 合作更加简单:

  1. 提供一系列预训练模型供选择。
  2. 提供工具和示例来细化这些模型以满足您的特定需求。
  3. 提供易于部署的选项以适应各种环境。

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 的三个核心组件:

  1. 标记器:通过将其转换为模型可以理解的格式来准备您的文本。
  2. 模型:管道的核心,实际预测基于预处理输入进行。
  3. 后处理器:将模型的原始预测转换为人类可读的形式。

这些管道不仅减少了大量的编码工作,还提供了一个用户友好的界面来完成各种 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 Safetensors 和标记器 Rust

Hugging face Safetensors 和标记器 GitHub 页面

Hugging Face (HF) 生态系统开始在其库中使用 Rust,例如 safesensors 和 tokenizers。

Hugging Face最近发布了一个名为 Candle 的新机器学习框架。与使用 Python 的传统框架不同,Candle 是用 Rust 构建的。使用 Rust 的目标是提高性能,简化用户体验,并支持 GPU 操作。

Candle 的主要目标是实现无服务器推理,使部署轻量级二进制文件成为可能,并从生产工作负载中删除 Python,这有时会由于其开销而减慢过程。

让我们探索为什么 Rust 正变得比 Python 更受青睐。

  1. 速度和性能 – Rust 以其令人难以置信的速度而闻名,超过了传统上在机器学习框架中使用的 Python。Python 的性能有时会由于其全局解释器锁 (GIL) 而减慢,但 Rust 不会遇到这个问题,承诺更快的任务执行和更好的性能。
  2. 安全性 – 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 可以被所有人访问的未来。

我过去五年一直沉浸在令人着迷的机器学习和深度学习世界中。我的热情和专业知识使我能够为超过50个不同的软件工程项目做出贡献,特别注重人工智能/机器学习。我的持续好奇心也使我对自然语言处理产生了兴趣,这是一个我渴望进一步探索的领域。