分享

拥抱脸部 LLM 工具的完整初学者指南

 一介书生五十后 2023-10-02 发布于浙江

Hugging Face 是一个人工智能研究实验室和中心,建立了一个由学者、研究人员和爱好者组成的社区。 在很短的时间内,Hugging Face 就在人工智能领域占据了重要地位。 科技巨头 包括谷歌、亚马逊和英伟达在内的人工智能初创公司 Hugging Face 都进行了大量投资,使其估值大幅提升 的美元4.5亿元.

在本指南中,我们将介绍 Transformer、LLM 以及 Hugging Face 库如何在培育开源 AI 社区方面发挥重要作用。 我们还将通过 Python 示例来介绍 Hugging Face 的基本功能,包括管道、数据集、模型等。

NLP 中的 Transformer

2017年,康奈尔大学发表了一篇有影响力的论文,介绍了 变形金刚。 这些是 NLP 中使用的深度学习模型。 这一发现推动了大型语言模型的发展,例如 ChatGPT.

大型语言模型或 LLM 是使用 Transformer 来理解和创建类人文本的人工智能系统。 然而,创建这些模型的成本很高,通常需要数百万美元,这限制了大公司的使用。

拥抱脸,始于 2016 年,旨在让每个人都能接触到 NLP 模型。 尽管是一家商业公司,但它提供了一系列开源资源,帮助人们和组织以经济实惠的方式构建和使用变压器模型。 机器识别 是关于教计算机通过识别模式来执行任务,而深度学习(机器学习的一个子集)创建了一个独立学习的网络。 Transformer 是一种深度学习架构,可以有效、灵活地使用输入数据,由于训练时间要求较少,使其成为构建大型语言模型的流行选择。

拥抱脸部如何促进 NLP 和 LLM 项目

拥抱脸部生态系统 - 模型、数据集、指标、变压器、加速器、标记器

Hugging Face 通过提供以下功能,让与法学硕士的合作变得更加简单:

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

通过 Hugging Face 可以获得的一个很棒的资源是 打开 LLM 排行榜。 作为一个综合平台,它系统地监控、排名和衡量一系列大型语言模型 (LLM) 和聊天机器人的效率,为开源领域的进步提供敏锐的分析

LLM 基准通过四个指标来衡量模型:

  • AI2推理挑战赛 (25 个镜头)——围绕基础科学教学大纲的一系列问题。
  • 海拉斯瓦格 (10 次)——一项常识性推理测试,虽然对人类来说很简单,但这个指标对于尖端模型来说是一个重大挑战。
  • 百万美元 (5 个镜头)——涉及文本模型在 57 个不同领域的熟练程度的多方面评估,包括基础数学、法律和计算机科学等。
  • 真实质量保证 (0-shot) — 一种工具,用于确定模型回显经常遇到的在线错误信息的倾向。

基准使用“25-shot”、“10-shot”、“5-shot”和“0-shot”等术语来描述,表示模型在评估过程中给出的提示示例的数量衡量其在各个领域的表现和推理能力。 在“少样本”范式中,为模型提供了少量示例来帮助指导他们的响应,而在“零样本”设置中,模型没有收到任何示例,并且必须仅依靠其预先存在的知识来做出适当的响应。

拥抱脸的组成部分

管道

'管道' 是 Hugging Face 变压器库的一部分,该功能有助于轻松利用 Hugging Face 存储库中提供的预训练模型。 它为一系列任务提供了直观的 API,包括情感分析、问答、掩码语言建模、命名实体识别和摘要。

Pipelines 集成了三个中央 Hugging Face 组件:

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

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

使用 Hugging Face 库的 Transformer 应用程序

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

1
2
pip install -q transformers
from transformers import pipeline

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

实际应用

文字分类

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

1
classifier = pipeline('text-classification')

如需亲身体验,请将字符串或字符串列表输入到管道中以获得预测,可以使用 Python 的 Pandas 库将其直观地可视化。 下面是一个 Python 片段演示了这一点:

1
2
3
4
5
6
7
8
9
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
2
3
4
5
6
Result 1:
Label: POSITIVE
Score: 1.0
Result 2:
Label: POSITIVE
Score: 0.996

命名实体识别(NER)

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

1
2
3
4
ner_tagger = pipeline('ner', aggregation_strategy='simple')
text = 'Elon Musk is the CEO of SpaceX.'
outputs = ner_tagger(text)
print(outputs)

输出

1
Elon Musk: PER, SpaceX: ORG

问题回答

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

1
2
3
4
5
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)

输出

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

除了文本分类、NER 和问题回答之外,Hugging Face 的管道功能还为不同的任务提供了一系列预构建的管道。 以下是可用任务子集的详细信息:

表:拥抱面部管道任务

任务产品描述管道标识符
文本生成根据给定的提示生成文本管道(任务=“文本生成”)
概要总结冗长的文本或文档管道(任务=“总结”)
影像分类标记输入图像管道(任务=“图像分类”)
音频分类对音频数据进行分类管道(任务=“音频分类”)
视觉问答使用图像和问题回答查询管道(任务=“vqa”)

有关详细说明和更多任务,请参阅 Hugging Face 网站上的管道文档.

为什么 Hugging Face 将重点转向 Rust

拥抱脸部 Safetensors 和 tokenizer Rust

拥抱脸部 Safetensors 和 tokenizer GitHub 页面

Hugging Face (HF) 生态系统开始在其库中使用 Rust,例如安全传感器和标记器。

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

Candle 的主要目标是促进无服务器推理,使轻量级二进制文件的部署成为可能,并将 Python 从生产工作负载中删除,因为 Python 有时会因其开销而减慢进程。 该框架是一种解决方案,旨在克服 PyTorch 等完整机器学习框架在集群上创建实例时体积大且速度慢的问题。

