BERT QA 機器人實戰 – 上篇




雖然說是QA機器人,但其實就是用BERT做一個分類器而已 😆

使用環境與套件

Python 3.6
PyTorch 1.3
huggingface/transformers

BERT Input

先複習一下BERT輸入

BERT Embeddings

也就是說BERT的輸入是由三個Embeddings組成

Token Embeddings

Token Embeddings有兩種丟法

第一種是如上方圖片所示,是一個具有上下文關係的輸入:

my dog is cute,he likes playing

之後經過WordPiece方法處理,並且插入一些特殊標記符號

[CLS][SEP],前者表示輸入的開始,後者表示前後語句分割的標記

所以我們得到了

[CLS] my dog is cute[SEP]he likes play ##ing [SEP]

第二種是僅有單句輸入(依你的下游任務而定)

[CLS] SENTENCE [SEP]

到這裡就完成了Token Embeddings的部分

Segment Embeddings

Segment Embeddings 是為了讓BERT理解上下文之間的關係,在 huggingface/Transformers 中 A 句使用0,B 句使用 1

[CLS] my dog is cute[SEP]he likes play ##ing [SEP] 舉例我們的 Segment Embeddings應該長這樣:

0 0 0 0 0 0 1 1 1 1 1

Postition Embeddings

這邊是讓BERT去學習位置關係,會在學習的時候產生,基本上全給 1 做初始化即可:

1 1 1 1 1 1 1 1 1 1 1

若是需要補足訓練批次長度補剩餘0即可

使用資料集

https://raw.githubusercontent.com/p208p2002/taipei-QA-BERT/master/Taipei_QA_new.txt

資料筆數:7986
總類別數:149

BertTokenizer

了解了輸入與資料格集,準備把資料集轉換成BERT輸入

我們可以使用 Transformers 提供的 BertTokenizer 幫助我們完成 Token Embeddings

# 實例 BertTokenizer
# 這邊的詞表使用英文的 bert-base-uncased-vocab
# 若目標是中文,則需使用 bert-base-chinese-vocab
from transformers import BertTokenizer
tokenizer = BertTokenizer(vocab_file='bert-base-uncased-vocab.txt')
# 轉換成 WordPiece
STR_INPUT = "what’re you doing"
tokenizer.tokenize(STR_INPUT)
# ['what', '’', 're', 'you', 'doing']
# 轉換成 WordPiece 對應的 id
WORD_PIECE_STRING = ['what', '’', 're', 'you', 'doing']
tokenizer.convert_tokens_to_ids(WORD_PIECE_STRING)
# [2054, 1521, 2128, 2017, 2725]
# 插入[CLS]與[SEP]
# 有AB句
tokenizer.build_inputs_with_special_tokens(SENTENCE_A, SENTENCE_ B)
# 只有A句
tokenizer.build_inputs_with_special_tokens(SENTENCE_A)

下篇將開始講解code

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料