女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是嵌套實體識別

深度學(xué)習(xí)自然語言處理 ? 來源:深度學(xué)習(xí)自然語言處理 ? 作者:深度學(xué)習(xí)自然語言 ? 2022-09-30 15:19 ? 次閱讀

嵌套命名實體識別是命名實體識別中的一個頗具挑戰(zhàn)的子問題。我們在《實體識別LEAR論文閱讀筆記》與《實體識別BERT-MRC論文閱讀筆記》中已經(jīng)介紹過針對這個問題的兩種方法。今天讓我們通過本文來看看在嵌套實體識別上哪一個方法更勝一籌。

1. 嵌套實體識別

1.1 什么是嵌套實體識別

嵌套實體識別是命名實體識別中一個子問題。那么什么才是嵌套實體呢?我們看下面這個例子:

“北京天安門”是地點實體;

“北京天安門”中“北京”也是地點實體;兩者存在嵌套關(guān)系。

1.2 嵌套實體識別方法

CRF等傳統(tǒng)序列標(biāo)注方法無法應(yīng)用于嵌套實體識別。現(xiàn)階段,業(yè)界比較流行的是構(gòu)建實體矩陣,即用一個矩陣 來代表語料中的所有實體及其類型。

其中任一元素 表示類為 ,起點為 ,結(jié)尾為 的實體。比如在下圖所示實體矩陣中,就有兩個Location類的實體:北京、北京天安門。

通過這樣的標(biāo)注方式我們可以對任何嵌套實體進(jìn)行標(biāo)注,從而解決訓(xùn)練和解碼的問題。

在本文中,我們將對比目前接觸到的部分實體矩陣的構(gòu)建方法在 CMeEE 數(shù)據(jù)集(醫(yī)學(xué)NER,有一定比例的嵌套實體)上的表現(xiàn)。

2. 實體矩陣構(gòu)建框架

2.1 變量與符號約定

為了方便后續(xù)對比說明,這里我們先定義幾個統(tǒng)一的變量與符號。

首先,上文中 表示類為 ,起點為 ,結(jié)尾為 的實體。

在本實驗中,我們均使用 bert-base-chinese 作為 編碼器。假設(shè) 表示最后一層隱藏層中第 個 token 的 embedding,那么 和 分別表示經(jīng)過編碼器之后實體 start 和 end token 的embedding。

我們有公式 ,其中 就表示我們所需要對比的實體矩陣構(gòu)建頭(姑且這么稱呼)。

2.2 相關(guān)配置

在對比實驗中,除了不同實體矩陣構(gòu)建頭對應(yīng)的batch_size,learning_rate不同,所使用的編碼器、損失函數(shù)、評估方式以及訓(xùn)練輪次均保持一致。

2.3 對比方法

本文選取了四種實體矩陣構(gòu)建方法進(jìn)行比較,分別是:

GlobalPointer

TPLinker(Muti-head selection);

Tencent Muti-head

Deep Biaffine(雙仿射)。

3. 代碼實現(xiàn)

3.1 GlobalPointer

GlobalPointer 出自蘇劍林的博客GlobalPointer:用統(tǒng)一的方式處理嵌套和非嵌套NER[1]。

Global Pointer 的核心計算公式為:

其中 ,。

GlobalPointer 的核心思想類似 attention的打分機(jī)制,將多個實體類型的識別視為 Muti-head機(jī)制,將每一個head視為一種實體類型識別任務(wù),最后利用attention的score(QK)作為最后的打分。

為考慮Start和end之間距離的關(guān)鍵信息,作者在此基礎(chǔ)上引入了旋轉(zhuǎn)式位置編碼(RoPE),在其文中顯示引入位置信息能給結(jié)果帶來極大提升,符合預(yù)期先驗。

classGlobalPointer(Module):
"""全局指針模塊
將序列的每個(start,end)作為整體來進(jìn)行判斷
"""
def__init__(self,heads,head_size,hidden_size,RoPE=True):
super(GlobalPointer,self).__init__()
self.heads=heads
self.head_size=head_size
self.RoPE=RoPE
self.dense=nn.Linear(hidden_size,self.head_size*self.heads*2)

