顯示具有 chatbot 標籤的文章。 顯示所有文章
顯示具有 chatbot 標籤的文章。 顯示所有文章

2021/08/02

Chatbot

系統分類

  • 問答 QA 系統

    一問一答,一般沒有對話管理的功能。偏重問句分析,取得問句的主題、問題詞、中心動詞。問句分析目前主要採用 template 比對和語意分析兩種方法

  • 任務導向型對話系統

    目的是解決使用者的明確需求。透過對話管理追蹤目前狀態,確定目的與需求。重點在對話管理,將自然語言映射為使用者的意圖和對應的槽位。

  • 閒聊系統

    使用者無特定目的,沒有具體的需求的多輪人機對話。

  • 主動推薦系統

    人機自然互動

不同類型的系統都包含這三個模組

  • 自然語言理解 NLU
  • 自然語音生成 NLG
  • 對話管理

自然語言理解 NLU

可從語音、音韻、詞態、文法、語意、語用六個維度理解自然語言

  • 語音

    跟發音有關,例如中文拼音

  • 音韻

    由語音組合起來的讀音,例如中文拼音 + 四種聲調

  • 詞態

    詞態封裝可用 NLU,資訊量大小取決於具體的語言種類。拉丁語系有很詞態變化,中文沒有太多的詞態變化,只有偏旁的差異,例如:他 她

  • 文法

    主要研究詞語如何組成合乎語法的句子,文法提供單字組成句子的約束條件,為語意的合成提供框架

  • 語意、語用

    自然語言包含和表達的意思

自然語言的難度

  • 沒有固定的格式,相同的意思有多種句式表達,改了一個字、調整語調、語序,都可能改變語意
  • 不斷有新的詞彙出現
  • 不同的場景(上下文),同樣的句子有不同的意思

問句 + 上下文 ------> 自然語言理解 NLU -------> 語意

英文單字以空格分隔,但中文詞語沒有自然分隔符號,故要先進行分詞處理

NLU 需要提供的模組功能

  • 實體識別 Named Entity Recognition

    識別具有特定意義的實體,例如:人名、時間、地名及專有名詞

  • 使用者意圖識別

    顯式及隱式意圖

    ex: "好熱啊" -> 可能是想知道現在的氣溫,或是控制空調

  • 情感識別

    顯式及隱式情感

    ex: "今天心情很好" -> 正面 -> 顯式、容易判斷

    ex: "今天跟客戶談判出了問題" -> 負面情感 -> 程式很難判斷

  • 指代消解、省略恢復

    在聊天主題背景一致的情況下,對話過程通常會習慣使用代詞,取代出現過的實體。或為了方便表述,省略部分句子。

  • 回覆確認

    如果發生判斷模糊的狀況,chatbot 要主動詢問意圖,也就是回覆確認

  • 拒識判斷

    chatbot 要能主動拒絕識別,及回覆超過自身理解/回覆範圍,或涉及敏感話題

NLU 的方法分為基於規則和統計兩種

  • 基於規則

    人工定義很多語法規則,利用規則定義如何從文字中提取語意。NLU 根據規則解析輸入該模組的文字。

    優點:靈活,可定義各式各樣的規則

    缺點:需要大量不同場景的規則,隨著規則數量增加,維護規則的難度也增加

    適合簡單的場景,可快速時做一個簡單可用的 NLU

  • 基於統計

    資料量大,就要用統計方法訓練模型。

    優點:資料驅動

    缺點:訓練資料難以取得,模型難以解釋和偵錯

    適合處理分類和序列標註的問題。可將意圖識別定義為分類問題:輸入句子的文字特徵,輸出該特徵所屬的意圖分類。 SVM、AdaBoost 演算法

    實體識別就是序列標註問題:輸入句子的文字特徵,輸出特徵中,每個字詞屬於某個實體的機率。HMM、CRF(Conditional Radom Field) 演算法

採用 deep learning 方法時,需要大量的資料,因為長尾資料普遍存在,基於統計的方法,受訓練資料品質影響很大

實作通常結合使用兩種方法

  1. 沒有資料及資料較少,先採用基於規則的方法,累積資料後,再採用基於統計的方法
  2. 基於統計的方法可涵蓋大部分的場景,在涵蓋不到的場景,改用基於規則的方法

NLU 產品,強調通用性,很難客製

  • Facebook 的 Wit.ai

  • Google 的 api.ai

  • MS 的 LUIS.AI

NLU 基本技術

