伊克拉木·伊力哈木,艾山·吾買爾,王路路,麥麥提依明·巴吾頓
(1.新疆大學(xué)信息科學(xué)與工程學(xué)院,烏魯木齊830046;2.新疆大學(xué)新疆多語種信息技術(shù)實驗室,烏魯木齊830046;3.中科軟科技股份有限公司信息工程八部,天津300384)
隨著網(wǎng)絡(luò)社交媒體的發(fā)展、經(jīng)濟全球化進程的推進以及國際安全局勢的變化,我國的網(wǎng)絡(luò)輿情分析顯得尤為重要,各類社交媒體和網(wǎng)絡(luò)論壇等載體是用戶發(fā)表觀點、表達情緒的主要平臺。而這些網(wǎng)絡(luò)文本大部分都是短文本,其語言種類又呈現(xiàn)了多樣化的趨勢且文本的語種判別也易混淆。除了作為國家通用語言的中文文本數(shù)據(jù)之外,還存在少數(shù)民族語言或者周邊國家語言的文本數(shù)據(jù),如此大量混雜的多語種文本信息給傳統(tǒng)的自然語言處理帶來了挑戰(zhàn)。
語種識別的研究經(jīng)歷了長期的演變,1994 年Cavnar 等人提出了基于N-Gram 的詞頻排序算法[1],此方法的準確率在針對400 字以上的長文本語種識別任務(wù)中可達到99.8%,但對于大部分社交媒體限制的140字以內(nèi)的短文本識別上的效果差強人意。2003 年Frank基于此方法設(shè)計實現(xiàn)了名為Textcat 的語種識別工具[2]。2007 年Hammarstrom 使用詞綴表擴充詞典[3]。2009 年Ceylan 等人使用決策樹對文本語言種類進行分類[4]。2010 年Vantanen 等結(jié)合N-Gram 語言模型和樸素貝葉斯分類器設(shè)計識別語言種類[5],該方法主要針對5-21 個字符的文本。2013 年Carter 等人針對推特上的交互信息提出了基于用戶歷史消息和消息中內(nèi)嵌連接的內(nèi)容識別語種[6]。2011 年Tromp 等人提出了基于NGram 的圖結(jié)構(gòu)的方法進行語種識別[7],該方法有效利用詞本身的信息以及詞與詞之間的信息,提升了短文本上語種識別的效率。Vogel 等人在此算法上進行了改進[8]。2012 年Lui 等人結(jié)合了N-Gram 與多項式樸素貝葉斯分類器設(shè)計了Langid 語種識別工具包[9]。2013 年Brown 提出基于N-Gram 字符特征權(quán)重的空間向量模型[10]。2018 年HAO Ming 等人提出了基于Cavnar、Tromp 和Vogel 設(shè)計的模型的改進方法,可自適應(yīng)學(xué)習(xí)特征的權(quán)重,以提高模型在不同數(shù)據(jù)集上的魯棒性[11]。目前,許多研究工作嘗試將深度學(xué)習(xí)技術(shù)應(yīng)用到語種識別中,但在短文本上,基于統(tǒng)計的語種識別方法更為高效[12-13]。中科院聲學(xué)研究所于2019 年構(gòu)建了一個維哈口語風(fēng)格的短文本語料庫,通過設(shè)計多種特征,構(gòu)建最大熵分類器以區(qū)分維吾爾語(以下簡稱維語)和哈薩克語(以下簡稱哈語)兩個相似語種的短文本數(shù)據(jù),最終取得了95.6%的整體精確度[14]。
基于以上工作的啟發(fā),本文提出了基于多種策略結(jié)合的文本語種識別方法,核心思想在于將不同書寫形式的同一個語言當(dāng)作不同語種進行區(qū)分。對維語、哈語和烏語的兩種編碼分別進行了研究,同時在中文和日文上驗證了此方法的有效性,并針對上述五種語種的八種編碼構(gòu)建了語種識別系統(tǒng),可進行快速有效的網(wǎng)絡(luò)文本語種識別處理。
N-Gram 模型是一種統(tǒng)計語言模型,設(shè)有一個基元(基元可以是單詞、字母、音節(jié)等)個數(shù)為i 的句子s=w1w2w3…wi,基于文獻[15]中的研究結(jié)論,對于中文和日文文本,為了盡可能多地保留詞匯完整性,本文采用字符級別的4-gram 語言模型(四元文法)。而對于其他語種的判別,都采用bigram 語言模型(二元文法)。根據(jù)貝葉斯公式,我們可將語種識別任務(wù)定義為特定的文本分類任務(wù)進行處理。 其公式為:P(語種類別|特征)=現(xiàn)假設(shè)有文本序列s=w1w2w3…wm和語種標簽集合L,即可將數(shù)據(jù) s 看作 m 維特征集合,表示為s=(w1,w2,w3,…,wm),語種類別集合L 中共有n 個類別,表示為L=(l1,l2,l3,…,ln)。根據(jù)樸素貝葉斯分類算法可計算得到的語種類別如式(1)所示:
在實際運用中,分母位置的P(s)是與輸入數(shù)據(jù)常量相關(guān)的,因此可忽略不進行計算。樸素貝葉斯公式即可表示為式(2):
此時,分類器的準則表達公式就改變?yōu)槭剑?):
算法描述如下:有一段文本“東京都渋谷區(qū)神宮前3 丁目1 番30 號”,該句子中出現(xiàn)較多漢字,假設(shè)字與字之間獨立進行判別,難以區(qū)分該文本屬于中文或是日文。單個字符的語種判別計算為:
P(東京都渋谷區(qū)神宮前3丁目1番30號|語種)=P(東|語種)P(京|語種)…P(號|語種)
在中、日文上采用4-gram 拆分,計算結(jié)果為:
P(東京都渋谷區(qū)神宮前3丁目1番30號|語種)=P(東京都渋|語種)P(京都渋谷|語種)…P(丁目番號|語種)此種情況下,“東京都渋”、“丁目番號”等組合詞串在日文文本中出現(xiàn)的概率遠大于在中文文本中該出現(xiàn)的概率。
針對五種語言的八種編碼,按編碼區(qū)間將其兩兩配對進行比對,因此共有4 個分類器。根據(jù)公式(3)分別進行對應(yīng)的分類器設(shè)計。其中P(lk)可由訓(xùn)練數(shù)據(jù)進行估計,根據(jù)大數(shù)定律,當(dāng)訓(xùn)練集包含重組的獨立同分布樣本時,可根據(jù)各類樣本出現(xiàn)的頻率進行估計。而本文使用的各種類數(shù)據(jù)數(shù)量一致。因此,只需對所有樣本計算即可。
由于處理的數(shù)據(jù)對象為離散型數(shù)據(jù)。本文中使用多項式樸素貝葉斯分類器,對訓(xùn)練數(shù)據(jù)建立N-Gram語言模型后,建立頻率表,表內(nèi)數(shù)據(jù)為每個n 元組在某類文本中出現(xiàn)的頻次,以此來計算類條件概率。最后為了避免某個元組未曾出現(xiàn)過導(dǎo)致整體概率為0,使用拉普拉斯平滑處理。
mixlangidnb 算法偽代碼:
本文系統(tǒng)中,Web 服務(wù)器使用的是uWSGI,Web 框架使用的是Django,為了提高系統(tǒng)并發(fā)性能和安全性,采用Nginx 作為反向代理服務(wù)器進行負載均衡。
uWSGI 實現(xiàn)了多種協(xié)議,包括uWSGI、WSGI 和HTTP 等。其作用是通過將客戶端發(fā)送的請求轉(zhuǎn)發(fā)給Web 框架進行邏輯處理,并將處理后的結(jié)果返回給客戶端。其中WSGI 是Web 服務(wù)器和Web 框架的通信協(xié)議,同時也是一種解耦的規(guī)范,實現(xiàn)了多個Web 服務(wù)器和多個Web 框架之間的任意組合搭配。而uWS?GI 是一種傳輸協(xié)議,用于定義傳輸信息的類型,使uWSGI 服務(wù)器能與其他Web 服務(wù)器進行通信。
Nginx 同樣是一種Web 服務(wù)器,相比uWSGI 功能更加強大,可以做反向代理服務(wù)器并通過輪詢算法將客戶端請求分配至多臺Web 服務(wù)器上實現(xiàn)負載均衡,大幅度提高系統(tǒng)并發(fā)性能。并且Nginx 處理靜態(tài)文件的性能和解析HTTP 請求的效率遠高于uWSGI,因此在uWSGI 和Django 之上添加Nginx 能使系統(tǒng)響應(yīng)時間大幅度縮短。
以系統(tǒng)角度而言,整體流程分為接收過程和返回過程。
在接收過程中,當(dāng)客戶端發(fā)送HTTP 請求至反向代理服務(wù)器,反向代理服務(wù)器解析HTTP 請求,并通過uWSGI 協(xié)議轉(zhuǎn)發(fā)給uWSGI 服務(wù)器。uWSGI 服務(wù)器將請求內(nèi)容轉(zhuǎn)換為WSGI 支持的格式,再通過WSGI 發(fā)送至對應(yīng)的web 框架中的應(yīng)用。Web 框架中的應(yīng)用根據(jù)請求內(nèi)容進行相應(yīng)的邏輯處理。
在返回過程中,Web 框架將應(yīng)用處理后的結(jié)果返回WSGI,WSGI 將其處理為uWSGI 支持的格式后,打包發(fā)送至uWSGI 服務(wù)器,經(jīng)由uWSGI 轉(zhuǎn)發(fā)至Nginx后,最終返回至客戶端。整體流程如圖1 所示。
圖1 語種識別系統(tǒng)流程圖
在上述流程中的請求當(dāng)中包含系統(tǒng)用戶的認證ID,系統(tǒng)任務(wù)代碼,原始文本三個參數(shù)。三個參數(shù)都封裝為JSON 格式,參數(shù)的詳細說明如表1 所示。
表1 JSON 格式數(shù)據(jù)輸入項
本系統(tǒng)中語種識別的處理流程如下:
預(yù)處理,去除各類HTML 標簽等清洗工作。對于剩下的網(wǎng)絡(luò)文本數(shù)據(jù)系統(tǒng)預(yù)先設(shè)定將其分為文字、符號和數(shù)字三種類別。分別判斷除去符號集合和數(shù)字集合后數(shù)據(jù)的長度。若僅包含文字則轉(zhuǎn)入語種判別子流程;若僅包含符號集合內(nèi)的數(shù)據(jù),則輸出“punc”;若僅包含數(shù)字集合內(nèi)的數(shù)據(jù),則輸出“num”;若同時包含符號和數(shù)字集合內(nèi)數(shù)據(jù),則輸出“mixnumpunc”;若在預(yù)處理后數(shù)據(jù)長度為0,即不包含任何文字、符號和數(shù)字,則返回“null”;若不滿足上述任何情況,轉(zhuǎn)到語種識別子流程。總系統(tǒng)流程如圖2 所示。
語種識別子流程第一層處理,即編碼區(qū)間判別,將文本分入對應(yīng)的編碼區(qū)間,每個編碼區(qū)間包含兩個語種。
語種識別子流程第二層處理,即特征字符匹配,此步驟可解決大部分識別問題。
若上述過程仍無法判定語種,則使用基于N-Gram的樸素貝葉斯模型進行識別,判斷是否屬于單一語種,最后輸出判別結(jié)果。
語種識別子流程如圖3 所示。
圖2 語種識別總體流程圖
圖3 語種識別詳細流程圖
輸入的JSON 格式的數(shù)據(jù)為:
{"key":"user","task":"langid","text":"東京都渋谷區(qū)神宮前3 丁目1 番30 號"}
返回的json 格式的數(shù)據(jù)為:
{"code":200,"data":"jp"}
code 值為狀態(tài)碼,200 表示此次請求成功,0 為失敗。
為了驗證語種識別系統(tǒng)的性能,從識別準確率、運行時間等方面設(shè)置了多組實驗對該系統(tǒng)進行測試。在實驗中,zh-CN 表示中文,JP 表示日文,ug-CN 表示基于現(xiàn)行字符編碼維語,ug-LA 表示拉丁字符編碼維語,kz 表示基于現(xiàn)行字符編碼哈語,kk 表示基于西里爾字符編碼哈語,uz-LA 表示基于拉丁字符編碼烏語,uz-Cyr 表示基于西里爾字符編碼烏語,MSLIS 表示多策略語種識別系統(tǒng)。
實驗使用的系統(tǒng)硬件環(huán)境是CPU Intel Xeon E5-2690 v4@2.60GHz,512G 內(nèi)存,2T 硬盤。使用的軟件環(huán)境如下:操作系統(tǒng)為CentOS 7.3、Web 框架django(2.1.5),負載均衡nginx(1.12.1),uwsg(i2.0.15)。
本文采用準確率P,召回率R,F(xiàn)1 值作為語種識別的評測指標。其計算公式如下:
上述式中,TP 表示預(yù)測為該語種的結(jié)果,F(xiàn)N 表示預(yù)測為其他語種的結(jié)果,F(xiàn)P 為其他語種預(yù)測為該語種的結(jié)果。在實驗中,為測試對短文本的識別效果,本文按照句子的字符長度進行劃分,每個長度區(qū)間內(nèi)按語種標簽各包含5000 條測試數(shù)據(jù),其長度區(qū)間分別是[1,10],[11,25],[26,50],[51,75],[76,100]。由于編碼區(qū)間的不同,本文將中日、現(xiàn)行維語哈語、拉丁維語烏語、西里爾哈語烏語4 組語種視為易混淆語種。對于每組易混淆語種分別進行比對,因Langid 工具包無法識別拉丁維語、拉丁烏語、現(xiàn)行哈語和西里爾烏語,因此與Langid 的對比測試僅包含中日字符編碼集和現(xiàn)行字符編碼集維語,其余語種進行系統(tǒng)內(nèi)的測試。
表2 中日字符編碼識別性能對比(%)
表3 現(xiàn)行字符編碼識別性能對比(%)
表4 拉丁字符編碼識別性能對比(%)
表5 拉丁字符編碼識別性能對比(%)
以上實驗結(jié)果表明,本文提出的基于多策略的方法以及設(shè)計的系統(tǒng),在100 字符內(nèi)短文本語種識別中整體性能高于Langid 工具包。對于各組易混淆文本,在1 至10 字符長度內(nèi)的測試數(shù)據(jù)上表現(xiàn)略顯不足,在11 至25 字符長度內(nèi)的測試數(shù)據(jù)上表現(xiàn)一般,而對于26 至100 字符長度內(nèi)的測試數(shù)據(jù)上表現(xiàn)非常優(yōu)異。綜合各個長度區(qū)間中的表現(xiàn),對于各組易混淆文本的語種識別能力整體呈現(xiàn)較佳水平。
運行性能測試分為單線程langid 對比測試和系統(tǒng)多并發(fā)測試。
測試數(shù)據(jù)為各語種5000 條,無并發(fā),與langid 的對比測試結(jié)果如表6 所示。
表6 langid 對比測試結(jié)果表
實驗結(jié)果表明,使用了結(jié)合了編碼區(qū)域識別、特征字符匹配和基于N-Gram 的樸素貝葉斯分類3 種策略之后,語種識別速度較langid.py 工具有顯著提升。
語種識別系統(tǒng)的并發(fā)測試使用不區(qū)分語種的5000條文本數(shù)據(jù)和10000 條文本數(shù)據(jù),分別對100、200、300并發(fā)量情況下進行測試,最終結(jié)果如表7 所示。
表7 語種識別速度結(jié)果表
通過上述實驗可知,首先基于Nginx、uWSGI 和Django 組合的架構(gòu)在大量并發(fā)下仍能保持穩(wěn)定運行。其次隨著并發(fā)量的增加,系統(tǒng)響應(yīng)速度也會加快。
針對網(wǎng)絡(luò)文本語種識別問題,本文構(gòu)造了中文、日文、維語、哈語、烏語的特征字符匹配字典,并提出了非局限于語言學(xué)知識或編碼范圍判別等某一特定方面,而是結(jié)合編碼區(qū)域識別、特征字符匹配和基于N-Gram的樸素貝葉斯分類的多策略結(jié)合語種識別方法,給出了解決目前互聯(lián)網(wǎng)上語言文字表達形式多樣化,語種信息易混淆、難以識別問題的新思路和新方向,尤其是針對具有多種文字書寫形式的語言效果顯著。最終設(shè)計并實現(xiàn)了高并發(fā)語種識別系統(tǒng)。該系統(tǒng)比較語種識別任務(wù)中通用的Langid 語種識別工具包,在維語、哈語和烏語的兩種不同寫法的識別性能上有較大的提升,并且該系統(tǒng)在識別速度上有較大優(yōu)勢,高并發(fā)下系統(tǒng)表現(xiàn)極其穩(wěn)定。結(jié)合以上兩點可以驗證該系統(tǒng)完全符合工業(yè)環(huán)境中的應(yīng)用。