defforward(self,inputs,mask=None):
inputs=self.dense(inputs)
inputs=torch.split(inputs,self.head_size*2,dim=-1)
inputs=torch.stack(inputs,dim=-2)
qw,kw=inputs[...,:self.head_size],inputs[...,self.head_size:]
#RoPE編碼
ifself.RoPE:
pos=SinusoidalPositionEmbedding(self.head_size,'zero')(inputs)
cos_pos=pos[...,None,1::2].repeat(1,1,1,2)
sin_pos=pos[...,None,::2].repeat(1,1,1,2)
qw2=torch.stack([-qw[...,1::2],qw[...,::2]],4)
qw2=torch.reshape(qw2,qw.shape)
qw=qw*cos_pos+qw2*sin_pos
kw2=torch.stack([-kw[...,1::2],kw[...,::2]],4)
kw2=torch.reshape(kw2,kw.shape)
kw=kw*cos_pos+kw2*sin_pos
#計算內(nèi)積
logits=torch.einsum('bmhd,bnhd->bhmn',qw,kw)
#排除padding,排除下三角
logits=add_mask_tril(logits,mask)
returnlogits/self.head_size**0.5

3.2 TPLinker

TPLinker 來自論文《TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking》[2]。

TPLinker 原本是為解決實體關(guān)系抽取設(shè)計的方法,原型為《Joint entity recognition and relation extraction as a multi-head selection problem》[3]論文中的 Muti-head selection機(jī)制。此處選取其中用于識別實體部分的機(jī)制,作為對比方法。

TPLinker中相應(yīng)的計算公式如下:

其中

與GlobalPointer不同的是,GlobalPointer 是乘性的,而 Muti-head是加性的。這兩種機(jī)制,誰的效果更好,我們無法僅通過理論進(jìn)行分析,因此需要做相應(yīng)的對比實驗,從結(jié)果進(jìn)行倒推。但是在實際實現(xiàn)的過程中,筆者發(fā)現(xiàn)加性比乘性占用更多的內(nèi)存,但是與GlobalPointer中不同的是,加性仍然能實現(xiàn)快速并行,需要在計算設(shè)計上加入一些技巧。

classMutiHeadSelection(Module):

def__init__(self,hidden_size,c_size,abPosition=False,rePosition=False,maxlen=None,max_relative=None):
super(MutiHeadSelection,self).__init__()
self.hidden_size=hidden_size
self.c_size=c_size
self.abPosition=abPosition
self.rePosition=rePosition
self.Wh=nn.Linear(hidden_size*2,self.hidden_size)
self.Wo=nn.Linear(self.hidden_size,self.c_size)
ifself.rePosition:
self.relative_positions_encoding=relative_position_encoding(max_length=maxlen,
depth=2*hidden_size,max_relative_position=max_relative)

defforward(self,inputs,mask=None):
input_length=inputs.shape[1]
batch_size=inputs.shape[0]
ifself.abPosition:
#由于為加性拼接,我們無法使用RoPE,因此這里直接使用絕對位置編碼
inputs=SinusoidalPositionEmbedding(self.hidden_size,'add')(inputs)
x1=torch.unsqueeze(inputs,1)
x2=torch.unsqueeze(inputs,2)
x1=x1.repeat(1,input_length,1,1)
x2=x2.repeat(1,1,input_length,1)
concat_x=torch.cat([x2,x1],dim=-1)
#與TPLinker原論文中不同的是,通過重復(fù)+拼接的方法構(gòu)建的矩陣能滿足并行計算的要求。
ifself.rePosition:
#如果使用相對位置編碼,我們則直接在矩陣上實現(xiàn)相加
relations_keys=self.relative_positions_encoding[:input_length,:input_length,:].to(inputs.device)
concat_x+=relations_keys
hij=torch.tanh(self.Wh(concat_x))
logits=self.Wo(hij)
logits=logits.permute(0,3,1,2)
logits=add_mask_tril(logits,mask)
returnlogits

3.3 Tencent Muti-head

《EMPIRICAL ANALYSIS OF UNLABELED ENTITY PROBLEM IN NAMED ENTITY RECOGNITION》[4] 提出了一種基于片段標(biāo)注解決實體數(shù)據(jù)標(biāo)注缺失的訓(xùn)練方法,并在部分?jǐn)?shù)據(jù)集上達(dá)到了SOTA。關(guān)注其實體矩陣構(gòu)建模塊,相當(dāng)于Muti-head的升級版,因此我把它叫做Tencent Muti-head。

Tencent Muti-head的計算公式如下:

其中

與TPLinker相比,Tencent Muti-head在加性的基礎(chǔ)上加入了更多信息交互元素,比如 (作差與點乘),但同時也提高了內(nèi)存的占用量。