詞法分析 (分詞 + 詞性標註) ----> 句法分析 ---> 語意分析

  • 詞法分析 lexical analysis

    常用漢字有六、七千字,遠多於 26 個英文字母,中文詞之間沒有明確的分隔標記,多音現象嚴重,缺少詞態變化(單複數、時態、陰陽性),這些特性帶來了中文分詞方法、重疊詞區分(黑 / 黑黑的)、歧義欄位切分、專有名詞識別等等問題

    詞法分析包含 分詞 + 詞性標註 兩個部分

    • 分詞 word segmentation 有基於詞表和基於統計兩種方法

    基於詞表:逐字掃瞄字串,當子字串跟詞表的詞相同就算吻合。再細分為 最大比對法、逆向最大比對法、雙向掃描法、逐詞巡訪法等等。ex: IKAnalyzer

    基於統計:根據人工標註的詞性和統計特徵,對中文進行建模,透過模型計算各分詞出現的機率,以機率最大的分詞作為結果,常用 HMM、CRF、LSTM+CRF 演算法。ex: ICTCLAS、Standford Word Segmenter * 詞性是詞語最基本的文法屬性之一,詞性標註 Part-Of-Speech Tagging (POS Tagging) 是詞法分析的一部分

    將句子的每一個詞賦予特定類別,ex: 動詞、名詞、介系詞,句子中最能代表資訊的是名詞、動詞、形容詞、副詞,這四種是 Open Class,詞量會隨著時間增加,Closed Class 包含冠詞、介系詞、連接詞,數量固定

    主要採用 HMM,陸續採用判別式的最大熵模型、支援向量機模型等。有基於規則、基於統計兩種方法

    基於規則:依照詞性關係與上下文情境建造詞類消岐規則

    基於統計:將機率最大的詞性作為結果

    工具:Stanford Log-linear Part-Of-Speech Tagger、LTP

  • 句法分析 Syntactic Parsing

    分析輸入的文句,得到句法結構。從字串得到句法結構的過程。ex: 句法驅動和統計的機器翻譯

    不同的句法形式,對應到不同的句法分析演算法,片語結構及依存結構,是最常用的兩類文法體系。以片語結構樹為目標的句法分析器應用範圍最廣。

    分析結果以樹狀結構的形式呈現,稱為句法分析樹。

    根據句法結構不同的表示形式,可將句法分析分為以下三種

    • 依存句法分析 Dependency Syntactic Parsing:識別詞彙之間的相互依存關係

    基本假設:一個句子存在主體(被修飾詞)和修飾詞,句子中,詞的修飾關係具有方向性,通常是一個詞支配另一個詞,這種支配關係就是依存文法。

    詞和詞之間的依存(修飾)關係,本質上包含在句法結構中。

    一個依存關係連接的兩個詞,分別是 head 核心詞與 dependent 依存詞

    依存關係的五條公理:

    1. 一個句子只有一個成分是獨立的
    2. 其他成分直接依存於某一個成分
    3. 任一個成分都不能依存於兩個或兩個以上的成分
    4. 如果 A 直接依存於 B,C在句子中位於 A, B 之間,則 C 直接依存於 B,或依存於 A, B之間某一個成分
    5. 中心成分左右兩邊的其他成分,相互之間不發生關係

    常見依存關係

    關係類型 標籤 描述 例子
    主謂關係 SBV subject-verb 他邀請我跳舞 (他 <- 邀請)
    動賓關係 VOB 直接賓語 verb-object 媽媽給我一個吻 (給 -> 吻)
    間賓關係 IOB 間接賓語 indirect-object 媽媽給我一個吻 (給 -> 我)
    前置賓語 FOB 前置賓語 fronting-object 莫我肯顧 (我 <- 顧)
    兼語 DBL double 他邀請我跳舞 (邀請 -> 我)
    定中關係 ATT attribute 紅寶石 (紅 <- 寶石)
    狀中結構 ADV adverbial 特別嚴厲(特別 <- 嚴厲)
    動補結構 CMP complement 打掃完衛生(打掃 -> 完)
    同位語 APS appositive 我本人非常高興(我 <- 本人)
    並列關係 COO coordinate 天空和海洋 (和 -> 海洋)
    介賓關係 POB preposition-object 在陽光下 (在 -> 下)
    左附加關係 LAD left adjunct 天空和海洋 (和 <- 海洋)
    右附加關係 RAD right adjunct 朋友們 (朋友 -> 們)
    獨立結構 IS independent structure 我五歲,他四歲 (各自獨立)
    核心關係 HED head 美麗的花朵爭相開放 (花朵 是整個句子的核心)

    目前採用資料驅動的依存句法分析,將資料分為訓練集和測試集。基於圖 graph-based 和 基於轉移 transition-based 兩種分析方法。

    基於圖 graph-based:

    ​ 將句子(字串)和對應的依存樹組成的資料做為訓練資料,訓練目的是,學習一個可以預測一句依存樹未知的最佳依存樹。建模過程需要增加依存樹限制條件,例如圖的邊是有向邊,在有向的路徑上,一個詞只能被存取一次,每個詞只能有一個支配節點。

    基於轉移 transition-based:

    ​ 將圖預測轉變為序列標註問題,主要的轉移系統有 arg-eager, arc-standard, easy-first 等等,基於轉移的系統有三個操作

    1. 將單字從 buffer 移入 stack,或將單字從 stack 移回
    2. 從 stack 將單字 pop
    3. 建立帶有 label 的有向邊(左向邊或右向邊)

    基於圖在短句的表現較好,但長句容易受到早期錯誤的影響。基於轉移在長句有較好的表現,但是缺乏豐富的結構化特徵。

    • 片語結構句法分析 Phrase-structure Syntactic Parsing,也稱為成分句法分析 Constituent Syntatic Parsing:識別句子中的片語結構和片語之間的層級句法關係

    基於 Context Free Grammar (CFG),其規則分為人工編寫規則和資料驅動的自動學習規則兩類。

    人工編寫的缺點:規則之間的衝突會隨規則數量的增多而加劇,不易增加新規則。資料驅動的自動學習規則,開發週期短,且規則運作良好,目前為主流方法。

    為了在句法分析導入統計資訊,需要將 CFG 擴充為 PCFG: Probabilistic Context Free Grammar,最後利用 Maxmimum Likelihood Estimation (MLE) 計算每一條規則的機率。

    因為 CFG 的獨立性假設過於嚴格(一條文法規則的確定,僅與該規則左側句子的非終結符號有關,與上下文資訊無關),導致文法中缺乏其他資訊用於規則消岐,因此分析器的效能較低。這個問題有兩種弱化 CFG 假設的方法:一種是使用詞彙化 Lexicalization 方法,一種是使用符號重標記 Symbol Refinement 的方法,透過改寫非終結符號的方式,將上下文資訊導入句法分析器。

    • 深層文法句法分析,利用深層文法,對句子進行深層句法及語意分析,包含詞彙化樹鄰接文法 Lexicalized Tree Adjoining Grammar (LTAG)、詞彙功能文法 Lexical Functional Grammar (LFG)、組合範疇文法 Combinatory Categorial Grammar (CCG)

    依存句法分析是淺層句法分析,適合用在多語言環境,深層文法採用相對複雜的文法,句法和語意資訊較為豐富,分析器複雜。

    先將句子的基礎特徵(詞、詞性、類別標籤)向量化,再利用 MLP 進行特徵提取。

    深層學習的優點:

    1. 只需要句子的基礎特徵,利用向量乘法組合向量化特徵,理論上可達到任意元的特徵組合
    2. 能使用更多基礎特徵
  • 語意分析 semantic analysis

    語意是資料對應現實世界中,事物所代表的涵義。語意分析涉及語言學、計算語言學、人工智慧、機器學習、認知語言等多個學科,最終目的是理解句子表達的真實涵義。

    1. 語意分析在機器翻譯的應用,統計機器翻譯提升了翻譯的效能
    2. 語意搜尋:搜尋不在拘泥於根據輸入關鍵字字面的意思,而是要了解背後真正的意圖
    3. 實現大數據的理解與價值發現的有效手段

    Chatbot 利用語意分析可得知使用者的意圖、情感,藉由上下文情境的語意建模,保持 chatbot 的個性一致

