四、文本對抗攻擊的防御策略

針對文本對抗攻擊的防御策略主要包括兩個方面,一方面是去發(fā)現(xiàn)對抗樣本,比如有一些對抗攻擊,是將文本中的字改成音近字、形近字或錯字,可以檢測包含這類異常字的文本,然后對其做額外的處理;另一方面是對模型進行對抗性訓練,包括在訓練樣本中加入對抗樣本,對損失函數(shù)和模型結構進行改動等,本次大賽方案中有一些應對對抗攻擊的策略,具體在下面章節(jié)介紹。

五、DIAC大賽方案分享

DIAC大賽優(yōu)勝隊伍普遍選擇RoBERTa_wwm作為語義等價任務的基礎模型,即將兩個問題拼起來,進入模型,然后選擇[cls]位置對應的向量,經過一個全連接層和softmax操作,輸出在2個類別上的概率。在模型訓練之前,進行了對抗樣本的數(shù)據增強;在模型訓練階段,采用FocalLoss作為損失函數(shù),利用Fast Gradient Method(FGM)在embedding層上添加擾動;在測試集上作預測時,對疑似對抗樣本進行糾錯。

5.1 數(shù)據增強

根據對抗樣本舉例,通過以下方式進行了數(shù)據增強:

方法一:音近字替換、形近字替換、同義詞替換、詞序調整。用開源的音近字、形近字、同義詞詞典,以一定比例對問題中的字或詞進行替換,同時限制一組問題中替換的總字數(shù)小于3,或以一定比例對問題中的詞語詞序隨機調整,限制最遠的詞序調整,兩個詞匯間隔不超過2個詞。

方法二:反義詞替換、增加或刪除否定詞。以一定比例進行將問題中的某個詞替換為反義詞、增加或刪除問題中的否定詞,如:“未”、“沒有”、“無”、“非”,并修改樣本標簽。

方法三:用開源的錯別字校正工具,對問題進行校正,矯正結果矯正錯誤率接近100%,但錯誤矯正只影響1-2個字,不影響對問題的理解,故可以用這種方式生成對抗樣本。

通過上面的一種或幾種方式,進行數(shù)據增強,訓練的模型與不進行數(shù)據增強相比,在最終測試集上的宏F1值有約1.5~2個百分點的提升。

5.2 智能糾錯

針對對抗樣本特點,有下面幾種糾錯方式:

方法一:召回與待糾錯問題相似的問題,對比相似片段,進行糾錯。具體做法是:以兩個問題分詞集合的差集中包含的詞語數(shù)目作為二者相關性的一個度量。對一個問題,從整個數(shù)據集合中,召回一些和它相關性較高的問題。相關問題召回后,接著對原問題與相關問題進行共現(xiàn)的相似文本片段查找,文本片段相似采用漢明距離作為度量,由于一般對抗樣本中錯別字都只有一個,若是有兩個錯別字一般都是連在一起的,因此將漢明距離小于2且滿足不同字必須連續(xù)做為判斷相似文本片段的依據。

相似片段找到后,對相似片段的每個位置進行一一對比,如果不同,考慮這兩個字是否是同音字,如果不是同音的字再考慮是否是形近字,若都不是就不進行糾錯。判斷是否同音采用一個漢字轉拼音的模塊,同形的判斷采用筆順的編輯距離作為相似度的判斷,同音或同形的錯別字在相似文本片段中的位置確定后,接下來就是確定兩個文本片段哪個有錯別字。通過對相似片段分詞,然后計算所有詞的在訓練集中出現(xiàn)次數(shù)的總和,判定總和小的片段包含錯別字,然后用總和大的對總和小的進行修正。

方法二:統(tǒng)計問題中詞語上下文的ngram,根據ngram為對抗樣本中的錯誤詞語尋找糾錯建議。具體做法為:對問題進行分詞及詞性標注,對具有詞性為m、nr、ns、nt、nz、r、x、w的詞替換為對應的詞性標記。對每個詞語,分別統(tǒng)計上文的一、二、三元ngram和下文一、二、三元ngram共6個詞條,添加到ngram詞表里。在糾錯階段,對問題中的詞W,利用其上下文的6個ngram詞條和前一步統(tǒng)計的ngram詞表,獲得糾錯的候選詞及候選詞的詞頻,基于拼音編輯距離,計算候選詞與詞W的拼音相似度。按照如下公式,進行候選詞得分計算:

