小白快收藏!一文學會目前最火NLP三大方法:基於TransFormer、RNN\CNN、機器學習!真實實例+解決方法快速入門!

2021-02-08 AI算法案例之家
NLP(Natural Language Processing自然語言處理)自然語言是人類智慧的結晶,自然語言處理是人工智慧中最為困難的問題之一,而對自然語言處理的研究也是充滿魅力和挑戰的。中文自動分詞(Chinese word segmentation)詞性標註(Part-of-speech tagging)自然語言生成(Natural language generation)文本分類(Text categorization)信息檢索(Information retrieval)信息抽取(Information extraction)機器翻譯(Machine translation)

今天,給大家帶來幾種NLP基礎理論與方法,我們將使用實例+解決方法的方式為大家逐步講解。

實例說明

1.nlp-getting-started 是kaggle入門機器學習競賽之一

(https://www.kaggle.com/c/nlp-getting-started)

對於希望開始使用自然語言處理的數據科學家而言,這一特殊挑戰是完美的。比賽數據集不是太大,即使你沒有太多的個人計算能力,則可以完成所有的工作。最好是有一臺Jupyter Notebook。感興趣的可以去官網自行嘗試。2.預測推特是否與自然災害相關,屬於文本分類(二分類)問題
(https://www.kaggle.com/c/nlp-getting-started)

接下來我們將主要以這個實例為例,介紹NLP案例的基本解決方法。首先讓我們看看kaggle官方給的關於這個比賽的資料:

1.DATA

   train.csv- 訓練集

   test.csv- 測試集

   sample_submission.csv- 格式正確的樣本提交文件

2.詳細描述

   id- 每個推文的唯一標識符

   text- 推文

   location- 發送推文的位置(可以為空白)

   keyword- 推文中的特定關鍵字(可以為空白)

   target- 僅在train.csv中,這表示某條推文是否與真正的災難有關1(0)

3.目的 :預測哪些推文是關於真實災難的,哪些不是        預測給定的推文是否是一場真正的災難。如果是這樣,請預測一個1。如果不是,請預測0。數據

 這是train當中的數據,test中和這個一樣。

      俗話說,數據與特徵工程決定了模型的上限,改進算法只不過是逼近這個上限。所以我們先來分析分析這個比賽的數據吧。

據分析,訓練樣本當中真實較多,有4000多個,假的有3000多個。


字符數比較

可以看出,兩者的分布似乎幾乎相同。推文中120到140個字符是最常見的。

下面,我們將使用多種方法來完成這次競賽!


第一種:基於機器學習的方法

1.特徵提取

  TfidfVectorizer:在詞頻的基礎上使用文本頻率加權,基本思想是出現在眾多文本中的詞缺乏區分性

    2.定義模型並進行訓練:LogisticRegression第二種:基於RNN/CNN的方法——詞嵌入將詞表示成高維向量的方法,基本思想是利用海量語料庫對詞進行特徵提取,使得相似的詞具有相似的向量表示

解決具體任務時,可以從頭訓練詞嵌入,但是通常使用預訓練的詞嵌入

google: https://code.google.com/archive/p/word2vecglove: https://nlp.stanford.edu/projects/glovefasttext: https://fasttext.cc/docs/en/english-vectors.html

keras實現:

tf.keras.layers.Embedding

Input shape: 2D tensor with shape: (batch_size, input_length),每個單詞的index

Output shape: 3D tensor with shape: (batch_size, input_length, embeddi

ELMo:對相同的詞在不同的上下文中生成不同的詞向量

處理文本數據(即單詞序列)的常用方法

基本思想是遍歷所有時刻(單詞序列),在每個時刻(單詞)考慮當前時刻(單詞)的輸入以及上一時刻(單詞)的輸出

LSTM:為了解決梯度消失導致的無法學習長期依賴的問題,LSTM在普通RNN的基礎上引入cell state存儲長期依賴信息,以遺忘門,輸入門,輸出門控制cell state

2.GRU:簡化版的LSTM,通常效果與LSTM相似,參數更少,不容易過擬合

實踐結果:

    

基於CNN的方法——CNN

1.通過一維卷積層能夠識別序列中的局部模式

2.keras卷積層實現:

tf.keras.layers.Conv1D

Input shape: 3D tensor with shape: (batch_size, input_length, embedding_size),每個單詞的向量表示,通常通過詞嵌入得到

Output shape: 3D tensor with shape: (batch_size, output_length, num_filters),每個部分的向量表示

3.keras池化層實現:

tf.keras.layers.GlobalMaxPool1D

tf.keras.layers.GlobalAveragePooling1D

Input shape: 3D tensor with shape: (batch_size

input_length, num_filters),每個部分的向量表示

Output shape: 3D tensor with shape: (batch_size, 

num_filters),每個句子的向量表示

實踐結果:

第三種:基於transformer的方法google提供預訓練模型(可以看作transformer的encoder部分)解決具體任務時,首先需要需要根據bert的要求構造輸入,然後需要利用bert的輸出構造模型,最後進行訓練(fine tune)

keras實現(transformer庫)transformer.TFBertModel

Input shape: 2D tensor with shape: (batch_size, input_length),每個單詞的index,以及相應的attention_mask和token_type_ids

Output shape: 3D tensor with shape: (batch_size,input_length, hidden_size),每個時刻的hidden 

state以及2D tensor with shape: (batch_size, hidden_size),每個句子的向量表示,即第一個時刻的hidden state

GPU顯存消耗巨大,需要根據可用的計算資源設置

sequence_length和batch_size,另外可以考慮gradient accumulation

RoBERTa,DistilBERT,ALBERT:bert的優化版本(例如優化超參數,優化參數數量)

實踐結果:

最終結果對比:

本期分享結束,想了解更多更前沿的人工智慧比賽和算法,快關注我們吧!


關注公眾號:數競之家

學習更多kaggle+天池競賽方案,競賽算法


關注公眾號:北美科研之家

了解最新國內外留學科研信息

相關焦點

  • 深度學習建模方法,首先需要了解建模的思路
    深度學習建模方法的教學,首先需要講解建模的思路,然後才是使用的計算機建模工具的使用,目前有相關主流程式語言的入門教程,可以推薦華為雲安全部門負責人張勇教授的,其介紹了linux編程環境下如何操作建模機器學習深度學習的環境配置,並分享了多年經驗的建模實踐和驗證過程。
  • NLP三大特徵提取器全梳理:RNN vs CNN vs Transformer
    我想一時半會兒可能不會那麼快,畢竟算法開發可是個很漫長的過程。現在我們就來探究一下,在 NLP 特徵提取方面,算法是怎樣做到一浪更比一浪強的。RNN(循環神經網絡)RNN 與 CNN(卷積神經網絡)的關鍵區別在於,它是個序列的神經網絡,即前一時刻的輸入和後一時刻的輸入是有關係的。
  • nlp領域發生了新的技術突破,用attention機制研究nlp領域
    近期,nlp領域發生了一系列的技術突破。包括:attention機制,cnn,adaptive attention network(an),兩層cnn相比較,an表現優於一層的cn。lstm,已經有了兩種不同的,看似性能和效率差異不大的attention機制:rnnattention,lstmattention。今天我們將從這兩種attention機制開始研究nlp領域突破性技術!
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • Facebook AI的DETR:一種基於Transformer的目標檢測方法
    前不久,Facebook開源了一個這樣的框架,DETR(DEtection TRansformer)在本文中,我們將快速了解目標檢測的概念,然後研究DETR及其帶來的好處。目標檢測在計算機視覺中,目標檢測是一項將對象與背景區分開,並預測圖像中存在的對象的位置和類別的任務。當前的深度學習方法試圖將其作為分類問題或回歸問題或綜合兩者的目標檢測任務來解決。
  • 乾貨 | 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 請收下這份2018學習清單:150個最好的機器學習,NLP和Python教程
    在秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 想快速入門NLP?我們測評了15門最火課程,幫你找到最適合的
    下面就來看一下這條學習路徑,並挑你最感興趣的課程吧!我理想中的NLP課程是這樣的:圍繞著實踐問題展開的;只涵蓋對實踐有用的信息,夾雜一些更深入的理論知識作為補充資料;內容是與時俱進的,至少每次業界有重大新聞,它都能及時更新相應內容;由一群業界經驗豐富的專家編寫的;包含能解決業務實際問題的真實代碼。
  • CNN與RNN中文文本分類-基於TensorFlow 實現
    經過數據預處理,數據的格式如下:配置項CNN可配置的參數如下所示,在cnn_model.py中。具體參看cnn_model.py的實現。大致結構如下:運行 python run_cnn.py train,可以開始訓練。
  • 如何看待Transformer在CV上的應用前景,未來有可能替代CNN嗎?
    有種開倒車的意思,cnn的提出本質上是為了解決參數量和性能的問題的,通過share weights的方式大大減少了參數量。所以聰明的人提出了share weights的思想,大大減少了參數量,後續工作也就變成了如何擴大感受野,從而有了加深網絡深度,金字塔,或者其他方法。如果cnn是參數量和性能的折衷,那麼某種意義上,我覺得transformer對於cv領域來說就是cnn和fc的折衷,沒什麼稀奇,只能說有錢了,有設備了,往全局性上去考量很正常。
  • 歷史最全深度學習與NLP核心概念、模型、策略及最新論文整理分享
    本資源整理了與自然語言處理(NLP)相關的深度學習技術核心概念,以及2019年概念相關最新的論文,涉及算法優化(Adam,Adagrad、AMS、Mini-batch SGD等),參數初始化(Glorot initialization、 He initialization),模型約束(Dropout、 Word Dropout、Patience、Weight Decay等),歸一化,損失函數類型,網絡訓練方法
  • NLP入門之路及學習方法:從任務實踐入手!
    ,科學有效的方法是找到切入點,一個具體任務。筆者從2018年初開始接觸機器學習,現在是某一線網際網路公司的NLP算法工程師。從小白一步步走來,積累了一些學習和實踐過程中的經驗。現在,從個人情況、入門心得和案例分享三個方面,介紹一下NLP的入門經歷和學習方法,希望能幫助到大家。
  • 這可能是最簡單易懂的機器學習入門(小白必讀)
    從機器學習的概念,到機器學習的發展史,再到機器學習的各類算法,最後到機器學習的最新應用,十分詳盡。適合小白快速了解機器學習。—Bill Gates在我看來,機器學習最早的發展是Thomas Bayes 在1783年發表的同名理論,貝斯定理發現了給定有關類似事件的歷史數據的事件的可能性。這是機器學習的貝葉斯分支的基礎,它尋求根據以前的信息尋找最可能發生的事件。換句話說,Bayes定理只是一個從經驗中學習的數學方法,是機器學習的基本思想。
  • Transformer在CV領域有可能替代CNN嗎?
    目前已經有基於Transformer在三大圖像問題上的應用:分類(ViT),檢測(DETR)和分割(SETR),並且都取得了不錯的效果。那麼未來,Transformer有可能替換CNN嗎,Transformer會不會如同在NLP領域的應用一樣革新CV領域?後面的研究思路可能會有哪些?
  • 乾貨 | 請收下這份機器學習清單(附下載連結)
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 2018AI學習清單丨150個最好的機器學習和Python教程
    本文分成四個部分,機器學習,NLP,Python,和數學基礎。在每一小節我會隨機引入一些問題。由於這方面學習材料太豐富了,本文並未涵括所有內容。   機器學習1、機器學習就是這麼好玩!Part III:https://ml.berkeley.edu/blog/2017/02/04/tutorial-3/ 機器學習入門與應用:實例圖解(toptal.com)https://www.toptal.com/machine-learning/machine-learning-theory-an-introductory-primer
  • 學習的筆記可以通過以下方法有如下幾種
    近期,nlp領域發生了較大的波動,特別是老生常談的gpt-2、self-attention等的變革加速了cnn和encoder-decoder思想在某些nlp任務中的鋪開進程。本文著重介紹co-attention、強化學習中的attention和equivariance(矩陣意義)。
  • 2019,不可錯過的NLP「高光時刻」
    https://jair.org/index.php/jair/article/view/11640The Gradient發表了一篇不錯的文章,其詳細闡述了強化學習目前的局限性,並提供了一條潛在的分級強化學習的前進道路。很快,其他人又發布了一套優秀的教程來幫助入門強化學習。
  • Python機器學習入門實例
    本文來源《Python程序設計案例教程——從入門到機器學習(微課版)》1.
  • 小白必看的機器學習入門知識
    但大家知道為什麼人工智慧會火起來嗎?人工智慧、深度學習以及機器學習之間的關係是怎樣的呢?一、為什麼最近幾年人工智慧再次火爆?二、人工智慧、機器學習以及深度學習是什麼樣的關係?所以入門機器學習也要從基礎知識開始。