Connect with us

AI 工具 101

Hugging Face LLM 工具完全初学者指南

mm
HUGGING FACE - COMPLETE GUIDE

Hugging Face 是一个人工智能研究实验室和中心,它建立了一个由学者、研究人员和爱好者组成的社区。在短时间内,Hugging Face 已在人工智能领域获得了显著的影响力。科技巨头包括谷歌、亚马逊和英伟达已向人工智能初创公司 Hugging Face 投入了大量资金,使其估值达到45亿美元。 在本指南中,我们将介绍 Transformer、LLM 以及 Hugging Face 库在培育开源人工智能社区方面所扮演的重要角色。我们还将通过动手实践的 Python 示例,介绍 Hugging Face 的核心功能,包括管道、数据集、模型等。

NLP 中的 Transformer

2017年,康奈尔大学发表了一篇颇具影响力的论文,介绍了Transformer。这是一种用于 NLP 的深度学习模型。这一发现推动了像ChatGPT这样的大型语言模型的发展。 大型语言模型(LLM)是利用 Transformer 来理解和生成类人文本的人工智能系统。然而,创建这些模型成本高昂,通常需要数百万美元,这限制了大型公司以外的可及性。 Hugging Face 成立于 2016 年,旨在让每个人都能使用 NLP 模型。尽管是一家商业公司,但它提供了一系列开源资源,帮助个人和组织以可负担的方式构建和使用 Transformer 模型。机器学习是教导计算机通过识别模式来执行任务,而深度学习作为机器学习的一个子集,创建了一个能够独立学习的网络。Transformer 是一种深度学习架构,它能有效且灵活地利用输入数据,由于训练时间要求更短,成为构建大型语言模型的热门选择。

Hugging Face 如何促进 NLP 和 LLM 项目

Hugging face Ecosystem - Models, dataset, metrics, transformers, accelerate, tokenizers Hugging Face 通过提供以下功能,简化了 LLM 的使用:

  1. 一系列可供选择的预训练模型。
  2. 用于根据特定需求微调这些模型的工具和示例。
  3. 适用于各种环境的简易部署选项。

Hugging Face 提供的一个优秀资源是 Open LLM 排行榜。作为一个综合性平台,它系统地监控、排名和评估一系列大型语言模型(LLM)和聊天机器人的效率,对开源领域的进展提供有洞察力的分析。 LLM 基准测试通过四个指标来衡量模型:

  • AI2 推理挑战(25-shot)—— 一系列围绕基础科学课程的问题。
  • HellaSwag(10-shot)—— 一项常识推理测试,虽然对人类来说简单,但对前沿模型来说是一个重大挑战。
  • MMLU(5-shot)—— 一项多方面的评估,涉及文本模型在 57 个不同领域的熟练程度,涵盖基础数学、法律和计算机科学等。
  • TruthfulQA(0-shot)—— 一种用于确定模型是否倾向于重复网络上常见错误信息的工具。

这些基准测试使用诸如“25-shot”、“10-shot”、“5-shot”和“0-shot”等术语来描述,表示在评估过程中提供给模型的提示示例数量,以衡量其在各个领域的性能和推理能力。在“few-shot”范式中,模型会获得少量示例来指导其回答,而在“0-shot”设置中,模型不接收任何示例,必须完全依赖其先验知识来做出适当回应。

Hugging Face 的组件

管道

‘pipelines’ 是 Hugging Face 的 transformers 库的一部分,是一个有助于轻松使用 Hugging Face 仓库中预训练模型的功能。它为一系列任务提供了直观的 API,包括情感分析、问答、掩码语言建模、命名实体识别和摘要。 管道集成了三个核心的 Hugging Face 组件:

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

这些管道不仅减少了大量编码工作,还提供了一个用户友好的界面来完成各种 NLP 任务。

使用 Hugging Face 库的 Transformer 应用

Hugging Face 库的一个亮点是 Transformers 库,它通过将模型与必要的预处理和后处理阶段连接起来,简化了 NLP 任务,从而简化了分析过程。要安装并导入该库,请使用以下命令:

 pip install -q transformers from transformers import pipeline 

完成此操作后,您可以执行 NLP 任务,首先是情感分析,它将文本分类为积极或消极情感。该库强大的 pipeline() 函数充当一个中心,包含其他管道,并促进音频、视觉和多模态领域的特定任务应用。

实际应用

文本分类

使用 Hugging Face 的 pipeline() 函数,文本分类变得轻而易举。以下是启动文本分类管道的方法:

 classifier = pipeline("text-classification") 

为了获得动手体验,将一个字符串或字符串列表输入到管道中以获得预测结果,这些结果可以使用 Python 的 Pandas 库清晰地可视化。以下是演示此过程的 Python 代码片段:

 sentences = ["I am thrilled to introduce you to the wonderful world of AI.", "Hopefully, it won't disappoint you."] # Get classification results for each sentence in the list results = classifier(sentences) # Loop through each result and print the label and score for i, result in enumerate(results): print(f"Result {i + 1}:") print(f" Label: {result['label']}") print(f" Score: {round(result['score'], 3)}\n") 

