本節代碼將使用 transformers
庫加載預訓練的BERT模型和分詞器(Tokenizer),并處理文本輸入。
1.?加載預訓練模型和分詞器
from transformers import BertTokenizer, BertModelmodel_path = "/Users/azen/Desktop/llm/models/bert-base-chinese"tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertModel.from_pretrained(model_path)
-
BertTokenizer.from_pretrained(model_path)
:-
加載預訓練的BERT分詞器。
model_path
是預訓練模型的路徑或名稱。分詞器會將文本分割成BERT模型可以理解的標記(tokens)。
-
-
BertModel.from_pretrained(model_path)
:-
加載預訓練的BERT模型。
model_path
是預訓練模型的路徑或名稱。BERT模型可以用于多種自然語言處理任務,如文本分類、問答系統等。
-
2.?處理文本輸入
text = "my dog is cute, he likes playing"
inputs = tokenizer(text)
-
tokenizer(text)
:-
將輸入文本
text
轉換為BERT模型可以處理的格式。具體來說,tokenizer
會執行以下操作:-
分詞:將文本分割成標記(tokens)。
-
添加特殊標記:在文本的開頭添加
[CLS]
標記,在結尾添加[SEP]
標記。 -
轉換為ID:將每個標記轉換為對應的ID(索引)。
-
生成注意力掩碼:生成一個掩碼,用于標記哪些位置是有效的輸入(非填充部分)。
-
-
-
如果不想添加
[CLS]
和[SEP]
標記,可以在調用tokenizer
時設置add_special_tokens=False
。
text = "my dog is cute, he likes playing"
inputs = tokenizer(text, add_special_tokens=False, return_tensors="pt")
輸出inputs
是一個字典,包含以下內容:
-
input_ids
:輸入標記的ID列表。 -
token_type_ids
:段嵌入索引列表。 -
attention_mask
:注意力掩碼。
3.?完整示例
以下是一個完整的示例,展示如何將文本輸入傳遞給BERT模型,并獲取模型的輸出:
from transformers import BertTokenizer, BertModelmodel_path = "/Users/azen/Desktop/llm/models/bert-base-chinese"tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertModel.from_pretrained(model_path)text = "my dog is cute, he likes playing"
inputs = tokenizer(text, return_tensors="pt") # 返回PyTorch張量# 獲取輸入張量
input_ids = inputs["input_ids"]
attention_mask = inputs["attention_mask"]# 將輸入傳遞給BERT模型
outputs = model(input_ids, attention_mask=attention_mask)# 獲取模型的輸出
last_hidden_state = outputs.last_hidden_state # 最后一層的隱藏狀態
pooler_output = outputs.pooler_output # [CLS]標記的輸出print(last_hidden_state.shape) # 輸出形狀:(batch_size, seq_len, hidden_size)
print(pooler_output.shape) # 輸出形狀:(batch_size, hidden_size)
需復現完整代碼
from transformers import AutoModel, AutoTokenizer
from transformers import BertModel, BertTokenizerfrom transformers import Bertmodel_path = "/Users/azen/Desktop/llm/models/bert-base-chinese"tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertModel.from_pretrained(model_path)text = "my dog is cute, he likes playing"
inputs = tokenizer(text)pass