接著前一天的部分繼續說,昨天的整個流程是把自然語言文本再轉到數字 ID,那當然我們也可以把數字 ID 轉回自然語言文本,這個動作稱為 Decoding。
final_input = [101, 7993, 170, 11303, 1200, 2443, 1110, 3014, 102]
decoded_string = tokenizer.decode(final_input)
print(decoded_string)
[CLS] Using a transformer network is simple [SEP]
[CLS]
和 [SEP]
就是特殊記號我們有使用過載入這個方法 from_pretrained(),現在要來說保存 save_pretrained() 函数用於保存已經訓練或微調過的模型、tokenizer 和配置文件,以便以後再次使用。
# 指定要保存的目錄路徑
save_directory = "my_fine_tuned_model"
# 使用 save_pretrained() 函數保存模型、分詞器和配置文件
tokenizer.save_pretrained(save_directory)
保存完成後,你將在指定目錄下看到分詞器文件,當然這個方法也可以使用在保存模型
這邊要順便補充一個就是除了可以使用 AutoTokenizer 這個類別之外,我們也可使用 BertTokenizer
from transformers import AutoTokenizer
# 換成
from transformers import BertTokenizer
(我們之後主要講 NER 所以呢我們這裡直接使用預訓練的 BERT 中文模型)
from transformers import AutoTokenizer
checkpoint = "bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
raw_inputs = [
"我好想要出去玩",
"今天天氣好熱,不適合出門",
]
inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="pt")
print(inputs)
最後來看一下張量的結果輸出什麼#這個張量就是模型的輸入
{
'input_ids': tensor([
[101, 2769, 1962, 2682, 6206, 1139, 1343, 4381, 102, 0, 0, 0, 0, 0],
[101, 791, 1921, 1921, 3706, 1962, 4229, 8024, 679, 6900, 1394, 1139, 7271, 102]]),
'token_type_ids': tensor([
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]),
'attention_mask': tensor([
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
}
輸出是一個包含三個鍵的字典
(可以提前設好 token_type_ids 加入到參數當中)
。(=不要理會那些多餘的填充)
。下一章要講 model