输出

 1.0 0.996 

命名实体识别(NER)

NER 在从文本中提取称为“命名实体”的现实世界对象方面至关重要。利用 NER 管道可以有效识别这些实体:

 ner_tagger = pipeline("ner", aggregation_strategy="simple") text = "Elon Musk is the CEO of SpaceX." outputs = ner_tagger(text) print(outputs) 

输出

 Elon Musk: PER, SpaceX: ORG 

问答

问答涉及从给定上下文中提取特定问题的精确答案。初始化一个问答管道,并输入您的问题和上下文以获得所需的答案:

 reader = pipeline("question-answering") text = "Hugging Face is a company creating tools for NLP. It is based in New York and was founded in 2016." question = "Where is Hugging Face based?" outputs = reader(question=question, context=text) print(outputs) 

输出

 {'score': 0.998, 'start': 51, 'end': 60, 'answer': 'New York'} 

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 and tokenizer Rust

Hugging face Safetensors and tokenizer GitHub Page

Hugging Face(HF)生态系统已开始在其库中使用 Rust,例如 safesensors 和 tokenizers。 Hugging Face 最近还发布了一个名为 Candle 的新机器学习框架。与使用 Python 的传统框架不同,Candle 是用 Rust 构建的。使用 Rust 的目标是提高性能并简化用户体验,同时支持 GPU 操作。 Candle 的关键目标是促进无服务器推理,使得部署轻量级二进制文件成为可能,并将 Python 从生产工作负载中移除,因为 Python 的开销有时会减慢进程。这个框架旨在解决在使用像 PyTorch 这样完整机器学习框架时遇到的问题,这些框架在集群上创建实例时体积庞大且速度缓慢。 让我们探讨一下为什么 Rust 正变得比 Python 更受青睐。

  1. 速度和性能 – Rust 以其惊人的速度而闻名,优于传统上用于机器学习框架的 Python。Python 的性能有时会因其全局解释器锁(GIL)而减慢,但 Rust 没有这个问题,承诺更快地执行任务,从而在实施它的项目中提高性能。
  2. 安全性 – Rust 在没有垃圾回收器的情况下提供内存安全保证,这对于确保并发系统的安全性至关重要。这在像 safetensors 这样的领域中起着关键作用,因为处理数据结构时的安全性是优先考虑的事项。

Safetensors

Safetensors 受益于 Rust 的速度和安全性特性。Safetensors 涉及对张量(一种复杂的数学实体)的操作,使用 Rust 可以确保操作不仅快速,而且安全,避免了因内存处理不当而可能出现的常见错误和安全问题。

分词器

分词器 负责将句子或短语分解成更小的单元,例如单词或术语。Rust 通过加快执行时间来帮助这个过程,确保分词过程不仅准确而且迅速,从而提高自然语言处理任务的效率。 Hugging Face 分词器的核心是子词分词的概念,它在词级分词和字符级分词之间取得微妙的平衡,以优化信息保留和词汇表大小。它通过创建子词(如“##ing”和“##ed”)来运作,在保持语义丰富性的同时避免词汇表膨胀。 子词分词涉及一个训练阶段,以确定字符和词级分词之间最有效的平衡。它超越了简单的前缀和后缀规则,需要对大量文本语料库中的语言模式进行全面分析,以设计一个高效的子词分词器。生成的分词器能够通过将新词分解为已知的子词来处理它们,保持高水平的语义理解。

分词组件

分词器库将分词过程分为几个步骤,每个步骤处理分词的一个不同方面。让我们深入了解这些组件:

  • 标准化器:对输入字符串进行初始转换,应用必要的调整,例如小写转换、Unicode 标准化和去除空格。
  • 预分词器:负责根据预定义规则(例如空格分隔)将输入字符串分割成预分段。
  • 模型:监督子词的发现和创建,适应输入数据的特性,并提供训练能力。
  • 后处理器:增强构建功能,以促进与许多基于 Transformer 的模型(如 BERT)的兼容性,通过添加诸如 [CLS] 和 [SEP] 之类的标记。

要开始使用 Hugging Face 分词器,请使用命令 pip install tokenizers 安装该库,并将其导入到 Python 环境中。该库可以在极短的时间内对大量文本进行分词,从而为模型训练等更密集的任务节省宝贵的计算资源。 分词器库使用 Rust,它继承了 C++ 的语法相似性,同时引入了编程语言设计的新概念。结合 Python 绑定,它确保您在 Python 环境中工作时也能享受低级语言的性能。

I have spent the past five years immersing myself in the fascinating world of Machine Learning and Deep Learning. My passion and expertise have led me to contribute to over 50 diverse software engineering projects, with a particular focus on AI/ML. My ongoing curiosity has also drawn me toward Natural Language Processing, a field I am eager to explore further.