自然語言表示

三種常用的文字特徵表示模型,將自然語言表示為電腦可以理解的形式

  • 詞袋模型 Bag Of Words, BOW

    最初用在資訊檢索 Information Retrieval (IR)。每個詞的出現都不依賴於其他詞是否出現的假設。在表示文件時,可忽略文字的語序、文法、句法,將其視為片語的組合

    ex: 以下兩份文件

    (1) 台北今天下雨,台中也下。

    (2) 台北和台中今天都下雨。

    建構辭典(前面是索引):

    Dictionary = {1: "台北", 2: "今天", 3: "下", 4: "雨", 5: "台中", 6: "也", 7: "和", 8: "都"}

    根據索引,可用向量表示該單詞在文件中出現的次數

    下:在第一句話出現 2 次,第二句話中出現 1 次

    (1) [1, 1, 2, 1, 1, 1, 0, 0]
    (2) [1, 1, 1, 1, 1, 0, 1, 1]

    詞袋模型可將文件轉換為次數的向量,但沒有表示單詞在原句中出現的位置,這是明顯的缺點。

  • 詞頻-逆向文件頻率 TF-IDF: Term Frequency-Inverse Document Frequency

    基於統計的加權方法,常用於 IR,用具體詞彙在文件中出現的次數,和其在語料庫出現的次數,評估該詞彙對相關文件的重要程度。TF-IDF 常被搜尋引擎用來評估文件與查詢之間的相關程度。

    TF (Term Frequency 詞頻) 就是詞語在文件出現的次數

    IDF (Inverse Document Frequency 逆向文件頻率) 詞語普遍重要性的度量。

    詞彙在指定文件內的高 TF,高 IDF,將使該詞彙在文件內享有較高權重的 TF-IDF

    TF-IDF 傾向於過濾常見詞彙,保留重要詞彙的做法。核心概念是:在一篇文件中出現頻率高,但在其他文件很少出現的詞彙,有較好的類別區分效果。

    但實際上,同一類文件頻繁出現的詞彙,往往代表該類文件的特徵,這類詞彙有較高的權重,應該視為該類文件的特徵詞,這是 IDF 的不足處。

  • 詞嵌入 Word Embedding

    將深度學習導入 NLP 的核心技術之一。

    要在 NLP 使用機器學習,必須找到一種適合將自然語言數學化的方法。最初用 one hot representation 方法,利用詞表大小維度的向量描述單詞,每個向量中多數元素為 0,只有該詞彙在詞表對應位置的維度為 1。

    ex: 詞表 H,包含 N 個詞彙,「雨傘」是 H 的第 2 個詞彙,「傘」是 H 的第 4 個詞彙

    「雨傘」的 one hot representation 為 [0, 1, 0 , 0, 0, 0 .....]

    「傘」的 one hot representation 為 [0, 0, 0 , 1, 0, 0 .....]

    同時分配 ID,「雨傘」的 ID 為 2,「傘」的 ID 為 4

    One-Hot Encoding 將所有詞彙單獨考慮,以向量表示,難於發現同義及反義的詞彙關係。另外因向量過於稀疏,在機器學習容易造成維度災難。

    Word Embedding 在基於 One-Hot Encoding 時,增加了單詞間的語意聯繫,並降低詞向量維度。

    一個包含 t 個詞彙 \[ w_1, w_2, ..., w_t \] 的句子,自然語言的機率 (也稱為語言模型)為 \[ p(w_1, w_2, ..., w_t) \\ = p(w_1)*p(w_2|w_1)*...*p(w_t|w_1,w_2,...,w_{t-1}) \\ = p(w_t|w_1,w_2,...,w_{t-1}) \]

    對於 N-gram 模型來說

    \[ p(w_1, w_2, ..., w_t) ≌ p(w_t|w_{t-n+1},w_{t-n+2},...,w_{t-1}) \]

    Yoshua Bengio 發表三層神經網路建構語言模型的方法

    第一層:輸入層,輸入句子內已知前 n-1 個詞彙的詞向量,將前 n-1 個詞向量拼接成一個向量

    第二層:隱藏層

    第三層:輸出層,第 i 個節點的值,等於下一個詞為 \( w_i \) 的機率的對數

    在最佳化模型的過程中,同時對單詞的詞向量進行優化。最佳化後可得到語言模型及詞向量。

    Encoder-Decoder 是文字處理的框架,可用於 chatbot、機器翻譯、文字摘要、句法分析。也就是由句子 (篇章)X,產生句子(篇章) Y 的通用模型。如果 X, Y 是相異語言,就是自動翻譯器。

    Encoder 負責將 X 變換為中間語意 C,Decoder 將 C 和歷史存在的 Y,產生 i 時刻的 \(Y_i\)

    Google 於 2008 年發表 BERT

    對於基於生成的 chatbot,除了 Encoder-Decoder 解決核心問題外,還需要注意多輪對話、安全回答、個性一致的問題

    • 多輪對話問題

      要將前文聊天資料,導入Encoder-Decoder,可產生更好的回應

      簡單拼接 context 及本次輸入句子的方法,因為 RNN 輸入模型的長度增長而減低成效 -> RNN 對於過長輸入資料敏感的問題

      以多層前饋神經網路替代 RNN:多層前饋神經網路的輸出,代表上下文聊天資訊,和目前輸入內容的中間語意表示,Decoder 根據中間語意產生回覆。

      另一種方法:階層式神經網路 Hierarchical Neural Network (HNN),本質類似 Encode-Decoder框架。Encoder 採用二級結構,以第一級句子 RNN(Sentence RNN) 編碼句子的每一個單詞,形成中間語意,第二級句子 RNN 根據上下文句子出現的先後順序序列,對第一級中間語意進行編碼。這個 RNN 稱為 Context RNN

      RNN 對出現在多輪對話的語言片段進行編碼,Context RNN 對時間進行編碼,解碼 RNN 負責對下一個對話回覆進行預測

    • 避免安全回答

      生成式 chatbot 的問題是「安全回答」,例如不管使用者輸入什麼,都回答 I Don't Know、Sure、呵呵、是嗎

      會發生這個現象的原因是,訓練的資料確實包含很多無意義的回答。問題在於訓練資料的詞語在句子不同位置的機率分佈,呈現出明顯的長尾狀況。也就是神經網路回覆陷入局部最佳解,可藉由給模型增加一些干擾,使其跳出局部最佳解。因此就把 Generative Adversarial Network (GAN) 導入聊天回覆生成系統,以解決安全回答的問題

      將系統分為生成器 Generator、判別器 Discriminator 兩個子系統,生成器使用 seq2seq 模型,以前文為輸入,再輸出對話語句,判別器用來判斷前文產生的回答是否接近人類行為。生成器不斷改良答案欺騙判別器,判別器不斷以生成器的回答作為負例。直到兩者收斂。

    • 個性一致問題

      chatbot 會被當作有個性的虛擬人物,該人物必須要有一致的年齡、喜好、習慣、語言風格。

      seq2seq 訓練都是單句資訊對單據回覆的映射關係,沒有統一的個性資訊。利用 seq2seq 很難保持個性資訊一致

      方法:將預定義的個性化資訊,透過 word embedding 方法呈現,仍然採用 seq2seq,也就是把個性資訊匯入 Decoder,

  • 基於知識圖譜的 NLU

    知識圖譜是結構化的語意知識庫,以符號形式描述真實世界存在的各種實體、概念、及其相互關係,其基本單位是「實體-關係-實體」形式的三元組,以及實體及其相關屬性的「屬性-值」對(Attribute-Value Pair、AVP)

    知識圖譜用 global 唯一的識別字來標籤知識圖譜的每個實體或概念。每個「屬性-值」都是對實體內在具體特型的刻畫,利用關係連接兩個實體,描述實體間的關係,構成網路知識結構。知識圖譜可視為一張巨大、包含節點與邊的圖,其中節點表示真實世界的實體或概念,網路的邊代表實體間的各種語意關係,這個圖模型可用 W3C 提出的 Resource Description Framework (RDF) 或屬性圖表示

    知識圖譜是知識表示與推理、資料庫、資訊檢索、自然語言處理等多種技術融合的產物

    • 知識表示

      知識在電腦內儲存和處理格式,一般以三元組表示一筆知識,頭尾實體是圖譜的節點,關係是圖譜的邊。

      知識表示使用的資料結構,最常見的是 graph 和 tree。每個邊和節點都有中繼資料。現有圖形式資料庫的缺點:在知識表示存在侷限,導致專案成本高,無法混合表示結構與非結構化資料。

      知識酷的資料由結構與非結構化資料混合而成,專案上,廣為接受是使用 Tree,其中 JSON 滿足了結構與非結構化混合的需求,是目前最常用的知識表示方式。缺點是無法結合 machine learning

      為解決以上問題,提出基於幾何空間的知識表示方法,每個實體是空間中的一點,關係是平移向量,每個元組都以平移原則作為基本幾何表示形式,頭實體可按照關係向量移動到尾實體。根據這種方法,可設計出基於統計的AI演算法。

    • 知識建構

      結構化資料可用簡單的映射,對應到知識圖譜

      半結構化資料 ex: html,可用 wrapper,提取資訊存放到特定格式的知識圖譜

      非結構化資料,以 text mining 發現文字隱含的模式

    • 知識融合

      由各來源提取知識後,要融合為一個知識庫,融合過程。

      本體 ontology,提供統一的術語字典,構成術語間的關係,根據具體業務建立或修改資料模型的功能

      本體比對演算法:模式比對 schema matching和實例比對 instance matching 兩種

      模式比對 schema matching:尋找本體中屬性和概念之間的對應關係,大規模本體比對一般使用 anchor 技術,將來自兩個本體的相似概念作為起點,根據這兩個相似概念的父概念、子概念,逐漸建構小型的相似片段,進而找出相符的概念。同時利用反覆運算,將新的相符概念作為新的 anchor,再根據 anchor 相關本體的鄰居資訊,建置新的片段。不斷反覆此過程,直到找不到新的相符概念為止。分而治之的方法

      實例比對可評估來自不同異質資料實例對的相似度,評估的結果用來判斷這些實力是否指向特定領域的相同實體。利用 Locality-Sensitive Hashing 提高實例比對的可擴充性方法,與使用向量空間模型表示實例,基於規則採用 inverted index,取得最初相符候選的方法


      chatbot 特殊需求

    • 需要個性化的知識圖譜

    • 需要動態知識圖譜

      要有生活規律,描述生活軌跡

    • 需要刻畫主觀情感的知識圖譜

      回覆時,除客觀事實外,要增加個性化主觀認知的情感元素

    • 要提供 API

    • 要有多媒體知識圖譜

      結合圖片、語音、文字

