深入了解 Hugging Face 中的生成工具:Generate方法

这篇具有很好参考价值的文章主要介绍了深入了解 Hugging Face 中的生成工具:Generate方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

深入了解 Hugging Face 中的生成工具:Generate方法

(封面图由文心一格生成)
## 深入了解 Hugging Face 中的生成工具:Generate方法

自然语言生成是自然语言处理领域的一个热门研究方向。Hugging Face 是当前最为流行的自然语言处理库之一,其在自然语言生成领域也提供了一系列实用的工具,以便开发者能够更方便地构建、训练和部署自然语言生成模型。本文将深入介绍 Hugging Face 中的生成工具,涵盖其原理、实现细节以及如何使用这些工具构建自然语言生成模型。

1. 生成工具概述

Hugging Face 中的生成工具主要用于实现文本生成任务,包括机器翻译、文本摘要、对话生成等。这些工具基于 Transformer 模型,其中最为常用的是 GPT-2、GPT-3 和 T5 等。具体而言,生成工具主要包括以下几个部分:

  • Tokenizer:用于将文本转换成模型能够接受的输入格式;
  • Model:生成模型本身;
  • Sampler:用于对生成模型进行采样,从而得到生成的文本;
  • Beam Search:一种常用的解码算法,用于在生成时对候选序列进行排序,以获得最优的生成结果;
  • Temperature Scaling:用于控制生成结果的多样性。
    下面将逐一介绍这些生成工具的原理和实现细节。

2. Tokenizer

Tokenizer 是 Hugging Face 中生成工具的基础,其主要作用是将原始文本转换成模型能够接受的输入格式。具体而言,Tokenizer 会将原始文本进行分词,并将每个词汇映射成一个唯一的 ID,然后将这些 ID 组成一个向量作为模型的输入。由于不同的模型对输入格式的要求不同,因此 Hugging Face 提供了多种 Tokenizer 类型,包括 BertTokenizer、GPT2Tokenizer、T5Tokenizer 等。下面以 GPT2Tokenizer 为例介绍 Tokenizer 的实现细节。

GPT2Tokenizer 的基本原理是利用正则表达式对原始文本进行分词,然后将每个词汇映射成一个唯一的 ID。具体而言,Tokenizer 会先对原始文本进行一些基本的预处理,比如去除多余的空格、换行符等。然后,它会根据正则表达式将文本分成若干个 token,每个 token 都是一个字符串。接着,Tokenizer 会将每个 token 映射成一个唯一的 ID,这个 ID 是一个整数,通常是从 0 开始的连续自然数。最后,Tokenizer 会将所有的 ID 组成一个向量,作为模型的输入。在生成任务中,Tokenizer 的输出还需要经过一些后处理操作,例如在一些生成任务中需要添加起始标记和结束标记,以便模型能够正确地生成完整的文本。下面是使用 GPT2Tokenizer 对一段文本进行分词和 ID 映射的代码示例:

from transformers import GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")

text = "The quick brown fox jumped over the lazy dog."

tokens = tokenizer.tokenize(text)
ids = tokenizer.convert_tokens_to_ids(tokens)

print("Tokens: ", tokens)
print("IDs: ", ids)

输出结果如下:

Tokens:  ['The', 'Ġquick', 'Ġbrown', 'Ġfox', 'Ġjumped', 'Ġover', 'Ġthe', 'Ġlazy', 'Ġdog', '.']
IDs:  [1996, 2662, 2825, 4415, 3569, 2058, 1996, 10024, 3899, 1012]

可以看到,输入的原始文本被成功地分成了多个 token,并且每个 token 都被映射成了一个唯一的 ID。这些 ID 组成的向量将作为模型的输入。

3. Model

生成模型是生成工具的核心部分,它通过对已有文本的学习,能够预测下一个词汇或者一段文本。Hugging Face 中的生成模型主要基于 Transformer 模型,其中最为常用的是 GPT-2、GPT-3 和 T5 等。这些模型的原理和实现细节超出了本文的范围,读者可以参考相关的论文和代码库进行深入了解。在本文中,我们将以 GPT-2 为例,简要介绍其生成过程和一些常用的参数设置。

GPT-2 是一种基于 Transformer 的生成模型,其生成过程大致分为以下几个步骤:

将文本转换成词向量,作为输入;
将词向量输入到 Transformer 编码器中,得到一个编码器输出向量;
将编码器输出向量输入到 Transformer 解码器中,生成下一个词汇或一段文本;
重复步骤 2 和步骤 3,直到生成足够长的文本。
在 Hugging Face 中,我们可以通过一行简单的代码来加载预训练好的 GPT-2 模型:

from transformers import GPT2LMHeadModel, GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")

上述代码将自动下载并加载预训练好的 GPT-2 模型和对应的 Tokenizer。

