攝影:Max Chen?on?Unsplash
一、說明
????????這是使用 BERT 語言模型的一系列文本分類演示的第一部分。以文本的分類作為例,演示它們的調用過程。
二、什么是伯特?
????????BERT?代表 來自變壓器的雙向編碼器表示。
????????首先,轉換器是一種深度學習模型,它使用自我注意機制,根據每個單詞與其他單詞的關系對其進行加權。根據注意力得分,模型可以“注意”序列中的有價值的部分。其次,BERT是雙向的,這意味著它在訓練時會同時考慮左上下文和右上下文。從這個意義上說,BERT模型可以從兩個方向理解上下文。
三、BERT BASE 和 BERT LARGE
????????BERT BASE:更少的變壓器塊和隱藏層大小,具有與OpenAI GPT相同的模型大小。[12個變壓器塊,12個注意頭,768個隱藏層尺寸]
????????BERT LARGE:龐大的網絡,其注意力層是BERT BASE的兩倍,在NLP任務上實現了最先進的結果。[24個變壓器塊,16個注意頭,1024隱藏層尺寸]
????????區別:Bert base的參數比Bert large少,因此可以用更少的計算機內存使用。Bert large具有更多的參數,因此它比Bert基數更準確。
四、伯特輸入和輸出
????????輸入:[CLS]令牌序列[SEP]
- [CLS] 代表 分類令牌
- [SEP] 讓 BERT 知道哪個令牌屬于哪個序列
- 可以輸入BERT模型的令牌的最大大小為512。因此,如果令牌小于 512,我們可以使用填充來填充空令牌;如果序列中的令牌長度超過 512,那么我們需要截斷令牌。
- BERT 模型的輸出將是每個令牌中大小為 768 的嵌入向量。然后,這些令牌將成為分類器的輸入。
五、 嘗試一個簡單的文本
????????擁抱臉是一個很棒的學習場所。它提供語言模型、數據集,您甚至可以在那里學習自然語言處理!瀏覽其網站以獲取更多信息:
擁抱面孔 - 構建未來的 AI 社區。
構建、訓練和部署由機器學習中的參考開源提供支持的先進模型。超過。。。
huggingface.co
讓我們從擁抱臉中導出一個語言模型,看看它對一個簡單的句子有什么作用。我們需要先導入自動標記器來啟動語言模型。
pip install transformers
from transformers import AutoTokenizer
tokenizer= AutoTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-v2')
example_text = '今日は一日サッカーをしました'
##('I played soccer for the whole day')##
BERT_input = tokenizer(example_text,padding='max_length', max_length = 20, truncation=True, return_tensors="pt")print(BERT_input['input_ids'])
print(BERT_input['token_type_ids'])
print(BERT_input['attention_mask'])
tensor([[ 2, 13711, 897, 1031, 2719, 11731, 932, 873, 13276, 881,3, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
六、解釋
- 填充 :將每個序列填充到指定的最大長度。
- max_length:每個序列的最大長度。在這個例子中,我們使用 20,但對于我們的實際數據集,我們將使用 512,這是 BERT 允許的最大序列長度。
- 截斷 :如果為 True,則每個序列中超過最大長度的標記將被截斷。
- return_tensors:將返回的張量類型。如果你使用 Pytorch,那么你將使用 pt。如果你使用Tensorflow,那么你需要使用tf。
七 什么是input_ids
我們可以解碼令牌以查看input_ids是什么。
example_text = tokenizer.decode(bert_input.input_ids[0])
print(example_text)
[CLS] 今日 は 一 日 サッカー を し まし た [SEP] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD] [PAD]
八、 什么是token_type_ids和attention_mask?
- token_type_ids是一個二進制掩碼,用于標識哪些令牌屬于哪個序列。因為我們只有一個序列,所以所有代幣都屬于類 0。
- attention_mask是一個二進制掩碼,如果令牌是實詞,則為 [CLS]、[SEP] 或填充。如果令牌是實詞 [CLS]、[SEP],則掩碼將為 1。否則,掩碼將為 0。
九、總結
????????在這篇文章中,我簡要介紹了BERT是什么,并使用一個簡單的文本來顯示使用BERT的標記化結果。達門·