自然語言生成

分為 pipeline, integrated 兩種

pipeline 個模組間互相獨立,只有輸入、輸出界面。

integrated 系統模組之間緊密結合

integrated 符合人腦設計,但實作困難,現時常用的是 pipeline,有文字規劃(說什麼)、句子規劃(怎麼說)、句法實現(讓句子連貫)三個模組。

chatbot 對話生成技術

  • 檢索式

    由對話資料庫找出最佳回覆,只能用固定語言回覆

  • 生成式

    由 chatbot 創造句子

    • 需要關聯文法結構和應用特有的語意表徵
    • context sensitive,語言要整合時間、地點、位置等資訊
    • 基於 machine learning 產生的回覆很難解釋,難以被理解

基於範本的 NLG

範本由 sentence和 word 組成,是含有變數的 sentence,word 是範本中變數對應的可能值

適合任務驅動的對話系統

  1. 對話管理模組會根據目前的對話狀態,使用者輸入的資料,生成下一步動作的相關資訊,也就是選擇句子範本,及可選的詞彙範本
  2. NLU 需要利用詞彙範本、句子範本、有限狀態機,進行 slot filling 的相關工作

基於深度學習的 NLG

GAN 在電腦視覺,尤其是圖形生成方面有顯著成果。

對話管理