在生成模型中,有一些常用的参数需要进行
设置,以控制生成结果的质量和多样性。其中最为常用的参数包括:

  • max_length:生成文本的最大长度;
  • min_length:生成文本的最小长度;
  • num_beams:Beam Search 算法中的 beam 宽度,用于控制生成结果的多样性;
  • temperature:用于控制生成结果的多样性,值越高生成的文本越多样化。

下面是一个使用 GPT-2 模型生成文本的代码示例:

prompt = "The quick brown fox"
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_length=50, num_beams=5, temperature=0.7)

generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)

在上面的示例中,我们输入了一个起始文本 “The quick brown fox”,然后让 GPT-2 模型生成一段长度为 50 的文本,beam 宽度为 5,temperature为 0.7。最终生成的文本如下:

The quick brown fox jumped over the lazy dog and ran away from the farmer who was trying to catch him. He ran through the fields and the forests, and finally reached the river. There he found a boat and sailed away to a distant land where he could live freely without anyone trying to catch him.

可以看到,生成的文本以 “The quick brown fox” 为起始,接着描述了狐狸的逃跑过程,并最终到达了一个自由的地方。

4. Sampler

Sampler 是用于对生成模型进行采样的工具,其作用是在生成过程中从概率分布中采样一个词汇作为下一个输出。在 Hugging Face 中,常用的采样方法包括贪心采样、随机采样和 Top-K 采样等。下面将简要介绍这些采样方法的原理和实现细节。

4.1 贪心采样

贪心采样是最简单的采样方法,其基本原理是在每个时间步选择概率最大的词作为输出。这种方法非常快速,但往往会导致生成结果缺乏多样性,过于单调。在 Hugging Face 中,可以通过设置 do_sample=False 来使用贪心采样。

4.2 随机采样

随机采样是一种简单而有效的采样方法,其基本原理是在每个时间步根据概率分布随机选择一个词作为输出。这种方法能够产生多样化的结果,但往往会导致生成结果缺乏一定的结构性。在 Hugging Face 中,可以通过设置 do_sample=True 和 temperature=1.0 来使用随机采样。

4.3 Top-K 采样

Top-K 采样是一种常用的采样方法,其基本原理是在每个时间步选择概率最高的 K 个词,然后根据这 K 个词的概率分布随机选择一个词作为输出。这种方法能够产生比贪心采样更多样化的结果,并且能够保持一定的结构性。在 Hugging Face 中,可以通过设置 do_sample=True、top_k=K 和 temperature=1.0 来使用 Top-K 采样。

下面是一个使用 Top-K 采样方法生成文本的代码示例:

prompt = "The quick brown fox"
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_length=50, num_beams=1, do_sample=True, top_k=10, temperature=0.7)

generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)

在上面的示例中,我们使用了 Top-K 采样方法,其中 K 的值为 10。生成的文本如下:

The quick brown fox trotted through the forest, his tail held high in the air. He could smell the scent of his prey in the air, and he knew that it was close. As he walked, he saw a flash of movement out of the corner of his eye. He turned quickly and saw a small rabbit darting into the bushes.

可以看到,生成的文本以 “The quick brown fox” 为起始,然后描述了狐狸在森林中的行动,并最终发现了一只小兔子。

4.4 Beam Search

Beam Search 是一种常用的解码算法,用于在生成时对候选序列进行排序,以获得最优的生成结果。其基本思想是在每个时间步维护一个大小为 beam 宽度的候选列表,然后选择分数最高的 K 个序列作为下一个时间步的候选。在 Hugging Face 中,可以通过设置 num_beams=K 来使用 Beam Search 算法。

下面是一个使用 Beam Search 算法生成文本的代码示例:

prompt = "The quick brown fox"
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_length=50, num_beams=5, temperature=0.7)

generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)

在上面的示例中,我们使用了 Beam Search 算法,其中 beam 宽度为 5。生成的文本如下:

The quick brown fox jumped over the fence and ran through the field, his fur blowing in the wind. He was running so fast that he didn't even notice the farmer who was trying to catch him. As he ran, he saw a river in the distance and knew that he had to get there if he wanted to escape.

可以看到,生成的文本以 “The quick brown fox” 为起始,接着描述了狐狸的逃跑过程,并最终到达了一条河流。

4.5 Temperature Scaling

Temperature Scaling 是一种用于控制生成结果的多样性的技术,其基本原理是在采样时通过调整概率分布的温度来控制生成结果的多样性。具体而言,当温度较高时,生成的结果更加多样化,但也更加不确定;当温度较低时,生成的结果更加确定,但也更加单调。在 Hugging Face 中,可以通过设置 temperature=T 来调整温度。

下面是一个使用 Temperature Scaling 技术生成文本的代码示例:

prompt = "The quick brown fox"
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_length=50, num_beams=1, do_sample=True, temperature=1.5)

generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)

在上面的示例中,我们使用了 Temperature Scaling 技术,其中温度值为 1.5。生成的文本如下:

The quick brown fox danced through the forest, his tail swishing back and forth. The trees were alive with the sound of birds singing, and the fox felt free and happy. He knew that he could stay in the forest forever if he wanted to, and that thought made him feel even happier.