classTxMutihead(Module):

def__init__(self,hidden_size,c_size,abPosition=False,rePosition=False,maxlen=None,max_relative=None):
super(TxMutihead,self).__init__()
self.hidden_size=hidden_size
self.c_size=c_size
self.abPosition=abPosition
self.rePosition=rePosition
self.Wh=nn.Linear(hidden_size*4,self.hidden_size)
self.Wo=nn.Linear(self.hidden_size,self.c_size)
ifself.rePosition:
self.relative_positions_encoding=relative_position_encoding(max_length=maxlen,
depth=4*hidden_size,max_relative_position=max_relative)

defforward(self,inputs,mask=None):
input_length=inputs.shape[1]
batch_size=inputs.shape[0]
ifself.abPosition:
#由于為加性拼接,我們無法使用RoPE,因此這里直接使用絕對位置編碼
inputs=SinusoidalPositionEmbedding(self.hidden_size,'add')(inputs)
x1=torch.unsqueeze(inputs,1)
x2=torch.unsqueeze(inputs,2)
x1=x1.repeat(1,input_length,1,1)
x2=x2.repeat(1,1,input_length,1)
concat_x=torch.cat([x2,x1,x2-x1,x2.mul(x1)],dim=-1)
ifself.rePosition:
relations_keys=self.relative_positions_encoding[:input_length,:input_length,:].to(inputs.device)
concat_x+=relations_keys
hij=torch.tanh(self.Wh(concat_x))
logits=self.Wo(hij)
logits=logits.permute(0,3,1,2)
logits=add_mask_tril(logits,mask)
returnlogits

3.4 Deep Biaffine

此處使用的雙仿射結(jié)構(gòu)出自《Named Entity Recognition as Dependency Parsing》[5]。原文用于識別實體依存關(guān)系,因此也可以直接用于實體命名識別。

Deep Biaffine的計算公式如下:

簡單來說雙仿射分別 為頭 為尾的實體類別后驗概率建模 + 對 或 為尾的實體類別的后驗概率分別建模 + 對實體類別 的先驗概率建模。

不難看出Deep Biaffine是加性與乘性的結(jié)合在筆者復(fù)現(xiàn)的關(guān)系抽取任務(wù)中,雙仿射確實帶來的一定提升,但這種建模思路在實體識別中是否有效還有待驗證

classBiaffine(Module):

def__init__(self,in_size,out_size,Position=False):
super(Biaffine,self).__init__()
self.out_size=out_size
self.weight1=Parameter(torch.Tensor(in_size,out_size,in_size))
self.weight2=Parameter(torch.Tensor(2*in_size+1,out_size))
self.Position=Position
self.reset_parameters()

defreset_parameters(self):
torch.nn.init.kaiming_uniform_(self.weight1,a=math.sqrt(5))
torch.nn.init.kaiming_uniform_(self.weight2,a=math.sqrt(5))

defforward(self,inputs,mask=None):
input_length=inputs.shape[1]
hidden_size=inputs.shape[-1]
ifself.Position:
#引入絕對位置編碼,在矩陣乘法時可以轉(zhuǎn)化為相對位置信息
inputs=SinusoidalPositionEmbedding(hidden_size,'add')(inputs)
x1=torch.unsqueeze(inputs,1)
x2=torch.unsqueeze(inputs,2)
x1=x1.repeat(1,input_length,1,1)
x2=x2.repeat(1,1,input_length,1)
concat_x=torch.cat([x2,x1],dim=-1)
concat_x=torch.cat([concat_x,torch.ones_like(concat_x[...,:1])],dim=-1)
#bxi,oij,byj->boxy
logits_1=torch.einsum('bxi,ioj,byj->bxyo',inputs,self.weight1,inputs)
logits_2=torch.einsum('bijy,yo->bijo',concat_x,self.weight2)
logits=logits_1+logits_2
logits=logits.permute(0,3,1,2)
logits=add_mask_tril(logits,mask)
returnlogits

4. 實驗結(jié)果

實驗所用的GPU為: P40 24G (x1)。為了把各方法的內(nèi)存占用情況考慮在內(nèi),本次對比實驗全都在一張P40 24G的GPU上進(jìn)行,并把Batch_size開到最大

僅GlobalPointer可達(dá)到16;

Tencent Muti-head batch_size只能達(dá)到4。

Tencent Muti-head因為需要構(gòu)建超大矩陣,所以占用內(nèi)存較大,batch_size最大只能到4。從中,我們可以看出GlobalPointer的性能優(yōu)勢。