維護更新對話狀態與動作選擇,對話狀態是一種能夠處理聊天資料的表徵。包含所有可能會影響機器下一步決策的資訊。

動作選擇是基於目前狀態,選擇下一步合適的動作,例如向 user 詢問需要補充的資訊,執行要求的動作等等。

ex: user 輸入「幫我給媽媽預定一束花」,接下來可能是

  1. 詢問可接受的價位「請問預期價位如何?」
  2. 確認可接受的價位「像上次買兩百元的花可以嗎?」
  3. 直接預訂「好的,已預訂價值兩百元的紅玫瑰」

模組

  • 對話行為識別

    預先定義或動態產生,使用者對話意圖的抽象表示形式。分為封閉式、開放式兩種。

    封閉式:將對話意圖映射到預先定義好的對話行為類別體系,通常用在特定領域/任務,ex: 設定鬧鐘、票務預訂、酒店預訂

    開放式:對話行為沒有預先定義好的對話行為類別體系,ex: 閒聊系統

  • 對話狀態識別

    狀態跟 context 及對話行為相關,狀態轉移由前一時刻的對話狀態,與目前使用者輸入的對話行為決定

  • 對話策略學習

    讓機器從「人-人」的真實對話資料學習對話的行為與狀態

  • 對話獎勵

    通常將槽位填充效率、回覆流行度等參數納入考量

    基於強化學習的長期獎勵機制


