精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一些在文本數據量不夠大的時候可用的一些實用方法

MqC7_CAAI_1981 ? 來源:未知 ? 作者:李倩 ? 2018-11-19 17:39 ? 次閱讀

深度學習往往需要大量數據,不然就會出現過度擬合,本文作者提出了一些在文本數據量不夠大的時候可用的一些實用方法,從而賦予小數據集以價值。

作為數據科學家,為你的問題選擇正確的建模方法和算法應該是你最重要的技能之一。

幾個月前,我致力于解決一個文本分類問題,關鍵在于判斷哪些新聞文章與我的客戶相關。

我只有一個幾千條帶標注的新聞數據集,所以我從簡單的經典機器學習建模方法開始著手解決這個問題,例如用TF-IDF來做Logistic回歸分類。

一般說來,這些模型適用于長文檔(如新聞、博客文章等)的文本分類,然而在我這個任務上的執行效果卻不盡如人意,僅僅略好于隨機分類。

在研究了一番模型錯在哪里之后,我發現詞袋模型(bag of words)這種表示方法對于這個任務是不夠的,我需要一個能深入理解文檔語義的模型。

深度學習模型在需要深入理解文本語義的復雜任務上已經表現出了非常好的效果,例如機器翻譯,自動問答,文本摘要,自然語言推理等。

這看起來對我的任務而言是一個很完美的方法,但是為了訓練深度學習模型通常需要數十萬甚至數百萬個被標記的數據,而我只有一個很小的數據集。怎么辦呢?

通常,我們需要大量數據來訓練深度學習模型目的在于避免過擬合。深度神經網絡具有非常非常多的參數,因此如果沒有用足夠的數據去訓練它們,它們往往會記住整個訓練集,這就會導致訓練的效果很好,但在測試集上的效果就很差了。

為了避免因缺乏大量數據而導致的這種情況,我們需要使用一些特殊的技巧!一擊必殺的技巧!

在這篇文章中,我將展示一些由我自己開發或是我在文章、博客、論壇、Kaggle和其他一些地方發現的方法,看看它們是如何在沒有大數據的情況下讓深度學習更好地完成我的任務的。其中許多方法都基于計算機視覺中廣泛使用的最佳實踐。

一個小小的免責聲明:我并不是一個深度學習方面的專家,這個項目也只是最初幾個我用深度學習完成的大項目之一。這篇文章的所有內容都是對我個人經驗的總結,有可能我的方法并不適用你的問題。

正則化

正則化方法以不同的形式呈現在機器學習模型中,它可以被用來避免過擬合。這些方法的理論性很強,對于大多數問題來說是一種普遍通用的方式。

L1和L2正則化

這些方法可能是最古老的,并且在許多機器學習模型中已經使用多年。

使用這種方法時,我們將權重的大小添加到我們試圖最小化的模型損失函數中。這樣,模型將盡量使權重變小,同時那些對模型影響不明顯的權重值將被減小到零。

通過這種方式,我們可以使用更少數量的權重來記住訓練集。

更多細節:

https://towardsdatascience.com/only-numpy-implementing-different-combination-of-l1-norm-l2-norm-l1-regularization-and-14b01a9773b

Dropout

Dropout是另一種較新的正則化方法。它具體的做法是在訓練期間,神經網絡中的每個節點(神經元)按照P的概率被丟棄(即權重被設置為零)。這樣,網絡就不會依賴于特定的神經元和他們之間的相互作用,而必須在不同的部分學習每一種模式。這就使得模型專注于學習那些更易于適用到新數據的重要模式。

Early stopping

Early stopping是一種簡單的正則化方法,只需監控驗證集性能,如果你發現驗證集性能不再提高,就停止訓練。這種方法在沒有大數據的情況下非常重要,因為模型在5-10次甚至更少次數的迭代之后,通常就開始出現過擬合了。

減少參數的數量

如果你沒有大型數據集,那你就應該謹慎設計網絡中的層數和每層的神經元數量。 此外,向卷積層這樣的特殊層比全連接層具有更少的參數,所以如果可能的話,使用它們會非常有用。

數據增強

數據增強是一種通過更改訓練數據而不改變數據標簽的方式來創建更多訓練數據的方法。 在計算機視覺中,許多圖像變換的方法被用于數據集大小進行擴增,例如翻轉、裁剪、縮放、旋轉等。

