實戰(zhàn)_瑞金醫(yī)院MMC知識圖譜大賽初賽

1. 說明

?《瑞金醫(yī)院MMC人工智能輔助構建知識圖譜大賽》是一個天池的自然語言處理相關的比賽天试,初賽是命名實體識別(Named Entity Recognition,簡稱NER)峭状。具體說,就是從醫(yī)學文檔里標注出藥名,疾病疾嗅,病因,臨床表現(xiàn)冕象,檢查方法等十二種實體的類別和位置代承。這是一個有監(jiān)督學習,它的訓練集是標注好的醫(yī)學文檔渐扮。

?還是延續(xù)以往比賽的思路论悴,找一個類似的簡單項目掖棉,在其上修修改改,于是找到了 "參考1" 中的例程膀估,它是一個在中文文本中標注地名幔亥,人名,組織名的程序察纯,使用工具是tensorflow帕棉,算法是BiLSTM-CRF。

?花了不到兩天的時間饼记,混進了復賽笤昨,雖說是在別人的代碼上修修改改,但也不失為一個NLP相關的深度學習入門握恳,順便熟悉一下如何使用tensorflow瞒窒。我做的工作很簡單:參考代碼2000多行,修改了不到200行乡洼,主要就是把那套代碼對這個項目做一個適配崇裁,沒啥可說的,本文主要梳理了深度學習如何應用于自然語言處理束昵,算法原理拔稳,以及Tensorflow的一些用法。

2. 深度學習能解決自然語言處理中的哪些問題

?前一陣被BERT刷屏了锹雏,它是谷歌AI團隊新發(fā)布新模型巴比,傳說在機器閱讀理解頂級水平測試中狂破11項紀錄,全面超越人類礁遵,測試主要來自QLUE和SquAD轻绞,它們包括:

MNLI:判斷兩個句子間是繼承,反駁佣耐,關系政勃。
QQP:兩個問句的類似程度。
QNLI:問答系統(tǒng)兼砖,區(qū)分問題的正確答案和同一段中的其它描述奸远。
SST-2:電影評論的感情色彩標注。
CoLA:判斷語法是否正確讽挟。
STS-B:語義相似度打分(1-5級)
MRPC:兩句語義是否等價懒叛。
RTE:識別繼承關系,和MNLI差不多耽梅,但數(shù)據(jù)集比較小薛窥。
SquAD:閱讀理解,在段落中找答案褐墅。

?看起來拆檬,只要有標注好的訓練集數(shù)據(jù)洪己,上述的各種關系都可以被預測,但是具體這些文字竟贯,又怎么代入模型呢答捕?往下看…

3. 命名實體識別的BIO標注集

?BIO標注將每個元素標注為“B-X”、“I-X”或者“O”屑那。其中拱镐,“B-X”表示此元素所在的片段屬于X類型并且此元素在此片段的開頭,“I-X”表示此元素所在的片段屬于X類型并且此元素在此片段的中間位置持际,“O”表示不屬于任何類型沃琅。形如:

本 O 課 O 題 O 組 O 前 O 期 O 研 O 究 O 及 O 相 O 關 O 研 O 究 O 結 O 果 O 已 O 經(jīng) O 明 O 確 O 1 B-Anatomy 1 I-Anatomy β I-Anatomy - I-Anatomy H I-Anatomy S I-Anatomy D I-Anatomy 1 I-Anatomy 作 O 為 O 公 O 認 O 的 O 肥 B-Disease 胖 I-Disease 相 O 關 O 基 O 因 O

?本例中借鑒的工具使用了BIO標注集,因此蜘欲,把賽題數(shù)據(jù)置換成了BIO格式益眉,以便代入,可以看到姥份,具體方法是以字為單位的標注(以詞為單位郭脂,可能在分詞的過程中引入一些誤差,我也沒嘗試)澈歉。轉換之后更容易看出展鸡,它是一個詞序列的關系問題。

4. 命名實體識別的具體方法

?BiLSTM-CRF是近兩年業(yè)界比較流行的解決命名實體識別的方法埃难,本題使用的也是這個方法莹弊,本題的解法可以分為三個步驟:第一,將文字向量化(Word embedding)涡尘;第二忍弛,計算上下文之間的關系(Bi-LSTM);第三悟衩,句子級的序列標注(CRF)剧罩。

?我借鑒的代碼位置在https://github.com/Determined22/zh-NER-TF, 功能是標注出文字中的人名,地名座泳,組織名。模型相關的代碼在 model.py幕与,我覺得特別核心的100行不到挑势,建議一邊看代碼一邊看以下說明,不妨在其中打印一些信息啦鸣,追蹤一下它的運行流程潮饱。

(1) Word Embedding

?Word Embedding詞嵌入向量是NLP里一個重要的概念,我們利用它將一個詞轉換成固定長度的向量表示,從而便于進行數(shù)學處理诫给。比如一篇文章里有1000個詞香拉,如果做one hot提取特取啦扬,則需要新增1000個特征,而像got與get會被識別為不同的詞凫碌,如果使用Word Embedding扑毡,則可能將一些同義詞提取為一個特征,從而實現(xiàn)降維和抽象的效果盛险,具體實現(xiàn)方法是用上下文預測當前詞瞄摊,也可以理解為在神經(jīng)網(wǎng)絡上實現(xiàn)word2vec,詳見參考二苦掘。

?總之换帜,可以把該層更解為對把詞置換為詞向量,本例中映射前支持的中文字符有3000多個鹤啡,降維的目標是300維惯驼,而每一維中的特征值是從3000映射到300后的概率分布,即可能性(有點像PCA降維)递瑰。從代碼中可以看到祟牲,用tensorflow降維就幾行代碼,確實很方便(見代碼中的model.py:lookup_layer_op)泣矛。