常見的對話管理方法

  1. Finite State Machine FSM

    要人工定義對話系統可能出現的所有狀態,簡單易用,但需要人工設計,無法用於複雜場景

  2. 基於統計

    將對話過程表示為部分可見的馬可夫決策過程,只需要定義決策過程的狀態和動作,機器可透過學習得到不同狀態間的轉移關係

  3. 基於神經網路

    用神經網路學習動作選擇的策略,將自然語言理解的輸出,及其他特徵,都作為神經網路的輸入,把選擇的動作作為神經網路的輸出。需要大量訓練資料,為獲得大規模應用驗證

  4. 基於框架

    slot-value pair

    用於特定領域的對話系統


對話管理的挑戰

  1. 手工編寫的對話策略,難以涵蓋所有對話場景
  2. 基於統計與神經網路的方法,需要大量對話資料
  3. 要求大量的領域知識、對話知識,以產生有意義的回覆

One-shot Learning 和 Zero-shot Learning 可用少量(無)樣本進行訓練,以解決對話系統「冷開機」問題,透過 reward function 學習,不斷增加對話模型

seqGAN 採用對抗網路實作離散序列的生成模型,解決 GAN 難以應用於自然語言處理領域的問題,並可用來選擇最佳的獎勵函數與參數

2018/07/30

chatbot 不能笨得像是問券調查,也不能太聰明像是真人

