張素華,葉 青,程春雷,鄒 靜
(江西中醫(yī)藥大學(xué)計(jì)算機(jī)學(xué)院,江西 南昌 330004)
自《黃帝內(nèi)經(jīng)》起至今,中醫(yī)學(xué)已延綿千年,其有效性被世人驗(yàn)證。中醫(yī)古籍文獻(xiàn)記錄了豐富的理論知識(shí)和臨床經(jīng)驗(yàn),采用自然語言處理技術(shù)對(duì)中醫(yī)古籍文獻(xiàn)進(jìn)行挖掘具有重要意義,而中醫(yī)古籍文本分詞研究是中醫(yī)古籍文本自然語言處理研究最基礎(chǔ)的工作之一。
中醫(yī)古籍文本分詞與現(xiàn)代文分詞有所不同。中醫(yī)古籍文本包含大量的中醫(yī)專業(yè)術(shù)語[1],具有中醫(yī)領(lǐng)域的鮮明特點(diǎn),同時(shí)保留了古漢語特征[2]:
(1)中醫(yī)文本領(lǐng)域特色鮮明,語料特征稀疏。結(jié)合中醫(yī)臨床使用特點(diǎn)[3],把中醫(yī)常用專業(yè)術(shù)語分為陰陽五行、藏象、診法、疾病、治療、本草、方劑、針灸、養(yǎng)生、醫(yī)療器具等類別,而疾病下的證候如“發(fā)熱”“惡寒”“脈浮”,方劑如“小柴胡湯”“麻黃湯”“白虎湯”等專業(yè)術(shù)語在通用語料中稀少,這是常見的現(xiàn)代漢語所不具備的一些特點(diǎn)。
(2)古籍文本單字成詞,通假歧義突出[4]。古籍文辭晦澀,具有一詞多義特點(diǎn),如“心之合脈也,其榮色也,其主腎也”中,“主”表示治療,然而在“心主脈,肺主皮,肝主筋,脾主肉,腎主骨中的“主”表示控制。除此以外,古籍還具有時(shí)間跨度大、單字詞多等特點(diǎn),古籍文本與現(xiàn)代文本用詞風(fēng)格迥異。
中醫(yī)等領(lǐng)域?qū)I(yè)性很強(qiáng),通常缺乏完善、權(quán)威的領(lǐng)域詞典。此外,現(xiàn)有的人工分詞語料主要是SIGHAN 的Bakeoff 語料和人民日?qǐng)?bào)語料等通用語料,高昂的人工標(biāo)注成本和相應(yīng)古文分詞標(biāo)準(zhǔn)的缺乏使中醫(yī)領(lǐng)域語料的構(gòu)建工作遲緩。因此,傳統(tǒng)中文分詞技術(shù)難以直接有效地應(yīng)用于中醫(yī)領(lǐng)域或其他特定領(lǐng)域,分詞效果存在很大的改進(jìn)空間[5]。
目前分詞效果較好的方法都是基于神經(jīng)網(wǎng)絡(luò)和條件隨機(jī)場的有監(jiān)督分詞方法,這種分詞方法需大量的人工標(biāo)注語料,而中醫(yī)古籍文本等特定領(lǐng)域缺乏人工標(biāo)注語料。本文方法無需人工標(biāo)注語料就能夠很方便地應(yīng)用于各個(gè)領(lǐng)域,具有較強(qiáng)的實(shí)用價(jià)值;現(xiàn)有的無監(jiān)督分詞方法較少且效果較差,本文使用真實(shí)領(lǐng)域語料(700 本中醫(yī)古籍)構(gòu)造領(lǐng)域自適應(yīng)無監(jiān)督分詞模型。與其他無監(jiān)督分詞方法和古漢語分詞系統(tǒng)進(jìn)行對(duì)比實(shí)驗(yàn),證明本文方法能有效提升分詞效果,具有參數(shù)魯棒性強(qiáng)、實(shí)現(xiàn)簡單等優(yōu)點(diǎn)。
中醫(yī)古籍文本分詞將特定文本上下文分割成為一個(gè)個(gè)獨(dú)立有意義的字詞術(shù)語,對(duì)當(dāng)前通用分詞技術(shù)提出了更高要求。周揚(yáng)等[6]參考“現(xiàn)代漢語語料庫加工——詞語切分與詞性標(biāo)注規(guī)范與手冊(cè)”構(gòu)建中醫(yī)藥文獻(xiàn)語料庫;孟洪宇[7]等對(duì)《傷寒論》構(gòu)建語料,并利用開源軟件CRF++引入字本身、詞性、詞邊界等屬性標(biāo)簽進(jìn)行中醫(yī)藥術(shù)語識(shí)別;詞典可以更好的提高分詞效果,莫建文等[8]、蔡勇等[9]利用推薦權(quán)重值,結(jié)合機(jī)械分詞詞典,設(shè)計(jì)了一個(gè)產(chǎn)生相似中醫(yī)藥詞匯的推薦詞方法;毛宇[10]在建立頻繁詞庫與分割詞庫基礎(chǔ)上,設(shè)計(jì)了一個(gè)基于雙向條件概率和相對(duì)位置的中醫(yī)癥狀分詞算法;李筱瑜[11]運(yùn)用互信息與鄰接熵的新詞發(fā)現(xiàn)方法對(duì)《漢書》進(jìn)行了新詞抽取,并結(jié)合古代漢語詞匯表、古代人物詞表、古代地名表構(gòu)建了古籍文本詞典,使用py NLPIR 分詞工具對(duì)《漢書》進(jìn)行分詞實(shí)驗(yàn);在機(jī)器學(xué)習(xí)方面,張艷梅等[12]、王莉軍等[[13]針對(duì)中醫(yī)古籍語料,通過初步的語言模型分詞,再結(jié)合人工分詞進(jìn)行語料標(biāo)注,利用BiLSTM-CRF 模型進(jìn)行分詞。然而該方法訓(xùn)練集和測試集都屬于同一人工標(biāo)注語料,只能驗(yàn)證模型的可靠性但不能驗(yàn)證語料的準(zhǔn)確性,評(píng)價(jià)指標(biāo)可能存在實(shí)驗(yàn)誤差。
以上研究顯示中醫(yī)古籍文本分詞的不足:①中醫(yī)古籍分詞需要的詞庫、標(biāo)注語料及語法規(guī)則基本空白,現(xiàn)存的中醫(yī)語料庫較少且尚未公開;②中醫(yī)古籍標(biāo)注語料構(gòu)建門檻較高,需要專業(yè)性人才,工作量巨大。中醫(yī)古籍與現(xiàn)代文風(fēng)格迥異,且無統(tǒng)一的分詞標(biāo)準(zhǔn),故無論是人工構(gòu)造詞典還是人工標(biāo)注古籍語料都存在一定的主觀誤差。
中醫(yī)古籍文本的有監(jiān)督分詞存在較高門檻,對(duì)此,本文改進(jìn)TextRank 算法,提出ConnectRank 算法對(duì)中醫(yī)古籍文本進(jìn)行無監(jiān)督分詞。ConnectRank 算法可直接獲取字符間連通信息,挖掘字符間深度信息,實(shí)現(xiàn)字符間關(guān)聯(lián)強(qiáng)弱計(jì)算,關(guān)聯(lián)越強(qiáng)則認(rèn)為成詞的可能性越大。該模型無需深入分析分詞標(biāo)準(zhǔn),而是由語料與統(tǒng)計(jì)量決定分詞界限。實(shí)驗(yàn)證明,該模型在中醫(yī)古籍本分詞任務(wù)中F1 綜合指標(biāo)有了較大提高。
PageRank 算法[14]由Google 創(chuàng)始人拉里·佩奇和謝爾蓋·布林于1997 年提出。隨著Google 的成功,該算法成為搜索引擎領(lǐng)域和學(xué)術(shù)界十分關(guān)注的模型。PageRank 算法基本思想如下:①一個(gè)網(wǎng)頁被其他網(wǎng)頁鏈接,說明這個(gè)網(wǎng)頁很重要;②一個(gè)網(wǎng)頁被越高權(quán)重的網(wǎng)頁鏈接,說明該網(wǎng)頁越重要。
TextRank 算法[15]基本思想來源于谷歌的PageRank 算法,是一種用于文本的基于圖的排序算法。通過將文本分割成若干組成單元(單詞、句子)并建立圖模型,利用投票機(jī)制對(duì)文本中的重要成分進(jìn)行迭代排序[16],僅利用單篇文檔本身的信息即可實(shí)現(xiàn)關(guān)鍵詞提取、自動(dòng)摘要。該算法可以表示為一個(gè)有向有權(quán)圖,a 是有向有權(quán)圖中的一個(gè)頂點(diǎn),In(a)為指向該點(diǎn)的點(diǎn)集合,Out(a)為點(diǎn)a 指向的點(diǎn)集合。將TextRank 算法用于關(guān)鍵詞提取,頂點(diǎn)a 的得分定義如下:
其中,d為阻尼系數(shù),阻尼系數(shù)是為了避免孤立詞得分為0 的情況,取值范圍為0~1,代表從圖中某一特定點(diǎn)指向其他任意點(diǎn)的概率,一般取值為0.85。使用TextRank 算法計(jì)算圖中各點(diǎn)的得分時(shí),需要給圖中的點(diǎn)指定任意初值并遞歸計(jì)算,直到收斂或達(dá)最多計(jì)算次數(shù)。
本文提出改進(jìn)的TextRank 算法——ConnectRank 算法,使TextRank 算法的關(guān)鍵詞提取功能適用于自動(dòng)化分詞技術(shù)。其與TextRank 算法有兩點(diǎn)不同:①將TextRank 算法的詞語替換為字符;②計(jì)算字符間連通度進(jìn)行分詞。ConnectRank 算法不再以詞為單位計(jì)算詞之間的連通度,而是以字符為單位,通過大小為2 的窗口獲取中醫(yī)古籍字符間的連通強(qiáng)弱,實(shí)現(xiàn)字符間關(guān)聯(lián)強(qiáng)弱計(jì)算,關(guān)聯(lián)越強(qiáng)成詞的可能性越大。部分字符鏈接如圖1 所示。
Fig.1 Partial character link圖1 部分字符鏈接
其中,a,b,c,d,e為圖模型中的字符,字符d與字符e的連通度計(jì)算如下:
其中,wde表示d、e之間的共現(xiàn)頻率,score(d)、score(e)分別為d、e的分?jǐn)?shù),connect(d,e)為字符d到字符e傳遞的分?jǐn)?shù)占字符e總分?jǐn)?shù)之比及其相反比的均值。當(dāng)connect(d,e)大于連通強(qiáng)度閾值時(shí),字符d與字符e鏈接為一個(gè)詞。
(1)計(jì)算字符分?jǐn)?shù)。分詞算法以“麻黃叁兩去節(jié)規(guī)制叁兩去皮”為例,可以畫出如圖2 所示的分詞關(guān)系。
Fig.2 Word segmentation relationship圖2 分詞關(guān)系
首先,給每個(gè)字同樣的分?jǐn)?shù);其次,以“黃”字分?jǐn)?shù)計(jì)算為例,根據(jù)公式(1)計(jì)算“黃”字分?jǐn)?shù)。假設(shè)“黃”前面只有“大黃”、“麻黃”兩種入度,而“麻”字除了“麻黃”還有“麻痹”兩種情況,“大”字只有“大黃”一種情況,那么“黃”的分?jǐn)?shù)為(1-d)+d*(0.5*score(“麻”)+1*score(“大”))。
(2)計(jì)算兩個(gè)字符的連通強(qiáng)度與分詞。通過預(yù)訓(xùn)練確定連通閾值,根據(jù)式(1)計(jì)算所得的分?jǐn)?shù),通過ConnectRank算法計(jì)算其字符間關(guān)聯(lián)強(qiáng)弱。當(dāng)強(qiáng)度小于連通閾值時(shí)對(duì)字符進(jìn)行切分,否則不切。
處理器:Intel(R)Core(TM)i5-4258U CPU @ 2.40GHz(4 CPUs),~2.1GHz;內(nèi)存:4096MB RAM;操作系統(tǒng):Windows 10 專業(yè)版64 位(10.0,版本15063);編譯器:pycharm;主要應(yīng)用模塊:gensim 模塊。
通過一般語料清潔后(去除空格等無意義字符),將字符進(jìn)行切分,然后根據(jù)文本序列得到若干窗口大小為2 的窗口(即每個(gè)字符計(jì)算左右兩個(gè)字符與該字符關(guān)系),每個(gè)窗口內(nèi)的兩個(gè)字符之間都有鏈接關(guān)系。設(shè)計(jì)實(shí)驗(yàn)流程如圖3 所示。
Fig.3 Experimental flow圖3 實(shí)驗(yàn)流程
實(shí)驗(yàn)數(shù)據(jù)來源于江西中醫(yī)藥大學(xué)重點(diǎn)實(shí)驗(yàn)室700 本中醫(yī)古籍(共154MB)進(jìn)行訓(xùn)練集實(shí)驗(yàn)。該實(shí)驗(yàn)為無監(jiān)督分詞,訓(xùn)練集無需標(biāo)注語料,訓(xùn)練集語料數(shù)據(jù)樣例如圖4 所示。分詞的測試集數(shù)據(jù)則從700 本中醫(yī)古籍中較為經(jīng)典的《傷寒雜病論》《黃帝內(nèi)經(jīng)》《難經(jīng)》《婦人大全良方》《外科精要》《小兒藥證直訣》文檔中分層抽樣,共抽樣100 句,3 473個(gè)字,由中醫(yī)古籍專業(yè)人員進(jìn)行分詞(用“/”分開),具有較高的可信度。測試集分詞語料樣例如圖5 所示。
精確率P(Precision,P)、召回率R(Recall,R)和綜合性能指標(biāo)F1(F1-measure,F(xiàn)1)如下:
Fig.4 Training set corpus data sample圖4 訓(xùn)練集語料數(shù)據(jù)樣例
Fig.5 Test set corpus data sample圖5 測試集分詞語料樣例
3.4.1 無監(jiān)督分詞模型參數(shù)設(shè)計(jì)
連通度閾值對(duì)分詞性能影響較大,本實(shí)驗(yàn)對(duì)連通域閾值進(jìn)行篩選。圖6 給出了ConnectRank 算法中不同連通度閾值取值下的精確率、召回率、綜合指標(biāo)F1 的變化。從圖中可以看出,當(dāng)連通度閾值設(shè)為2.7 時(shí)綜合指標(biāo)F1 較好,因此將ConnectRank 算法連通度閾值設(shè)為2.7。
Fig.6 Connectivity threshold of ConnectRank algorithm圖6 ConnectRank 算法連通度閾值
3.4.2 實(shí)驗(yàn)結(jié)果
本文采用ConnectRank 算法深度挖掘文本信息,通過實(shí)驗(yàn)設(shè)定連通度閾值,面對(duì)無監(jiān)督中醫(yī)古籍文本進(jìn)行分詞。對(duì)ConnectRank 算法進(jìn)行多種對(duì)比實(shí)驗(yàn):①EM 算法[17]進(jìn)行無監(jiān)督分詞;②對(duì)語言模型[18]等算法進(jìn)行無監(jiān)督分詞;③使用改進(jìn)后的ConnectRank 算法進(jìn)行分詞。以上實(shí)驗(yàn)都使用一致的訓(xùn)練集與測試集。實(shí)驗(yàn)①與實(shí)驗(yàn)③環(huán)境一致,實(shí)驗(yàn)②環(huán)境為:處理器:Intel(R)Core(TM)i5-3470 CPU @ 3.20GHz;內(nèi) 存:3036000kB;操 作 系 統(tǒng):Ubuntu 20.04 LTS;編譯器:pycharm;主要應(yīng)用模塊:kenlm 模塊。實(shí)驗(yàn)結(jié)果如表1 所示。
Table 1 Comparison of unsupervised word segmentation schemes表1 無監(jiān)督分詞方案對(duì)比
由表1 實(shí)驗(yàn)結(jié)果可知,對(duì)比其他無監(jiān)督分詞算法,ConnectRank 算法具有較好的分詞效果,比最好的F1 綜合指標(biāo)56.4%還要高11.2%。EM 無監(jiān)督分詞算法雖然隨著迭代次數(shù)的增加而增加,但總體準(zhǔn)確率還是難以提高,主要原因是EM 無監(jiān)督分詞算法非常依賴初始化的分詞結(jié)果。由于絕大多詞語為四字詞以內(nèi),故只設(shè)置窗口為2、3、4 的語言模型。語言模型的本質(zhì)是計(jì)算字符間的條件概率,該算法F1 值等指標(biāo)比EM 無監(jiān)督分詞算法更優(yōu),但是對(duì)比本文提出的ConnectRank 算法仍有一定差距,究其原因是ConnectRank 算法以字為中心,形成字符間錯(cuò)綜復(fù)雜的字符網(wǎng)絡(luò),根據(jù)累計(jì)權(quán)重深度挖掘文本間聯(lián)系,相比語言模型根據(jù)上下文計(jì)算字符出現(xiàn)的概率更有優(yōu)勢(shì)。
ConnectRank 算法部分分詞結(jié)果如表2(文本1 及文本2來自標(biāo)準(zhǔn)測試樣本中的其中兩句)所示。由分詞結(jié)果可知,對(duì)于文本1,該方案可以識(shí)別大部分中醫(yī)術(shù)語文本,如“干姜”“大黃”“丹參”,但是“白石英”會(huì)錯(cuò)分為“白/石英/”,“炮去皮臍”會(huì)錯(cuò)分為“炮/去皮/臍”,主要是“去皮”出現(xiàn)過多,“去皮”兩字連通權(quán)值較大,導(dǎo)致其連通度大于連通閾值,故出現(xiàn)分錯(cuò)的情況。在文本2 中,ConnectRank 算法基本達(dá)到較好的分詞效果,“分寸”本是現(xiàn)代文中常用詞,而“寸關(guān)尺”為中醫(yī)穴位,屬于中醫(yī)專業(yè)術(shù)語,該算法成功把“寸關(guān)尺”識(shí)別出來。
Table 2 Comparison of partial word segmentation results and manual segmentation results表2 部分分詞結(jié)果與人工分詞結(jié)果對(duì)比
3.4.3 分詞實(shí)驗(yàn)與古文分詞系統(tǒng)對(duì)比分析
甲言分詞系統(tǒng)是一款專注于古漢語處理的NLP 工具包,也是僅有的基于古漢語分詞系統(tǒng),其本質(zhì)也屬無監(jiān)督分詞。甲言分詞系統(tǒng)實(shí)驗(yàn)無需訓(xùn)練集,可直接進(jìn)行分詞實(shí)驗(yàn)驗(yàn)證,驗(yàn)證集數(shù)據(jù)與ConnectRank 算法實(shí)驗(yàn)的驗(yàn)證集一致。甲言分詞系統(tǒng)實(shí)驗(yàn)環(huán)境如下:處理器:Intel(R)Core(TM)i5-4258U CPU @ 2.40GHz(4 CPUs),頻率2.1GHz;內(nèi)存:4096MB RAM;操 作 系 統(tǒng):Windows 10 專 業(yè) 版64 位(10.0,版本15063);編譯器:pycharm;主要應(yīng)用模塊:Jiayan模塊。將ConnectRank 算法與之進(jìn)行對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如表3 所示。由表3 可知,ConnectRank 算法的無監(jiān)督分詞效果更好。
Table 3 Comparison of ConnectRank algorithm and Jiayan word segmentation system表3 ConnectRank 算法與甲言分詞系統(tǒng)對(duì)比
針對(duì)中醫(yī)古籍文本領(lǐng)域分詞研究較少,標(biāo)準(zhǔn)語料、專業(yè)詞典少等問題,本文改進(jìn)TextRank 算法,提出了ConnectRank 算法,對(duì)中醫(yī)古籍文獻(xiàn)進(jìn)行無監(jiān)督分詞,使基于中醫(yī)古籍文獻(xiàn)的無監(jiān)督分詞達(dá)到較好的分詞效果。雖然ConnectRank 算法可以深度挖掘文本內(nèi)部信息,但對(duì)于經(jīng)常出現(xiàn)的詞仍存在分錯(cuò)情況。對(duì)此,下一步將引入信息熵和左右熵,根據(jù)字符間凝固度和自由度進(jìn)行切分,并且對(duì)分詞結(jié)果進(jìn)行簡單人工修正,得到的分詞結(jié)果將用于深度學(xué)習(xí)結(jié)合條件隨機(jī)場進(jìn)行再次分詞,以進(jìn)一步提高中醫(yī)古籍文本領(lǐng)域分詞準(zhǔn)確率。