天天看點

閱讀《DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems》DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

摘要:

随着遞歸神經網絡(RNN)的巨大發展,對話系統得到了長足的發展。許多rnn驅動的對話系統,如Siri、谷歌Home和Alexa,已經被部署來協助各種任務。然而,伴随着這種出色的性能,rnn驅動的對話系統,本質上是一種軟體,也可能産生錯誤的行為,導緻巨大的損失。同時,支援對話系統的RNN模型的複雜性和難駕馭性使得它們的測試具有挑戰性。

本文設計并實作了第一個rnn驅動的對話系統的測試工具DialTest。DialTest使用一系列轉換操作符對種子資料進行實際更改,同時适當地保留它們的oracle資訊。為了提高故障檢測效率,DialTest進一步采用Gini impurity來指導測試生成過程。我們進行了大量的實驗來驗證DialTest。我們首先在自然語言了解的兩個基本任務上進行實驗,即意圖檢測和插槽填充。實驗結果表明,DialTest能夠有效地檢測對話系統中不同rnn驅動的自然語言了解(NLU)子產品的數百種錯誤行為,并通過對生成的資料進行再訓練來提高其準确性。進一步,我們以一個工業對話系統為例,研究DialTest在真實使用場景下的性能。研究表明,DialTest能夠有效地檢測錯誤,提高rnn驅動對話系統的魯棒性。

背景

1.The Workflow of Dialogue Systems

對話系統的一般工作流程如圖所示。使用者輸入文本或語音到系統中,系統經過一系列處理後輸出文本或語音資訊作為回報。與基于文本的對話系統相比,基于語音的對話系統采用語音資訊進行互動,并通過自動語音識别(ASR)子產品将語音資訊轉換為文本。類似地,在系統生成輸出文本後,基于音頻的對話系統将文本消息轉換為語音,并通過文本到語音(TTS)子產品将它們播放出來。文本處理工作流程分為自然語言了解(NLU)、對話管理(DM)和自然語言生成(NLG)三個主要子產品。

閱讀《DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems》DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

作為輸入對話系統的句子,NLU子產品首先識别其意圖,并識别其是否包含與預定義任務相關的關鍵字。這兩個任務被表示為插槽填充和意圖檢測。意圖檢測是通過分類将輸入句子分類成相應的意圖類型。在确定句子的意圖後,可以有效地縮小後面幾個子產品的處理範圍。填槽是在輸入句子中搜尋合适的詞,并将其填入預定義的語義填槽中。如表1所示,使用者請求将曲目添加到指定的播放清單中。這個句子的目的是添加播放清單。語義槽可以根據句子的語義填入相應的詞,如播放清單的名稱可以填入 “classical relaxations”。

閱讀《DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems》DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

然後将DM子產品細分為對話狀态跟蹤子產品和政策學習子產品。對話狀态跟蹤子產品的功能是管理每一輪的輸入和對話曆史,然後輸出目前的對話狀态。而對話政策學習子產品的設計往往是根據目前的對話狀态來學習下一步行動。該子產品通常根據規則生成相應的動作。例如,在線上購物場景中,如果對話狀态為łrecommended“,那麼将觸發łrecommended”操作,系統将從産品資料庫檢索産品。最後,NLG子產品的功能是将抽象的對話動作轉換成自然語言的表達式供使用者了解。

意圖檢測和插槽填充任務是對話系統工作流程的基礎,對最終行為有重要影響。在本文中,我們使用這兩個任務來評估DialTest的性能。

APPROACH

如圖3所示,DialTest首先與相應的算子應用一系列變換方法,特别适應NLU模型的插槽填充和意圖檢測任務。該轉換可以在不改變原句語義的情況下生成新的測試句。DialTest在生成測試用例時,計算Gini impurity,然後量被測模型對測試資料測的不确定度。在Gini雜質指導下,DialTest可以有效地選擇模型中最有可能觸發潛在缺陷的測試資料。最後,生成的轉換測試資料可用于評估模型的穩健性。另外,DialTest可以通過對轉換後的訓練資料進行再訓練來提高模型的準确性。

閱讀《DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems》DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

