網頁

2020年8月12日 星期三

BERT in Keras

想讓電腦快速聽懂人話嗎

2020的最近釋出的GPT3看起來非常的驚豔。不過由於模型的複雜度讓普通電腦是無法安裝的,相對於GPT3,類似的模型有BERT家族。這邊提供一個快速的體驗方式來使用BERT:
首先先確定電腦有安裝好 keras&tensorflow
  • 安裝教學 Ubuntu 18.04+GPU驅動+CUDA10.0+cuDNN7.6.5+Tensorflow-gpu-1.15.0+Keras 2.3.1
  • Tensorflow、Keras傻瓜式安裝教學
❷ 安裝社群版的Keras BERT (https://github.com/CyberZHG/keras-bert)
pip install --user keras-bert
❸ 範例程式
假設我們有以下句子
[起] 台 北 是 ?? 的 首 都 [結束]
要猜的詞是 ??,如果電腦有能力接近理解,應該猜出是”台灣”或”臺灣”
先把它轉換成list輸入:
[CLS] 台 北 是 [MASK] [MASK] 的 首 都 [SEP]
# Keras BERT API Demo
import sysimport numpy as npfrom keras_bert import (    load_vocabulary,    load_trained_model_from_checkpoint,    Tokenizer,    get_checkpoint_paths,)from keras_bert.datasets import get_pretrained, PretrainedList
# 導入已訓練中文模型model_path = get_pretrained(PretrainedList.chinese_base)paths = get_checkpoint_paths(model_path)model = load_trained_model_from_checkpoint(    paths.config, paths.checkpoint, training=True, seq_len=None)model.summary(line_length=120)# 導入字典token_dict = load_vocabulary(paths.vocab)token_dict_inv = {v: k for k, v in token_dict.items()}# 要測試的字串# 舉例 : CLS 台 北 是 MASK MASK 的 首 都 SEP# MASK = 要猜的字串tokens = ["[CLS]"]mask = ["[MASK]", "[MASK]"]text1 = "台北是"text2 = "的首都"tokens.extend(list(text1))tokens.extend(mask)tokens.extend(list(text2))tokens.append("[SEP]")print("Tokens to predict:", tokens)indices = np.array([[token_dict[token] for token in tokens]])segments = np.array([[0] * len(tokens)])# 要預測的位置為1 其它為0masks = np.array([[0, 0, 0, 0, 1, 1, 0, 0, 0, 0]])predicts = model.predict([indices, segments, masks])[0].argmax(axis=-1).tolist()print("Fill with: ", list(map(lambda x: token_dict_inv[x], predicts[0][4:6])))
❹ 輸出結果


電腦成功預測出[MASK] [MASK] 的位置要放”台灣”



分享自FB社團:台灣自然語言處理與人工智慧交流社(https://www.facebook.com/groups/Taiwan.NLP/)

預訓練模型清單:
https://github.com/CyberZHG/keras-bert/blob/e9ccba8ed56b52102bfd08fd231bf9b79d7e0e3e/keras_bert/datasets/pretrained.py#L15

PretrainedList.wwm_cased_large:
1. Large model,
2. Trained on case-sensitive data,
3. Trained using Whole Word Masking (WWM)

沒有留言:

張貼留言