伊克拉木·伊力哈木,艾山·吾買(mǎi)爾,王路路,麥麥提依明·巴吾頓
(1.新疆大學(xué)信息科學(xué)與工程學(xué)院,烏魯木齊830046;2.新疆大學(xué)新疆多語(yǔ)種信息技術(shù)實(shí)驗(yàn)室,烏魯木齊830046;3.中科軟科技股份有限公司信息工程八部,天津300384)
隨著網(wǎng)絡(luò)社交媒體的發(fā)展、經(jīng)濟(jì)全球化進(jìn)程的推進(jìn)以及國(guó)際安全局勢(shì)的變化,我國(guó)的網(wǎng)絡(luò)輿情分析顯得尤為重要,各類(lèi)社交媒體和網(wǎng)絡(luò)論壇等載體是用戶(hù)發(fā)表觀點(diǎn)、表達(dá)情緒的主要平臺(tái)。而這些網(wǎng)絡(luò)文本大部分都是短文本,其語(yǔ)言種類(lèi)又呈現(xiàn)了多樣化的趨勢(shì)且文本的語(yǔ)種判別也易混淆。除了作為國(guó)家通用語(yǔ)言的中文文本數(shù)據(jù)之外,還存在少數(shù)民族語(yǔ)言或者周邊國(guó)家語(yǔ)言的文本數(shù)據(jù),如此大量混雜的多語(yǔ)種文本信息給傳統(tǒng)的自然語(yǔ)言處理帶來(lái)了挑戰(zhàn)。
語(yǔ)種識(shí)別的研究經(jīng)歷了長(zhǎng)期的演變,1994 年Cavnar 等人提出了基于N-Gram 的詞頻排序算法[1],此方法的準(zhǔn)確率在針對(duì)400 字以上的長(zhǎng)文本語(yǔ)種識(shí)別任務(wù)中可達(dá)到99.8%,但對(duì)于大部分社交媒體限制的140字以?xún)?nèi)的短文本識(shí)別上的效果差強(qiáng)人意。2003 年Frank基于此方法設(shè)計(jì)實(shí)現(xiàn)了名為T(mén)extcat 的語(yǔ)種識(shí)別工具[2]。2007 年Hammarstrom 使用詞綴表擴(kuò)充詞典[3]。2009 年Ceylan 等人使用決策樹(shù)對(duì)文本語(yǔ)言種類(lèi)進(jìn)行分類(lèi)[4]。2010 年Vantanen 等結(jié)合N-Gram 語(yǔ)言模型和樸素貝葉斯分類(lèi)器設(shè)計(jì)識(shí)別語(yǔ)言種類(lèi)[5],該方法主要針對(duì)5-21 個(gè)字符的文本。2013 年Carter 等人針對(duì)推特上的交互信息提出了基于用戶(hù)歷史消息和消息中內(nèi)嵌連接的內(nèi)容識(shí)別語(yǔ)種[6]。2011 年Tromp 等人提出了基于NGram 的圖結(jié)構(gòu)的方法進(jìn)行語(yǔ)種識(shí)別[7],該方法有效利用詞本身的信息以及詞與詞之間的信息,提升了短文本上語(yǔ)種識(shí)別的效率。Vogel 等人在此算法上進(jìn)行了改進(jìn)[8]。2012 年Lui 等人結(jié)合了N-Gram 與多項(xiàng)式樸素貝葉斯分類(lèi)器設(shè)計(jì)了Langid 語(yǔ)種識(shí)別工具包[9]。2013 年Brown 提出基于N-Gram 字符特征權(quán)重的空間向量模型[10]。2018 年HAO Ming 等人提出了基于Cavnar、Tromp 和Vogel 設(shè)計(jì)的模型的改進(jìn)方法,可自適應(yīng)學(xué)習(xí)特征的權(quán)重,以提高模型在不同數(shù)據(jù)集上的魯棒性[11]。目前,許多研究工作嘗試將深度學(xué)習(xí)技術(shù)應(yīng)用到語(yǔ)種識(shí)別中,但在短文本上,基于統(tǒng)計(jì)的語(yǔ)種識(shí)別方法更為高效[12-13]。中科院聲學(xué)研究所于2019 年構(gòu)建了一個(gè)維哈口語(yǔ)風(fēng)格的短文本語(yǔ)料庫(kù),通過(guò)設(shè)計(jì)多種特征,構(gòu)建最大熵分類(lèi)器以區(qū)分維吾爾語(yǔ)(以下簡(jiǎn)稱(chēng)維語(yǔ))和哈薩克語(yǔ)(以下簡(jiǎn)稱(chēng)哈語(yǔ))兩個(gè)相似語(yǔ)種的短文本數(shù)據(jù),最終取得了95.6%的整體精確度[14]。
基于以上工作的啟發(fā),本文提出了基于多種策略結(jié)合的文本語(yǔ)種識(shí)別方法,核心思想在于將不同書(shū)寫(xiě)形式的同一個(gè)語(yǔ)言當(dāng)作不同語(yǔ)種進(jìn)行區(qū)分。對(duì)維語(yǔ)、哈語(yǔ)和烏語(yǔ)的兩種編碼分別進(jìn)行了研究,同時(shí)在中文和日文上驗(yàn)證了此方法的有效性,并針對(duì)上述五種語(yǔ)種的八種編碼構(gòu)建了語(yǔ)種識(shí)別系統(tǒng),可進(jìn)行快速有效的網(wǎng)絡(luò)文本語(yǔ)種識(shí)別處理。
N-Gram 模型是一種統(tǒng)計(jì)語(yǔ)言模型,設(shè)有一個(gè)基元(基元可以是單詞、字母、音節(jié)等)個(gè)數(shù)為i 的句子s=w1w2w3…wi,基于文獻(xiàn)[15]中的研究結(jié)論,對(duì)于中文和日文文本,為了盡可能多地保留詞匯完整性,本文采用字符級(jí)別的4-gram 語(yǔ)言模型(四元文法)。而對(duì)于其他語(yǔ)種的判別,都采用bigram 語(yǔ)言模型(二元文法)。根據(jù)貝葉斯公式,我們可將語(yǔ)種識(shí)別任務(wù)定義為特定的文本分類(lèi)任務(wù)進(jìn)行處理。 其公式為:P(語(yǔ)種類(lèi)別|特征)=現(xiàn)假設(shè)有文本序列s=w1w2w3…wm和語(yǔ)種標(biāo)簽集合L,即可將數(shù)據(jù) s 看作 m 維特征集合,表示為s=(w1,w2,w3,…,wm),語(yǔ)種類(lèi)別集合L 中共有n 個(gè)類(lèi)別,表示為L(zhǎng)=(l1,l2,l3,…,ln)。根據(jù)樸素貝葉斯分類(lèi)算法可計(jì)算得到的語(yǔ)種類(lèi)別如式(1)所示:

