一、對抗攻擊概述
隨著近些年深度學習的快速發展,深度神經網路逐漸成為機器學習領域的主流模型,被廣泛應用於計算機視覺、自然語言處理等領域,但在研究與應用的同時,人們漸漸發現,深度神經網路具有一定的“脆弱性”。比如,在影像識別中,對模型的輸入也就是影像畫素值做輕微擾動,這種擾動不會改變影像的實際分類,人也難以覺察,卻可能導致模型對影像的分類出錯;或者在一段文字的情感分析中,文字中有一個字寫錯,這個錯誤不影響人的理解,也不會改變人對這段文字的情感判斷,模型卻可能判斷出錯。這類錯誤一方面會降低人們對系統使用體驗的好感度,另一方面可能會造成嚴重的後果,從而也限制了深度神經網路在一些安全要求很高的場景下的應用。
近幾年,人們開始對這一問題展開研究。如前文例子那樣,人們精心設計一些樣本,模型卻判斷出錯,這個過程就是對抗攻擊,這些樣本就是對抗樣本。透過研究對抗攻擊以及相應的防禦策略,有助於提高神經網路的魯棒性和可解釋性。
二、文字對抗攻擊的主要方法
深度神經網路對抗攻擊的研究最早在影像領域展開,現在在文字領域也有了一些相關研究。針對文字的對抗攻擊,從不同的角度有不同的分類,常見的有:根據構造對抗樣本時基於的資訊分為白盒攻擊和黑盒攻擊;根據錯誤的輸出是否是某個特定的結果,分為定向攻擊和非定向攻擊;根據改動文字的型別,分為基於字、詞和句子的對抗攻擊。這裡我們主要介紹一下第一種分類。
2.1 白盒攻擊
白盒攻擊,是指在構造對抗樣本的時候,有所要攻擊的模型的知識,如模型的結構、引數、權重等。屬於白盒攻擊的攻擊方式有很多種,這裡舉例介紹其中一種:基於FGSM的方法。例如,對於一個輸入樣本,一種方法是計算模型的損失對輸入向量(對於文字來說,輸入向量一般是文字的字向量或詞向量)的梯度,然後將梯度量綱最大的維度所屬的字定義為“熱字”,包含足夠多熱字並且出現頻繁的短語被定義為熱短語。然後基於熱短語,進行增刪改,生成對抗樣本。
2.2 黑盒攻擊
黑盒攻擊與白盒攻擊相反,在構造對抗樣本的時候,沒有所要攻擊的模型的知識。如果這個模型能被攻擊者使用,則攻擊者可以透過不斷嘗試,修改模型輸入,觀察模型輸出來構造對抗樣本。
如果不具備上述條件,但是能夠對模型結果定義一個置信度打分函式,則可使用基於重要性的攻擊方法。以文字分類為例,對文字中的每個詞語,計算將該詞語刪除或替換為空格前後,文字分到正確類別上置信度分數(比如分到該類別的機率值)的變化量,將這個變化量作為這個詞語重要性的分數,變化量越大越重要。然後,對重要性高的詞語進行改動。
如果上述條件均不具備,則攻擊者通常訓練一個替代模型,然後針對替代模型,構造對抗樣本,由於對抗樣本具有一定可遷移性,可以用這些樣本對目標模型進行攻擊。在使用替代模型的情況下,構造對抗樣本就可以運用白盒攻擊中的一些方法。
三、語義等價問題的對抗攻擊
2019年,百分點與北京市科委一起主辦了資料智慧創新應用大賽,大賽聚焦於智慧問答中的語義等價問題的對抗攻擊,要求參賽者透過研究智慧對話的魯棒性問題進行演算法創新,來提高對話系統的“思考能力”和“解決問題”的能力,讓機器實現從“聽見”到“聽懂”,最終提升使用者體驗感。
在這個過程中,判斷兩個問題是否語義等價,是基於FAQ的問答系統的核心環節。例如:“市政府管轄哪些部門?”和“哪些部門受到市政府的管轄?”是語義等價的兩個問題,後者的答案可以回答前者;而“市政府管轄哪些部門?”和“市長管轄哪些部門?”則為不等價的問題。在問答系統實際使用中,使用者問的一個問題可能和知識庫中問題語義等價,但使用者的問題表述方式和用詞多樣,有的會出現不影響理解的多字、少字、錯字、語氣詞、停頓等;有的問題則和知識庫裡的問題字面上很相近,但由於關鍵資訊的不同,二者語義並不完全等價。如果針對第一種情況,系統仍然能判斷為等價,第二種情況能判斷為不等價,則能較好地保證使用者的使用體驗。
如本文第一節所述,對抗攻擊是指對模型的輸入樣本作微小改動,這個改動不影響樣本的真實輸出(如真實類別),但對應的模型輸出改變的過程。在這裡,我們對這個概念稍作擴充套件,將對輸入作微小改動,使得輸出由正確變為錯誤的,都認為是對抗攻擊。
兩個問題原本是不等價的,大多數情況,這兩個問題字面上就相差比較大,經過微小改動,往往仍然是不等價的,而且模型預測結果也不容易出錯,所以對抗樣本的構造沒有涉及這種情況,而是針對兩個問題原本等價的情況進行,這種情況又分改動以後仍然等價和不等價兩種情況。
由於對抗樣本的構造過程中,沒有待攻擊的模型的資訊,因此這裡對抗樣本的構造是個黑盒攻擊的過程。我們利用比賽訓練集,訓練了一個基於BERT的語義等價模型,來輔助對抗樣本的構造。對兩個等價問題經過改造後不等價的情況,我們採取人工給問題中的某個詞加影響語義的修飾限定成分或將關鍵詞換成非同義詞的方式改造,然後看模型是否仍然判斷為等價,如果是,則改造成功。對兩個等價問題,經過改造後仍然等價的情況,我們主要透過人工給原問題換同音字、形近字、同義詞、增加無意義詞或不影響語義的修飾限定成分的方式改造,同時保證所做的改造是合理且不改變語義的,改造後,看模型是否判斷為不等價,如果是,則改造成功。
第二種情況,改動往往不容易成功,為了提高針對性,我們對一組兩個問題中的每個詞語,將其刪除後,計算模型預測兩個問題為等價的機率值,根據每個詞語對應的機率值從低到高的順序,對詞語排序,排在前面的詞語,認為是對模型預測這兩個問題等價比較重要的詞語,在問題改造時,重點圍繞這些詞語進行。構造的對抗樣本舉例如下圖:
四、文字對抗攻擊的防禦策略
針對文字對抗攻擊的防禦策略主要包括兩個方面,一方面是去發現對抗樣本,比如有一些對抗攻擊,是將文字中的字改成音近字、形近字或錯字,可以檢測包含這類異常字的文字,然後對其做額外的處理;另一方面是對模型進行對抗性訓練,包括在訓練樣本中加入對抗樣本,對損失函式和模型結構進行改動等,本次大賽方案中有一些應對對抗攻擊的策略,具體在下面章節介紹。
五、DIAC大賽方案分享
DIAC大賽優勝隊伍普遍選擇RoBERTa_wwm作為語義等價任務的基礎模型,即將兩個問題拼起來,進入模型,然後選擇[cls]位置對應的向量,經過一個全連線層和softmax操作,輸出在2個類別上的機率。在模型訓練之前,進行了對抗樣本的資料增強;在模型訓練階段,採用FocalLoss作為損失函式,利用Fast Gradient Method(FGM)在embedding層上新增擾動;在測試集上作預測時,對疑似對抗樣本進行糾錯。
5.1 資料增強
根據對抗樣本舉例,透過以下方式進行了資料增強:
方法一:音近字替換、形近字替換、同義詞替換、詞序調整。用開源的音近字、形近字、同義詞詞典,以一定比例對問題中的字或詞進行替換,同時限制一組問題中替換的總字數小於3,或以一定比例對問題中的詞語詞序隨機調整,限制最遠的詞序調整,兩個詞彙間隔不超過2個詞。
方法二:反義詞替換、增加或刪除否定詞。以一定比例進行將問題中的某個詞替換為反義詞、增加或刪除問題中的否定詞,如:“未”、“沒有”、“無”、“非”,並修改樣本標籤。
方法三:用開源的錯別字校正工具,對問題進行校正,矯正結果矯正錯誤率接近100%,但錯誤矯正隻影響1-2個字,不影響對問題的理解,故可以用這種方式生成對抗樣本。
透過上面的一種或幾種方式,進行資料增強,訓練的模型與不進行資料增強相比,在最終測試集上的宏F1值有約1.5~2個百分點的提升。
5.2 智慧糾錯
針對對抗樣本特點,有下面幾種糾錯方式:
方法一:召回與待糾錯問題相似的問題,對比相似片段,進行糾錯。具體做法是:以兩個問題分詞集合的差集中包含的詞語數目作為二者相關性的一個度量。對一個問題,從整個資料集合中,召回一些和它相關性較高的問題。相關問題召回後,接著對原問題與相關問題進行共現的相似文字片段查詢,文字片段相似採用漢明距離作為度量,由於一般對抗樣本中錯別字都只有一個,若是有兩個錯別字一般都是連在一起的,因此將漢明距離小於2且滿足不同字必須連續做為判斷相似文字片段的依據。
相似片段找到後,對相似片段的每個位置進行一一對比,如果不同,考慮這兩個字是否是同音字,如果不是同音的字再考慮是否是形近字,若都不是就不進行糾錯。判斷是否同音採用一個漢字轉拼音的模組,同形的判斷採用筆順的編輯距離作為相似度的判斷,同音或同形的錯別字在相似文字片段中的位置確定後,接下來就是確定兩個文字片段哪個有錯別字。透過對相似片段分詞,然後計算所有詞的在訓練集中出現次數的總和,判定總和小的片段包含錯別字,然後用總和大的對總和小的進行修正。
方法二:統計問題中詞語上下文的ngram,根據ngram為對抗樣本中的錯誤詞語尋找糾錯建議。具體做法為:對問題進行分詞及詞性標註,對具有詞性為m、nr、ns、nt、nz、r、x、w的詞替換為對應的詞性標記。對每個詞語,分別統計上文的一、二、三元ngram和下文一、二、三元ngram共6個詞條,新增到ngram詞表裡。在糾錯階段,對問題中的詞W,利用其上下文的6個ngram詞條和前一步統計的ngram詞表,獲得糾錯的候選詞及候選詞的詞頻,基於拼音編輯距離,計算候選詞與詞W的拼音相似度。按照如下公式,進行候選詞得分計算:
其中x為候選詞,c為原錯詞,d為詞表,為候選詞的詞頻,為候選詞與原錯詞的拼音相似度數,為對應的詞表字典的權重。對所有候選詞按照分值從大到小進行排序。取前N(這裡取N為10)個,如果存在候選詞與錯詞的編輯距離小於等於1,則優先返回這個候選詞,否則返回所有候選詞分值最高的詞。
方法三:將測試樣本中兩個句子中的同音字或形近字相互替換。當句A中連續兩個字的讀音與句B中連續兩個字的讀音相同時,可以用B中的同音字替代A中同音字,構造句A',那麼A'與B即可組成樣本[A',B]。同理可以構造[A,B'],它們與[A,B]共同組成一組測試樣本,用訓練好的模型預測這組測試樣本,預測結果只要存在一個正樣本,即認為原測試樣本為正樣本。
透過上面的方式,對測試集進行糾錯,預測結果的宏F1值有約2~3個百分點的提升。
5.3 Focal Loss
在給出的訓練集中,正負樣本比例較不平衡,適合採用Focal Loss作為損失函式。Focal Loss公式如下:
透過設定α的值來控制正負樣本對總的loss的共享權重,α取比較小的值來降低多的那類樣本的權重,透過設定γ來減少易分類樣本的權重,從而使得模型在訓練時更專注於難分類的樣本。
實驗表明,使用Focal Loss相比於不使用FocalLoss作為損失函式,驗證集預測結果的宏F1值有約0.5個百分點的提升。
5.4 Fast Gradient Method
對抗訓練採用的是Fast Gradient Method(FGM),其目的是提高模型對小的擾動的魯棒性,擾動新增在bert模型的字向量上。對於分類問題,具體做法就是新增一個對抗損失:
上式表達的意思即,對樣本x加入的擾動radv是可以使得預測為分類y的損失最大,radv的定義如下:
在具體訓練時採取的損失,是原始損失與對抗損失的組合。實驗表明,使用FGM訓練的模型和沒有使用的模型相比,驗證集的宏F1值能有約0.5~1個百分點的提升。
5.5 各種方法的效果
總結上面提到的幾種方法,在該任務上的效果如下表:
大賽優勝隊伍以上面幾種方案為主。第一名採取了除上面智慧糾錯以外的方案,同時,針對只是在區域性進行個別詞的增刪改替換的對抗樣本,設計了Absolute Position-Aware 的模型輸入方式進行捕捉,另外,在固定的網路結構中進行對抗訓練。第二名和第三名的隊伍,沒有做太多資料增強,在使用Focal Loss和Fast Gradient Method的同時,將重點放在了智慧糾錯上,他們分別設計了巧妙的智慧糾錯方案,利用對抗樣本和其他樣本之間的相似特性,進行糾錯,取得了不錯的效果。
綜合看前三名的隊伍,除了資料增強和對抗訓練等其他任務中也可能有效的方法,他們針對本次比賽的賽題特點,從資料出發,進行對抗樣本的發現與糾錯,方法巧妙,最終脫穎而出。
六、總結
透過這次比賽,大家對防禦智慧問答中語義等價問題的對抗攻擊、增強模型魯棒性的方法進行了許多探索與實踐,發現在資料處理階段的資料增強、對抗樣本糾錯和模型訓練階段使用Focal Loss和採用FGM的方法進行訓練是行之有效的策略。這些實踐與結論,將實現機器與人之間更加智慧的對話,為實際的生產生活帶來切實幫助。當然,隨著研究的深入與應用的普及,還會出現新的對抗攻擊的方法,我們也期待新的防禦策略被發明,共同促進模型魯棒性的提升,使系統更好地落地應用。
參考資料
[1] Wang, W., Wang,L., Wang, R., Ye, A., & Tang, B. (2019). A Survey: Towards a Robust DeepNeural Network in Text Domain. arXiv preprint arXiv:1902.07285.
[2] Wei Emma Zhang,Quan Z. Sheng, Ahoud Alhazmi, and Chenliang Li. 2019. Adversarial Attacks onDeep Learning Models in Natural Language Processing: A Survey. 1, 1 (April2019), 40 pages.
https://doi.org/10.1145/nnnnnnn.nnnnnnn
[3] DIAC大賽優勝隊伍(比較牛的丹稜街5號、觀、沐鑫、XiaoduoAI-NLP、zhys513、蘇州課得樂-強行跳大)解決方案