應觀眾要求,希望快點講中文的自然語言處理,於是就插撥了今天的內容。中研院的詞庫小組有在 Hugging Face 上傳大量的基於繁體中文訓練的模型,可以參考這邊。
根據中研院詞庫小組的網站,中研院資訊所、語言所於民國七十五年成立一個跨所合作的中文計算語言研究小組,共同合作建構中文自然語言處理的資源與研究環境,為國內外中文自然語言處理及其相關研究提供基本的研究資料與知識架構。
今天我們就站在中研院詞庫小組的巨人肩膀上,來玩中文的文本生成吧!
from transformers import BertTokenizerFast,AutoModelForCausalLM
tokenizer = BertTokenizerFast.from_pretrained('bert-base-chinese')
model = AutoModelForCausalLM.from_pretrained('ckiplab/gpt2-base-chinese').to(device)
max_length=256
input_txt = """
隨著貸款日益枯竭,Alistair Darling 被迫考慮對銀行進行第二次救助。 \
財政大臣將在幾週內決定是否向經濟中再注入數十億美元,因為有證據表明\
去年 370 億的部分國有化未能保持信貸流動,
"""
input_ids = tokenizer(input_txt, return_tensors="pt")["input_ids"].to(device)
output = model.generate(input_ids, max_length=max_length, num_beams=1, do_sample=True, top_k=50)
print(tokenizer.decode(output[0]))
會得到:
[CLS] 隨 著 貸 款 枯 竭 的 惡 化 , [UNK] [UNK] 被 迫 考 慮 對 銀 行 進 行 第 二 次 救 助 。 財 政 大 臣 將 在 幾 週 內 決 定 是 否 向 經 濟 中 再 注 入 數 十 億 美 元 , 因 為 有 證 據 表 明 去 年 370 億 的 部 分 國 有 化 未 能 保 持 信 貸 流 動 , [SEP] 他 已 經 預 測 可 能 會 向 這 兩 項 經 濟 危 機 負 責 。 在 經 濟 危 機 發 生 後 , [UNK] [UNK] 與 [UNK] [UNK] 聯 合 執 委 會 一 致 宣 佈 他 們 兩 者 必 須 繼 續 合 作 , 以 便 加 快 [UNK] [UNK] 的 成 立 。 在 去 年 7 月 17 日 美 國 國 土 安 全 顧 問 委 員 會 召 開 的 第 9 輪 會 議 上 , 經 濟 專 家 [UNK] [UNK] 在 委 員 會 的 記 者 會 上 說 : [UNK] 不 像 美 國 總 統 的 這 次 會 議 , 在 國 土 安 全 顧 問 委 員 會 會 議 上 , 我 們 會 看 到 美 國 國 庫 決 策 者 們 會 因 為 [UNK] [UNK] 是 第 二 次 救 助 [UNK] 而 走 向 危 機 。 [UNK] 去 年 11 月 30 日 , 一
會發現裡面還有 Special Token ID,其中一大堆 [UNK],這是 Unknown 的意思。大家可以微調參數到自己適合的文本
會發現裡面還有 Special Token ID,可以用這行程式碼去移除print(tokenizer.decode(output[0], skip_special_tokens=True))
。其中一大堆 [UNK],這是 Unknown 的意思,如果也被移除掉了的話,就會不太通順了。大家可以微調參數到自己適合的文本。
其他的自然語言處理任務,都可以改寫我們之前或是之後的範例,然後套用中研院詞庫小組這套來處理,包含做 Fine-tuned 也是,如果你有中文的資料集,就可以來做 transfer learning 囉。
中研院的授權是 GPL-3.0 License,在使用上要稍微注意一下哦!
Hugging Face 裡也有很多其他簡體中文的模型,也可以使用 OpenCC 來轉換回繁體中文來使用。
本來今天的內容想要放到最後再來講的,但是應觀眾敲碗,只好提前來跟大家分享中文的自然語言處理怎麼做。真的感謝中研院詞庫小組和 Hugging Face,讓我們可以讓我們更加容易的做中文的自然語言處理。