在實(shí)際運(yùn)用中,分母位置的P(s)是與輸入數(shù)據(jù)常量相關(guān)的,因此可忽略不進(jìn)行計(jì)算。樸素貝葉斯公式即可表示為式(2):

此時(shí),分類(lèi)器的準(zhǔn)則表達(dá)公式就改變?yōu)槭剑?):

算法描述如下:有一段文本“東京都渋谷區(qū)神宮前3 丁目1 番30 號(hào)”,該句子中出現(xiàn)較多漢字,假設(shè)字與字之間獨(dú)立進(jìn)行判別,難以區(qū)分該文本屬于中文或是日文。單個(gè)字符的語(yǔ)種判別計(jì)算為:
P(東京都渋谷區(qū)神宮前3丁目1番30號(hào)|語(yǔ)種)=P(東|語(yǔ)種)P(京|語(yǔ)種)…P(號(hào)|語(yǔ)種)
在中、日文上采用4-gram 拆分,計(jì)算結(jié)果為:
P(東京都渋谷區(qū)神宮前3丁目1番30號(hào)|語(yǔ)種)=P(東京都渋|語(yǔ)種)P(京都渋谷|語(yǔ)種)…P(丁目番號(hào)|語(yǔ)種)此種情況下,“東京都渋”、“丁目番號(hào)”等組合詞串在日文文本中出現(xiàn)的概率遠(yuǎn)大于在中文文本中該出現(xiàn)的概率。
針對(duì)五種語(yǔ)言的八種編碼,按編碼區(qū)間將其兩兩配對(duì)進(jìn)行比對(duì),因此共有4 個(gè)分類(lèi)器。根據(jù)公式(3)分別進(jìn)行對(duì)應(yīng)的分類(lèi)器設(shè)計(jì)。其中P(lk)可由訓(xùn)練數(shù)據(jù)進(jìn)行估計(jì),根據(jù)大數(shù)定律,當(dāng)訓(xùn)練集包含重組的獨(dú)立同分布樣本時(shí),可根據(jù)各類(lèi)樣本出現(xiàn)的頻率進(jìn)行估計(jì)。而本文使用的各種類(lèi)數(shù)據(jù)數(shù)量一致。因此,只需對(duì)所有樣本計(jì)算即可。
由于處理的數(shù)據(jù)對(duì)象為離散型數(shù)據(jù)。本文中使用多項(xiàng)式樸素貝葉斯分類(lèi)器,對(duì)訓(xùn)練數(shù)據(jù)建立N-Gram語(yǔ)言模型后,建立頻率表,表內(nèi)數(shù)據(jù)為每個(gè)n 元組在某類(lèi)文本中出現(xiàn)的頻次,以此來(lái)計(jì)算類(lèi)條件概率。最后為了避免某個(gè)元組未曾出現(xiàn)過(guò)導(dǎo)致整體概率為0,使用拉普拉斯平滑處理。
mixlangidnb 算法偽代碼:


