【AI大模型】Transformers大模型库(一):Tokenizer

目录

一、引言 

二、Tokenizer

2.1 概述

2.2 主要功能

2.3 代码示例

三、总结


 

一、引言 

 这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。

🤗 Transformers 提供了数以千计的预训练模型,支持 100 多种语言的文本分类、信息抽取、问答、摘要、翻译、文本生成。它的宗旨是让最先进的 NLP 技术人人易用。
🤗 Transformers 提供了便于快速下载和使用的API,让你可以把预训练模型用在给定文本、在你的数据集上微调然后通过 model hub 与社区共享。同时,每个定义的 Python 模块均完全独立,方便修改和快速研究实验。
🤗 Transformers 支持三个最热门的深度学习库: Jax, PyTorch 以及 TensorFlow — 并与之无缝整合。你可以直接使用一个框架训练你的模型然后用另一个加载和推理。

本文重点介绍Tokenizer类。

二、Tokenizer

2.1 概述

Tokenizer在自然语言处理(NLP)中是一个关键组件,它负责将文本字符串转换成模型可以处理的结构化数据形式,通常是将文本切分成“tokens”或单词、短语、子词等单位。这些tokens是模型理解文本的基础。Tokenizer的类型和复杂性可以根据任务需求而变化,从简单的基于空格的分割到更复杂的基于规则或机器学习的分词方法。

2.2 主要功能

1. **分词**:将句子拆分成单词或子词。例如,中文分词器会将“自然语言处理”拆分成“自然”、“语言”、“处理”,而英文Tokenizer可能使用Subword Tokenization如Byte-Pair Encoding (BPE)来处理罕见词。

2. **添加特殊标记**:在序列的开始和结束添加特殊标记,如BERT中的[CLS]和[SEP],用于特定任务的序列分类或区分输入片段。

3. **编码**:将tokens转换为数字ID,这些ID是模型的输入。每个token在词汇表中有一个唯一的ID。

4. **处理填充和截断**:为了确保输入序列的一致长度,Tokenizer可以对较短的序列进行填充,对较长的序列进行截断。

5. **生成Attention Mask**:在某些模型中,Tokenizer还会生成一个Attention Mask,指示哪些输入位置是实际的tokens(通常标记为1),哪些是填充的(标记为0)。

2.3 代码示例

使用示例(以Hugging Face的Transformers库为例): 

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
os.environ["TF_ENABLE_ONEDNN_OPTS"] = "0"

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

print("------------单句分词------------")

token = tokenizer.encode("我在北京的,互联网公司工作")

print(token)  #[101, 2769, 1762, 1266, 776, 4638, 117, 757, 5468, 5381, 1062, 1385, 2339, 868, 102]

print(tokenizer.decode(token))  #[CLS] 我 在 北 京 的, 互 联 网 公 司 工 作 [SEP]

print("------------多句分词------------")

batch_token1 = tokenizer(["我在,北京工作","想去外地看一看世界多么美好"],padding=True,return_tensors="pt")

print(batch_token1)
"""
{'input_ids': tensor([[ 101, 2769, 1762,  117, 1266,  776, 2339,  868,  102,    0,    0,    0,
            0,    0,    0],
        [ 101, 2682, 1343, 1912, 1765, 4692,  671, 4692,  686, 4518, 1914,  720,
         5401, 1962,  102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}
"""
print(batch_token1["input_ids"])
"""提取input_ids
tensor([[ 101, 2769, 1762,  117, 1266,  776, 2339,  868,  102,    0,    0,    0,
            0,    0,    0],
        [ 101, 2682, 1343, 1912, 1765, 4692,  671, 4692,  686, 4518, 1914,  720,
         5401, 1962,  102]])
"""

这个例子展示了如何使用BertTokenizer来处理文本,生成包括token input_ids、token_type_ids和attention mask在内的编码数据,这些数据可以直接用于BERT模型的输入。

三、总结

本文对使用transformers的BertTokenizer进行尝试,主要功能是将字、词转换为可以运算的数字ID编码,供后面的model层使用。

如果您还有时间,可以看看我的其他文章:

《AI—工程篇》

AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效

AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署

AI智能体研发之路-工程篇(三):大模型推理服务框架Ollama一键部署

AI智能体研发之路-工程篇(四):大模型推理服务框架Xinference一键部署

AI智能体研发之路-工程篇(五):大模型推理服务框架LocalAI一键部署

《AI-模型篇》

AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用

AI智能体研发之路-模型篇(二):DeepSeek-V2-Chat 训练与推理实战

AI智能体研发之路-模型篇(三):中文大模型开、闭源之争

AI智能体研发之路-模型篇(四):一文入门pytorch开发

AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比

AI智能体研发之路-模型篇(六):【机器学习】基于tensorflow实现你的第一个DNN网络

AI智能体研发之路-模型篇(七):【机器学习】基于YOLOv10实现你的第一个视觉AI大模型

AI智能体研发之路-模型篇(八):【机器学习】Qwen1.5-14B-Chat大模型训练与推理实战

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您好,LaMDA 是一种自然语言生成模型,它可以用来生成自然语言文本。您可以使用 Python 语言来编写 LaMDA 模型。 这是一个简单的示例,它使用 LaMDA 模型来生成自然语言文本: ``` import openai openai.api_key = "YOUR_API_KEY" model_engine = "text-davinci-002" prompt = "What is the weather like today?" completions = openai.Completion.create( engine=model_engine, prompt=prompt, max_tokens=1024, n=1, stop=None, temperature=0.5, ) message = completions.choices[0].text print(message) ``` 在这个示例中,我们使用 `openai.Completion.create()` 函数来生成自然语言文本。我们需要提供模型名称、提示文本、生成的文本的最大长度、生成的文本的数量、停止语句以及温度(用于控制生成的文本的多样性)。然后,我们可以使用 `completions.choices[0].text` 获取生成的文本。 希望这个示例能帮助您了解如何使用 Python 语言编写 LaMDA 模型。 ### 回答2: LaMDA (Language Model for Dialogue Applications) 是由 Google 开发的一种强大的自然语言对话模型。这个模型可以用 Python 来编写。 首先,需要安装 TensorFlow 和 transformers 。这两个都可以通过 pip 来安装。 LaMDA 模型可以通过使用 transformers 中的 GPT 模型来实现。首先,需要导入所需的: ```python from transformers import GPT2Tokenizer, GPT2LMHeadModel ``` 接下来,需要加载 GPT-2 预训练模型和对应的 tokenizer: ```python tokenizer = GPT2Tokenizer.from_pretrained("gpt2") model = GPT2LMHeadModel.from_pretrained("gpt2") ``` 接下来,可以定义一个函数,输入用户的问题,然后使用模型生成对应的回答: ```python def generate_response(question): input_ids = tokenizer.encode(question, return_tensors='pt') output = model.generate(input_ids, max_length=100) response = tokenizer.decode(output[0], skip_special_tokens=True) return response ``` 现在,可以使用该函数生成对应的回答了: ```python question = "你好" response = generate_response(question) print(response) ``` 以上就是使用 Python 编写 LaMDA 模型的简单示例。注意,这只是一个简单的示例,并不能完整展示 LaMDA 的所有功能和优势。实际使用时可能需要更复杂的逻辑和相应的数据集训练模型

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值