需要注意的是,我們這里只比較了各方法在訓(xùn)練過程中在驗證集上的最好表現(xiàn)

dc545baa-3fef-11ed-b1c7-dac502259ad0.png

總結(jié)

GlobalPointer作為乘性方法,在空間內(nèi)存占用上明顯優(yōu)于其他方法,并且訓(xùn)練速度較快,能達(dá)到一個具有競爭力的效果

TPLinker 和 Tencent Muti-head作為加性方法,在優(yōu)化過程中均表現(xiàn)出 相對位置編碼 > 絕對位置編碼 > 不加入位置編碼 的特征。這意味著在通過構(gòu)建實體矩陣進(jìn)行實體命名識別時位置信息具有絕對重要的優(yōu)勢,且直接引入相對位置信息較優(yōu)。

在絕對位置編碼和不加入位置編碼的測試中Tencent Muti-head的效果明顯優(yōu)于TPLinker而兩者均差于GlobalPointer,但在引入相對位置信息后Tencent Muti-head略微超越了GlobalPointer,而TPLinker提點顯著,作為Tencent Muti-head的原型在最高得分上甚至可能有更好的表現(xiàn)。

Biaffine雙仿射表現(xiàn)不佳,意味著這種建模思路不適合用于實體命名識別。

計算資源有限的情況下GlobalPointer是最優(yōu)的baseline選擇,如果擁有足夠的計算資源且對訓(xùn)練、推理時間的要求較為寬松,嘗試使用TPLinker/Tencent Muti-head + 相對位置編碼或許能取得更好的效果。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3785

    瀏覽量

    137507
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3115

    瀏覽量

    75089
  • 解碼
    +關(guān)注

    關(guān)注

    0

    文章

    185

    瀏覽量

    27810

原文標(biāo)題:總結(jié)