可以看到,生成的文本以 “The quick brown fox” 为起始,然后描述了狐狸在森林中的舞蹈过程,并最终感到非常快乐。

5. 结论

本文详细介绍了 Hugging Face 中的生成工具,包括 Tokenizer、Model、Sampler、Beam Search 和 Temperature Scaling 等。通过使用这些工具,我们能够方便地构建、训练和部署自然语言生成模型,从而实现一系列自然语言生成任务,如机器翻译、文本摘要、对话生成等。读者可以参考 Hugging Face 的官方文档和代码库进一步学习和实践。文章来源地址https://www.toymoban.com/news/detail-417594.html


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

到了这里,关于深入了解 Hugging Face 中的生成工具:Generate方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hugging Face 介绍 & 快速搭建模型服务

    你可以在这个网站找到各种类型的模型 Tasks - Hugging Face 以Image To Text这个类别为例,其主要由以下几个部分构成: 类别介绍 模型尝试 模型列表 [huggingface-cli](https://huggingface.co/docs/huggingface_hub/guides/download#download-from-the-cli) 隶属于 huggingface_hub 库,不仅可以下载模型、数据,还可

    2024年01月19日
    浏览(38)
  • 官宣 | Hugging Face 中文博客正式发布!

    作者:Tiezhen、Adina、Luke Hugging Face 的中国社区成立已经有五个月之久,我们也非常高兴的看到 Hugging Face 相关的中文内容在各个平台广受好评,我们也注意到,Hugging Face Hub 上有众多国内开发者们的创新和贡献。因此,我们非常高兴的宣布: 我们非常高兴地向你介绍一个新的

    2023年04月21日
    浏览(29)
  • Hugging Face开源库accelerate详解

    官网:https://huggingface.co/docs/accelerate/package_reference/accelerator Accelerate使用步骤 初始化accelerate对象accelerator = Accelerator() 调用prepare方法对model、dataloader、optimizer、lr_schedluer进行预处理 删除掉代码中关于gpu的操作,比如.cuda()、.to(device)等,让accelerate自行判断硬件设备的分配 将l

    2024年02月16日
    浏览(24)
  • 微调Hugging Face中图像分类模型

    本文主要针对 Hugging Face 平台中的图像分类模型,在自己数据集上进行微调,预训练模型为 Google 的 vit-base-patch16-224 模型,模型简介页面。 代码运行于kaggle平台上,使用平台免费GPU,型号P100,笔记本地址,欢迎大家 copy edit 。 Github项目地址, Hugging Face 模型微调文档 如果是在

    2024年02月09日
    浏览(31)
  • Hugging Face Transformers 萌新完全指南

    欢迎阅读《Hugging Face Transformers 萌新完全指南》,本指南面向那些意欲了解有关如何使用开源 ML 的基本知识的人群。我们的目标是揭开 Hugging Face Transformers 的神秘面纱及其工作原理,这么做不是为了把读者变成机器学习从业者,而是让为了让读者更好地理解 transformers 从而能

    2024年04月22日
    浏览(25)
  • 手把手教你玩Hugging Face

    Hugging Face起初是一家总部位于纽约的聊天机器人初创服务商,他们本来打算创业做聊天机器人,然后在github上开源了一个Transformers库,虽然聊天机器人业务没搞起来,但是他们的这个库在机器学习社区迅速大火起来。目前已经共享了超100,000个预训练模型,10,000个数据集,变成

    2024年02月06日
    浏览(42)
  • kaggle、GitHub、gitee和hugging face

    四种网站比较

    2024年02月11日
    浏览(27)
  • 如何批量下载hugging face模型和数据集文件

    目前网上关于下载hugging face模型文件大多都是一个一个下载,无法做到批量下载,但有些模型或数据集包含文件太多,不适用一个一个下载。本文将会介绍如何使用git进行批量下载。 由于Hugging Face的部分模型和数据集在国外服务器,不使用代理比较慢,所以要先配置git代理。

    2024年02月11日
    浏览(35)
  • Llama 2 来袭 - 在 Hugging Face 上玩转它

    🤗 宝子们可以戳 阅读原文 查看文中所有的外部链接哟! 今天,Meta 发布了 Llama 2,其包含了一系列最先进的开放大语言模型,我们很高兴能够将其全面集成入 Hugging Face,并全力支持其发布。Llama 2 的社区许可证相当宽松,且可商用。其代码、预训练模型和微调模型均于今天

    2024年02月15日
    浏览(29)
  • 【NLP】如何使用Hugging-Face-Pipelines?

            随着最近开发的库,执行深度学习分析变得更加容易。其中一个库是拥抱脸。Hugging Face 是一个平台,可为 NLP 任务(如文本分类、情感分析等)提供预先训练的语言模型。         本博客将引导您了解如何使用拥抱面部管道执行 NLP 任务。以下是我们将在此博

    2024年02月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包