【大模型】如何为tokenizer添加额外的tokens

为了为tokenizer 指定额外的tokens,可以使用tokenizer 的add_special_tokensadd_tokens方法。该方法允许我们向tokenizator添加自定义的tokens,以便在文本处理中使用。

下面是一些关于如何为tokenizer 指定额外的tokens的步骤:

1. 初始化tokenizer

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("model-name")

在这里,你需要将"model-name"替换为你想要使用的预训练模型的名称,例如"bert-base-uncased"。

2. 检查现有特殊符号

首先,你应该查看 tokenizer 当前配置的特殊符号,以确保不会重复添加相同的符号。

# 打印当前特殊符号
print(tokenizer.special_tokens_map)

3. 添加新的特殊符号

如果你发现 换行符 \n 或其他你需要的特殊符号不在当前的特殊符号列表中,你可以使用 add_special_tokens 方法来添加它们。

special_tokens_dict = {'additional_special_tokens': ['\n']}
tokenizer.add_special_tokens(special_tokens_dict)

在这里,你可以将 special_tokens_dict 替换为你想要添加的自定义tokens的列表,可以根据需要添加任意数量的tokens。

4. 调整模型

如果你打算使用一个已经加载的模型,并且这个模型是与上述 tokenizer 配对使用的,那么你也需要扩展模型的嵌入层(embedding layer)以适应新添加的特殊符号。

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained('model-name')

# 扩展模型的嵌入层
model.resize_token_embeddings(len(tokenizer))

5. 验证添加

最后,你可以通过编码一些包含换行符的文本并解码回来,来验证换行符是否被正确识别为特殊符号。

test_text = "This is a line.\nThis is another line."
encoded_text = tokenizer.encode(test_text, return_tensors='pt')
decoded_text = tokenizer.decode(encoded_text[0])
print(decoded_text)

示例代码

这是一个示例代码,展示了如何为tokenizator指定额外的tokens,这里以换行符 \n 为例:

from transformers import AutoTokenizer
from transformers import AutoModelForCausalLM


tokenizer = AutoTokenizer.from_pretrained("model-name")

special_tokens_dict = {'additional_special_tokens': ['\n']}
tokenizer.add_special_tokens(special_tokens_dict)

model = AutoModelForCausalLM.from_pretrained('model-name')
model.resize_token_embeddings(len(tokenizer))  # 扩展模型的嵌入层

test_text = "This is a line.\nThis is another line."
encoded_text = tokenizer.encode(test_text, return_tensors='pt')
decoded_text = tokenizer.decode(encoded_text[0])
print(decoded_text)

参考资料

### 大模型语料库问答系统的实现技术 大模型语料库问答系统主要依赖于先进的深度学习架构来处理复杂的自然语言理解和生成任务。其中,Transformer 架构因其高效的注意力机制而成为构建此类系统的核心组件之一[^1]。 #### 变革性的 RAG 方法论 为了提升问答系统的准确性与相关度,检索增强生成(RAG)作为一种创新的技术路径被广泛应用。该方法通过融合检索技术和生成模型的优势,在面对开放领域问题时表现出色。具体而言,它先利用检索模块从庞大的外部资源集合中挑选出最有可能提供有用信息的部分;随后,这些精选的信息片段会被传递给生成器部分,从而帮助其产出更为精确且贴合实际需求的答案[^2]。 ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq") retriever = RagRetriever.from_pretrained("facebook/rag-token-nq", index_name="exact", use_dummy_dataset=True) model = RagSequenceForGeneration.from_pretrained("facebook/rag-token-nq", retriever=retriever) input_dict = tokenizer.prepare_seq2seq_batch( ["What is the capital of France?"], return_tensors="pt" ) generated = model.generate(input_ids=input_dict["input_ids"]) print(tokenizer.batch_decode(generated, skip_special_tokens=True)) ``` 这段代码展示了如何使用预训练好的 `RagToken` 模型来进行简单的提问并获取答案的过程。这里选择了 Facebook 提供的一个基于 Wikipedia 的版本作为例子说明。 ### 构建方法概述 当着手建立自己的大模型语料库问答解决方案时,开发者通常会遵循以下几个方面: - **数据准备**:收集高质量的数据集对于任何机器学习项目都是至关重要的。这不仅限于文本本身还包括元数据标签等辅助材料。 - **模型选择与微调**:根据应用场景的不同可以选择不同的基础模型,并对其进行特定领域的适应性调整以更好地服务于目标业务逻辑。 - **集成检索功能**:为了让最终产品具备更强的知识覆盖能力,往往还需要引入额外的索引结构或是搜索引擎服务以便快速定位潜在有用的参考资料。 - **持续优化迭代**:随着新资料不断涌现以及用户反馈积累下来的经验教训,定期更新算法参数乃至整个框架设计也是保持竞争力不可或缺的一环。 ### 现实世界中的应用实例 目前市场上已经存在多个成功实施了上述理念的产品和服务平台。例如 Google 的 Meena 和 Microsoft 的 QnA Maker 都是在各自擅长的方向上实现了高度自动化的智能客服体验。另外像阿里云推出的通义千问也采用了类似的原理和技术栈为客户提供了强大的技术支持方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值