tokenizer.encode_plus、tokenizer.decode是 Hugging Face 中常用的 tokenizer 方法

示例代码:

  def _apply_chunking(self, corpus, tokenizer):
      chunked_corpus = dict()
      for k, v in corpus.items():
          text = f"{v['title']} {v['text']}" if 'title' in v else v['text']
          current_doc = []
          chunk_annotations = self.chunker.chunk(
              text,
              tokenizer,
              chunking_strategy=self.chunking_strategy,
              **self.chunking_args,
          )
          tokens = tokenizer.encode_plus(text, add_special_tokens=False)
          for start_token_idx, end_token_idx in chunk_annotations:
              text_chunk = tokenizer.decode(
                  tokens.encodings[0].ids[start_token_idx:end_token_idx]
              )
              current_doc.append({'text': text_chunk})
          chunked_corpus[k] = current_doc
      return chunked_corpus
  • tokenizer.encode_plus(...)
  • tokenizer.decode(...)

这两个方法是 Hugging Face 中常用的 tokenizer 方法,主要用于:

  • 把一句自然语言转成模型能理解的“数字 token”(encode)
  • 把模型用的“数字 token”还原成人话文本(decode)

✅ 1. tokenizer.encode_plus(...) 是干什么的?

📌 通俗理解:

就像你把一句话翻译成大模型能懂的“机器语言”(一串数字)——每个词或字符都变成一个编号。

🧠 它返回一个字典,包含以下重要内容:

{
  'input_ids': [...],        # 把文字转成的 token id(核心)
  'attention_mask': [...],   # 哪些 token 是内容,哪些是 padding(可选)
  'token_type_ids': [...],   # 哪些是句子A,哪些是句子B(可选)
  'encodings': [...]         # 每个 token 的详细编码信息(比如原文中的位置等)
}

🔍 举个例子:

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

text = "北京欢迎你"
output = tokenizer.encode_plus(text, add_special_tokens=False)

你会得到:

{
  'input_ids': [1266, 6206, 872],
  'token_type_ids': [0, 0, 0],
  'attention_mask': [1, 1, 1],
  'encodings': [...]  # 里面记录的是“原文中每个 token 的位置”
}

含义是:

token中文token id
12661266
62066206
872欢迎你872

注意:tokenizer.encode_plus(..., add_special_tokens=False) 表示不加 [CLS][SEP] 等特殊符号


✅ 2. tokenizer.decode(...) 是干什么的?

📌 通俗理解:

把模型语言(数字 token id)“翻译回人类语言”,也就是还原成可读文本。

🔍 举个例子:

ids = [1266, 6206, 872]
text = tokenizer.decode(ids)
print(text)

结果是:

北京欢迎你

所以,decode() 是用来“还原文本”的,和 encode_plus 是反操作。


🧩 二者在 chunk 切片中怎么配合?

我们来看一个“切 chunk”时怎么用它们配合的片段:

tokens = tokenizer.encode_plus(text, add_special_tokens=False)
for start, end in chunk_annotations:
    ids = tokens.encodings[0].ids[start:end]
    chunk_text = tokenizer.decode(ids)
  1. encode_plus(...):把整篇文章变成 token ID
  2. chunk_annotations:用索引表示一个 chunk 的 token 范围
  3. [start:end] 取出一个 chunk 的 token id
  4. decode(...):把这一段 token 还原为文本,成为一个 chunk 文本

✅ 总结一句话

方法通俗解释举例
encode_plus把“人话”转成“大模型能懂的数字 ID”“北京欢迎你” → [1266, 6206, 872]
decode把“大模型的数字 ID”转成人类能读懂的文本[1266, 6206, 872] → “北京欢迎你”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值