這些變換對于圖像類型的數據很有用,但不適用于文本,譬如翻轉出像“狗愛我”這樣無意義的句子,用它來訓練模型的話將不會有什么效果。以下是一些針對文本的數據的增強方法:

同義詞替換

在這種方法中,我們隨機的選一些詞并用它們的同義詞來替換這些詞,例如,我們將句子“我非常喜歡這部電影”改為“我非常喜歡這個影片”,這樣句子仍具有相同的含義,很有可能具有相同的標簽。但這種方法對我的任務來說沒什么用,因為同義詞具有非常相似的詞向量,因此模型會將這兩個句子當作相同的句子,而在實際上并沒有對數據集進行擴充。

回譯

在這個方法中,我們用機器翻譯把一段英語翻譯成另一種語言,然后再翻譯回英語。這個方法已經成功的被用在Kaggle惡意評論分類競賽中。

例如,如果我們把“I like this movie very much”翻譯成俄語,就會得到“Мне очень нравится этот фильм”,當我們再譯回英語就會得到“I really like this movie”。回譯的方法不僅有類似同義詞替換的能力,它還具有在保持原意的前提下增加或移除單詞并重新組織句子的能力。

文檔裁剪

新聞文章通常很長,在查看數據時,我發現對于分類來說并不需要整篇文章。 而且,我發現文章的主要想法通常會重復出現。

這讓我想到將文章裁剪為幾個子文章來實現數據增強,這樣我將獲得更多的數據。開始的時候我嘗試從文檔中抽取幾個句子并創建10個新文檔。這些新創建的文檔句子間沒有邏輯關系,所以用它們訓練得到的分類器性能很差。第二次,我嘗試將每篇文章分成若干段,每段由文章中五個連續的句子組成。這個方法就運行得非常好,讓分類器的性能提升很大。

生成對抗網絡

GAN是深度學習領域中最令人興奮的最新進展之一,它們通常用來生成新的圖像。下面這篇博客解釋了如何使用GAN進行圖像數據的數據增強,但它的一些方法或許也可以適用于文本數據。

博客鏈接:

https://towardsdatascience.com/generative-adversarial-networks-for-data-augmentation-experiment-design-2873d586eb59

遷移學習

遷移學習是指使用為其他任務訓練的網絡參數來解決你自己的問題,這些網絡參數通常是用大性數據集訓練得到的。遷移學習有時被用作某些層的初始化,有時也直接被用于特征提取讓我們免于訓練新模型。在計算機視覺中,從預先訓練的ImageNet模型開始是解決問題的一種常見的做法,但是NLP沒有像ImageNet那樣可以用于遷移學習的大型數據集。

預訓練的詞向量

一般應用于自然語言處理的深度學習網絡架構通常以嵌入層(Embedding Layer)開始,該嵌入層將一個詞由獨熱編碼(One-Hot Encoding)轉換為數值型的向量表示。我們可以從頭開始訓練嵌入層,也可以使用預訓練的詞向量,如 Word2Vec、FastText 或 GloVe。

這些詞向量是通過無監督學習方法訓練大量數據或者是直接訓練特定領域的數據集得到的。

預訓練的詞向量非常有效,因為基于大數據它們給模型提供了詞的上下文并減少了模型的參數,從而顯著地降低了過擬合的可能性。

更多有關詞嵌入的信息

https://www.springboard.com/blog/introduction-word-embeddings/

預訓練的句向量

我們可以將模型的輸入從單詞轉換為句子,用這種方法我們得到參數少并且性能好的簡單模型。為了做到這一點,我們可以使用預訓練的句子編碼器,如 Facebook 的InferSent或谷歌的通用句子編碼器。

我們還可以把數據集中未打標的數據用 skip-thought 向量或語言模型等方法訓練句子編碼器模型。

更多有關無監督句子向量的信息:

https://blog.myyellowroad.com/unsupervised-sentence-representation-with-deep-learning-104b90079a93

預訓練的語言模型

最近很多論文運用大量語料庫預訓練語言模型來處理自然語言任務得到了驚人的結果,如ULMFIT,Open-AI transformer和BERT。語言模型是通過前面的單詞預測句子中會出現的下一個單詞。