让我们探讨一下为什么 Rust 比 Python 更受欢迎。

  1. 速度与性能 – Rust 以其令人难以置信的速度而闻名,其性能优于传统上用于机器学习框架的 Python。 Python 的性能有时会因其全局解释器锁(GIL)而降低,但 Rust 不会面临这个问题,它承诺更快地执行任务,并随后提高实现它的项目的性能。
  2. 安全性 – Rust 在没有垃圾收集器的情况下提供内存安全保证,这对于确保并发系统的安全至关重要。 这在安全张量等领域发挥着至关重要的作用,在这些领域中,处理数据结构的安全性是优先考虑的。

安全张量

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

分词器

分词器 处理将句子或短语分解成更小的单元,例如单词或术语。 Rust 通过加快执行时间来帮助这个过程,确保标记化过程不仅准确而且快速,从而提高了效率 自然语言处理 任务。

Hugging Face 标记器的核心是子词标记化的概念,在单词和字符级标记化之间取得微妙的平衡,以优化信息保留和词汇量。 它通过创建子标记(例如“##ing”和“##ed”)来发挥作用,保留语义丰富性,同时避免词汇量臃肿。

子词标记化涉及一个训练阶段,以确定字符和单词级标记化之间最有效的平衡。 它超越了单纯的前缀和后缀规则,需要对大量文本语料库中的语言模式进行全面分析,以设计高效的子词标记器。 生成的分词器擅长通过将新词分解为已知的子词来处理新词,从而保持高水平的语义理解。

代币化组件

标记化器库将标记化过程分为几个步骤,每个步骤都解决标记化的不同方面。 让我们深入研究这些组件:

  • 归一化器:对输入字符串进行初始转换,应用必要的调整,例如小写转换、Unicode 规范化和剥离。
  • 预分词器:负责将输入字符串分段为预分段,根据预定义的规则(例如空间划分)确定分段。
  • 型号:监督子代币的发现和创建,适应输入数据的具体情况并提供培训功能。
  • 后处理器:通过添加 [CLS] 和 [SEP] 等标记,增强构造功能,以促进与许多基于 Transformer 的模型(例如 BERT)的兼容性。

要开始使用 Hugging Face 标记器,请使用以下命令安装库 pip install tokenizers 并将其导入到您的 Python 环境中。 该库可以在很短的时间内标记大量文本,从而为模型训练等更密集的任务节省宝贵的计算资源。

分词器库使用 它继承了 C++ 的语法相似性,同时在编程语言设计中引入了新颖的概念。 与 Python 绑定相结合,它可确保您在 Python 环境中工作时享受较低级语言的性能。

数据集

数据集是人工智能项目的基石。 Hugging Face 提供了各种各样的数据集,适用于各种 NLP 任务等等。 为了有效地利用它们,了解加载和分析它们的过程至关重要。 下面是一个经过充分注释的 Python 脚本,演示了如何探索 Hugging Face 上可用的数据集:

1
2
3
4
5
from datasets import load_dataset
# Load a dataset
dataset = load_dataset('squad')
# Display the first entry
print(dataset[0])

该脚本使用 load_dataset 函数加载 SQuAD 数据集,这是问答任务的常用选择。

利用预先训练的模型并将其整合在一起

预训练模型构成了许多深度学习项目的支柱,使研究人员和开发人员能够快速启动他们的计划,而无需从头开始。 Hugging Face 有助于探索各种预训练模型,如下代码所示:

1
2
3
4
5
6
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
# Load the pre-trained model and tokenizer
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
# Display the model's architecture
print(model)

加载模型和分词器后,我们现在可以继续创建一个函数,该函数将一段文本和一个问题作为输入,并返回从文本中提取的答案。 我们将利用分词器将输入文本和问题处理为与模型兼容的格式,然后将处理后的输入输入到模型中以获得答案:

1
2
3
4
5
6
7
8
9
def get_answer(text, question):
    # Tokenize the input text and question
    inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
    outputs = model(**inputs)
    # Get the start and end scores for the answer
    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 模型。

让我们看一下此函数的示例用例,其中我们有一段文本,我们希望从中提取问题的具体答案:

1
2
3
4
5
6
7
8
text = '''
The Eiffel Tower, located in Paris, France, is one of the most iconic landmarks in the world. It was designed by Gustave Eiffel and completed in 1889. The tower stands at a height of 324 meters and was the tallest man-made structure in the world at the time of its completion.
'''
question = 'Who designed the Eiffel Tower?'
# Get the answer to the question
answer = get_answer(text, question)
print(f'The answer to the question is: {answer}')
# Output: The answer to the question is: Gustave Eiffel

在此脚本中,我们构建了一个 get_answer 函数,该函数接受文本和问题,对它们进行适当的标记,并利用预先训练的 BERT 模型从文本中提取答案。 它演示了 Hugging Face 的 Transformers 库的实际应用,以构建一个简单但功能强大的问答系统。 为了更好地掌握这些概念,建议使用 谷歌 Colab 笔记本.

结论

通过其广泛的开源工具、预先训练的模型和用户友好的管道,它使经验丰富的专业人士和新手能够以轻松和理解的方式深入探索广阔的人工智能世界。 此外,由于 Rust 的速度和安全特性,集成 Rust 的举措突显了 Hugging Face 致力于促进创新,同时确保人工智能应用的效率和安全性的承诺。 Hugging Face 的变革性工作不仅使高级人工智能工具的使用变得民主化,而且还为人工智能领域的学习和发展营造了一个协作环境,促进了人工智能触手可及的未来。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多