日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NLP——序列标注之命名实体识别

發布時間:2023/12/20 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NLP——序列标注之命名实体识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概述

序列標注包括自然語言處理中的分詞,詞性標注,命名實體識別,關鍵詞抽取,詞義角色標注等。解決方案是NN模型(神經網絡模型)+CRF

命名實體識別(Named Entity Recognition,簡稱NER)是指識別文本中具有特定意義的實體,主要包括人名、地名、機構名、日期、時間、百分數、貨幣等。這里就需要理解句子的詞性。

詞性是詞匯的語法屬性,是連接詞匯到句法的橋梁,一個詞的詞性與它在句子中的成分密切相關。在傳統語法學中,漢語句子主要分為主語、謂語、賓語、定語、狀語、補語6個成分。詞性分為名詞、動詞、代詞、形容詞、數量詞、副詞等。

例:游泳是一種很好的健身運動

在NLP任務中,中文分詞、詞性標注、組塊標注、淺層語法分析等任務,標記和切分觀察序列都是序列結構,解決此類問題的模型基本是概率圖模型中的序列算法,這一系列問題通常稱為標記序列學習或序列學習。任務的順序是命名實體識別->詞性標注->語義組塊標注。但從算法應用策略的復雜性而言,命名實體識別是最復雜的序列標注任務。

詞性標注常用算法:最大熵

詞性標注常用工具:stanfordNLP

序列標簽分成兩個部分,第一部分是IOB表示法(或BIO表示法),B代表當前詞在一個組塊的開始,I代表在當前詞在一個組塊中,O代表當前詞不在任意一個組塊中。另一個變種,start/end表示法:

  • B代表當前詞在一個組塊的開始
  • I代表在當前詞在一個組塊內部
  • E代表在當前詞在一個組塊終結
  • O代表當前詞不在任意一個組塊中
  • S代表在當前詞是一個組塊,該組塊只有一個詞

例如:(快遞信息識別)張三18625584663廣東省深圳市南山區學府路東百度國際大廈(P代表人名,T是電話號,A是地址,A1是省,A2是市,A3是區,A2是街道(詳細地址))

文本符號
張三P
18625584663T
廣東省A1
深圳市A2
南山區A3
學府路東百度國際大廈A4

用BIO表示法:

從語言分析的全過程來看,命名實體識別屬于中文分詞中未登錄詞識別的范疇,也是信息抽取、信息檢索、機器翻譯、問答系統等多種自然語言處理技術必不可少的組成部分。

2.相關算法

2.1 概率圖模型

概率圖模型分為貝葉斯網絡和馬爾科夫網絡,貝葉斯網絡是有向圖結構,馬爾科夫網絡是無向圖結構。概率無向圖模型又稱為馬爾科夫隨機場,是無向圖表示的聯合概率分布。

定義:設有聯合概率分布P(Y),由無向圖G=(V,E)表示,在圖G中,結點表示隨機變量,邊表示隨機變量之間的依賴關系。如果聯合概率分布P(Y)滿足成對、局部和全局馬爾科夫性,就成次聯合概率分布為概率無向圖模型。

  • 成對:有兩個結點u,v,對應的隨機變量是Yu,Yv,其他結點為Yo,在Yo的條件下隨機變量Yu,Yv是條件獨立
  • 局部:有一個結點v,其它與v有邊相連的集合是w,其他結點是o,則在Yw的條件下Yv,Yo是獨立的
  • 全局:結點集合A,B在無向圖G中被集合C分開的任意結點集合,則在Yc條件下Ya,Yb條件獨立

2.2 條件隨機場

在條件概率模型P(Y|X)中,Y是輸出變量(表示標記序列),X是輸入變量(需要標注的序列),學習時,通過極大似然估計得出條件概率模型,預測時,對于給定的輸入序列x,求出條件概率最大的輸出序列y。