這種預訓練并沒有對我取得更好的結果起到真正的幫助,但文章給出了一些我沒有嘗試過的方法來幫助我做更好地微調。

一個關于預訓練語言模型很棒的博客:

http://ruder.io/nlp-imagenet/

預訓練無監督或自監督學習

如果掌握大量無標簽數據,我們可以使用無監督的方法如自動編碼器或掩碼語言模型去訓練模型,這樣僅僅依靠文本本身就可以做到。

對我來說另一個更好的選擇是使用自監督模型。自監督模型可以在沒有人工標注的情況下自動提取標簽。Deepmoji項目是一個很好的例子。

在Deepmoji項目中,作者們訓練了一個預測推文中表情符號的模型,在模型表現良好的情況下,他們使用網絡預先訓練了一個推文者的情緒分析模型來獲取表情符號預測模型的狀態。

表情符號預測和情緒分析顯然非常相關,因此它作為預訓練任務表現得非常好。自監督在新聞數據中的運用包括預測標題,報刊,評論數量,轉發數量等。自監督是一種非常好的預訓練方法,但通常很難分辨出代理標簽與真實標簽的關聯。

使用現成的網絡進行預訓練

在很多公司中,大部分用于不同任務的機器學習模型都建立在相同的數據集或類似的數據集上。例如推文,我們可以預測其主題、觀點、轉發數量等。最好通過已經成熟應用的網絡預先訓練你的網絡。對我的任務而言,應用這個方法確實可以提高性能。

特征工程

我知道深度學習“殺死”了特征工程,再談特征工程已經有點過時了。但是當你沒有大量數據時,通過特征工程幫助網絡學習復雜模式可以大大提高性能。例如,在我對新聞文章的分類過程中,作者、報刊、評論數、標簽以及更多特征可以幫助預測標簽。

多模式體系結構

我們可以用多模式體系結構將文檔級特征組合到我們的模型中。在多模式體系結構中,我們構建了兩個不同的網絡,一個用于文本,一個用于特征,合并它們的輸出層(無 softmax)并添加更多層。這些模型很難訓練,因為這些特征通常比文本具有更強的信號,因此網絡主要受特征的影響。

關于多模式網絡很棒的Keras教程

https://medium.com/m/global-identity?redirectUrl=https://becominghuman.ai/neural-networks-for-algorithmic-trading-multimodal-and-multitask-deep-learning-5498e0098caf

這種方法使我的模型提高了不到1%的性能。

詞級特征

詞級特征是另一種類型的特征工程,如詞性標注,語義角色標記,實體抽取等。我們可以將一個獨熱編碼表示或一個詞特征的嵌入與詞的嵌入相結合并將其用作模型的輸入。

我們也可以在這個方法中使用其他詞特征,例如在情感分析任務中我們可以采用情感字典并添加另一個維度嵌入其中,用 1 表示在字典中的單詞, 0 表示其他單詞,這樣模型可以很容易地學習它需要關注的一些詞。在我的任務中,我添加了某些重要實體的維度,這給模型帶來了一個很好的性能提升。

特征工程預處理

最后一種特征工程方法是以一種模型更容易學習的方式預處理輸入文本。一個例子是“詞干提取”,如果運動并不是一個重要標簽,我們可以用運動代替足球,棒球和網球這些詞,這將有助于神經網絡模型了解到不同運動之間的差異并不重要,可以減少網絡中的參數。

另一個例子是使用自動摘要。正如我之前所說,神經網絡在長文本上表現不佳,因此我們可以在文本上運行自動摘要算法,如 TextRank 并僅向神經網絡網絡提供重要句子。

我的模型

嘗試了本文中討論的方法的不同組合后,在我的項目中表現最好的模型是本文中提到分層注意力網絡(HAN),模型使用dropout 和 early stopping 作為正則化,并采用文檔剪裁的方法進行數據集增強。我使用預訓練的詞向量以及我公司的一個預訓練網絡(這個網絡使用了同樣數據,只是針對的任務不一樣)。

在做特征工程時,我新增了實體詞級特征到詞嵌入向量。這些變化使我的模型精確度提高了近 10%,模型效果從比隨機效果稍好一點上升到了到具有重要業務價值的水準。