本文系統(tǒng)中,Web 服務(wù)器使用的是uWSGI,Web 框架使用的是Django,為了提高系統(tǒng)并發(fā)性能和安全性,采用Nginx 作為反向代理服務(wù)器進(jìn)行負(fù)載均衡。
uWSGI 實(shí)現(xiàn)了多種協(xié)議,包括uWSGI、WSGI 和HTTP 等。其作用是通過(guò)將客戶(hù)端發(fā)送的請(qǐng)求轉(zhuǎn)發(fā)給Web 框架進(jìn)行邏輯處理,并將處理后的結(jié)果返回給客戶(hù)端。其中WSGI 是Web 服務(wù)器和Web 框架的通信協(xié)議,同時(shí)也是一種解耦的規(guī)范,實(shí)現(xiàn)了多個(gè)Web 服務(wù)器和多個(gè)Web 框架之間的任意組合搭配。而uWS?GI 是一種傳輸協(xié)議,用于定義傳輸信息的類(lèi)型,使uWSGI 服務(wù)器能與其他Web 服務(wù)器進(jìn)行通信。
Nginx 同樣是一種Web 服務(wù)器,相比uWSGI 功能更加強(qiáng)大,可以做反向代理服務(wù)器并通過(guò)輪詢(xún)算法將客戶(hù)端請(qǐng)求分配至多臺(tái)Web 服務(wù)器上實(shí)現(xiàn)負(fù)載均衡,大幅度提高系統(tǒng)并發(fā)性能。并且Nginx 處理靜態(tài)文件的性能和解析HTTP 請(qǐng)求的效率遠(yuǎn)高于uWSGI,因此在uWSGI 和Django 之上添加Nginx 能使系統(tǒng)響應(yīng)時(shí)間大幅度縮短。
以系統(tǒng)角度而言,整體流程分為接收過(guò)程和返回過(guò)程。
在接收過(guò)程中,當(dāng)客戶(hù)端發(fā)送HTTP 請(qǐng)求至反向代理服務(wù)器,反向代理服務(wù)器解析HTTP 請(qǐng)求,并通過(guò)uWSGI 協(xié)議轉(zhuǎn)發(fā)給uWSGI 服務(wù)器。uWSGI 服務(wù)器將請(qǐng)求內(nèi)容轉(zhuǎn)換為WSGI 支持的格式,再通過(guò)WSGI 發(fā)送至對(duì)應(yīng)的web 框架中的應(yīng)用。Web 框架中的應(yīng)用根據(jù)請(qǐng)求內(nèi)容進(jìn)行相應(yīng)的邏輯處理。
在返回過(guò)程中,Web 框架將應(yīng)用處理后的結(jié)果返回WSGI,WSGI 將其處理為uWSGI 支持的格式后,打包發(fā)送至uWSGI 服務(wù)器,經(jīng)由uWSGI 轉(zhuǎn)發(fā)至Nginx后,最終返回至客戶(hù)端。整體流程如圖1 所示。

