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