深度學習在小數據集上的應用仍處于該研究領域的早期階段,但看起來它越來越受歡迎,特別是對于預訓練的語言模型,我希望研究人員和從業者能夠找到更多的方法使用深度學習,讓每一個數據集產生價值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8377

    瀏覽量

    132405
  • 數據集
    +關注

    關注

    4

    文章

    1205

    瀏覽量

    24641
  • 深度學習
    +關注

    關注

    73

    文章

    5492

    瀏覽量

    120975

原文標題:幾千條文本庫也能做機器學習!NLP小數據集訓練指南

文章出處:【微信號:CAAI-1981,微信公眾號:中國人工智能學會】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一些解決文本分類問題的機器學習最佳實踐

    文本分類是種應用廣泛的算法,它是各種用于大規模處理文本數據的軟件系統的核心,常被用于幫助電子郵箱過濾垃圾郵件,幫助論壇機器人標記不當評論。
    的頭像 發表于 07-31 09:28 ?7263次閱讀

    文本數據量不夠大時候可用一些實用方法,從而賦予小數據集以價值

    Dropout是另種較新的正則化方法。它具體的做法是訓練期間,神經網絡中的每個節點(神經元)按照P的概率被丟棄(即權重被設置為零)。這樣,網絡就不會依賴于特定的神經元和他們之間的相互作用,而必須在不同的部分學習每
    的頭像 發表于 11-19 09:16 ?5440次閱讀

    有關Redis的一些思考和理解

    。 我們能在網絡上輕易地找到關于 Redis 具體知識點的講解,但很少有文字說明為什么會有這項技術,筆者希望通過本文總結下個人目前對 Redis 的理解。 1. 初識 Redis 最開始的時候,筆者是通過網絡上面的一些項目教程
    的頭像 發表于 10-30 11:21 ?509次閱讀

    一些簡單趣味小電子制作教程

    一些簡單趣味小電子制作教程
    發表于 09-26 14:05 ?28次下載

    寫Java代碼的一些技巧分享

    時候我們為了統管理會把一些變量放到 yml 配置文件中
    的頭像 發表于 03-16 12:05 ?1323次閱讀

    介紹一些大功率IGBT模塊應用中的一些技術

    PPT主要介紹了大功率IGBT模塊應用中的一些技術,包括參數解讀、器件選型、驅動技術、保護方法以及失效分析等。
    發表于 09-05 11:36 ?781次閱讀

    get與post的請求一些區別

    今天再次看到這個問題,我也有了一些新的理解和感觸,臨時回顧了下 get 與 post 的請求的一些區別。
    的頭像 發表于 09-07 10:00 ?1365次閱讀

    一些對OpenMP進行優化的方法

    本文調研了一些對OpenMP進行優化的方法
    的頭像 發表于 10-18 09:44 ?1694次閱讀

    INCA的一些用法

    INCA的一些用法
    的頭像 發表于 11-10 15:32 ?8624次閱讀

    Linux C開發中的一些常用的調試技巧

    Linux使用gcc編譯程序的時候,對于調試的語句還具有一些特殊的語法。
    發表于 06-01 09:03 ?238次閱讀

    分享一些數據采集的資料

    分享最近在學的數據采集的一些資料2
    發表于 08-21 10:36 ?2次下載

    單片機“低耦合”的一些方法

    單片機“低耦合”的一些方法
    的頭像 發表于 10-17 18:30 ?476次閱讀

    gvim中常用的一些指令介紹

    Vim 編輯器中,有一些常用的指令可以幫助我們更高效地編輯文本。以下是一些 gvim 中常用的指令
    的頭像 發表于 10-10 15:47 ?1951次閱讀

    PCB抄板的一些方法

    拆掉所有器多層板抄板件,并且將PAD孔里的錫去掉。用酒精將PCB清洗干凈,然后放入掃描儀內,掃描儀掃描的時候需要稍調高一些掃描的像素, 以便得到較清晰的圖像。
    的頭像 發表于 11-15 17:04 ?882次閱讀
    PCB抄板的<b class='flag-5'>一些</b><b class='flag-5'>方法</b>

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發表于 11-22 09:17 ?683次閱讀
    分享<b class='flag-5'>一些</b>SystemVerilog的coding  guideline