文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    HanLP分詞命名實體提取詳解

    可能詞) 5.極速詞典分詞(速度快,精度一般) 6.用戶自定義詞典 7.標(biāo)準(zhǔn)分詞(HMM-Viterbi) 命名實體識別 1.實體機(jī)構(gòu)名識別(層疊HMM-Viterbi) 2.中國人名
    發(fā)表于 01-11 14:32

    基于結(jié)構(gòu)化感知機(jī)的詞性標(biāo)注與命名實體識別框架

    `上周就關(guān)于《結(jié)構(gòu)化感知機(jī)標(biāo)注框架的內(nèi)容》已經(jīng)分享了一篇《分詞工具Hanlp基于感知機(jī)的中文分詞框架》,本篇接上一篇內(nèi)容,繼續(xù)分享詞性標(biāo)注與命名實體識別框架的內(nèi)容。詞性標(biāo)注訓(xùn)練詞性標(biāo)注是分詞后緊接著
    發(fā)表于 04-08 14:57

    HanLP-命名實體識別總結(jié)

    的中國人名自動識別研究》,大家可以百度一下看看 地名識別 理論指導(dǎo)文章為:《基于層疊隱馬爾可夫模型的中文命名實體識別》 機(jī)構(gòu)名識別 機(jī)構(gòu)名的
    發(fā)表于 07-31 13:11

    CCS5.5全套實驗程序

    CCS5.5 全套實驗程序 百度云下載CCS5.5 全套實驗程序 百度云下載
    發(fā)表于 01-07 17:32 ?45次下載

    MSP430原理與應(yīng)用教程課件配套實驗例程

    MSP430原理與應(yīng)用教程課件配套實驗例程.rar
    發(fā)表于 07-12 11:54 ?9次下載

    面向實體識別的聚類算法

    實體識別是數(shù)據(jù)質(zhì)量的一個重要方面,對于大數(shù)據(jù)處理不可或缺,已有的實體識別研究工作聚焦于數(shù)據(jù)對象相似度算法、分塊技術(shù)和監(jiān)督的實體
    發(fā)表于 01-09 15:52 ?0次下載

    基于C51C語言的嵌套實現(xiàn)

    常量與變量本質(zhì)是值,不同的變量只是存儲結(jié)構(gòu)的不通。表達(dá)式最終也是一個值,所以可以通用,可以嵌套
    發(fā)表于 06-29 10:17 ?1152次閱讀

    如何在OpenMP中使用嵌套

    此網(wǎng)絡(luò)研討會討論了使用熱門團(tuán)隊在OpenMP中使用嵌套的成功示例,并解釋了利用嵌套并行機(jī)會的最佳實踐。
    的頭像 發(fā)表于 11-07 06:52 ?2800次閱讀

    基于深度信念網(wǎng)絡(luò)的實體識別算法

    的傳感器通信能力有限,設(shè)計基于深度信念網(wǎng)絡(luò)的實體識別算法,通過將熱門與冷門實體狀態(tài)信息分別存儲于邊緣服務(wù)器與云端,節(jié)省邊緣服務(wù)器的存儲空間與計算開銷。仿真結(jié)果表明,與云端數(shù)據(jù)共享搜索方法Sedasc和層次化搜索方
    發(fā)表于 03-25 15:35 ?16次下載
    基于深度信念網(wǎng)絡(luò)的<b class='flag-5'>實體</b><b class='flag-5'>識別</b>算法

    一種中文電子病歷醫(yī)療實體關(guān)系識別方法

    傳統(tǒng)的實體關(guān)系識別方法多數(shù)是以單個句子作為處理單元,難以解決訓(xùn)練語料中實體關(guān)系標(biāo)簽標(biāo)注錯誤的問題,且沒有充分利用包含實體信息的多個句子在分類實體
    發(fā)表于 04-02 14:08 ?22次下載
    一種中文電子病歷醫(yī)療<b class='flag-5'>實體</b>關(guān)系<b class='flag-5'>識別</b>方法

    命名實體識別的遷移學(xué)習(xí)相關(guān)研究分析

    命名實體識別(NER)是自然語言處理的核心應(yīng)用任務(wù)之一。傳統(tǒng)和深度命名實體識別方法嚴(yán)重依賴于大量具有相同分布的標(biāo)注訓(xùn)練數(shù)據(jù),模型可移植性差。然而在實際應(yīng)用中數(shù)據(jù)往往都是小數(shù)據(jù)、個性化數(shù)
    發(fā)表于 04-02 15:15 ?8次下載
    命名<b class='flag-5'>實體</b><b class='flag-5'>識別</b>的遷移學(xué)習(xí)相關(guān)研究分析

    基于字語言模型的中文命名實體識別系統(tǒng)

    命名實體識別(NER)旨在識別出文本中的專有名詞,并對其進(jìn)行分類。由于用于監(jiān)督學(xué)習(xí)的訓(xùn)練數(shù)據(jù)通常由人工標(biāo)主,耗時耗力,因此很難得到大規(guī)模的標(biāo)注數(shù)據(jù)。為解決中文命名實體
    發(fā)表于 04-08 14:36 ?14次下載
    基于字語言模型的中文命名<b class='flag-5'>實體</b><b class='flag-5'>識別</b>系統(tǒng)

    關(guān)于邊界檢測增強(qiáng)的中文命名實體識別

    引言 命名實體識別(Named Entity Recognition,NER)是自然語言處理領(lǐng)域的一個基礎(chǔ)任務(wù),是信息抽取等許多任務(wù)的子任務(wù),旨在識別非結(jié)構(gòu)化文本中屬于預(yù)先定義的類別的命名實體
    的頭像 發(fā)表于 09-22 16:05 ?3433次閱讀

    基于序列標(biāo)注的實體識別所存在的問題

    實體識別通常被當(dāng)作序列標(biāo)注任務(wù)來做,序列標(biāo)注模型需要對實體邊界和實體類別進(jìn)行預(yù)測,從而識別和提取出相應(yīng)的命名
    的頭像 發(fā)表于 07-28 11:08 ?2108次閱讀

    介紹python列表的邊界和嵌套

    本文介紹python列表的邊界和嵌套。只能訪問python列表范圍內(nèi)的項,python列表可以嵌套python列表。
    的頭像 發(fā)表于 02-27 14:49 ?1176次閱讀
    主站蜘蛛池模板: 四子王旗| 三穗县| 淄博市| 桑植县| 安陆市| 桐梓县| 石城县| 台江县| 屯门区| 兴海县| 乌海市| 南溪县| 哈巴河县| 噶尔县| 青龙| 丽水市| 平武县| 阿尔山市| 香河县| 屯留县| 达州市| 璧山县| 万山特区| 泽库县| 册亨县| 南陵县| 石景山区| 娱乐| 朝阳区| 五原县| 瓮安县| 定结县| 玉林市| 砀山县| 高尔夫| 中阳县| 武清区| 紫阳县| 郴州市| 通榆县| 徐州市|