Transformation Operators

  • 同義詞替換(Synonym Replacement, SR):該族運算符通過用同義詞替換單個單詞來實作句子的轉換,進而保持句子的意思不變。DialTest利用大型英語詞彙資料庫WordNet查找和替換同義詞。在WordNet中,名詞、動詞、形容詞被分成幾組認知同義詞,每組詞表達一個不同的概念。
  • 反向翻譯(BT):這類操作符将目标句子翻譯成一種中間語言,然後再将其翻譯回原語言。由于機器翻譯一般是對句子結構進行重組,是以轉換後的資料在保持句子意義不變的同時,也提高了句子結構的豐富性。對于中間語言,我們選擇漢語、法語和西班牙語,因為它們的字母和文法完全不同。
  • 單詞插入(WI):這類操作符通過插入單詞來轉換句子。當NLU模型執行意圖檢測和插槽填充時,它實際上是在試圖了解輸入語句。是以,如果在保持文法正确的同時,在句子中加入一些與意圖無關的詞,可能會造成模型的潛在幹擾。語言表示模型,如BERT,ROBERTA和ALBERT已經被提出用于自動生成自然語言。隐藏語言模型(MLM)任務根據上下文的語義預測隐藏詞,用于句子轉換。在轉換算子上,我們選擇了三種具有不同參數配置的預訓練語言表示模型,在原句子上插入新單詞。同時,我們控制字數從1到3。是以,一個單詞和一個短語都可以插入。
    閱讀《DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems》DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

    注意,測試的NLU模型同時處理意圖檢測和插槽填充任務。特别是句子的意圖檢測可以看作是一個句子分類任務,即為輸入的句子标注預定義的意圖類别。槽填充可以看作是一個序列标注任務,即用标簽集中的某個标簽标記線性輸入序列中的每個元素。表1展示了一個标簽資料的示例,它取自Snips資料集。模型輸出句子中每個單詞的标記結果,标記格式為BIO格式,即每個元素标記為"B-X",“I-X"或"O”。其中"B-X”表示該詞屬于X類型,位于這一段的開頭。“I-X"表示對應的單詞屬于類型X,位于片段的中間,而"O"表示該單詞不屬于任何類型。

    DialTest在進行SR變換時,将非實體詞随機替換為同義詞,即槽标為"O”。由于被替換的單詞原本沒有實體标簽,是以slot和intent标簽與原始資料保持一緻。在應用BT變換時,由于句子翻譯時,可能會出現替換詞和順序的變化,是以槽标很難與原槽标保持一緻。是以,DialTest隻使轉換後的句子的意圖示簽與原始标簽保持一緻。在應用WI轉換時,DialTest将插入字的槽标簽标記為"O",并将意圖示簽保留為其原始意圖。

Gini-Guided Sentence Transformation

我們探索了另一種解決方案,Gini impurity,以指導句子轉換過程。我們選擇DeepGini,這是一個特定于dnn的Gini雜質,來實作DialTest。DeepGini可以用來評估分類模型中測試用例的品質,最後一層通過softmax函數計算标簽的機率,然後輸出分類結果。由于DeepGini系數的計算隻能應用于一維softmax矩陣,是以填槽任務由于輸出的是二維softmax矩陣,不能直接計算DeepGini系數。是以,我們計算模型處理意圖檢測任務的DeepGini系數。

DeepGini coefficient is defined as:

ξ ( t ) = 1 − ∑ i = 1 N p t , i 2 ξ(t)=1-\sum\limits^N_{i=1}p^2_{t,i} ξ(t)=1−i=1∑N​pt,i2​

where 𝑃 𝑡 , 𝑖 𝑃_{𝑡,𝑖} Pt,i​ represents the probability that the test case 𝑡 belongs to the class 𝑖 𝑖 i.

對于意圖分類測試模型的softmax層,由于測試用例導緻的DeepGini系數較高,說明模型對預測結果不确定,更容易發現模型的潛在缺陷。

與傳統軟體基于代碼覆寫率的測試方法類似,DialTest試圖生成一個可以增加DeepGini系數的測試集。由于我們的測試目标是生成更多可能導緻模型預測結果錯誤行為的資料,是以我們使用DeepGini來引導句子轉換,而不是神經元覆寫。

Combining Transformations to Increase DeepGini Coefficient

由于一個句子的一次轉換可以增加資料樣本的豐富性,是以一個明顯的問題是,它們是否可以結合起來進一步提高測試樣本的DeepGini系數。在生成測試集時,DialTest結合多個轉換來增加被測試模型的DeepGini系數,進而檢測出更多模型的錯誤行為。但是,如果将所有的轉換方法組合到原始測試集,會産生大量的測試樣本,導緻測試效率低,存儲空間成本高。此外,如果組合的數量不受限制,從理論上講,組合是無窮無盡的,導緻資料品質的不确定性。DialTest提供了一種gini引導的技術來生成轉換後的資料,它可以有效地找到趨向于豐富文本資料語義的轉換組合。

算法1給出了結合變換增加DeepGini系數的過程。當生成轉換後的資料時,DialTest應用DeepGini函數作為指導,以確定生成的測試資料比原始測試更有可能發現系統中的潛在bug。R算法的測試模型,和一個句子轉換清單T和相應的參數作為輸入,和一組種子句子美國這個算法的主要實作過程是先将種子句子由一個随機變換,然後計算DeepGini系數的測試模型。如果指定的門檻值휏DeepGini系數增加,然後生成的句子句子添加到種子清單。相反,生成的句子被直接丢棄,因為它的DeepGini系數小,說明R對這個輸入句子的置信度高,不容易産生錯誤行為。

閱讀《DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems》DialTest: Automated Testing forRecurrent-Neural-Network-Driven Dialogue Systems

繼續閱讀