1. 程式人生 > >實體命名識別(NER)任務中加詞典

實體命名識別(NER)任務中加詞典

導讀

  • 本文主要介紹一下,怎麼在NER任務中融合詞典。

一、NER任務簡介

NER(Named Entity Recognition,命名實體識別)又稱作專名識別,是自然語言處理中常見的一項任務,使用的範圍非常廣。命名實體通常指的是文字中具有特別意義或者指代性非常強的實體,通常包括人名、地名、機構名、時間、專有名詞等。NER系統就是從非結構化的文字中抽取出上述實體,並且可以按照業務需求識別出更多類別的實體,比如產品名稱、型號、價格等。因此實體這個概念可以很廣,只要是業務需要的特殊文字片段都可以稱為實體。

二、LSTM模型融合詞典

1、特徵向量的構建

  • 給定一個句子sentence X 和一個外部詞典Dictionary,記作D。 我們通過對句子中的每個詞
    xi
    抽取特徵模板,通過特徵模板上的詞產生特徵向量。特徵模板描述為如下圖
    這裡寫圖片描述
  • 對於每一個出現在特徵的文字片段,我們都產生一個二進位制的值來表示這個片段是否在詞典 D 中,如果在詞典中可以找到,我把這個詞的向量表示為1,否則,表示為0。

舉個例子說明:
美國總統特朗普意識到對中國發起 貿 易戰是極其愚蠢的做法。
2-gram 起貿 貿易
3-gram 發起貿 貿易戰
4-gram 國發起貿 貿易戰是
5-gram 中國發起貿 貿易戰是極
對應詞典有“貿易”、“貿易戰”,那我們的特徵向量 t 可以表示為:

0 1 0 1 0 0 0 0

2、model的設計

  • 設計圖如下,這也是參考論文:Neural Networks Incorporating Dictionaries for Chinese Word Segmentation。2018年AAAI論文做法:
    這裡寫圖片描述
    圖片中的t1t2....tn 表示我們抽取的特徵向量,作為一個LSTM向量的輸入,而exi表示訓練語料的字元過完embedding之後的結果,在這裡作為其中一個LSTM的輸入。
    然後我們可以分別得到兩個過完LSTM的隱層結果,用公式表示:

    hix=BiLSTM(hi1x,hi+1x,exi) hit=BiLSTM(hi1t,hi+1t,ti)

    然後我們把這hixhit結果concat在一起,用公式表示:

    hi=hixhit
    接著過一個線性層,得到預測的結果。

3、部分程式碼展示

按照model設計部分,展示主要的程式碼設計部分:

        x_emb = self.embed(batch_feature.word_features)  
        x_emb = self.dropout_embed(x_emb)
        lstm_out, _ = self.bilstm(x_emb)
        lstm_out_t, _ = self.bilstm_t(t_emb)
        lstm_out = torch.cat([lstm_out, lstm_out_t], 2)
        lstm_out = F.tanh(lstm_out)
        logit = self.linear(lstm_out)

三、實驗結果

引數設計:

[data]  ###這裡可以不用看,可以忽略,因為是專案中人為標註的。
train_file = ./data/cropus/4/train_sentence6.txt
test_file = ./data/cropus/4/test_sentence6.txt

[Model]
lstm_layers = 1
embed_dim = 300
lstm_hiddens = 300
dropout_embed = 0.2
dropout = 0.4

[Optimizer]
adam = True
learning_rate = 0.001
learning_rate_decay = 1
weight_decay = 1e-8
clip_max_norm = 10

[Train]
use_cuda = True
epochs = 1000
batch_size = 16
test_batch_size = 16

實驗結果,用的評測指標是F值評測,最終跑到資料是74.6%比我預期的效果要差,因為我沒有用詞典的效果是77.2%。這裡寫這篇部落格的目的純粹是介紹一下加詞典的方法,也對這次做的東西做一個小結吧。

四、結果分析

  • 主要分析我這個失敗的做法失敗的原因吧,沮喪。。

1、第一我覺得我的model的設計有點簡單,但是做法是沒有問題,畢業人家在分詞做出效果了。
2、就是我外部詞典質量是存在重大問題,我試著對比詞典中比較明顯的詞和訓練語料的詞,發現基本匹配不到,所以導致我的特徵向量普遍都是零。
3、第三我覺得本身我的語料就是存在一些問題,但是這不是主要的原因,因為據我對語料的分析觀察,發現有些可以標註為實體的內容沒有標註出來。

參考文獻

[1] Neural Networks Incorporating Dictionaries for Chinese Word Segmentation