NLP系列1:NER


寫在前面:在初學nlp時的第一個任務——NER,嘗試了幾種方法,cnn+crf、lstm+crf、bert+lstm+crf,毫無疑問,最后結果時Bert下效果最好。

1、關於NER:

  NER即命名實體識別是信息提取的一個子任務,但究其本質就是序列標注任務。

  eg:

  sentence:壹   叄    去 參加一個 NER      交         流         會  

  tag:   B_PER I_PER O O O O O B_ORG I_ORG I_ORG I_ORG

  (咱們暫且認為這個實體標記是正確的)

  按照CoNLL2003任務中,LOC-地名、PER-人名、ORG-機構名、MISC-其他實體,其他此被標記為O,B代表實體名的開始位置,I代表實體名的中間位置。(在具體任務中標記不一,按照自己的任務中進行標記即可)

  NER是一個基礎問題,不會不行,但是也是一個非常重要的問題,下面將按照實現過程中碰到的問題依次進行闡述(小白,如有錯誤,請瘋狂留言噴我,一定改正)。首先的明白NER是一個分類任務,也叫序列標注,其實就是對文本的不同實體標記上對應的標簽。

方法主要如下:

  • 基於規則:按照語義學的先驗定義規則,由於語言的復雜性,這個方法很難制定出良好的規則;
  • 基於統計學:統計學就是根據大量文本,在其中找到規律,代表作有HMM、CRF;
  • 神經網絡:神經網絡的大放異彩在各個領域都點亮了一片天空,當然不會遺忘,其中在NER方面主要有CNN+CRF、LSTM+CRF。

2、老婆孩子熱炕頭

  1. 分詞

  分詞工具主要采用了jieba分詞,在結巴原始詞庫的基礎上加載自定義詞典,方法參考參考

    import jieba
    jieba.load_userdict('..\data\\result_SVM_to_jiaba.txt')
    import jieba.posseg as pseg

  jieba支持三種分詞模式:

  • 精准模式:試圖將句子最精確的切分,適合文本分析;
  • 全模式:把句子中所有的詞都掃描出來,速度快,但是不支持歧義;
  • 搜索引擎模式:在精准模式的基礎上,在對長詞進行切分,提高召回率,適用於搜索引擎分詞。

  jieba對中文的支持還是很好的,當然現在還有很多中文方面的工具:jiagu、等等

  2.實體標記

  假設我們的任務是從0開始的,沒有開源數據集,在做的時候先對實體詞進行摘取(eg:python開發工程師、全棧開發等等),作為自己的實體詞庫,並加載到jieba中進行分詞庫中,對數據進行分詞,分詞后按照我們抽取的實體詞進行標記(eg:B_PER\I_PER\B_LOC\I_LOC...)。在這兒我們已經有了NER的老婆(標記好的數據)。

  3.一號兒子(CNN+CRF) [paper]

   論文名字:Convolutional Neural Network Based Semantic Tagging with Entity Embeddings

  • 詞嵌入:Word2Vec

   Word2Vec是一種有效的神經網絡模型,該模型采用非結構化的文本並學習每個單詞的嵌入特性,這些嵌入特性捕獲了語法和語義的不同關系,有趣的是可以進行線性線性操作,eg: man + woman ~= queen.

  值得提出的是Word2Vec工具主要包含兩個模型,分別是skip-gram(跳字模型)和CBOW(連續詞袋模型),以及兩種高效的訓練方法negative sampling和softmax。word2vec就是將詞轉換為向量,這個向量就可以認為是詞的特征向量,詞是nlp中最細粒度的,詞組成句子,句子組成段落、篇章...。我們將詞的向量表示出來,那么更粗粒度的表示也可表示出來。

  

  注意:在CBOW模型中,我們最后得到的詞向量實際上權重矩陣,我們並不關心最后的輸出是什么,我們輸入層是詞的onehot編碼,V是我們最后學習到的向量維度大小,C為我們詞的上下文個數,學習目標就是讓我們預測的中間詞和onehot的label越小越好,這樣權重矩陣就是我們最終所需的。

  skip-gram和CBOW類似,只不過是反過來用當前詞預測上下文。

  

  【計算方式可參考論文里,這里打公式太麻煩了,有大佬知道有啥插件或者啥啥能方便快捷的打出來求告知一下。】

  • 關系約束模型(RTM):

  利用一個詞的其他相關詞來進行預測這個詞的向量,利用單詞之間synonymous 或者 paraphrase構建知識庫。將這個先驗當作編碼,再對Word2Vec中刪除上下文作為目標函數來學習嵌入。原論文公式(3)。

  

  • 聯合模型

  就是將Word2Vec和RTM聯合起來,

  

  • CNN+CRF

  命名實體識別由於有長距離依賴問題,大部分都用rnn家族模型,盡可能記住長序列的信息來對句子進行標注。但是RNN家族在GPU的利用上不如CNN,RNN無法做到並行。CNN的優勢在於可以並行速度快,但是隨着卷積層的增加,最后只得到原始信息的一小塊,這就不利於句子的序列標注。當然后來也有人提出IDCNN(膨脹卷積),暫不討論。而本論文中的CNN是一個基本的CNN,就不在贅述,論文主要針對不同的嵌入向量學習在模型下的F-score做了對比,結果如下:

  

  4.兒子二號(LSTM+CRF)

  5.兒子三號(CNN+LSTM+CRF)

  上面這兩也沒啥說的了,就是換了個模型。LSTM和CNN相信大家都很熟悉,只需要針對自己的問題設置合理的結構就行。LSTM一般都用雙向的LSTM。后期再補充一個CRF內容。

3、思維導圖

才疏學淺,如有錯誤,請不吝賜教!  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM