劉昱彤,吳 斌,謝 韜,王 柏
(北京郵電大學(xué) 智能通信軟件與多媒體北京市重點(diǎn)實(shí)驗(yàn)室,北京 100876)
挖掘語料中的新詞對(duì)整個(gè)自然語言處理領(lǐng)域都具有十分重要的意義,同時(shí)它也是中文分詞、命名實(shí)體識(shí)別和其他任務(wù)必不可少的部分。根據(jù)黃昌寧等[1]的研究,60%的中文分詞錯(cuò)誤來源于未登錄詞。
如今,中文新詞發(fā)現(xiàn)的研究主要集中在現(xiàn)代漢語語料,在古漢語語料上的研究鮮有涉及。然而,古漢語與現(xiàn)代漢語在很多方面有很大區(qū)別,例如,詞匯、短語、語法結(jié)構(gòu)等。此外,很多現(xiàn)代漢語的詞匯,在古漢語語料中可能不是一個(gè)詞語。舉例來說,“可以”在現(xiàn)代漢語語境中就表示“可以”,但是在古漢語語境中,這兩個(gè)字是單獨(dú)的詞語,當(dāng)“可”和“以”組合在一起時(shí),表示“可以憑借”的意思。因此,將針對(duì)現(xiàn)代漢語的新詞發(fā)現(xiàn)工具直接套用在古漢語語料中是不合理的,對(duì)古漢語語料的新詞發(fā)現(xiàn)進(jìn)行研究十分必要。
在古漢語語料中,Deng等[2]提出了一種無監(jiān)督的方法來同時(shí)挖掘新詞和切分中文文本。盡管這種方法能夠有效地切分古漢語語料,但仍存在一些問題。第一,分詞的切分粒度不均勻,分詞結(jié)果存在很多歧義。第二,這種方法對(duì)于低頻新詞的挖掘效果不太理想。然而,在古漢語語料中,很少會(huì)出現(xiàn)分詞歧義,而且很多新詞屬于低頻新詞?;谶@些原因,本文提出了一種新的古漢語語料的新詞發(fā)現(xiàn)算法。
本文提出的AP-LSTM-CRF古漢語新詞發(fā)現(xiàn)算法融合了改進(jìn)的類Apriori算法和Bi-LSTM-CRF切分概率模型。改進(jìn)的類Apriori算法能夠有效地挖掘低頻新詞。Bi-LSTM-CRF模型能夠獲得連續(xù)兩個(gè)字之間的切分概率?;谇蟹指怕实男蛄?,改進(jìn)的類Apriori算法產(chǎn)生的候選詞可以被劃分為新詞和噪聲詞。
本文的主要貢獻(xiàn)包括3個(gè)方面:
(1) 提出了古漢語的新詞發(fā)現(xiàn)算法AP-LSTM-CRF,融合了改進(jìn)的類Apriori算法和Bi-LSTM-CRF切分概率模型,利用數(shù)據(jù)挖掘的關(guān)聯(lián)規(guī)則算法和深度學(xué)習(xí)的方法有效地挖掘古漢語語料中的新詞。
(2) 基于Apache Spark分布式并行計(jì)算框架將改進(jìn)的類Apriori算法并行化,提高了挖掘新詞的效率,提出了新的較為嚴(yán)格的過濾規(guī)則,能夠過濾掉更多的噪聲詞。
(3) 在宋詞和宋史數(shù)據(jù)集上驗(yàn)證了AP-LSTM-CRF古漢語新詞發(fā)現(xiàn)算法的有效性,與現(xiàn)有最好方法比較,F(xiàn)1值分別提高了約8個(gè)百分點(diǎn)和2個(gè)百分點(diǎn)。
最新的中文新詞發(fā)現(xiàn)研究主要分為3個(gè)方面。第一是針對(duì)特定領(lǐng)域的新詞發(fā)現(xiàn)。Chen等[3]提出了一種聯(lián)合統(tǒng)計(jì)模型,可以同時(shí)發(fā)現(xiàn)特定領(lǐng)域的新詞和在特定領(lǐng)域有特殊含義的詞。霍帥等[4]提出一種基于微博內(nèi)容的新詞發(fā)現(xiàn)方法,引入詞關(guān)聯(lián)性信息的迭代上下文熵算法,并通過上下文關(guān)系獲取新詞候選列表進(jìn)行過濾。周霜霜等[5]提出了一種融合人工啟發(fā)式規(guī)則、C/NC-value改進(jìn)算法和條件隨機(jī)場(chǎng)模型的微博新詞抽取方法。雷一鳴等[6]提出一種基于詞語互信息模型和外部統(tǒng)計(jì)量的針對(duì)微博語料的新詞發(fā)現(xiàn)方法。杜麗萍等[7]提出的互信息(PMI)的改進(jìn)算法,將PMIk算法與少量基本規(guī)則相結(jié)合,能夠從大規(guī)模語料中自動(dòng)識(shí)別不同長(zhǎng)度的網(wǎng)絡(luò)新詞。第二是針對(duì)開放領(lǐng)域的新詞發(fā)現(xiàn)。陳飛等[8]提出了一系列區(qū)分新詞邊界的統(tǒng)計(jì)特征,并采用CRF方法綜合這些特征實(shí)現(xiàn)了開放領(lǐng)域新詞發(fā)現(xiàn)的算法。第三是用新詞發(fā)現(xiàn)來輔助情感分析任務(wù)。楊陽等[9]提出了基于詞向量的情感新詞發(fā)現(xiàn)方法。萬琪等[10]將新詞發(fā)現(xiàn)融入微博情感表達(dá)抽取任務(wù)中,建立了基于CRF的聯(lián)合模型,利用新詞的信息提高了情感表達(dá)識(shí)別的效果。
然而上述的所有這些方法,都主要集中在現(xiàn)代漢語語料。
關(guān)于在古漢語語料中發(fā)現(xiàn)新詞,最早的工作是Deng等[2]提出的TopWords算法。這是一種無監(jiān)督的面向特定領(lǐng)域的新詞發(fā)現(xiàn)算法,在古漢語語料中發(fā)現(xiàn)新詞只是其中的一個(gè)應(yīng)用場(chǎng)景。這種算法并不是針對(duì)古漢語語料的特點(diǎn)來設(shè)計(jì)的,存在著分詞歧義和無法有效挖掘低頻新詞的缺點(diǎn)。謝韜等[11]的工作是在此基礎(chǔ)上進(jìn)行改進(jìn)的。只保留了原先產(chǎn)生候選詞集的Apriori算法,他們所提出的AP-LSTM是一種專門針對(duì)古漢語語料的有監(jiān)督新詞發(fā)現(xiàn)算法。
本文的工作與謝韜等[11]的工作最為相似,都是先通過改進(jìn)的類Apriori算法產(chǎn)生候選詞集,然后使用過濾規(guī)則去掉候選詞集里的噪聲詞。而主要區(qū)別體現(xiàn)在3個(gè)方面:第一,為改進(jìn)的類Apriori算法添加了并行化實(shí)現(xiàn),極大地提高了產(chǎn)生候選詞集的效率。第二,將LSTM切分概率模型改為了Bi-LSTM-CRF模型,提高了切分概率模型的準(zhǔn)確率、召回率和F1值。第三,對(duì)過濾規(guī)則進(jìn)行改進(jìn),使其變得更加嚴(yán)格,在不影響新詞的條件下過濾掉更多的噪聲詞,提高了發(fā)現(xiàn)新詞的準(zhǔn)確率。
本文的研究點(diǎn)主要集中在古漢語語料的新詞發(fā)現(xiàn)上,所以需要明確在古漢語語料中,哪種詞才算是新詞。首先,它應(yīng)該是一個(gè)含有明確語義的詞語,其次,它很少出現(xiàn)在現(xiàn)代漢語中;最后,它應(yīng)該具有鮮明的歷史意義,如古漢語、詩歌詞匯、專有名詞等。所以,本文給出古漢語語料新詞的定義如下:
定義1古漢語語料新詞
古漢語中的新詞是一個(gè)包含了明確語義解釋和歷史特征的字符序列,同時(shí)它不包含在標(biāo)準(zhǔn)詞典中。
基于上述定義,本文闡明了古漢語中新詞的含義。并且設(shè)計(jì)了一個(gè)標(biāo)準(zhǔn)詞典來過濾掉噪聲詞,標(biāo)準(zhǔn)詞典主要包括現(xiàn)代詞匯和停用詞。進(jìn)一步地,本文將古漢語新詞發(fā)現(xiàn)問題形式化地描述定義如下:
定義2古漢語新詞發(fā)現(xiàn)
給定古漢語語料C和標(biāo)準(zhǔn)詞典D,新詞發(fā)現(xiàn)旨在找出所有不在D中的新詞W。這包括候選新詞A的生成以及過濾掉噪聲詞T。換句話說,新詞集合(A-T)就是最終的結(jié)果。
圖1展示了本文提出的古漢語新詞發(fā)現(xiàn)算法AP-LSTM-CRF的流程圖。
圖1 AP-LSTM-CRF算法流程圖
(1) 用改進(jìn)的類Apriori算法產(chǎn)生候選詞集。
(2) 在測(cè)試集文檔中找到候選詞每次出現(xiàn)的位置和對(duì)應(yīng)的上下文。
(3) 用訓(xùn)練集文檔訓(xùn)練Bi-LSTM-CRF模型。
(4) 在測(cè)試集上用訓(xùn)練好的Bi-LSTM-CRF模型對(duì)句子進(jìn)行切割。
(5) 用設(shè)計(jì)好的結(jié)合切分概率的過濾規(guī)則把候選詞集里的噪聲詞過濾掉。
(6) 用jieba[注]https://pypi.org/project/jieba/分詞器的詞典對(duì)上一步得到的結(jié)果進(jìn)行過濾,得到真正的新詞。
改進(jìn)的類Apriori算法來源于謝韜等[11]的工作,現(xiàn)復(fù)述如下。
算法1改進(jìn)的類Apriori算法
輸入:原始語料D={s1,s2,…,sn}
輸出:候選新詞的集合
//產(chǎn)生1頻繁項(xiàng)集
1候選項(xiàng)集C1={c1,c2,…,cm}
統(tǒng)計(jì)原始語料中單個(gè)字的頻率,得到(字,頻率)的二元組集合S1={(c1,f1),(c2,f2),…,(cm,fm)}
FOR(ci,fi) INS1DO
IFfi>支持度THEN
把ci加入1頻繁項(xiàng)集L1
得到1頻繁項(xiàng)集L1
//產(chǎn)生2頻繁項(xiàng)集
FORsiINL1DO
FORsjINL1DO
把si+sj加入2候選項(xiàng)集C2
統(tǒng)計(jì)原始語料中C2的每個(gè)字符串si出現(xiàn)的頻率,得到(字符串,頻率)的二元組集合S2={(s1,f1),(s2,f2),…,(sm,fm)}
FOR (si,fi) INS2DO
IFfi>支持度 THEN
把si加入2頻繁項(xiàng)集L2
IFfi<低頻閾值THEN
把si加入低頻項(xiàng)集M
得到2頻繁項(xiàng)集L2
FORk=3 TOKDO
//產(chǎn)生k頻繁項(xiàng)集
FORP(p1p2…pk-1)INLk-1DO
FORQ(q1q2…qk-1)INLk-1DO
IFp2p3…pk-1=q1q2…qk-2THEN
把p1p2…pk-1qk-1加入Ck
統(tǒng)計(jì)原始語料中Ck的每個(gè)字符串si出現(xiàn)的頻率,得到(字符串,頻率)的二元組集合Sk={(s1,f1),(s2,f2),…,(sm,fm)}
FOR (si,fi) INSkDO
IFfi>支持度 THEN
把si加入k頻繁項(xiàng)集Lk
Iffi<低頻閾值 THEN
把si加入低頻項(xiàng)集M
得到k頻繁項(xiàng)集Lk
ReturnL2∪L3∪…∪LK∪M
算法1描述了改進(jìn)的類Apriori算法,圖2展示了該算法的流程圖。假設(shè)原始語料D由n個(gè)句子組成,s表示字符串,c表示字符,f表示頻率。
圖2 改進(jìn)的類Apriori算法流程圖
產(chǎn)生1頻繁項(xiàng)集的過程可分為統(tǒng)計(jì)頻率、過濾兩個(gè)步驟。1候選項(xiàng)集是語料中出現(xiàn)的每個(gè)字。統(tǒng)計(jì)原始語料中每個(gè)字出現(xiàn)的頻率,把頻率大于支持度的字加入1頻繁項(xiàng)集。產(chǎn)生2頻繁項(xiàng)集的過程可分為組合、統(tǒng)計(jì)頻率、過濾三個(gè)步驟。把1頻繁項(xiàng)集中的字兩兩組合后的字符串加入2候選項(xiàng)集,在原始語料中統(tǒng)計(jì)2候選項(xiàng)集的每個(gè)字符串出現(xiàn)的頻率,把頻率大于支持度的字符串加入2頻繁項(xiàng)集,把頻率小于低頻閾值的字符串加入低頻項(xiàng)集。產(chǎn)生3頻繁項(xiàng)集到k頻繁項(xiàng)集的過程可分為組合、統(tǒng)計(jì)頻率、過濾三個(gè)步驟。把k-1頻繁項(xiàng)集的兩兩字符串經(jīng)過特殊的方式組合后產(chǎn)生的字符串加入k候選項(xiàng)集,在原始語料中統(tǒng)計(jì)k候選項(xiàng)集的每個(gè)字符串出現(xiàn)的頻率,把頻率大于支持度的字符串加入k頻繁項(xiàng)集,把頻率小于低頻閾值的字符串加入低頻項(xiàng)集。最后把頻繁項(xiàng)集L2…LK和低頻項(xiàng)集M取并集成為候選新詞的集合。
改進(jìn)的類Aprior算法相比傳統(tǒng)的Apriori算法的區(qū)別有兩點(diǎn)。第一,加入了低頻閾值,使之能夠挖掘古漢語中的低頻新詞。因?yàn)橹袊?guó)古代文學(xué)中的大部分詞匯只在整個(gè)語料庫(kù)中出現(xiàn)過一次或兩次,但是頻繁項(xiàng)集的生成是基于支持度(頻率)的,因此傳統(tǒng)的Apriori算法無法挖掘出古漢語中的低頻新詞。第二,對(duì)產(chǎn)生3頻繁項(xiàng)集到k頻繁項(xiàng)集過程的組合步驟提出改進(jìn)。傳統(tǒng)Apriori算法的組合步驟雖然也能挖掘出頻繁候選字符串,但會(huì)產(chǎn)生大量的噪聲詞,而且沒有考慮詞語里字符的順序關(guān)系。
本文基于Spark平臺(tái)為改進(jìn)的類Apriori算法實(shí)現(xiàn)了并行化,詳見算法2。
算法2改進(jìn)的類Apriori的并行化算法
輸入:原始語料D={s1,s2,…,sn}
輸出:候選新詞的集合
① 將原始語料文件以RDD變量的形式讀入內(nèi)存,假設(shè)該RDD變量為input_rdd。
//產(chǎn)生1頻繁項(xiàng)集
② 對(duì)input_rdd的每一行,把出現(xiàn)的每一個(gè)字符存到數(shù)組中,并將每個(gè)字符映射到頻率(也就是1)。最后用reduce操作把相同字符的頻率相加,得到每個(gè)元素是(字符,頻率)的RDD變量f1。
③ 對(duì)RDD變量f1做filter操作,將頻率大于支持度的元素保留,得到新的RDD變量L1,即1頻繁項(xiàng)集。
④ FORk=2 TOKDO
//產(chǎn)生k頻繁項(xiàng)集
⑤ IFk==2 THEN
⑥ 對(duì)L1和L1做笛卡爾積(cartesian操作),產(chǎn)生2候選項(xiàng)集C2(C2也是RDD變量)。
⑦ ELSE
⑧ 用map操作把Lk-1的每個(gè)元素P=p1p2…pk-1映射到(p1p2…pk-2,P),得到RDD變量pre。用map操作把Lk-1的每個(gè)元素Q=q1q2…qk-1映射到(q2q3…qk-1,Q),得到RDD變量post。然后把pre和post做join操作,也就是把前綴和后綴相同的兩個(gè)字符串關(guān)聯(lián)在一起,然后把這兩個(gè)字符串拼接在一起,得到候選詞集Ck。
⑨ 對(duì)input_rdd的每一行,用長(zhǎng)度為k的窗口滑動(dòng),將產(chǎn)生的所有長(zhǎng)度為k的字符串存入數(shù)組,并將每個(gè)字符串映射到頻率(也就是1)。最后用reduced操作把相同字符串的頻率相加,得到每個(gè)元素為(字符串,頻率)的RDD變量scan_trans。把Ck和scan_trans做join操作,得到每個(gè)元素為(字符串,頻率)的RDD變量fk,每個(gè)元素為在原始語料中出現(xiàn)過的候選詞和對(duì)應(yīng)的出現(xiàn)頻率。
⑩ 對(duì)RDD變量fk做filter操作,將頻率大于支持度的元素保留,得到新的RDD變量Lk,即k頻繁項(xiàng)集。再重新對(duì)RDD變量fk做filter操作,這次將頻率小于低頻閾值的元素保留,將得到的RDD變量與低頻項(xiàng)集M合并。
圖3展示了Bi-LSTM-CRF切分概率模型的結(jié)構(gòu)圖,接下來的內(nèi)容將分別解釋該神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的每一層。
圖3 Bi-LSTM-CRF切分概率模型結(jié)構(gòu)圖
2.4.1 Embedding層
在大規(guī)模古漢語語料上使用Word2Vec[注]https://code.google.com/archive/p/word2vec/訓(xùn)練字向量。假設(shè)古漢語語料中的不同字構(gòu)成的字典為C,則字典大小為|C|,字向量的維度為d。那么可以得到字向量矩陣M∈Rd×|c|。在Embedding層,把輸入句子的每個(gè)字映射到它們對(duì)應(yīng)的字向量。
2.4.2 Bi-LSTM層
循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)是龐大的神經(jīng)網(wǎng)絡(luò)家族中的一員,主要用于編碼序列數(shù)據(jù)。它以一個(gè)向量序列(x1,x2,…,xn)作為輸入,返回另一個(gè)序列(h1,h2,…,hn)來表示輸入中每個(gè)步驟中有關(guān)序列的一些信息。盡管在理論上,RNN能夠?qū)W習(xí)到長(zhǎng)距離的依賴信息,但是在實(shí)際應(yīng)用中,卻因?yàn)樘荻缺ɑ蛱荻认У膯栴}難以學(xué)習(xí)到長(zhǎng)距離信息。
圖4 LSTM單元結(jié)構(gòu)
因此,長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(long short-term memory network,LSTM)通過添加了一個(gè)存儲(chǔ)單元來克服這個(gè)問題,以此能夠捕捉到長(zhǎng)距離的依賴信息。LSTM單元結(jié)構(gòu)如圖4所示。LSTM單元擁有三個(gè)特殊的“門”結(jié)構(gòu),分別是輸入門、遺忘門和輸出門。具體通過以下式(1)~式(6)來說明:
i(t)=σ(Wx ix(t)+Wh ih(t -1)+bi)
(1)
f(t)=σ(Wxfx(t)+Whfh(t -1)+bf)
(2)
o(t)=σ(Wx ox(t)+Wh oh(t -1)+bo)
(3)
g(t)=tanh(Wx gx(t)+Wh gh(t -1)+bg)
(4)
c(t)=f(t)?c(t -1)+i(t)?g(t)
(5)
y(t)=h(t)=o(t)?tanh(c(t))
(6)
其中,i,f,o,c分別代表輸入門、遺忘門、輸出門和記憶細(xì)胞的啟動(dòng)向量。從權(quán)值矩陣的下標(biāo)可以看出每一個(gè)權(quán)值矩陣的具體含義,例如Whi代表的就是隱藏輸入門的權(quán)值矩陣。bi,bf,bo分別代表對(duì)應(yīng)門的偏置向量。
但是,從前往后的LSTM層(前向LSTM層)只能編碼每個(gè)字的上文信息。若要表達(dá)出每個(gè)字的上下文信息,還需要一個(gè)從后往前的LSTM層(反向LSTM層)編碼每個(gè)字的下文信息,然后把這兩層結(jié)合起來,如式(7)~式(9)所示。
這樣,通過雙向LSTM神經(jīng)網(wǎng)絡(luò),就可以表示出一句話中每個(gè)字所有的上下文信息,為后續(xù)的標(biāo)注任務(wù)奠定了基礎(chǔ)。
2.4.3 全連接層
從Bi-LSTM層輸出的是每個(gè)時(shí)刻t(每個(gè)字)的隱狀態(tài)向量ht,接下來使每個(gè)時(shí)刻的輸出映射到4個(gè)神經(jīng)網(wǎng)絡(luò)單元,分別代表該字標(biāo)注為B、M、E、S的分?jǐn)?shù),映射采用全連接的方式,如圖5所示。字的標(biāo)簽B、M、E、S的含義見表1。
圖5 全連接層時(shí)刻t的網(wǎng)絡(luò)結(jié)構(gòu)
標(biāo)簽含義標(biāo)簽含義B詞的開頭字E詞的結(jié)尾字M詞的中間字S獨(dú)立成詞
2.4.4 CRF層
在全連接層之后可直接加一個(gè)softmax層,對(duì)標(biāo)注為B、M、E、S的分?jǐn)?shù)做歸一化,使之轉(zhuǎn)化為概率,即每個(gè)時(shí)刻這四個(gè)神經(jīng)網(wǎng)絡(luò)單元的輸出相加為1。但是這種方法對(duì)每個(gè)字的標(biāo)簽獨(dú)立地進(jìn)行預(yù)測(cè),無法捕捉到輸出標(biāo)簽之間的依賴關(guān)系(例如,標(biāo)簽“M”后面不能接標(biāo)簽“S”),而條件隨機(jī)場(chǎng)(conditional random field,CRF)可以有效解決這個(gè)問題。
對(duì)于一個(gè)輸入句子(假設(shè)x1,x2,…,xn都是中文字符),如式(10)所示。
X=(x1,x2,…,xn)
(10)
假設(shè)預(yù)測(cè)的輸出標(biāo)簽序列如式(11)所示。
Y=(y1,y2,…,yn)
(11)
定義它的得分如式(12)所示。
(12)
其中,A是轉(zhuǎn)移分?jǐn)?shù)矩陣,Ai,j表示從標(biāo)簽i轉(zhuǎn)移到標(biāo)簽j的分?jǐn)?shù)。y0,yn+1分別代表句子的開始標(biāo)簽(start)和結(jié)束標(biāo)簽(end)。P是雙向LSTM層輸出的得分矩陣,所以P的大小是n×k,k是不同的標(biāo)簽數(shù),Pi,j表示句子的第i個(gè)字標(biāo)注為標(biāo)簽j的分?jǐn)?shù)。
在CRF層后,通過一個(gè)softmax層,得到給定輸入句子X的條件下所有可能的標(biāo)簽序列的概率,YX表示所有可能的標(biāo)簽序列的集合。
(13)
然后在模型訓(xùn)練的過程中,極大化正確標(biāo)簽序列的log似然,如式(14)所示。
(14)
在測(cè)試(解碼)的過程中,將得分最高的標(biāo)簽序列作為預(yù)測(cè)輸出序列,如式(15)所示。
(15)
對(duì)于由改進(jìn)的類Apriori算法產(chǎn)生的每個(gè)候選新詞,它在測(cè)試集文檔中可能出現(xiàn)一次或多次,并且在每個(gè)出現(xiàn)位置都存在一個(gè)輸入上下文。測(cè)試集文檔經(jīng)過訓(xùn)練好的Bi-LSTM-CRF模型后,會(huì)得到每一個(gè)位置的切分結(jié)果。下面給出過濾規(guī)則的定義:
定義3過濾規(guī)則
對(duì)于一個(gè)候選新詞,如果存在某個(gè)輸入上下文窗口,它的左邊界切分概率和右邊界切分概率同時(shí)大于0.5,并且它的內(nèi)部切分概率全都小于0.5,則將其劃分為新詞。
本文中,主要用到兩個(gè)很有代表性的古漢語數(shù)據(jù)集:宋詞和宋史。這兩個(gè)數(shù)據(jù)集來源于謝韜等[11]的實(shí)驗(yàn)語料,其中,分別隨機(jī)抽取3萬行進(jìn)行分詞標(biāo)注,并標(biāo)注出有具體語義的新詞。數(shù)據(jù)集的具體描述見表2。
表2 數(shù)據(jù)集統(tǒng)計(jì)信息
另外,本文將開源中文分詞工具jieba分詞器的詞典作為算法里的標(biāo)準(zhǔn)詞典,jieba詞典共包含584 429個(gè)已知詞。
3.2.1 有效性實(shí)驗(yàn)
(1) 分布式的類Apriori算法
改進(jìn)的類Apriori算法采用和謝韜等[11]工作的相同實(shí)驗(yàn)設(shè)置,將支持度設(shè)置為5,低頻閾值設(shè)置為2,對(duì)于宋詞語料,設(shè)置頻繁項(xiàng)集的最大長(zhǎng)度為5,對(duì)于宋史語料,頻繁項(xiàng)集的最大長(zhǎng)度設(shè)為10。在測(cè)試集上運(yùn)行改進(jìn)的類Apriori算法,分別在宋詞語料和宋史語料中得到了13 905和12 265個(gè)候選詞。
本文采用的并行化實(shí)驗(yàn)集群由1個(gè)主控節(jié)點(diǎn)和9個(gè)計(jì)算節(jié)點(diǎn)組成,計(jì)算節(jié)點(diǎn)的配置信息參見表3。
表3 計(jì)算節(jié)點(diǎn)配置信息
實(shí)驗(yàn)結(jié)果如圖6所示,并行化后的算法相比于串行的算法,效率提升顯著。而且節(jié)點(diǎn)數(shù)越多,算法耗費(fèi)的時(shí)間越少。
圖6 改進(jìn)的類Apriori算法隨節(jié)點(diǎn)數(shù)目變化運(yùn)行時(shí)間圖
(2) Bi-LSTM-CRF切分概率模型
切分概率模型用來預(yù)測(cè)一個(gè)句子的每個(gè)位置是否應(yīng)該被切分。假設(shè)一個(gè)句子表示為s=c1c2…cn(c1,c2,…,cn表示句子中對(duì)應(yīng)位置的字)。經(jīng)過切分概率模型后,則產(chǎn)生由0和1組成的長(zhǎng)度為n-1的序列,1表示切分,0表示不切分。該序列是預(yù)測(cè)的切分序列。帶有分詞標(biāo)注的句子經(jīng)過處理可以得到實(shí)際的切分序列。
在實(shí)驗(yàn)中,用準(zhǔn)確率、召回率和F1值來評(píng)價(jià)切分概率模型的好壞,如式(16)~式(18)所示。
(16)
(17)
(18)
本文將經(jīng)過分詞標(biāo)注的數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集,劃分比例為8∶2。
神經(jīng)網(wǎng)絡(luò)模型中超參數(shù)的設(shè)置對(duì)實(shí)驗(yàn)結(jié)果有較大影響,本文選擇的超參數(shù)的值詳見表4。表中所列超參數(shù)的值是憑經(jīng)驗(yàn)選擇的。其中,Embedding層和Bi-LSTM層的dropout比率都設(shè)置為0.5。設(shè)置dropout主要是為了防止模型的過擬合。
表4 超參數(shù)設(shè)置
關(guān)于隱藏層單元個(gè)數(shù)和字向量維度這兩個(gè)超參數(shù)的選擇過程如下:
測(cè)試基于不同字向量維度和LSTM隱藏層單元個(gè)數(shù)的模型效果。如表5所示,對(duì)于宋詞語料,當(dāng)字向量的維度是100,LSTM隱藏層單元個(gè)數(shù)是128的時(shí)候,Bi-LSTM-CRF有最高的性能。而對(duì)于宋史語料,當(dāng)把字向量維度設(shè)置成50,LSTM隱藏層單元個(gè)數(shù)設(shè)置為150時(shí),模型能夠有最好的效果。
表5 Bi-LSTM-CRF切分概率模型實(shí)驗(yàn)結(jié)果
所以本文將這兩組設(shè)置和表4的設(shè)置合起來作為后續(xù)實(shí)驗(yàn)的超參數(shù)設(shè)置。相比于謝韜等[11]的切分概率模型,F(xiàn)1值分別有7.20%和3.07%的提升。[注]關(guān)于謝韜等[11]的切分概率模型實(shí)驗(yàn)結(jié)果詳見其論文,在本文不再贅述,此處是將表5與謝韜等[11]的切分概率模型實(shí)驗(yàn)結(jié)果的F1值作比較。謝韜等[11]的切分概率模型是用來判斷一個(gè)四字輸入的中間是否應(yīng)該被切分。它的網(wǎng)絡(luò)結(jié)構(gòu)是字向量層+Bi-LSTM層+1輸出的全連接層,再接sigmoid函數(shù)把輸出值映射到[0,1]。最終的輸出表示四字輸入的中間的切分概率,大于0.5表示切分,小于0.5表示不切分。
(3) 過濾規(guī)則
假設(shè)改進(jìn)的類Apriori算法產(chǎn)生的某個(gè)候選新詞是字符序列CtCt+1,找到它在測(cè)試集文檔中的每一個(gè)出現(xiàn)位置,然后獲得它的左鄰接字符和右鄰接字符,所以可以得到一個(gè)上下文窗口Ct-2Ct-1CtCt+1Ct+2Ct+3,如果上下文中不存在鄰接字符,則用一個(gè)默認(rèn)字符“padding”替代。進(jìn)而能夠得到三個(gè)小窗口:Ct-2Ct-1CtCt+1,Ct-1CtCt+1Ct+2,CtCt+1Ct+2Ct+3。通過Bi-LSTM-CRF切分概率模型可以得到測(cè)試集文檔中每個(gè)句子任意兩個(gè)連續(xù)字之間的切分概率,從中找出這三個(gè)小窗口中間位置的切分概率,就得到了候選詞的內(nèi)部切分概率和邊界切分概率。然后利用與內(nèi)部切分概率和邊界切分概率有關(guān)的過濾規(guī)則來判斷候選新詞是真正的新詞還是噪聲詞。這樣,利用過濾規(guī)則從候選詞集中篩選出真正的新詞,即AP-LSTM-CRF模型預(yù)測(cè)的新詞。語料中標(biāo)注的新詞即是實(shí)際的新詞。
在實(shí)驗(yàn)中,用準(zhǔn)確率、召回率和F1值來對(duì)新詞發(fā)現(xiàn)結(jié)果進(jìn)行評(píng)價(jià),如式(19)~式(21)所示。
(19)
(20)
(21)
使用謝韜等[11]的過濾規(guī)則,新詞發(fā)現(xiàn)的效果如表6所示(AP-LSTM模型是謝韜等[18]提出的古漢語新詞發(fā)現(xiàn)算法,它的過濾規(guī)則是,對(duì)于一個(gè)候選新詞,如果存在某個(gè)輸入上下文窗口,它的左邊界切分概率和右邊界切分概率同時(shí)大于0.5,則將其劃分為新詞)。
使用本文提出的新的過濾規(guī)則的實(shí)驗(yàn)結(jié)果如表7所示。
分別觀察表6和表7,可以看出,無論是使用謝韜等[11]提出的過濾規(guī)則,還是使用新的過濾規(guī)則,AP-LSTM-CRF算法的性能都比AP-LSTM好,證明了本文提出的Bi-LSTM-CRF切分概率模型的有效性。
表6 使用舊的過濾規(guī)則的新詞發(fā)現(xiàn)實(shí)驗(yàn)結(jié)果
表7 使用新的過濾規(guī)則的新詞發(fā)現(xiàn)實(shí)驗(yàn)結(jié)果
通過對(duì)比表6和表7的實(shí)驗(yàn)結(jié)果,可以發(fā)現(xiàn)無論是AP-LSTM算法,還是AP-LSTM-CRF算法,使用新的過濾規(guī)則的實(shí)驗(yàn)結(jié)果都比使用謝韜等[11]提出的過濾規(guī)則的實(shí)驗(yàn)結(jié)果要好,由此證明了本文提出的新的過濾規(guī)則的有效性。
3.2.2 AP-LSTM-CRF算法和其他算法的對(duì)比實(shí)驗(yàn)
本文對(duì)比了古漢語新詞發(fā)現(xiàn)算法AP-LSTM-CRF和當(dāng)今主流的幾種開源中文分詞工具(Ansj[注]https://github.com/NLPchina/ansj_seg,中科院ICTCLAS[注] http://ictclas.nlpir.org/,斯坦福中文分詞工具[注]https://nlp.stanford.edu/software/segmenter.shtml)以及Deng等[2]提出的TopWords模型的效果。
關(guān)于AP-LSTM-CRF模型,改進(jìn)的類Apriori算法部分采用謝韜等[11]的實(shí)驗(yàn)設(shè)置,Bi-LSTM-CRF切分概率模型采用3.2.1節(jié)最佳的超參數(shù)設(shè)置,最后利用新的過濾規(guī)則。
關(guān)于幾種中文分詞工具,首先用分詞器切分語料,然后把得到的詞用jieba詞典過濾,得到預(yù)測(cè)的新詞。
關(guān)于TopWords模型,采用Deng等[2]的實(shí)驗(yàn)設(shè)置。
經(jīng)過實(shí)驗(yàn),關(guān)于發(fā)現(xiàn)的有效新詞個(gè)數(shù)的對(duì)比如圖7所示,關(guān)于新詞發(fā)現(xiàn)的F1值的對(duì)比如圖8所示。
圖7 AP-LSTM-CRF算法和其他算法發(fā)現(xiàn)的有效新詞數(shù)對(duì)比
圖8 AP-LSTM-CRF算法和其他算法發(fā)現(xiàn)新詞的F1值對(duì)比
可以看出,AP-LSTM-CRF算法的性能明顯優(yōu)于現(xiàn)有的主流分詞器,這證明了現(xiàn)代漢語和古漢語在語法和構(gòu)詞規(guī)則上確實(shí)存在很大的差異,針對(duì)現(xiàn)代漢語的算法無法很好地運(yùn)用于古漢語這一特殊領(lǐng)域。而AP-LSTM-CRF模型比TopWords模型的效果要好,證明了低頻新詞也是古漢語中新詞的重要組成部分,通過找到更多的低頻新詞,可以減少切分歧義,使相同的詞不再會(huì)有多種切分結(jié)果。
3.2.3 差錯(cuò)分析
有兩種情況的識(shí)別錯(cuò)誤。第一種情況是算法并未將實(shí)際的新詞識(shí)別出來。如“江渚”,它在原文中出現(xiàn)過1次,“乘/興/離/江渚”。經(jīng)過Bi-LSTM-CRF切分概率模型,得到的切分序列為011,而實(shí)際的切分序列應(yīng)該是101,根據(jù)過濾規(guī)則,把該詞判定為噪聲詞,而實(shí)際上該詞是新詞。再如“山聳”,在原文中出現(xiàn)過兩次,分別是“鰲/山聳”,“重疊/暮山/聳翠”。經(jīng)過Bi-LSTM-CRF切分概率模型,得到的切分序列分別為011和010,而實(shí)際的切分序列應(yīng)該為101和010,根據(jù)過濾規(guī)則,把該詞判定為噪聲詞,而實(shí)際上該詞是新詞。在這兩個(gè)例子中,若切分概率模型得到的切分序列是正確的,那么根據(jù)過濾規(guī)則可以得到正確的結(jié)果,所以問題出在切分概率模型上。
第二種情況是算法將噪聲詞誤判成了新詞。如“漸遏”,它在原文中出現(xiàn)過1次,“漸/遏/遙天”。經(jīng)過Bi-LSTM-CRF切分概率模型,得到的切分序列為101,而實(shí)際的切分序列應(yīng)該是111,根據(jù)過濾規(guī)則,把該詞判定為新詞,而實(shí)際上該詞為噪聲詞。再如“知我”,在原文中出現(xiàn)過兩次,“爭(zhēng)/得/知/我”,“爭(zhēng)知/我”。經(jīng)過Bi-LSTM-CRF切分概率模型,得到的切分序列為101和011,而實(shí)際的切分序列應(yīng)該為111和011,根據(jù)過濾規(guī)則,把該詞判定為新詞,而實(shí)際上該詞為噪聲詞。在這兩個(gè)例子中,問題同樣在于切分概率模型,所以在后續(xù)的工作中切分概率模型有待進(jìn)一步完善。
但是由這幾個(gè)例子可以看出過濾規(guī)則是合理的,為了包容切分概率模型可能產(chǎn)生的差錯(cuò),過濾規(guī)則要求只要有一個(gè)上下文完全滿足兩邊切分中間不切分的條件就判斷成新詞。事實(shí)證明,如果切分概率模型預(yù)測(cè)正確,使用這樣的過濾規(guī)則是不可能判斷失誤的。
3.2.4 古漢語新詞發(fā)現(xiàn)結(jié)果展示
表8分別列舉了AP-LSTM-CRF算法在宋詞和宋史中發(fā)現(xiàn)的20個(gè)典型的新詞。
基于在語料中已經(jīng)發(fā)現(xiàn)的新詞,本文把這些新發(fā)現(xiàn)的詞添加到分詞器的詞典中,并比較其與原分詞器的性能,結(jié)果如表9所示。
表8 古漢語中發(fā)現(xiàn)的典型新詞展示
從表9可以看出,當(dāng)向分詞器里添加了新詞之后,分詞器的準(zhǔn)確性得到了極大的提升。
表9 加入新詞后分詞器的性能提升效果
本文提出了一種基于古漢語語料的新詞發(fā)現(xiàn)算法AP-LSTM-CRF。改進(jìn)的類Apriori算法可以有效地挖掘低頻新詞,通過并行化該算法,極大地提升產(chǎn)生候選詞集的效率。Bi-LSTM-CRF切分概率模型可以更加準(zhǔn)確地判斷兩個(gè)字之間的切分概率?;诤蜻x詞上下文的切分概率序列,本文提出的過濾規(guī)則可以更加有效地過濾掉噪聲詞,從而有效地從古漢語語料中挖掘新詞。
將來,我們將嘗試采用無監(jiān)督或半監(jiān)督的算法對(duì)古漢語的新詞進(jìn)行挖掘。因?yàn)槿绻捎糜斜O(jiān)督的算法,就需要研究者人工標(biāo)注大量訓(xùn)練數(shù)據(jù),這種代價(jià)是十分大的。此外,在大量的古漢語數(shù)據(jù)背景下,句子語法十分繁多,這給數(shù)據(jù)的標(biāo)注和模型的訓(xùn)練帶來了很大的挑戰(zhàn)。因此,無監(jiān)督地在古漢語語料中發(fā)現(xiàn)新詞具有十分重大的現(xiàn)實(shí)意義。