1--AutoTokenizer的使用
AutoTokenizer() 常用于分词,其可调用现成的模型来对输入句子进行分词。
1-1--简单Demo
测试代码:
# 分词器测试Demo
from transformers import AutoTokenizerif __name__ == "__main__":checkpoint = "distilbert-base-uncased-finetuned-sst-2-english" # 使用该模型tokenlizer = AutoTokenizer.from_pretrained(checkpoint) # 加载该模型对应的分词器raw_input = ["I love kobe bryant.","Me too."]inputs = tokenlizer(raw_input, padding = True, return_tensors = "pt") # padding并返回pytorch版本的tensorprint("After tokenlizer: \n", inputs) # 打印分词后的结果str1 = tokenlizer.decode(inputs['input_ids'][0]) # 将词ID恢复print("str1: \n", str1)print("All done!")
输出结果:
After tokenlizer:
{
'input_ids': tensor([[101, 1045, 2293, 24113, 12471, 1012, 102],[101, 2033, 2205, 1012, 102, 0, 0]]),
'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 0, 0]])
}
str1: [CLS] i love kobe bryant. [SEP]
分析:
上述代码将输入的句子进行分词,并将每一个词利用一个 ID 进行映射;例如上述代码中,101 对应 [CLS],1045 对应 I,2293 对应 love,24113 对应 kobe,12471 对应 bryant,102 对应 [SEP];
input_ids 存储了每一个句子分词后对应的 ID,0 表示 padding 的词;由于上面测试代码设置了padding,因此会将每一个句子自动padding为最长句子的长度,padding的词用 0 来表示。
attention_mask 标记了哪些词是真正有意义的,只有为 1 的词才会参与后续的 attention 等计算。
利用 decode 可以将词 ID 重新解码为句子。