編者按算法
深度學習模型應用普遍,但其自身有必定的「脆弱性」,即模型輸入的微小改動,在不影響人判斷的狀況下,可能使模型的輸出出錯,這個過程被稱爲對模型的對抗***。針對對抗***的研究,早期集中在圖像領域,近幾年,文本領域也逐漸增多。2019年,百分點從業務實際出發,與北京市科學技術委員會聯合主辦了數據智能創新應用(DIAC)大賽,聚焦於智能問答中的語義等價問題的對抗***。通過一個多月的研究實踐,參賽隊伍對該任務作了富有成效的探索,在優勝隊伍的方案中,數據加強、對抗樣本糾錯、使用Focal Loss損失函數和基於FGM的對抗訓練成爲行之有效的策略。安全
本文做者:陳旭網絡
1、對抗***概述機器學習
隨着近些年深度學習的快速發展,深度神經網絡逐漸成爲機器學習領域的主流模型,被普遍應用於計算機視覺、天然語言處理等領域,但在研究與應用的同時,人們漸漸發現,深度神經網絡具備必定的「脆弱性」。好比,在圖像識別中,對模型的輸入也就是圖像像素值作輕微擾動,這種擾動不會改變圖像的實際分類,人也難以覺察,卻可能致使模型對圖像的分類出錯;或者在一段文本的情感分析中,文本中有一個字寫錯,這個錯誤不影響人的理解,也不會改變人對這段文本的情感判斷,模型卻可能判斷出錯。這類錯誤一方面會下降人們對系統使用體驗的好感度,另外一方面可能會形成嚴重的後果,從而也限制了深度神經網絡在一些安全要求很高的場景下的應用。ide
近幾年,人們開始對這一問題展開研究。如前文例子那樣,人們精心設計一些樣本,模型卻判斷出錯,這個過程就是對抗***,這些樣本就是對抗樣本。經過研究對抗***以及相應的防護策略,有助於提升神經網絡的魯棒性和可解釋性。函數
2、文本對抗***的主要方法工具
深度神經網絡對抗***的研究最先在圖像領域展開,如今在文本領域也有了一些相關研究。針對文本的對抗***,從不一樣的角度有不一樣的分類,常見的有:根據構造對抗樣本時基於的信息分爲白盒***和黑盒***;根據錯誤的輸出是不是某個特定的結果,分爲定向***和非定向***;根據改動文本的類型,分爲基於字、詞和句子的對抗***。這裏咱們主要介紹一下第一種分類。學習
2.1 白盒***測試
白盒***,是指在構造對抗樣本的時候,有所要***的模型的知識,如模型的結構、參數、權重等。屬於白盒***的***方式有不少種,這裏舉例介紹其中一種:基於FGSM的方法。例如,對於一個輸入樣本,一種方法是計算模型的損失對輸入向量(對於文原本說,輸入向量通常是文本的字向量或詞向量)的梯度,而後將梯度量綱最大的維度所屬的字定義爲「熱字」,包含足夠多熱字而且出現頻繁的短語被定義爲熱短語。而後基於熱短語,進行增刪改,生成對抗樣本。設計
2.2 黑盒***
黑盒***與白盒***相反,在構造對抗樣本的時候,沒有所要***的模型的知識。若是這個模型能被***者使用,則***者能夠經過不斷嘗試,修改模型輸入,觀察模型輸出來構造對抗樣本。
若是不具有上述條件,可是可以對模型結果定義一個置信度打分函數,則可以使用基於重要性的***方法。以文本分類爲例,對文本中的每一個詞語,計算將該詞語刪除或替換爲空格先後,文本分到正確類別上置信度分數(好比分到該類別的機率值)的變化量,將這個變化量做爲這個詞語重要性的分數,變化量越大越重要。而後,對重要性高的詞語進行改動。
若是上述條件均不具有,則***者一般訓練一個替代模型,而後針對替代模型,構造對抗樣本,因爲對抗樣本具備必定可遷移性,能夠用這些樣本對目標模型進行***。在使用替代模型的狀況下,構造對抗樣本就能夠運用白盒***中的一些方法。
3、語義等價問題的對抗***
2019年,百分點與北京市科委一塊兒主辦了數據智能創新應用大賽,大賽聚焦於智能問答中的語義等價問題的對抗***,要求參賽者經過研究智能對話的魯棒性問題進行算法創新,來提升對話系統的「思考能力」和「解決問題」的能力,讓機器實現從「聽見」到「聽懂」,最終提高用戶體驗感。
在這個過程當中,判斷兩個問題是否語義等價,是基於FAQ的問答系統的核心環節。例如:「市政府管轄哪些部門?」和「哪些部門受到市政府的管轄?」是語義等價的兩個問題,後者的答案能夠回答前者;而「市政府管轄哪些部門?」和「市長管轄哪些部門?」則爲不等價的問題。在問答系統實際使用中,用戶問的一個問題可能和知識庫中問題語義等價,但用戶的問題表述方式和用詞多樣,有的會出現不影響理解的多字、少字、錯字、語氣詞、停頓等;有的問題則和知識庫裏的問題字面上很相近,但因爲關鍵信息的不一樣,兩者語義並不徹底等價。若是針對第一種狀況,系統仍然能判斷爲等價,第二種狀況能判斷爲不等價,則能較好地保證用戶的使用體驗。
如本文第一節所述,對抗***是指對模型的輸入樣本做微小改動,這個改動不影響樣本的真實輸出(如真實類別),但對應的模型輸出改變的過程。在這裏,咱們對這個概念稍做擴展,將對輸入做微小改動,使得輸出由正確變爲錯誤的,都認爲是對抗***。
兩個問題本來是不等價的,大多數狀況,這兩個問題字面上就相差比較大,通過微小改動,每每仍然是不等價的,並且模型預測結果也不容易出錯,因此對抗樣本的構造沒有涉及這種狀況,而是針對兩個問題本來等價的狀況進行,這種狀況又分改動之後仍然等價和不等價兩種狀況。
因爲對抗樣本的構造過程當中,沒有待***的模型的信息,所以這裏對抗樣本的構造是個黑盒***的過程。咱們利用比賽訓練集,訓練了一個基於BERT的語義等價模型,來輔助對抗樣本的構造。對兩個等價問題通過改造後不等價的狀況,咱們採起人工給問題中的某個詞加影響語義的修飾限定成分或將關鍵詞換成非同義詞的方式改造,而後看模型是否仍然判斷爲等價,若是是,則改形成功。對兩個等價問題,通過改造後仍然等價的狀況,咱們主要經過人工給原問題換同音字、形近字、同義詞、增長無心義詞或不影響語義的修飾限定成分的方式改造,同時保證所作的改造是合理且不改變語義的,改造後,看模型是否判斷爲不等價,若是是,則改形成功。
第二種狀況,改動每每不容易成功,爲了提升針對性,咱們對一組兩個問題中的每一個詞語,將其刪除後,計算模型預測兩個問題爲等價的機率值,根據每一個詞語對應的機率值從低到高的順序,對詞語排序,排在前面的詞語,認爲是對模型預測這兩個問題等價比較重要的詞語,在問題改造時,重點圍繞這些詞語進行。構造的對抗樣本舉例以下圖:
4、文本對抗***的防護策略
針對文本對抗***的防護策略主要包括兩個方面,一方面是去發現對抗樣本,好比有一些對抗***,是將文本中的字改爲音近字、形近字或錯字,能夠檢測包含這類異常字的文本,而後對其作額外的處理;另外一方面是對模型進行對抗性訓練,包括在訓練樣本中加入對抗樣本,對損失函數和模型結構進行改動等,本次大賽方案中有一些應對對抗***的策略,具體在下面章節介紹。
5、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的詞替換爲對應的詞性標記。對每一個詞語,分別統計上文的1、2、三元ngram和下文1、2、三元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的同時,將重點放在了智能糾錯上,他們分別設計了巧妙的智能糾錯方案,利用對抗樣本和其餘樣本之間的類似特性,進行糾錯,取得了不錯的效果。
綜合看前三名的隊伍,除了數據加強和對抗訓練等其餘任務中也可能有效的方法,他們針對本次比賽的賽題特色,從數據出發,進行對抗樣本的發現與糾錯,方法巧妙,最終脫穎而出。
6、總結
經過此次比賽,你們對防護智能問答中語義等價問題的對抗***、加強模型魯棒性的方法進行了許多探索與實踐,發如今數據處理階段的數據加強、對抗樣本糾錯和模型訓練階段使用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、zhys51三、蘇州課得樂-強行跳大)解決方案