(2) Bi-LSTM

?LSTM(Long Short-Term Memory)長短期記憶網(wǎng)絡疲眷,是RNN(時間遞歸神經(jīng)網(wǎng)絡)的一種,適合于處理和預測時間序列中間隔和延遲相對較長的重要事件您朽。 Bi-LSTM即雙向LSTM狂丝,本例中使用TensorFlow提供的LSTMCell類建立了正向和反向各一個LSTM,用bidirectional_dynamic_rnn() 結合成一個雙向RNN(見代碼中的model.py: biLSTM_layer_op)

?這一步哗总,計算的是上下文之間的關系几颜,誰更可能出現(xiàn)在前面,誰更可能出現(xiàn)在誰后面讯屈,還沒真正標注蛋哭。

(3) CRF

?CRF是條件隨機場,是在給定隨機變量X的條件下涮母,隨機變量Y的馬爾可夫隨機場谆趾,這里使用的線性鏈條件隨機場,在條件概率模型P(Y|X)中叛本,Y是輸出變量沪蓬,表示標記序列(狀態(tài)序列),X是輸入變量来候,表示需要標注的觀測序列跷叉,用最大似然估計計算條件概率模型P ^(Y|X),預測時,對于給定的輸入序列云挟,求出條件概率P ^(y|x)最大的輸出序列y ^(可能性最大的標注序列)梆砸,詳見代碼中的tf.contrib.crf.crf_log_likelihood()。

?要了解CRF的原理园欣,先要了解馬爾可夫鏈帖世,以及很多基礎知識(雖然很有趣,但需要花很多時間)俊庇,但在程序里調用它很容易狮暑,幾行代碼就夠了,一開始了解它怎么用就夠了辉饱。

5. TensorFlow

?C++相對于 C搬男,Python相對于Java,TensorFlow相對于之前的程序架構彭沼,它們不只是語法不同缔逛,更多的是程序的組織方式,和思考方法不同姓惑。

?Tensorflow是基于圖(Graph)的計算系統(tǒng)褐奴。而圖的節(jié)點則是由操作(Operation)來構成的,而圖的各個節(jié)點之間則是由張量(Tensor)作為邊來連接在一起的于毙。所以Tensorflow的計算過程就是一個Tensor流圖敦冬。Tensorflow的圖則是必須在一個Session中來計算。

?這樣講還是很抽象唯沮,簡單地說脖旱,假設在程序中定義了三個函數(shù)(Operation): a,b,c,普通程序會順序地調用a,b,c介蛉,而Tensorflow是指定a,b,c之間的依賴關系(Tensor)萌庆,比如c依賴b的結果,b又依賴a的結果币旧,運行時践险,使用Session.run(),只要告訴它吹菱,我最終需要c巍虫,程序自己找到它依賴的b,以及a來運行鳍刷,通過數(shù)據(jù)流向把握整個過程垫言,有點像Luigi的工作模式。具體請見"參考7"倾剿。

6. 參考

(1) DL4NLP —— 序列標注:BiLSTM-CRF模型做基于字的中文命名實體識別
https://www.cnblogs.com/Determined22/p/7238342.html

(2) 淺談詞嵌入(word embedding)
https://blog.csdn.net/puredreammer/article/details/78330821

(3) 神經(jīng)網(wǎng)絡中embedding層作用
https://www.cnblogs.com/bonelee/p/7904495.html

(4) tensorflow學習筆記--embedding_lookup()用法
https://blog.csdn.net/u013041398/article/details/60955847

(5) tensorflow筆記3:CRF函數(shù):tf.contrib.crf.crf_log_likelihood()
https://www.cnblogs.com/lovychen/p/8490397.html

(6) [學習筆記] TensorFlow 入門之基本使用
https://www.cnblogs.com/flyu6/p/5555161.html

(7) Tensorflow學習筆記2:About Session, Graph, Operation and Tensor
https://www.cnblogs.com/lienhua34/p/5998853.html

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子前痘,更是在濱河造成了極大的恐慌凛捏,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芹缔,死亡現(xiàn)場離奇詭異坯癣,居然都是意外死亡,警方通過查閱死者的電腦和手機最欠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門示罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芝硬,你說我怎么就攤上這事蚜点。” “怎么了拌阴?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵绍绘,是天一觀的道長永脓。 經(jīng)常有香客問我泞辐,道長,這世上最難降的妖魔是什么铃芦? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任纤壁,我火速辦了婚禮左刽,結果婚禮上,老公的妹妹穿的比我還像新娘酌媒。我一直安慰自己欠痴,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布馍佑。 她就那樣靜靜地躺著斋否,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拭荤。 梳的紋絲不亂的頭發(fā)上茵臭,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音舅世,去河邊找鬼旦委。 笑死,一個胖子當著我的面吹牛雏亚,可吹牛的內容都是我干的缨硝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼罢低,長吁一口氣:“原來是場噩夢啊……” “哼查辩!你這毒婦竟也來了胖笛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤宜岛,失蹤者是張志新(化名)和其女友劉穎长踊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萍倡,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡身弊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了列敲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱佛。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖戴而,靈堂內的尸體忽然破棺而出凑术,到底是詐尸還是另有隱情,我是刑警寧澤填硕,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布麦萤,位于F島的核電站,受9級特大地震影響扁眯,放射性物質發(fā)生泄漏壮莹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一姻檀、第九天 我趴在偏房一處隱蔽的房頂上張望命满。 院中可真熱鬧,春花似錦绣版、人聲如沸胶台。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诈唬。三九已至,卻和暖如春缩麸,著一層夾襖步出監(jiān)牢的瞬間铸磅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工杭朱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阅仔,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓弧械,卻偏偏與公主長得像八酒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刃唐,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容