当前位置:   article > 正文

【学习总结】Python transformers AutoTokenizer encode 出现的 101 和 102_python tokenizers cargo failed with code: 101

python tokenizers cargo failed with code: 101

1. 代码展示:

from transformers import AutoTokenizer, AutoModel

model_name = "bert-base-chinese"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

print(len(tokenizer.vocab.keys()))

sequence = "法国的首都是巴黎"
print(tokenizer.vocab["法"])
tokens = tokenizer.tokenize(sequence)
print(tokens)

token_ids = tokenizer.convert_tokens_to_ids(tokens)
print(token_ids)

token_ids_s2e = tokenizer.encode(sequence)
print(token_ids_s2e)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

输出结果:

21128
3791
['法', '国', '的', '首', '都', '是', '巴', '黎']
[3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944]
[101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102]
  • 1
  • 2
  • 3
  • 4
  • 5

token_ids_s2e 中多了 101 和 102

sequence1 = tokenizer.decode(token_ids)
print(sequence1)

sequence2 = tokenizer.decode(token_ids_s2e)
print(sequence2)
  • 1
  • 2
  • 3
  • 4
  • 5

输出结果:

法 国 的 首 都 是 巴 黎
[CLS] 法 国 的 首 都 是 巴 黎 [SEP]
  • 1
  • 2

101 代表 CLS,是文本的开头
102 代表 SEP,是文本的分隔符

2. 编解码多段文本

sequence_batch = ["法国的首都是巴黎","美国的首都是华盛顿特区" ]
token_ids_batch = tokenizer.encode(sequence_batch)
print(token_ids_batch)
sequence_batch = tokenizer.decode(token_ids_batch)
print(sequence_batch)
  • 1
  • 2
  • 3
  • 4
  • 5

输出结果:

[101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102, 5401, 1744, 4638, 7674, 6963, 3221, 1290, 4670, 7561, 4294, 1277, 102]
[CLS] 法 国 的 首 都 是 巴 黎 [SEP] 美 国 的 首 都 是 华 盛 顿 特 区 [SEP]
  • 1
  • 2

3. 实际操作

embedding_batch = tokenizer("法国的首都是巴黎","美国的首都是华盛顿特区")
print(embedding_batch)
  • 1
  • 2

输出:

{'input_ids': [101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102, 5401, 1744, 4638, 7674, 6963, 3221, 1290, 4670, 7561, 4294, 1277, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
  • 1

优化代码

for key, value in embedding_batch.items():
    print(f"{key}: {value}\n")
  • 1
  • 2

输出:

input_ids: [101, 3791, 1744, 4638, 7674, 6963, 3221, 2349, 7944, 102, 5401, 1744, 4638, 7674, 6963, 3221, 1290, 4670, 7561, 4294, 1277, 102]

token_type_ids: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

attention_mask: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  • 1
  • 2
  • 3
  • 4
  • 5

编码后返回结果是:

input_ids: token_ids
token_type_ids: token_id 归属的句子编号
attention_mask: 指示哪些token需要被关注(注意力机制)
  • 1
  • 2
  • 3

4. 查看词表

from itertools import islice

# 使用 islice 查看词表部分内容
for key, value in islice(tokenizer.vocab.items(), 30,40):
    print(f"{key}: {value}")
  • 1
  • 2
  • 3
  • 4
  • 5

输出结果:

: 1388: 6607
##禀: 17937: 7751
ing: 10139: 4002
##楼: 16574
##部: 20013
##针: 20208
##酥: 20046
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/662402
推荐阅读
相关标签
  

闽ICP备14008679号