圖1 語(yǔ)種識(shí)別系統(tǒng)流程圖
在上述流程中的請(qǐng)求當(dāng)中包含系統(tǒng)用戶(hù)的認(rèn)證ID,系統(tǒng)任務(wù)代碼,原始文本三個(gè)參數(shù)。三個(gè)參數(shù)都封裝為JSON 格式,參數(shù)的詳細(xì)說(shuō)明如表1 所示。

表1 JSON 格式數(shù)據(jù)輸入項(xiàng)
本系統(tǒng)中語(yǔ)種識(shí)別的處理流程如下:
預(yù)處理,去除各類(lèi)HTML 標(biāo)簽等清洗工作。對(duì)于剩下的網(wǎng)絡(luò)文本數(shù)據(jù)系統(tǒng)預(yù)先設(shè)定將其分為文字、符號(hào)和數(shù)字三種類(lèi)別。分別判斷除去符號(hào)集合和數(shù)字集合后數(shù)據(jù)的長(zhǎng)度。若僅包含文字則轉(zhuǎn)入語(yǔ)種判別子流程;若僅包含符號(hào)集合內(nèi)的數(shù)據(jù),則輸出“punc”;若僅包含數(shù)字集合內(nèi)的數(shù)據(jù),則輸出“num”;若同時(shí)包含符號(hào)和數(shù)字集合內(nèi)數(shù)據(jù),則輸出“mixnumpunc”;若在預(yù)處理后數(shù)據(jù)長(zhǎng)度為0,即不包含任何文字、符號(hào)和數(shù)字,則返回“null”;若不滿(mǎn)足上述任何情況,轉(zhuǎn)到語(yǔ)種識(shí)別子流程。總系統(tǒng)流程如圖2 所示。
語(yǔ)種識(shí)別子流程第一層處理,即編碼區(qū)間判別,將文本分入對(duì)應(yīng)的編碼區(qū)間,每個(gè)編碼區(qū)間包含兩個(gè)語(yǔ)種。
語(yǔ)種識(shí)別子流程第二層處理,即特征字符匹配,此步驟可解決大部分識(shí)別問(wèn)題。
若上述過(guò)程仍無(wú)法判定語(yǔ)種,則使用基于N-Gram的樸素貝葉斯模型進(jìn)行識(shí)別,判斷是否屬于單一語(yǔ)種,最后輸出判別結(jié)果。
語(yǔ)種識(shí)別子流程如圖3 所示。

圖2 語(yǔ)種識(shí)別總體流程圖

