HuggingFace Transformer库学习

下载方式

方法一:通过镜像的方式下载:https://hf-mirror.com/

方法二:wget https://huggingface.co/bert-base-chinese/resolve/main/pytorch_model.bin

huggingface-cli download --token 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 --resume-download meta-llama/Llama-2-7b-chat-hf --local-dir Llama-2-7b-chat-hf

model = AutoModelForCausalLM.from_pretrained(model_path, low_cpu_mem_usage=True, **kwargs)

AutoModelForCausalLM:这是transformers库中的一个类,用于自动加载给定预训练检查点路径的因果语言模型(Causal Language Model,CLM)。因果语言模型是一种特殊的语言模型,它只考虑左侧的上下文来预测下一个词。这与双向模型(如BERT)不同,双向模型在预测时会考虑左右两侧的上下文。常见的因果语言模型有GPT系列。

from_pretrained(model_path, low_cpu_mem_usage=True, **kwargs)

from_pretrained是一个类方法,用于从预训练的检查点加载模型。
model_path:这是预训练模型的路径或模型的名称。例如,它可以是gpt2(表示要从Hugging Face的model hub下载GPT-2模型)或一个本地文件路径(如./my_pretrained_model/)。
low_cpu_mem_usage=True:这是一个可选参数,当设置为True时,它会尝试在加载模型时优化CPU内存使用。这对于在资源有限的系统上加载大模型特别有用。
**kwargs:这是其他可选的关键字参数,它们会被传递给from_pretrained方法。这些参数可以用来覆盖模型的默认配置或指定其他加载选项。

总之,这段代码的目的是从给定的model_path加载一个预训练的因果语言模型,并尝试优化CPU内存使用。加载后,你可以使用这个模型进行各种任务,如文本生成、下一个词预测等。


from transformers import AutoTokenizer, AutoModelForCausalLM, AutoModel

tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name, use_fast=False)
# 对句子进行分词和编码
sentence = '这是一个句子'
encoded_input = tokenizer(sentence, return_tensors='pt')
# encoded_input {'input_ids': tensor([[49406,   164,   123,   503, 42891,   363, 19759,   478, 19759,   359, 34517,   354, 35751,   494, 49407]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

在Hugging Face的Transformers库中,tokenizer通常会返回一个字典,其中至少包含input_ids和attention_mask两个键。input_ids是一个整数张量,表示每个单词或子词在词汇表中的索引;attention_mask是一个布尔张量,用于指示哪些位置有实际的单词(对应于input_ids),哪些位置是填充的(用于使输入长度一致)。

这样编码后的encoded_input就可以直接传递给一个预训练的深度学习模型(如BERT、GPT等)进行进一步的处理或训练了。


GPT2 API详解

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")

prompt = "GPT2 is a model developed by OpenAI."

input_ids = tokenizer(prompt, return_tensors="pt").input_ids

gen_tokens = model.generate(
    input_ids,
    do_sample=True,
    temperature=0.9,
    max_length=100,
)
gen_text = tokenizer.batch_decode(gen_tokens)[0]

model.generate() 是一个常用的函数,用于在给定的输入基础上生成一系列的token(即文本的基本单元)。下面我会逐一解释代码中的各个参数:

input_ids: 这是一个输入参数,通常是一个tensor,包含了用于启动文本生成的初始token的ID。这些ID对应于模型词汇表中的特定单词或符号。

do_sample: 这是一个布尔值,决定了生成文本时是否使用采样。如果 do_sample 设置为 True,则模型会在每一步根据当前的概率分布随机选择一个token,而不是总是选择概率最高的那个。这有助于增加生成文本的多样性和随机性。

temperature: 这是一个浮点数,用于控制采样过程中的“温度”。较高的温度值会使概率分布更加平滑,从而增加生成文本的随机性和创造性;而较低的温度值则会使概率分布更加尖锐,模型更可能选择概率最高的token,导致生成的文本更加确定和可预测。在这个例子中,温度被设置为0.9,这是一个相对适中的值。

max_length: 这是一个整数,指定了生成文本的最大长度(以token数量计)。在这个例子中,生成文本的长度被限制为最多100个token。这有助于防止模型无休止地生成文本,也可能有助于控制计算资源和时间的使用。


从头开始训练一个因果模型-具备代码补全功能的模型

  • Gathering the data
    Using a GitHub dump of about 180 GB containing roughly 20 million Python files called codeparrot。我们将使用流式传输函数对网络数据进行filter。
  • Preparing the dataset
    首先需要进行tokenizer,我们将上下文大小固定为128个token,而不是分别在GPT-2或GPT-3中使用1024或2048。
    在这里插入图片描述
from transformers import AutoTokenizer

context_length = 128
tokenizer = AutoTokenizer.from_pretrained("huggingface-course/code-search-net-tokenizer")

outputs = tokenizer(
    raw_datasets["train"][:2]["content"],
    truncation=True,
    max_length=context_length,
    return_overflowing_tokens=True,
    return_length=True,
)

print(f"Input IDs length: {len(outputs['input_ids'])}")
print(f"Input chunk lengths: {(outputs['length'])}")
print(f"Chunk mapping: {outputs['overflow_to_sample_mapping']}")
Input IDs length: 34
Input chunk lengths: [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 117, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 41]
Chunk mapping: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

Masked Language Modeling (MLM): 这是BERT及其衍生模型所使用的预训练方法。在这种方法中,模型会尝试预测输入文本中被掩盖(masked)的部分单词。例如,给定句子“我喜欢吃苹果”,它可能会被转换为“我[MASK]吃苹果”,然后模型的任务就是预测[MASK]位置的单词。

Causal Language Modeling (CLM): 这是GPT系列模型所使用的预训练方法。在这种方法中,模型会尝试预测给定文本序列中的下一个单词。例如,给定句子“我喜欢吃”,模型的任务就是预测接下来的单词(如“苹果”)。


CLIP API详解
CLIP是一个多模态视觉和语言模型。它可以用于图像-文本相似性和零样本图像分类。CLIP使用类似ViT的转换器来获得视觉特征,并使用因果语言模型来获得文本特征。然后,文本和视觉特征都被投影到具有相同维度的潜在空间中。投影图像和文本特征之间的点积然后被用作类似的分数。

为了将图像feed到Transformer编码器,每个图像被分割成一系列固定大小的non-overlapping patches,然后线性嵌入。添加[CLS]标记以用作整个图像的表示。作者还添加了绝对位置嵌入,并将生成的矢量序列提供给标准的Transformer编码器。CLIPImageProcessor可用于调整(或重新缩放)模型的图像大小和规格化图像。

  • 27
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值