利用Bert模型進(jìn)行命名實(shí)體識(shí)別

之前兩天也寫(xiě)了word2vec和Transformer肝谭,其實(shí)都是在為今天的內(nèi)容做鋪墊。最近正好使用bert做了命名實(shí)體識(shí)別項(xiàng)目,借這個(gè)契機(jī)分享出來(lái)墩蔓,希望能幫到有需要的人。

自然語(yǔ)言的表示

之所以之前自然語(yǔ)言處理的發(fā)展沒(méi)有達(dá)到CV領(lǐng)域萧豆,很大一部分原因是很難把抽象的語(yǔ)言用準(zhǔn)確的數(shù)學(xué)方式表示奸披。

  • one-hot 只能說(shuō)對(duì)詞進(jìn)行編碼,毫無(wú)“相似度”的概念涮雷,例如【川老師】和【特朗普】的距離與【川老師】和【蒼老師】的距離是一模一樣的

  • word2vec 將高維的one-hot“嵌入”到低維空間阵面,使得向量更加稠密,這樣做的好處是可以很方便的計(jì)算相似度洪鸭,但是最大的缺點(diǎn)是無(wú)法解決一詞多義的問(wèn)題样刷。

張三說(shuō)的【川普】真可愛(ài)
【川普】在地球和太陽(yáng)之間反復(fù)橫跳
  • ELMO
    ELMO是“Embedding from Language Models”的簡(jiǎn)稱(chēng)。從下圖可以看到览爵,ELMO是一個(gè)多層雙向LSTM架構(gòu)置鼻,但是雙向并不是真正意義上的雙向拾枣,而是兩個(gè)單向的LSTM作為特征提取器。ELMO不僅學(xué)到了單詞特征司蔬,還學(xué)習(xí)到了句法特征以及語(yǔ)義特征俊啼,這就能較好地解決單詞在不同的上下文有不同的含義左医。


    image.png
  • GPT
    GPT是“Generative Pre-Training”的簡(jiǎn)稱(chēng)。這個(gè)模型最大的特點(diǎn)是使用了多層單向Transformer的結(jié)構(gòu)彤路,Transformer的特征提取能力要遠(yuǎn)遠(yuǎn)的優(yōu)于LSTM芥映,且Transformer易于并行計(jì)算奈偏,能夠很好地捕獲長(zhǎng)距離的信息。


    image.png
  • BERT


    image.png

BERT的paper標(biāo)題叫Pre-training of Deep Bidirectional Transformers for Language Understanding,人工發(fā)動(dòng)self-attention,這個(gè)模型的重點(diǎn)在“Deep”,“Bidirectional”矢渊。沒(méi)錯(cuò)!就是深層雙向Transformer昆淡。這個(gè)模型真的是一個(gè)很大很重的模型刽严,base版本的參數(shù)里有1.1億,Large版本的有3.4億(突然想起最近的GPT3的1700億參數(shù)眨补,可怕!5古А!)

image.png

其實(shí)這些模型都是為了能獲得更好的語(yǔ)言表示甘晤,有了好的原材料饲做,才能應(yīng)用到下游的各項(xiàng)工作中發(fā)揮出好的效果盆均。

簡(jiǎn)述BERT原理

BERT是一個(gè)兩階段模型,包括pre-training(預(yù)訓(xùn)練)和Fine-tuning(微調(diào))游沿。

預(yù)訓(xùn)練階段BERT模型有兩個(gè)任務(wù)

  • Masked LM
    對(duì)15%的詞挖坑做完形填空诀黍。這15%的詞中有80%被替換為[mask],有10%被隨機(jī)替換成其他單詞,還有10%保持不變咒彤。
  • Next Sentence Prediction (NSP)
    根據(jù)上文預(yù)測(cè)下文,其中有50%是正確的旷档,另外50%從預(yù)料中隨機(jī)找出來(lái)鞋屈。這個(gè)任務(wù)為了更好的學(xué)習(xí)到句法

BERT模型在微調(diào)階段也要按照BERT要求的形式進(jìn)行輸入,包括Token Embeddings渠啊,Segment Embeddings Position Embeddings


image.png