圖3 語(yǔ)種識(shí)別詳細(xì)流程圖
輸入的JSON 格式的數(shù)據(jù)為:
{"key":"user","task":"langid","text":"東京都渋谷區(qū)神宮前3 丁目1 番30 號(hào)"}
返回的json 格式的數(shù)據(jù)為:
{"code":200,"data":"jp"}
code 值為狀態(tài)碼,200 表示此次請(qǐng)求成功,0 為失敗。
為了驗(yàn)證語(yǔ)種識(shí)別系統(tǒng)的性能,從識(shí)別準(zhǔn)確率、運(yùn)行時(shí)間等方面設(shè)置了多組實(shí)驗(yàn)對(duì)該系統(tǒng)進(jìn)行測(cè)試。在實(shí)驗(yàn)中,zh-CN 表示中文,JP 表示日文,ug-CN 表示基于現(xiàn)行字符編碼維語(yǔ),ug-LA 表示拉丁字符編碼維語(yǔ),kz 表示基于現(xiàn)行字符編碼哈語(yǔ),kk 表示基于西里爾字符編碼哈語(yǔ),uz-LA 表示基于拉丁字符編碼烏語(yǔ),uz-Cyr 表示基于西里爾字符編碼烏語(yǔ),MSLIS 表示多策略語(yǔ)種識(shí)別系統(tǒng)。
實(shí)驗(yàn)使用的系統(tǒng)硬件環(huán)境是CPU Intel Xeon E5-2690 v4@2.60GHz,512G 內(nèi)存,2T 硬盤(pán)。使用的軟件環(huán)境如下:操作系統(tǒng)為CentOS 7.3、Web 框架django(2.1.5),負(fù)載均衡nginx(1.12.1),uwsg(i2.0.15)。
本文采用準(zhǔn)確率P,召回率R,F(xiàn)1 值作為語(yǔ)種識(shí)別的評(píng)測(cè)指標(biāo)。其計(jì)算公式如下:

上述式中,TP 表示預(yù)測(cè)為該語(yǔ)種的結(jié)果,F(xiàn)N 表示預(yù)測(cè)為其他語(yǔ)種的結(jié)果,F(xiàn)P 為其他語(yǔ)種預(yù)測(cè)為該語(yǔ)種的結(jié)果。在實(shí)驗(yàn)中,為測(cè)試對(duì)短文本的識(shí)別效果,本文按照句子的字符長(zhǎng)度進(jìn)行劃分,每個(gè)長(zhǎng)度區(qū)間內(nèi)按語(yǔ)種標(biāo)簽各包含5000 條測(cè)試數(shù)據(jù),其長(zhǎng)度區(qū)間分別是[1,10],[11,25],[26,50],[51,75],[76,100]。由于編碼區(qū)間的不同,本文將中日、現(xiàn)行維語(yǔ)哈語(yǔ)、拉丁維語(yǔ)烏語(yǔ)、西里爾哈語(yǔ)烏語(yǔ)4 組語(yǔ)種視為易混淆語(yǔ)種。對(duì)于每組易混淆語(yǔ)種分別進(jìn)行比對(duì),因Langid 工具包無(wú)法識(shí)別拉丁維語(yǔ)、拉丁烏語(yǔ)、現(xiàn)行哈語(yǔ)和西里爾烏語(yǔ),因此與Langid 的對(duì)比測(cè)試僅包含中日字符編碼集和現(xiàn)行字符編碼集維語(yǔ),其余語(yǔ)種進(jìn)行系統(tǒng)內(nèi)的測(cè)試。

表2 中日字符編碼識(shí)別性能對(duì)比(%)

表3 現(xiàn)行字符編碼識(shí)別性能對(duì)比(%)

表4 拉丁字符編碼識(shí)別性能對(duì)比(%)

