陳新元
(福州墨爾本理工職業(yè)學(xué)院 信息工程系,福建 福州 350108)
語(yǔ)料庫(kù)(Corpus),是按照一定標(biāo)準(zhǔn)采樣所得,包含大量真實(shí)語(yǔ)料,代表某種語(yǔ)言及其變體的電子文本集,即一定規(guī)模語(yǔ)言樣本的集合[1]。20世紀(jì)60年代建成的布朗平衡語(yǔ)料庫(kù)(Brown Corpus)達(dá)到了百萬(wàn)詞級(jí)別,而今很多語(yǔ)料庫(kù)的規(guī)模已過(guò)億,如COCA,美國(guó)當(dāng)代英語(yǔ)語(yǔ)料庫(kù)(Corpus of Contemporary American English),目前總詞數(shù)達(dá)到5.6億,是世界上規(guī)模最大的平衡語(yǔ)料庫(kù)之一。隨著語(yǔ)料庫(kù)規(guī)模增長(zhǎng),檢索效率愈發(fā)重要。
語(yǔ)料庫(kù)應(yīng)用于教學(xué)已有較多案例,張繼東,邵苗[2]利用BNC語(yǔ)料庫(kù)探討了英語(yǔ)母語(yǔ)者和非英語(yǔ)母語(yǔ)者在使用條件句時(shí)的差異并用于改進(jìn)語(yǔ)用情況;Byun M A等[3]使用語(yǔ)料庫(kù)對(duì)兒童特有的音位模式進(jìn)行了統(tǒng)計(jì)和分析,提取主要的影響因素并用于教學(xué);LV Maastricht等[4]借助語(yǔ)料庫(kù)開(kāi)展第一語(yǔ)言和第二語(yǔ)言的信息結(jié)構(gòu)遷移差異分析,用于提升語(yǔ)言能力;S Solt等[5]使用語(yǔ)料庫(kù)在測(cè)量理論的基礎(chǔ)上建立了語(yǔ)義分析系統(tǒng),用于鑒定人的分析能力并提出改進(jìn)建議;等等。但是自建語(yǔ)料庫(kù)規(guī)模較大時(shí),檢索效率往往下降,影響使用。
Elasticsearch(以下簡(jiǎn)稱ES)[6]使用Java開(kāi)發(fā),是基于全文檢索引擎工具包Lucene構(gòu)建的開(kāi)源分布式引擎框架,借助簡(jiǎn)單的RESTful API隱藏技術(shù)細(xì)節(jié),其主要優(yōu)點(diǎn)包括:
⑴ 分布式文件存儲(chǔ)和靈活的索引機(jī)制。
⑵ 可實(shí)現(xiàn)近乎實(shí)時(shí)分析的分布式搜索:利用分片和副本自動(dòng)協(xié)調(diào)負(fù)載。
⑶ 擴(kuò)展性良好。
⑷ 支持多樣化插件,等等。
2013年初,GitHub采取ES做PB級(jí)的搜索,內(nèi)容包括12億個(gè)文件和1300億行代碼。百度、Wikipedia、Goldman Sachs等企業(yè)或機(jī)構(gòu)也紛紛使用ES實(shí)現(xiàn)數(shù)據(jù)檢索。
ES平臺(tái)的性能優(yōu)化在國(guó)內(nèi)外也是研究熱點(diǎn),宣明[7]通過(guò)設(shè)計(jì)索引Schema,改進(jìn)索引存儲(chǔ)策略等方法降低索引大小,縮短索引重建時(shí)間,提高查詢響應(yīng)速度;JM Andre等[8]使用ES分層集群對(duì)元數(shù)據(jù)和動(dòng)態(tài)信息進(jìn)行索引,實(shí)現(xiàn)非結(jié)構(gòu)化數(shù)據(jù)的實(shí)時(shí)檢索;陳亞杰[9]設(shè)計(jì)優(yōu)化并實(shí)現(xiàn)了ES檢索請(qǐng)求的標(biāo)準(zhǔn)描述語(yǔ)言,對(duì)請(qǐng)求進(jìn)行了統(tǒng)一預(yù)處理;曾亞飛[10]設(shè)計(jì)了基于ES的分布式智能搜索引擎,基于遞歸的發(fā)現(xiàn)算法和用戶數(shù)自適應(yīng)的協(xié)同過(guò)濾算法提升垂直詞典和用戶發(fā)現(xiàn)的性能表現(xiàn)。
本文使用ES平臺(tái),將現(xiàn)有語(yǔ)料庫(kù)進(jìn)行格式轉(zhuǎn)換并導(dǎo)入設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),對(duì)平臺(tái)的索引、存儲(chǔ)和檢索進(jìn)行優(yōu)化以提升檢索性能,將方案應(yīng)用于語(yǔ)料庫(kù)教學(xué)。
使用6臺(tái)聯(lián)想ThinkStation搭建分布式集群,硬件配置為:Xeon 3104×2;16 G×8內(nèi)存;1.2 T SAS硬盤(pán)×3,使用Raid5。
操作系統(tǒng)為CentOS7。
已有規(guī)模約為7.70億詞數(shù)的英語(yǔ)單一語(yǔ)言歷時(shí)標(biāo)注語(yǔ)料庫(kù),使用自編Python爬蟲(chóng)抓取、RSS聚合獲得和OCR識(shí)別+校對(duì)整理,已完成內(nèi)容準(zhǔn)確性、完整性校驗(yàn),并已去重。語(yǔ)料分布于2006年3月至2019年5月,語(yǔ)體以正式出版物特別是期刊雜志為主,占60%,另有口語(yǔ)、小說(shuō)、報(bào)紙和劇本語(yǔ)料,每種約占10%,均已整理、清洗和賦碼,統(tǒng)一符號(hào)、拼寫(xiě)和縮略語(yǔ);部分語(yǔ)料進(jìn)行了詞形還原以方便對(duì)比,語(yǔ)料元信息完整。
已有的數(shù)據(jù)存儲(chǔ)分為兩部分,符合索引規(guī)范的JSON文本和來(lái)自MongoDB的非結(jié)構(gòu)化數(shù)據(jù),前者使用RESTful API的Post命令導(dǎo)入;后者使用優(yōu)化后的mongo-connector插件導(dǎo)入。
⑴ 比較ES的API、bulk API、UDP bulk API和River共4種主流索引方式,特別優(yōu)化bulk API的執(zhí)行效率。
⑵ Lucene使用TF/IDF算法作為默認(rèn)的評(píng)分機(jī)制,本文進(jìn)行了自定義,采用隨機(jī)偏離的相似度模型進(jìn)行優(yōu)化。
⑶ 根據(jù)索引熱度設(shè)計(jì)倒排索引以降低內(nèi)存占用,優(yōu)化檢索速度。
⑷ 設(shè)置閾值,根據(jù)索引熱度選擇使用字段數(shù)據(jù)緩存,在CPU資源和內(nèi)存開(kāi)銷合理增加的范圍內(nèi)啟用緩存機(jī)制。
⑸ 通過(guò)預(yù)熱器動(dòng)態(tài)調(diào)整緩存的刷新頻率,提高緩存命中率和查詢性能。
⑴ 對(duì)比了ES中mmapfs、simplefs、default_fs等存儲(chǔ)類型的性能表現(xiàn),在windows平臺(tái)上,32位和64位系統(tǒng)時(shí)分別使用simplefs和mmapfs的性能較好,本文使用default_fs。
⑵ 當(dāng)語(yǔ)料庫(kù)規(guī)模擴(kuò)展到一定程度時(shí),分片和副本配置機(jī)制對(duì)性能表現(xiàn)的影響增加,考慮到學(xué)生個(gè)人計(jì)算機(jī)加入集群后的節(jié)點(diǎn)規(guī)模及其加入/退出網(wǎng)絡(luò)的靈活性,對(duì)分片和副本的配置需要靈活調(diào)節(jié)并在一定范圍內(nèi)取得動(dòng)態(tài)平衡。因此,通過(guò)even_shard和balanced分片分配器對(duì)分片權(quán)重進(jìn)行調(diào)節(jié),另外使用了cluster.routing.allocation.type設(shè)置自定義分配器。
⑶ 設(shè)置觸發(fā)條件和執(zhí)行方式在tiered、log_byte_size和log_doc等3種段合并策略間進(jìn)行選擇以提高I/O效率。
⑴ 使用path參數(shù)調(diào)整路由的指向,同時(shí)使用別名在用戶端簡(jiǎn)化搜索細(xì)節(jié)。
⑵ 設(shè)置ES Suggest API,自動(dòng)改正用戶的拼寫(xiě)錯(cuò)誤。
⑶ 配置Term Suggester,給出檢索建議。
⑷ 配置Phrase Suggester,在檢索中提示完整詞組。
⑸ 使用Complete Suggester,在硬件開(kāi)銷可承擔(dān)的前提下提供自動(dòng)補(bǔ)全功能。
⑹ 在Apacha Solr的基礎(chǔ)上通過(guò)顯式、等價(jià)和擴(kuò)展定義等方式進(jìn)行同義詞規(guī)則優(yōu)化。
方案性能采用了單元測(cè)試和集成測(cè)試、功能測(cè)試和性能測(cè)試相結(jié)合的方法。數(shù)據(jù)導(dǎo)入時(shí)測(cè)試了mapping效率和倒排索引的輸出結(jié)果,在檢索模塊分別驗(yàn)證不同分詞器對(duì)檢索響應(yīng)時(shí)間的影響。在集成階段,驗(yàn)證了當(dāng)前語(yǔ)料庫(kù)規(guī)模下,隨著集群規(guī)模增長(zhǎng),檢索效率和穩(wěn)定并發(fā)數(shù)有所提升,集群節(jié)點(diǎn)數(shù)為6時(shí)提升趨向平緩。瀏覽器兼容性、平臺(tái)穩(wěn)定性等指標(biāo)也進(jìn)行了相應(yīng)的測(cè)試。
課題工作可大致分為5個(gè)階段,如圖1所示,矩形框表示課題的不同階段。圓形框表示涉及到的方法或技術(shù),粗箭頭反映系統(tǒng)流程,細(xì)箭頭表示優(yōu)化,其中箭頭來(lái)源表示優(yōu)化的理論和實(shí)踐依據(jù),箭頭方向?qū)?yīng)具體的優(yōu)化目標(biāo)。
整體過(guò)程可描述為:收集信息→平臺(tái)設(shè)計(jì)與搭建→方案測(cè)試與初步優(yōu)化→現(xiàn)有語(yǔ)料庫(kù)導(dǎo)入→語(yǔ)料庫(kù)教學(xué)試運(yùn)行→增加參與的學(xué)生數(shù)、擴(kuò)大項(xiàng)目規(guī)?!M(jìn)一步優(yōu)化→大規(guī)模語(yǔ)料庫(kù)教學(xué)→學(xué)習(xí)實(shí)效檢驗(yàn)→總結(jié)和最終優(yōu)化。
方案教學(xué)的內(nèi)容包括:高頻單詞、短語(yǔ)提??;發(fā)掘四六級(jí)考試常見(jiàn)考點(diǎn);同義詞辨析;特殊文體中特定單詞、搭配的慣用含義的辨析;單詞、固定搭配誤用;語(yǔ)義韻辨析;不同語(yǔ)體中常見(jiàn)結(jié)構(gòu)、用法、句型的歸納;結(jié)合語(yǔ)音引擎加強(qiáng)形、音、義的一體關(guān)聯(lián),綜合培養(yǎng)同學(xué)的聽(tīng)說(shuō)讀寫(xiě)各方面的語(yǔ)言能力;語(yǔ)法遷移現(xiàn)象探討,等等。
教學(xué)手段和形式方面,以趣味性和實(shí)用性為基本立足點(diǎn)、以問(wèn)題為導(dǎo)向,貫徹應(yīng)用型課程的理念,分層設(shè)置多樣化的小項(xiàng)目讓同學(xué)解決實(shí)際問(wèn)題,強(qiáng)調(diào)自主學(xué)習(xí)、協(xié)作學(xué)習(xí),嘗試翻轉(zhuǎn)課堂,綜合運(yùn)用多媒體等各種教學(xué)載體等。
此外,方案嘗試使用了Kibana實(shí)現(xiàn)可視化的統(tǒng)計(jì)分析,以提高學(xué)生的學(xué)習(xí)興趣,改善學(xué)習(xí)效果。
方案執(zhí)行過(guò)程中通過(guò)不定期組織面對(duì)面交流訪談,問(wèn)卷量表調(diào)查,以及對(duì)測(cè)驗(yàn)、考試結(jié)果的統(tǒng)計(jì)分析等方式考核教學(xué)實(shí)效。統(tǒng)計(jì)實(shí)驗(yàn)從2個(gè)水平相當(dāng)?shù)陌嗉?jí)中各選出成績(jī)中游的20名同學(xué),編為實(shí)驗(yàn)組和對(duì)照組,在開(kāi)課前后分別進(jìn)行測(cè)試,通過(guò)比較教學(xué)前后的成績(jī)均值、標(biāo)準(zhǔn)差,以及95%置信區(qū)間內(nèi)的成績(jī)提升水平,驗(yàn)證了語(yǔ)料庫(kù)教學(xué)相比傳統(tǒng)教學(xué)方式具備一定優(yōu)勢(shì)。
本課題使用ES分布式檢索框架并進(jìn)行優(yōu)化,旨在解決海量語(yǔ)料下數(shù)據(jù)存儲(chǔ)和檢索方面的性能瓶頸,快速概括、歸納語(yǔ)言使用現(xiàn)象,發(fā)現(xiàn)語(yǔ)言規(guī)則及語(yǔ)用特征,將分析結(jié)果用于教學(xué)以提高學(xué)習(xí)效果。后續(xù)改進(jìn)方向包括ES的查詢機(jī)制改寫(xiě),以及引入Logstash,即使用完整ELK框架實(shí)現(xiàn)語(yǔ)料庫(kù)的動(dòng)態(tài)更新和分析,以及進(jìn)一步提升可視化表現(xiàn)。