tokenizer添加token的详细demo


前言

我们在Hugging Face不同模型对应的tokenizer映射字典,不存在某些专有词汇,我们需要新增对应的token,以便我们使用对应模型处理不存在专业词汇。为此,本篇文章针对此问题,记录如何为tokenizer添加对应词汇,便于模型转换。


一、tokenizer添加token

我选择llava对应小羊驼模型的tokenizer,我将其读取为tokenizer,在保存原有tokenizer,随后使用tokenizer.add_tokens添加token,也将其保存,并加载添加后的tokenizer,其详细代码如下:

import transformers

tokenizer = transformers.AutoTokenizer.from_pretrained(
    '/home/llava_v1.5_lora/vicuna-13b-v1.5',
    cache_dir=None,
    model_max_length=4096,
    padding_side="right",
    use_fast=False,
)  # 加载语言模型的tokenizer



vocab=["你好", "我完成加载","ok"]

if __name__ == '__main__':
    vicuna_dict = tokenizer.get_vocab()

    token_vocab = [tokenizer.tokenize(voc) for voc in vocab]

    tokenizer.save_pretrained("llava_vicuna_token_ori")  # 保存原有的tokenizer

    new_tokens = ["你好", "我完成加载"]

    # 添加新 token
    tokenizer.add_tokens(new_tokens)

    # 确保 tokenizer 重新构建词汇表
    tokenizer.save_pretrained("llava_vicuna_token")  # 保存更新后的tokenizer

    tokenizer_ll = transformers.AutoTokenizer.from_pretrained('llava_vicuna_token',
                                                              cache_dir=None,
                                                              model_max_length=4096,
                                                              padding_side="right",
                                                              use_fast=False)  # 加载语言模型的tokenizer

    vicuna_dict_ll = tokenizer_ll.get_vocab()

    token_vocab_ll = [tokenizer_ll.tokenize(voc) for voc in vocab]

二、结果比较

最终我们发现添加token后文件夹多了一个added_tokens.json文件,该文件夹就是我们添加内容。
added_tokens.json内容如下:

{
   
  "你好": 32000,
  "我完成加载": 32001
}

文件结果如下:
在这里插入图片描述

三、added_tokens.json文件修改
既然文件差异是多了一个字典added_tokens.json文件,那么我想直接把一些字典添加到该文件夹中,是否有效?答案是:肯定的。

1、手动添加token

那么added_tokens.json文件内容如下:

{
   
  "你好": 32000,
  "我完成加载": 32001,
  "太棒了": 32002
}

2、代码验证添加token

使用代码查看如下:

new_tokens = ["你好", "我完成加载","太棒了"]

tokenizer_ll = transformers.AutoTokenizer.from_pretrained('llava_vicuna_token',
                                                              cache_dir=None,
                                                              model_max_length=4096,
                                                              padding_side="right",
                                                              use_fast=False)  # 加载语言模型的tokenizer

    tokens=[tokenizer_ll.tokenize(t) for t in new_tokens]
    print(tokens)
    ids = [tokenizer_ll.convert_tokens_to_ids(t) for t in tokens]
    print("tokens Ids:\n", ids)

3、结果显示

显示结果如下:

在这里插入图片描述

相关推荐

  1. token详解与使用

    2024-02-21 21:38:02       20 阅读
  2. <span style='color:red;'>tokenize</span>

    tokenize

    2024-02-21 21:38:02      9 阅读
  3. Glide添加token和userId

    2024-02-21 21:38:02       12 阅读
  4. Auto tokenizer和Bert tokenizer区别

    2024-02-21 21:38:02       42 阅读
  5. 训练trocrtokenizer

    2024-02-21 21:38:02       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-21 21:38:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-21 21:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-21 21:38:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-21 21:38:02       20 阅读

热门阅读

  1. Scrapy里面的Xpath解析器问题

    2024-02-21 21:38:02       27 阅读
  2. 手机NFC录入门禁数据,实现手机开门

    2024-02-21 21:38:02       29 阅读
  3. STL简介

    2024-02-21 21:38:02       25 阅读
  4. spark-sql

    2024-02-21 21:38:02       24 阅读
  5. LeetCode209长度最小子数组

    2024-02-21 21:38:02       34 阅读
  6. 线阵相机参数介绍---变频参数控制

    2024-02-21 21:38:02       26 阅读
  7. 08MARL深度强化学习——模型种类

    2024-02-21 21:38:02       23 阅读
  8. CSP-J 2023 复赛第2题:公路 ← 贪心算法

    2024-02-21 21:38:02       31 阅读