1.初識(shí)NER
NER(命名實(shí)體識(shí)別)其實(shí)是一個(gè)非趁槐觯基礎(chǔ)且古老的問題隆箩,關(guān)系抽取毡庆,事件抽取都是建立在其之上的庸推,簡而言之疼阔,NER任務(wù)是從一段文本中識(shí)別固定類型的實(shí)體枕赵,如時(shí)間剿吻,地點(diǎn)譬猫,人名拾弃,組織名等值桩。其實(shí)就是一個(gè)序列標(biāo)注問題。在傳統(tǒng)機(jī)器學(xué)習(xí)時(shí)代豪椿,這個(gè)問題是由HMM奔坟,CRF解決的,其中HMM僅考慮了前一個(gè)word的影響搭盾,而CRF在所有特征進(jìn)行全局歸一化咳秉,因此可以求得全局的最優(yōu)值,因而可以容納任意的上下文信息鸯隅,特征設(shè)計(jì)靈活澜建。使用維特比算法,計(jì)算整個(gè)標(biāo)記序列的聯(lián)合概率分布蝌以。
在深度學(xué)習(xí)時(shí)代炕舵,出現(xiàn)了BiLSTM+CRF的方法,在Bert時(shí)代出現(xiàn)了Bert+LSTM+CRF的方法跟畅。
2.BERT+LSTM+CRF
https://github.com/macanv/BERT-BiLSTM-CRF-NER
先放github幕侠,再講解一下使用過程。
①下載bert-lstm-crf代碼(https://github.com/macanv/BERT-BiLSTM-CRF-NER)
②下載預(yù)訓(xùn)練的中文BERT模型
https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip(里面包含了BERT的中文預(yù)訓(xùn)練模型以及詞匯列表txt)
③修改bert_base/train/train_helper.py文件(設(shè)置路徑碍彭,也可以修改超參晤硕,其中bert_path與root_path是必須要提供的)
bert_path改成②中下載的目錄
root_path下有兩個(gè)文件output(存放訓(xùn)練好的模型庇忌,以及中間過程的產(chǎn)出)舞箍,NERdata(訓(xùn)練集)
其中NERdata下的文件為 train.txt 、dev.txt 皆疹、 test.txt(即為我們要訓(xùn)練模型的數(shù)據(jù)集)
需要注意的是疏橄,訓(xùn)練集中,每個(gè)句子與每個(gè)句子之間需要有一個(gè)空行。標(biāo)簽格式大致為 B-PER I-PER(B/I在前)
④運(yùn)行run.py開始訓(xùn)練代碼,訓(xùn)練完后會(huì)自動(dòng)輸出精確度等信息
⑤訓(xùn)練完成后使用terminal_predict.py使用模型窄绒,注意贝次,也需要更改代碼中的模型路徑。
具體的過程也可以參考:https://blog.csdn.net/macanv/article/details/85684284
但實(shí)際上BERT并不太適用于NER任務(wù)蛔翅。
雖然Transformer模型在其它NLP任務(wù)中取得了很大成功,并且在并行性和長程依賴方面有巨大優(yōu)勢位谋,但其在NER中表現(xiàn)不佳山析。我們分析了Transformer的注意力機(jī)制,發(fā)現(xiàn)其在方向性掏父、相對位置笋轨、稀疏性方面不太適合NER任務(wù)∩奘纾——邱錫鵬?
解釋一下實(shí)體邊界錯(cuò)誤爵政,比如我們希望識(shí)別出來的地名是“蘇州市姑蘇區(qū)”,而BERT+CRF訓(xùn)練出的模型有可能識(shí)別結(jié)果是“州市姑蘇”膏燃、“州市姑蘇區(qū)X”茂卦。
之后我們將探索兩個(gè)解決方法
3.解決方法1:
TENER: Adapting Transformer Encoder for Named Entity Recognition
paper地址:https://arxiv.org/abs/1911.04474
代碼地址:https://github.com/fastnlp/TENER
該模型通過對注意力打分函數(shù)的簡單改進(jìn)何什,使得Transformer結(jié)構(gòu)在NER任務(wù)上性能大幅提升组哩。
3.1論文筆記
paper首先分析了為什么BERT再NER任務(wù)上的表現(xiàn)沒有其在其他NLP任務(wù)上的表現(xiàn)好:
①transformer encoder中的position embedding主要到了距離,但忽略了方向性处渣。在BERT出現(xiàn)之前伶贰,應(yīng)用最廣泛的BiLSTM+CRF模型中的LSTM可以區(qū)分地從其左右兩側(cè)收集token的上下文信息,但transformer卻不具備這個(gè)能力罐栈,它只能反映距離黍衙,無法反映方向。為了解決這個(gè)問題荠诬,作者提出了distance-aware使transformer在一定程度上具備方向性琅翻。
②transformer encoder中的 scale dot-product attention比較平滑,NER需要的是一個(gè)不那么平滑的attention柑贞,因?yàn)橐痪湓捴兄挥猩倭康膚ord需要被標(biāo)注方椎。為了解決這個(gè)問題,作者采用un-scale dot-product attention钧嘶。
3.1.1 TENER——embedding module
本層用于得到word embedding( = extracted character feature? concat? pre-trained word embedding)
字符級(jí)別的特征提取用的是transformer棠众,大多數(shù)NER模型通過使用CNN character encoder去緩解數(shù)據(jù)稀疏性以及OOV問題,而作者選擇transformer是因?yàn)槠?b>能夠提取到不同n-grams的模式以及一些非連續(xù)的word的字符模式,例如"unhappily"和"uneasily"中的“un..ily"模式(CNN的kernel通常設(shè)置為3闸拿,提取不到這種模式空盼。 )
3.1.2 TENER——Encoding Layer with Adapted Transformer
該層算是模型的核心了,再回顧一下之前提到的transformer encoder對于方向性的無奈新荤,在本層中作者使用了 relative positional encoding揽趾,而不是transformer encoder原先的固定position embedding。
relative positional encoding是由Peter Shaw提出的(Self-Attention with Relative Position Representations)(2018 NAACL)之后也有一系列改進(jìn)工作例如transformer-XL(2019 ACL)
除了relative positional encoding之外迟隅,作者采用un-scale dot-product attention
作者分析原先的attention中但骨,除以會(huì)使得softmax函數(shù)的輸出更加平滑,而直接將分母
去除智袭,會(huì)使softmax的輸出變得陡峭(sharper)奔缠,而NER任務(wù)中sharper更好(一個(gè)句子中只有少量的字需要被標(biāo)注)
3.1.3 TENER——CRF Layerd
條件隨機(jī)場,懂得都懂吼野,不多說了校哎,為了利用不同tag之間的依賴關(guān)系,例如形容詞后面基本是名詞而不是動(dòng)詞瞳步。
3.2代碼實(shí)戰(zhàn)
4.解決方法2:
BERT-EntityNameEmbedding 模型 (來自CCKS&百度 2019中文短文本的實(shí)體鏈指 第一名解決方案)
代碼地址:https://github.com/panchunguang/ccks_baidu_entity_link(readme有詳細(xì)介紹)