中文實體識別

Chinese Named Entity Recognition

適用針對文本(對話)內容之實體 (店名、人名、食物名等等)進行識別

Call for Partner or POC (Proof of Concept) Contact: TonTon ( at ) TWMAN.ORG

本文分別由 Gui-Ru Li 撰寫初稿後再進行編修,且持續更新中

NER

  • NER:將語句中的元素分成預先定義的類別(人名、地名...)

    • 傳統NER七大類別

    • 3大類:實體/時間/數字

    • 7大類:人名/地名/組織名/機構名/時間/日期/貨幣/百分比

  • 現有工具:

    • 哈工大LTP

      • Package: pyltp (LTP的python封裝)

      • 安裝與使用說明文件

      • 線上測試

      • 優點:包含分词、詞性標記、NER、依存句法分析和語意角色分析等功能

      • 缺點:各功能間存在依賴性,較難個別拆解

    • 中研院CKIP

      • 台灣中央研究院釋出的處理工具,比起一代的版本更有彈性且開源

      • 中文說明

      • 優點:

        • 不支援不限長度的句子,且不會自動 增/刪/改 字

        • 使用者可自訂參考或強制的詞典並設定權重

      • 缺點:對於簡體中文與大陸用語的支援度可能不適用

    • Standford Parser

  • 近期做法:使用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細類 (參考論文)