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 提供了大量投资,使其估值达到 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 生态系统 - 模型、数据集、度量、变压器、加速、标记器

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

完成后,您可以使用 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 受益于 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个不同的软件工程项目做出贡献,特别注重人工智能/机器学习。我的持续好奇心也使我对自然语言处理产生了兴趣,这是一个我渴望进一步探索的领域。