使用者已經厭煩不斷地安裝手機 APP,安裝了 APP 卻又很少打開來使用,自 2016 年 4 月 Facebook、Line 陸續發表聊天機器人 API 後,情況似乎有點改變,整個行銷活動,轉向了 chatbot,使用者在每天持續打開FB或是Line的狀況下,透過 chatbot,讓所有品牌跟廠商連接到了使用者那端。

過了 2017 到現在 2018 兩年,chatbot 的戰場可說是百家爭鳴,基本的核心 IM 平台已經很難有新進的服務,也沒有什麼改變,為了搶食 IM 平台上跟終端使用者聯繫的最後一哩路,圍繞在 IM API 上提供的服務及工具。

觀察一個 chatbot 的成功案例

在 AsiaYo 如何在一週內打造破萬使用者的 Chatbot!這篇文章中,說明了AisaYo 如何透過聊天機器人連貫起使用者之旅程體驗。他們以 UX 和商業的考量去定義 AsiaYo Chatbot 所應該賦予的功能,希望能協助旅客在訂房的前、中、後做決策及輔助。AsiaYo chatbot 經過了兩個版本的歷程。他們認為在旅遊訂房產業適用的設計的重點是:提醒與無縫式對話情境。也就是情境式的對話體驗,以及引導式的交談結構。

過程中的重點是在使用者瀏覽 AisaYo 旅遊資訊時,透過 cookie 收集資料,並在使用者瀏覽途中,彈出一則模擬 Facebook 對話視窗。如使用者同意接受對談,就將對話內容轉至 chatbot,並繼續以聊天機器人進行對話。且在使用者二次造訪 AsiaYo 網站時,便不再傳送訊息。

儘管 AsiaYo 利用模擬對話提示使用者,但仍然有少數消費者和 Chatbot 互動的過程中仍會察覺到自己被追蹤,並且對於追蹤的技術感到疑惑,造成使用者誤會侵犯隱私,加上對話的形式也會接續所追蹤的內容,所以少數消費者收到通知時會一頭霧水,此時的使用者體驗反而會降低。

在這個開發的過程中,可發現兩個重點,首先 chatbot 必須要夠聰明,不能太笨,一問一答當中,都是用固定的話術套路,交談的文字語氣,會影響使用者的感受,但是如果 chatbot 太聰明了,讓人覺得被騙了,原來不是真人,這時候反而會產生反效果,所以在 chatbot 進行前,需要適當地揭露,接下來是由專屬的機器人協助處理。

Google Duplex

最近最熱門的影片【超狂影片展示】Google AI 助理新把戲:幫忙打電話到餐廳訂位,等等你確定這不是真人?,展示了 Google Duplex 為基礎的 Assistant 功能,雖然只是代理「客戶」訂位,聲音幾與人類無異,不但能與店員來回對話、協調時間,還能在句子中適切加入「嗯…」、「呃哼」、「哦」等語助詞,成功在對方毫無察覺情況下完成預約。

然而這樣的技術產生了反效果,也導致 Google 必須強調他們將為Duplex加入自我揭露的功能,確保Duplex系統「適當表明身份」,Duplex太逼真嚇壞人,Google將讓AI語音助理表明「我是機器人」,Duplex 的表現嚇壞不少人,也引起批評聲浪。有人認為AI和人類聲音應該要加以區隔,就像刻意在無色無味的瓦斯中加入臭味,合成聲音應該就聽起來是合成的,任何以假亂真的事物將破壞信任,而當沒有信任就會引發失序。

同級生

有足夠年紀的人,應該還記得這個「同級生」這個戀愛遊戲。

1992年發行的「同級生」確立了戀愛遊戲的基本形式。在典型的戀愛遊戲裡,玩者操縱一個被女性角色包圍的男性主角,透過交談選單選擇的形式,與女性角色交談,以增加該角色對主角的「好感度」。

當遊戲結束時會根據「好感度」和遊戲內發生的特定「事件」來決定遊戲的結局。這種遊戲通常會有多種結局,而玩家會重複多玩很多次,目的就是想要看到不同的結局。

有發現關鍵字「交談」跟「選單」嗎?戀愛遊戲就像是一個超級龐大的 chatbot,不過遊戲內操作的目標比 chatbot 簡單,就是記錄男主角跟其他每一個女性角色的好感度跟事件。

如果 chatbot 的使用者把 chatbot 當作女性角色在攻略,心理上就會有一玩再玩的衝動,但如果只是把 chatbot 當作是一個存取資訊的方式跟窗口,chatbot 表現出來的講話方式,跟笨拙的選單功能,不夠聰明的話,就會有惹惱使用者的風險。

