NLP極簡數據加強+源碼

對於變化莫測的神經網絡,雖然有時候模型表現很好,但可能把輸入加一些噪聲就會生成徹底相反的輸出,這時候數據加強就很重要,一方面能夠根據當前數據分佈生成更多樣化的訓練數據,提高模型的效果;另外一方面能夠生成有噪聲的測試數據,評估模型的魯棒性。

NLP的數據加強一直是個難題,原本數據的標註成本就高一些,還很差添添補補,好比情感分類,把「不高興」的「不」字去掉了,整句話的意思就變了。相比之下,圖像不只能夠翻轉、平移、加噪,還有高級的GAN,不知道NLP何時也能gan一把。git

今天分享一個很簡單的、基於馬爾可夫鏈的生成式數據加強方法,比起純規則的增刪改來講,能生成多樣化的句子,比起生成模型來講又沒那麼難,主要用於分類任務,能夠快速實現,看看在本身的任務上有沒有效果。github

源碼已上傳至:https://github.com/leerumor/nlpcab/blob/master/code/markov_data_augmentation.py算法

基於馬爾可夫鏈的數據加強

馬爾可夫鏈指具備馬爾可夫性質的離散隨機變量的集合,馬爾可夫性質是指在隨機變量的序列中,下一狀態的機率分佈只由當前狀態決定,與以前的時間無關,即:網絡

[公式]

這樣咱們只要知道全部詞之間的條件機率分佈,就能夠一個個地把詞拼成句子。ide

具體的作法很簡單,就是用詞典(dict)保存兩個詞之間的關係,每一個詞是一個key,value是在該詞後出現的全部詞的列表。另外,能夠只統計特定label下數據的條件機率,即每一個label對應一個詞典,這樣就能根據label生成文本。最後,爲了儘量和數據集的分佈一致,能夠提早把句子的長度分佈統計好,並在最後生成句子時指定長度。svg

大概的算法以下:學習

  1. 預處理:分詞、統計句子長度分佈
  2. 根據各個label的訓練數據生成多個詞典
  3. 根據詞典和長度生成句子文本

用這種方法生成的數據可讀性並不強,但在詞向量+maxpooling這種分類場景下卻比較實用,並且也能夠做爲帶噪聲的評估集查看模型效果。測試

效果展現

任務:新聞分類spa

數據:ChineseGLUE裏頭條新聞標題分類任務TNEWS的訓練數據(連接見文末)設計

一共15個類,每類我都生成了一些數據,這裏選取一些能看的分享下,以空格分割詞語:

news_story: 救護車 當婚車 , 無心 聽到 她 是 我 婚前
news_story: 想得美 ! 河北 情義 女子 離家出走 , 孩子 說
news_story: 一月 後 妻子 打工 回家 聽到 兒媳 摳 ,
news_culture: 墨家 爲何 ? 黃藥師 無心間 透出 答案 了 ?
news_culture: 劊子手 ? 推薦 ? 哪些 ? 原來 這麼 差
news_entertainment: 大師 的 主題曲 , 馬 天宇 古裝 的 眼光
news_entertainment: 淪爲 家妓 , 網友 : 想 與其 替身 合照
news_sports: 跌下 神壇 ? 聽清哥 分析 兩隊 情侶 求婚 引
news_sports: 中德之戰 , 索薩 信任 威廉 王子 , 如此 精明
news_finance: 第二十三 次 , 伊利 和 中國 股市 什麼時候能 突破
news_finance: 周海江 : 馬化騰 怒 懟 馬斯克 豪擲 4 月
news_house: 90% 以上 ? 遠 嗎 ? 揭露 高房價 時間
news_house: 部委 發文 , 如今 一 樓盤 搶先 拋售 房子
news_car: 裸價 6 款 北汽 要火 ? 爲啥 最 適合
news_car: 發達國家 的 SUV 車型 性價比 如何 選擇 — CT6
news_edu: 伴 孩子 補 補課 , 再 不 懂得 感恩
news_tech: 億萬 身家 雷軍 爲何 小商販 小商店 都 盯上 了
news_military: 紙上談兵 , 如今 盟友 失敗 ! 伊朗 研發 核武器
news_travel: 大本營 住宿 100 元 , 上海 英式 設計 驚豔
stock: 下行 通道 , 年銷售額 2000 萬 , 怎麼 走
news_agriculture: 強調 大力 整頓 , 農村 產業 示範園區 點名 ,
news_game: 蛇皮 走位 絲血 反殺 ! 《 劍網 三 》複製代碼

目前尚未測試過在實際分類任務上的效果,但原po主在kaggle上的Uber Ride Reviews Dataset情感分析數據上獲得了不錯的結論。分別用這種方法生成了Augmented Train和Fake Test,用TF-IDF做爲特徵,感知機、邏輯迴歸、隨機森林做爲模型,效果以下:

原po沒用更復雜的模型,因此也不能確定的說這種方法就好,只是對於簡單模型有提高。

總結

介紹這個數據加強方法主要是由於它能夠快速實現,又比純規則的增刪改強一些,能夠用在簡單的文本分類任務中;但具體狀況也視模型而定,若是現有的數據不少、模型複雜度也夠,加強訓練語料可能會帶來反效果,但這並不妨礙咱們生成一些假樣本測試模型的穩定性。另外,從生成的樣本能夠看出有很多地方能夠改進,例如加入結束符、去重等。

感謝閱讀~

參考資料:

  1. https://towardsdatascience.com/text-data-augmentation-makes-your-model-stronger-7232bd23704
  2. https://github.com/chineseGLUE/chineseGLUE
  3. https://www.kaggle.com/purvank/uber-rider-reviews-dataset

hi all!最近終於有了本身的公衆號,叫NLPCAB,原本想叫LAB,但以爲和一我的能撐起實驗室我就上天了,因此取了諧音CAB,有些可愛而且意味深長?以後會努力和Andy發乾貨,也但願各位同窗投稿學習筆記~

相關文章
相關標籤/搜索