中文實體識別
Chinese Named Entity Recognition
適用針對文本(對話)內容之實體 (店名、人名、食物名等等)進行識別
Call for Partner or POC (Proof of Concept) Contact: TonTon ( at ) TWMAN.ORG
本文分別由 Gui-Ru Li 撰寫初稿後再進行編修,且持續更新中
基於BERT預訓練的中文命名實體識別TensorFlow實現
NER
NER:將語句中的元素分成預先定義的類別(人名、地名...)
傳統NER七大類別
3大類:實體/時間/數字
7大類:人名/地名/組織名/機構名/時間/日期/貨幣/百分比
現有工具:
近期做法:使用BERT(或其變種)取代embedding
BERT
Albert
Huggingface Transformer
建構在pytorch和tensorflow2.0上,支援多種pre-trained language model供人使用
範例:
from transformers import *
import torch
input = 'hello' # 定義input
tokenizer = BertTokenizer.from_pretrained('bert-base-cased') # 載入tokenizer
token = tokenizer.encode(input) # 對input進行編碼
token_tensor = torch.tensor([token]) # 將輸入轉換成tensor (張量)
model = BertModel.from_pretrained('bert-base-cased') # 載入模型
model.eval() # 將模型設定為evaluation模式並關閉dropout
model(token_tensor) # 將輸入轉換成embedding
TinyBert
Slot-Filling
Chatbot 系統流程
開放域多輪對話:判斷使用者的意圖
允許條件:從開放域進入封閉域或是封閉域間的跳轉所需要的邏輯判斷
封閉域對話:判斷使用者意圖後為了確認目的而進行的對話
input, output是可以列舉的
對話有明確的目的與流程
填槽:讓使用者意圖轉化為明確的指令進而補全訊息的過程,將query中被明確定義屬性的值從資料集中抽取出來
定義
槽(Slot):被明確定義type的entity
type分為可空白/不可空白填寫
當type為不可空白而同時又沒有填寫時,必須進行clarify
clarify存在先後順序
槽與槽之間分為
平級槽:兩個槽之間沒有依賴關係
依賴槽:後續的槽依賴前面的槽(不同國家手機號碼格式不同,故國家槽影響手機號碼槽)
多輪記憶狀態
槽位:槽由槽位構成,一個槽位就是一種填槽的方式
Type:
詞槽:透過使用者對話中的關鍵字獲取訊息的方式
接口:透過其他方式獲取訊
槽位之間也存在優先級
若使用者透過詞槽指定後期優先級別應該為最高
類別: 150細類 (參考論文)