對(duì)于下游的任務(wù),只需要按照論文中的方式進(jìn)行改造即可权旷。對(duì)于我項(xiàng)目中的命名實(shí)體識(shí)別屬于文本分類(lèi)任務(wù)替蛉,按照第四種方式進(jìn)行改造即可。


image.png

項(xiàng)目背景

簡(jiǎn)單聊下我們的項(xiàng)目躲查,通過(guò)爬蟲(chóng)將一批非結(jié)構(gòu)化的房源文本數(shù)據(jù)抓取下來(lái),然后將其解析成的結(jié)構(gòu)化數(shù)據(jù)方便下游業(yè)務(wù)線(xiàn)使用译柏。


image.png

項(xiàng)目實(shí)戰(zhàn)總結(jié)

網(wǎng)上已經(jīng)有很多教程了,我就不在代碼層面寫(xiě)太多了鄙麦,主要把開(kāi)發(fā)流程中的經(jīng)驗(yàn)梳理一下供大家參考

  • 打標(biāo)簽
    對(duì)于NER任務(wù)任務(wù)來(lái)講典唇,需要對(duì)每個(gè)字進(jìn)行BIO標(biāo)注,不知道其他同學(xué)用的是什么工具胯府,我很想安利一個(gè)工具叫doccano,安裝賊麻煩,但是用起來(lái)真香盟劫。

  • 總體流程
    開(kāi)發(fā)自己的數(shù)據(jù)處理類(lèi)夜牡,這個(gè)類(lèi)要繼承DataProcessor類(lèi),將訓(xùn)練集,驗(yàn)證集急迂,測(cè)試集轉(zhuǎn)換為example。example包含

    • guid
      數(shù)據(jù)的編號(hào)
    • tokens
      [cls]是文本的開(kāi)頭標(biāo)識(shí)蹦肴,[sep]是每句話(huà)的結(jié)尾
    • input_ids
      input_ids是字典中該字對(duì)應(yīng)的index
    • input_mask
      1代表真實(shí)輸入阴幌,0代表padding的內(nèi)容
    • segment_id
      BERT允許輸入兩句話(huà)矛双,第一句話(huà)用0表示议忽,第二句話(huà)用1表示懒闷,由于NER任務(wù)只需要1句話(huà)愤估,所以都是0.
    • label_id
      與input_ids類(lèi)似速址,label的編碼

將example轉(zhuǎn)為feature然后存入到tf-record落地玩焰,后續(xù)訓(xùn)練和預(yù)測(cè)都是用tf-record作為輸入

image.png
  • OOM的解決

    • 減少max_seq_length
    • 減小train_batch_size
    • 使用合適的預(yù)訓(xùn)練模型,如果Large不行就換base
  • 預(yù)測(cè)效率
    預(yù)測(cè)1條數(shù)據(jù)需要15秒左右的時(shí)間芍锚,批量預(yù)測(cè)6000條左右的數(shù)據(jù)大概在90秒左右昔园。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闹炉,隨后出現(xiàn)的幾起案子蒿赢,更是在濱河造成了極大的恐慌,老刑警劉巖渣触,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡棵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嗅钻,警方通過(guò)查閱死者的電腦和手機(jī)皂冰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)养篓,“玉大人秃流,你說(shuō)我怎么就攤上這事×” “怎么了舶胀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵概说,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嚣伐,道長(zhǎng)糖赔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任轩端,我火速辦了婚禮放典,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘基茵。我一直安慰自己奋构,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布拱层。 她就那樣靜靜地躺著弥臼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪根灯。 梳的紋絲不亂的頭發(fā)上醋火,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音箱吕,去河邊找鬼。 笑死柿冲,一個(gè)胖子當(dāng)著我的面吹牛茬高,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播假抄,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怎栽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宿饱?” 一聲冷哼從身側(cè)響起熏瞄,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谬以,沒(méi)想到半個(gè)月后强饮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡为黎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年邮丰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铭乾。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剪廉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炕檩,到底是詐尸還是另有隱情斗蒋,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站泉沾,受9級(jí)特大地震影響捞蚂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爆哑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一洞难、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揭朝,春花似錦队贱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至屯换,卻和暖如春编丘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彤悔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嘉抓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晕窑。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓抑片,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親杨赤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敞斋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354