表5 拉丁字符編碼識(shí)別性能對(duì)比(%)
以上實(shí)驗(yàn)結(jié)果表明,本文提出的基于多策略的方法以及設(shè)計(jì)的系統(tǒng),在100 字符內(nèi)短文本語(yǔ)種識(shí)別中整體性能高于Langid 工具包。對(duì)于各組易混淆文本,在1 至10 字符長(zhǎng)度內(nèi)的測(cè)試數(shù)據(jù)上表現(xiàn)略顯不足,在11 至25 字符長(zhǎng)度內(nèi)的測(cè)試數(shù)據(jù)上表現(xiàn)一般,而對(duì)于26 至100 字符長(zhǎng)度內(nèi)的測(cè)試數(shù)據(jù)上表現(xiàn)非常優(yōu)異。綜合各個(gè)長(zhǎng)度區(qū)間中的表現(xiàn),對(duì)于各組易混淆文本的語(yǔ)種識(shí)別能力整體呈現(xiàn)較佳水平。
運(yùn)行性能測(cè)試分為單線(xiàn)程langid 對(duì)比測(cè)試和系統(tǒng)多并發(fā)測(cè)試。
測(cè)試數(shù)據(jù)為各語(yǔ)種5000 條,無(wú)并發(fā),與langid 的對(duì)比測(cè)試結(jié)果如表6 所示。

表6 langid 對(duì)比測(cè)試結(jié)果表
實(shí)驗(yàn)結(jié)果表明,使用了結(jié)合了編碼區(qū)域識(shí)別、特征字符匹配和基于N-Gram 的樸素貝葉斯分類(lèi)3 種策略之后,語(yǔ)種識(shí)別速度較langid.py 工具有顯著提升。
語(yǔ)種識(shí)別系統(tǒng)的并發(fā)測(cè)試使用不區(qū)分語(yǔ)種的5000條文本數(shù)據(jù)和10000 條文本數(shù)據(jù),分別對(duì)100、200、300并發(fā)量情況下進(jìn)行測(cè)試,最終結(jié)果如表7 所示。

表7 語(yǔ)種識(shí)別速度結(jié)果表
通過(guò)上述實(shí)驗(yàn)可知,首先基于Nginx、uWSGI 和Django 組合的架構(gòu)在大量并發(fā)下仍能保持穩(wěn)定運(yùn)行。其次隨著并發(fā)量的增加,系統(tǒng)響應(yīng)速度也會(huì)加快。
針對(duì)網(wǎng)絡(luò)文本語(yǔ)種識(shí)別問(wèn)題,本文構(gòu)造了中文、日文、維語(yǔ)、哈語(yǔ)、烏語(yǔ)的特征字符匹配字典,并提出了非局限于語(yǔ)言學(xué)知識(shí)或編碼范圍判別等某一特定方面,而是結(jié)合編碼區(qū)域識(shí)別、特征字符匹配和基于N-Gram的樸素貝葉斯分類(lèi)的多策略結(jié)合語(yǔ)種識(shí)別方法,給出了解決目前互聯(lián)網(wǎng)上語(yǔ)言文字表達(dá)形式多樣化,語(yǔ)種信息易混淆、難以識(shí)別問(wèn)題的新思路和新方向,尤其是針對(duì)具有多種文字書(shū)寫(xiě)形式的語(yǔ)言效果顯著。最終設(shè)計(jì)并實(shí)現(xiàn)了高并發(fā)語(yǔ)種識(shí)別系統(tǒng)。該系統(tǒng)比較語(yǔ)種識(shí)別任務(wù)中通用的Langid 語(yǔ)種識(shí)別工具包,在維語(yǔ)、哈語(yǔ)和烏語(yǔ)的兩種不同寫(xiě)法的識(shí)別性能上有較大的提升,并且該系統(tǒng)在識(shí)別速度上有較大優(yōu)勢(shì),高并發(fā)下系統(tǒng)表現(xiàn)極其穩(wěn)定。結(jié)合以上兩點(diǎn)可以驗(yàn)證該系統(tǒng)完全符合工業(yè)環(huán)境中的應(yīng)用。