基本上就是這個事件:誤交損友:微軟的聊天機器人是怎麼被計畫性「攻陷」帶壞的?發生的原因,因為微軟設定,Tay 是一名 19 歲的機器少女,使用者計畫性地不斷地以話術攻陷 Tay,導致一天內這個 chatbot 就下架了。

人工智慧畢竟還是人工

史丹佛大學人工智慧實驗室主任,同時也是Google雲端人工智慧既機器學習首席科學家李飛飛最喜歡的說法是:「機器很快、很精準,也很笨;人類很慢、不精準,但聰慧(Brilliant)。」。換句話說,人工智慧這麼聰明的原因,是因為實作人工智慧的工程師夠聰明,能夠讓這麼笨的機器,進行動態的思考與處理,但仍然是「有範圍」的聰明,因為再怎麼開發,也沒辦法做到什麼都會的人工智慧。

這樣說好像有點過分,畢竟「術業有專攻」,也沒有一個真人能夠樣樣精通。就像是自動駕駛的問題,我們會要求自動駕駛必須要「零」風險,然而自動駕駛如果是代替一個真人開車,真人是不可能完全迴避車禍風險的,但要怎麼要求人工智慧自動駕駛要零風險?從另一個角度想,既然這項新科技,是為了協助人類,避免做出失敗的決策,如果將 AI 視為機器設備的一部分,而不是取代人工,那麼必須要求零風險才能上路,否則只要 AI 出現異常,就算是機器故障,因此不應該貿然上路。

智能音箱是另一個必須要真人互動的 AI 科技,在 Amazon Echo 打開了低價智能音箱的市場後,各家科技大廠就先後推出智能音箱產品,搶進智慧家庭的一環。在 當智能音箱跌破百元,它們看上去更像玩具了 這篇文章中提到,音箱最重要的還是音質,再搭配 AI 晶片,而晶片的優劣決定了音箱到底夠不夠智能。

因為 AI 晶片不夠聰明的關係,聽不懂用戶在說什麼,或誤解用戶的意思,不少智能音箱被用戶怒噴為智障,是目前該領域非常嚴重的一個問題。很明顯的,智能音箱現在還沒有太過於聰明的問題,因為使用者在使用時,明確地知道自己是在跟機器對話。

chatbot 因為要跟其他人類互動,太像真人的科技反而會造成恐慌,而自動駕駛完全是機器跟資料處理的世界,這項科技必須要非常聰明,到完全零風險,才會被市場接受。

該怎麼做

在 Chatbot 的拐點之年這篇文章中,提供了 Facebook 跟營銷商會面並對 Messenger 做相關表述時,列出了三種 chatbot 類型

  1. 真人:僱傭人類職員回答入站信息
  2. 以樹形檢索為基礎的決策機器人:它們有固定的、自動的對話路徑
  3. 人工智慧機器人:能夠使用自然語言以及計算機技術進行更為廣泛的對話。

而他們建議最成功的 chatbot 應該介於第二種和第三種之間。更實際的做法是,透過一家科技公司的協助,能針對每一個問題,找到25種正常人對一個問題的反應的對話腳本,這樣的交談分析結果,讓 chabot 有了生命,也更能跟客戶進行長時間的交談,當然為了避免 Tay 那樣的問題,chatbot 所能處理的事情有範圍限制,他會嘗試讓客戶的對話回到能夠服務的主題上。

在 IM 中的 Menu,有點像是走回瀏覽器的老路,不過這個方式,確實引導了對話的進程。雖然純文字自然語言的交談互動,讓使用者覺得親切,但更多的狀況,是純文字的打字過程,增加了使用的難度,選單的確讓整個交談的過程變得更順暢,但相對地讓「交談」這個事情變得無趣。

使用菜單結構或傳統的用戶介面結構,幾乎都是認輸的表現,如果走向了某種極端,讓 Chatbot 變成Messenger平台上一個小小的Web視圖,這就很難讓用戶感到愉悅或者吸引用戶來使用了。

References

你做的聊天機器人像個人工智障?六個實戰指南幫你的機器客服找回智商

持續的互動需要持續理解背景信息 EQ 跟 IQ 同樣重要

打造跨平臺企業級Chatbot,Google Bot引擎Dialogflow正式版來了

如何用聊天機器人創造 150 倍的自然觸及|Mr.Reply 教學

必須先設定 訊息腳本,再來則是設定 觸發訊息腳本的規則,最後才是設定 貼文留言自動回覆的條件。

留言回覆的訊息千萬不能只有一種,因為會有非常高的機率被 Facebook 封鎖留言功能,建議至少設定 3 種以上的留言回覆,讓 Mr.Reply 自動任意回覆即可。