這里邊主要識別的實體如圖所示,其實也就主要識別人名PER,機構ORG和地點LOC: B表示開始的字節,I表示中間的字節,E表示最后的字節,S表示該實體是單字節

例子:

實現架構:
1. 讀取數據集,數據集共三個文件,訓練集,交叉測試集和測試集,文件中每一行包含兩個元素,字和標識。每一句話間由一個空格隔開



2. 處理數據集
1) 更新數據集中的標簽,如: 單獨的B-LOC→S-LOC,B-LOC,I-LOC→B-LOC,E-LOC,B-LOC,I-LOC,I-LOC→B-LOC, I-LOC, E-LOC
2) 給每個char和tag分配一個id,得到一個包含所有字的字典dict,以及char_to_id, id_to_char, tag_to_id, id_to_tag, 將其存在map.pkl中
3. 准備訓練集
將訓練集中的每句話變成4個list,第一個list是字,如[今,天,去,北,京],第二個list是char_to_id [3,5,6,8,9],第三個list是通過jieba分詞得到的分詞信息特征,如[1,3,0,1,3] (1,詞的開始,2,詞的中間,3,詞的結尾,0,單個詞),第四個list是target,如[0,0,0,2,3](非0的元素對應着tag_to_id中的數值)
4. BatchManager 將訓練集划分成若干個batch,每個batch有20個句子,划分時,是現按句子長度從大到小排列
5. 配置model的參數
6. 構建模型
1)input: 輸入兩個特征,char_to_id的list以及通過jieba得到的分詞特征list
2)embedding: 預先訓練好了100維詞向量模型,通過查詢將得到每個字的100維向量,加上分詞特征向量,輸出到drouput(0.5)
3)bi-lstm
4)project_layer:兩層的Wx+b 邏輯回歸
5)loss_layer:內嵌了CRF