将扩充的中文 tokenizer 模型应用于自己的LLM模型上(embedding参数修改)

《手把手带你了解和实践扩充 LLaMA 大语言模型的 tokenizer 模型(实现中文token过程)》 中我们详细讲述了如何基于自己的数据对tokennizer模型进行训练调整。

在本文中,我们将继续讲述基于SentencePiece扩充LLaMa的词表,但是扩充了词表后的下一步该怎么操作呢?如何将新增的token在模型的embedding层和lm_head层初始化呢?

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_name = "../sentencepiece/llama2-7b-hf" # llama2模型的位置
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_name)

new_tokenizer = AutoTokenizer.from_pretrained("../sentencepiece/merged_tokenizer_hf_test") # 新训练的分词器的位置

我们加载完模型和分词器以及新增的分词器后,看一下模型的结构:

model
LlamaForCausalLM(
  (model): LlamaModel(
    (embed_tokens): Embedding(32000, 4096, padding_idx=0)
    (layers): ModuleList(
      (0-31): 32 x LlamaDecoderLayer(
        (self_attn): LlamaAttention(
          (q_proj): Linear(in_features=4096, out_features=4096, bias=False)
          (k_proj): Linear(in_features=4096, out_features=4096, bias=False)
          (v
### 中文分词器的使用方法和实现 #### 分词器简介 分词器(Tokenizer)是自然语言处理中的重要组件之一,用于将文本数据转换为机器可读的形式。具体而言,分词器负责将输入字符串分解成一系列有意义的单元——即tokens[^1]。 对于中文环境下的应用开发人员来说,选择合适的分词策略至关重要。不同于英语等西方文字体系可以直接基于空格进行简单的单词划分,在汉字组成的连续字符流中找到合理的边界是一项更具挑战性的任务。因此,针对汉语特点设计专门化的分词算法显得尤为必要[^3]。 #### 常见类型的中文分词方式 - **Word-Level (词语级别)** 这种模式下,整个词汇作为一个整体被识别出来并作为单个token返回给下游应用程序。例如,“中华人民共和国”会被视为单一实体而不是单独的字符序列。 - **Char-Level (字符级别)** 将每个独立的汉字当作最小单位来进行切割操作。“中国”的两个组成部分“中”、“国”,分别成为各自独立的输出项。 除了上述两种基本形式外,还有其他更为复杂的混合型方案可供选用,它们试图平衡精度与效率之间的关系,以适应不同应用场景的需求。 #### SentencePiece库的应用实例 SentencePiece是一种广泛应用于多语言场景下的高效分词解决方案,尤其适合处理像中文这样的表意文字系统。它不仅支持传统的基于规则的方法,还引入了统计学原理来优化性能表现。下面给出一段Python代码片段展示如何利用该工具完成基础配置以及实际调用过程: ```python import sentencepiece as spm # 训练新的SP模型 spm.SentencePieceTrainer.Train('--input=corpus.txt --model_prefix=m --vocab_size=8000') # 加载已训练好的模型文件 sp = spm.SentencePieceProcessor(model_file='m.model') text = "你好世界" encoded_text = sp.encode(text, out_type=str) print(encoded_text) ``` 此段脚本首先创建了一个自定义的语言模型`m.model`,接着加载这个预构建的对象,并对其传入的一句话进行了编码变换。最终得到的结果是以列表形式呈现出来的离散化表达向量[^2]。 #### 提升分词效果的小技巧 为了让分词结果更加贴近真实语境,有时还需要考虑加入额外的信息辅助判断。比如通过上下文感知机制增强对歧义情况的理解能力;或是借助外部资源如领域特定术语表帮助定位专有名词位置等等。另外值得注意的是,某些情况下适当放宽匹配条件反而有助于提升召回率,但这往往伴随着误报风险增加的问题,所以在实践中需权衡利弊做出合理抉择[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落难Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值