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