CRF定義:設X和Y是隨機變量,P(Y|X)是給定X的條件下Y的條件概率分布,若隨機變量Y構成了一個由無向圖G=(V,E)表示的馬爾科夫隨機場,即

是除v以外的其他結點,在無向圖中與v有邊連接的所有結點w。稱P(Y|X)為條件隨機場。

linear chain CRF定義:設X,Y是線性鏈表示的隨機變量序列,在X的條件下,Y的條件概率分布構成條件隨機場,即滿足馬爾科夫性

序列標注任務除了長句子以外,還有標簽之間的依賴性需要關注。與簡單的分類任務不同,命名實體識別是需要獲取標簽之間的依賴關系,例如張三(P-B,P-I)是人名,且張和三存在依賴關系。

如下圖,CRF是屬于概率圖模型,綠點是輸入(GRU的輸出),紅點是輸出,點和點之間的邊分為兩類,一類是x和y之間的連線,表示其相關性,另一類是相鄰y之間的相關性。

?

3.算法包

3.1 詞性標注和NER

#詞性標注 import nltk pos = nltk.word_tokenize(text) pos_ = nltk.pos_tag(pos) for i in pos_:print(''.join(i)) pos__ = nltk.ne_chunk(pos_, binary=True) for j in pos_:print(''.join(j))

3.2 CRF

在paddlenlp中,實現線性鏈條件隨機場。

4.實現(快遞單信息提取)

(1)讀取數據,并將數據轉換成paddle可以接受的模型數據

from paddle.utils.download import get_path_from_url URL = "https://paddlenlp.bj.bcebos.com/paddlenlp/datasets/waybill.tar.gz" get_path_from_url(URL,"./")for i, line in enumerate(open('data/train.txt')):if 0 < i < 5:print ('%d: ' % i, line.split()[0])print (' ', line.split()[1])

數據集格式:

(2)轉換paddle數據集格式

  • 定義trans_func(),直接用map映射,或者是在dataLoader時作為函數傳入。

直接map映射,對數據執行convert_example函數里邊的操作。

?

通過partial操作,partial除了函數外,還需指定函數中的參數(tokenizer,max_seq_length),此處函數只做對比,僅參考。

最終將數據轉換成有特征和標簽的train、dev數據,或只有特征的test數據,快遞單信息識別是獲取到了快遞單信息詞向量列表(token_ids),詞向量長度(len(token_ids)),標簽列表(label_ids)。

  • 定義dataLoader

對數據進行轉換,相關函數有Pad(對數據進行填充),Stack(對數據進行堆疊),Tuple,對上述過程的2個特征信息,1個標簽信息進行轉換。

還可以進行隨機采樣,這里有兩種采樣方式,在CPU中,使用paddle.io.BatchSampler,在GPU中,使用paddle.io.DistributedBatchSampler。

if?mode?==?'train'?and?use_gpu:sampler?=?paddle.io.DistributedBatchSampler(dataset=dataset,?batch_size=batch_size,?shuffle=True) else:shuffle?=?True?if?mode?==?'train'?else?Falsesampler?=?paddle.io.BatchSampler(dataset=dataset,?batch_size=batch_size,?shuffle=shuffle)

然后轉換成DataLoader。

?dataloader?=?paddle.io.DataLoader(dataset,batch_sampler=sampler, #隨機采用return_list=True,collate_fn=batchify_fn #數據轉換)

(3)定義模型(包括模型定義、模型優化、損失函數計算等)

此處選擇的模型是Bi-GRU+CRF,其中GRU的輸出是CRF的輸入。

模型其他參數:

ChunkEvaLluator函數是集成了precision、recall和f1的評價指標,常用于序列標記任務。

模型訓練、預測、評估不做講述!!!

具體代碼實現:https://aistudio.baidu.com/aistudio/projectdetail/2042911

總結

以上是生活随笔為你收集整理的NLP——序列标注之命名实体识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。