其中x為候選詞,c為原錯詞,d為詞表,為候選詞的詞頻,為候選詞與原錯詞的拼音相似度數(shù),為對應的詞表字典的權重。對所有候選詞按照分值從大到小進行排序。取前N(這里取N為10)個,如果存在候選詞與錯詞的編輯距離小于等于1,則優(yōu)先返回這個候選詞,否則返回所有候選詞分值最高的詞。

方法三:將測試樣本中兩個句子中的同音字或形近字相互替換。當句A中連續(xù)兩個字的讀音與句B中連續(xù)兩個字的讀音相同時,可以用B中的同音字替代A中同音字,構造句A’,那么A’與B即可組成樣本[A’,B]。同理可以構造[A,B’],它們與[A,B]共同組成一組測試樣本,用訓練好的模型預測這組測試樣本,預測結果只要存在一個正樣本,即認為原測試樣本為正樣本。

通過上面的方式,對測試集進行糾錯,預測結果的宏F1值有約2~3個百分點的提升。

5.3 Focal Loss

在給出的訓練集中,正負樣本比例較不平衡,適合采用Focal Loss作為損失函數(shù)。Focal Loss公式如下:

通過設定α的值來控制正負樣本對總的loss的共享權重,α取比較小的值來降低多的那類樣本的權重,通過設置γ來減少易分類樣本的權重,從而使得模型在訓練時更專注于難分類的樣本。

實驗表明,使用Focal Loss相比于不使用FocalLoss作為損失函數(shù),驗證集預測結果的宏F1值有約0.5個百分點的提升。

5.4 Fast Gradient Method

對抗訓練采用的是Fast Gradient Method(FGM),其目的是提高模型對小的擾動的魯棒性,擾動添加在bert模型的字向量上。對于分類問題,具體做法就是添加一個對抗損失:

上式表達的意思即,對樣本x加入的擾動radv是可以使得預測為分類y的損失最大,radv的定義如下:

在具體訓練時采取的損失,是原始損失與對抗損失的組合。實驗表明,使用FGM訓練的模型和沒有使用的模型相比,驗證集的宏F1值能有約0.5~1個百分點的提升。

5.5 各種方法的效果

總結上面提到的幾種方法,在該任務上的效果如下表:

大賽優(yōu)勝隊伍以上面幾種方案為主。第一名采取了除上面智能糾錯以外的方案,同時,針對只是在局部進行個別詞的增刪改替換的對抗樣本,設計了Absolute Position-Aware 的模型輸入方式進行捕捉,另外,在固定的網絡結構中進行對抗訓練。第二名和第三名的隊伍,沒有做太多數(shù)據增強,在使用Focal Loss和Fast Gradient Method的同時,將重點放在了智能糾錯上,他們分別設計了巧妙的智能糾錯方案,利用對抗樣本和其他樣本之間的相似特性,進行糾錯,取得了不錯的效果。

綜合看前三名的隊伍,除了數(shù)據增強和對抗訓練等其他任務中也可能有效的方法,他們針對本次比賽的賽題特點,從數(shù)據出發(fā),進行對抗樣本的發(fā)現(xiàn)與糾錯,方法巧妙,最終脫穎而出。

六、總結

通過這次比賽,大家對防御智能問答中語義等價問題的對抗攻擊、增強模型魯棒性的方法進行了許多探索與實踐,發(fā)現(xiàn)在數(shù)據處理階段的數(shù)據增強、對抗樣本糾錯和模型訓練階段使用Focal Loss和采用FGM的方法進行訓練是行之有效的策略。這些實踐與結論,將實現(xiàn)機器與人之間更加智能的對話,為實際的生產生活帶來切實幫助。當然,隨著研究的深入與應用的普及,還會出現(xiàn)新的對抗攻擊的方法,我們也期待新的防御策略被發(fā)明,共同促進模型魯棒性的提升,使系統(tǒng)更好地落地應用。

參考資料

[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. 

[3]?DIAC大賽優(yōu)勝隊伍(比較牛的丹棱街5號、觀、沐鑫、XiaoduoAI-NLP、zhys513、蘇州課得樂-強行跳大)解決方案

【 本文作者:陳旭 】

分享到

xiesc

相關推薦