基于ElasticSearch的语料库教学方案的设计与实现*

2020-12-20 17:29陈新元
福建轻纺 2020年5期
关键词:语料语料库分布式

陈新元

(福州墨尔本理工职业学院 信息工程系,福建 福州 350108)

1 引言

语料库(Corpus),是按照一定标准采样所得,包含大量真实语料,代表某种语言及其变体的电子文本集,即一定规模语言样本的集合[1]。20世纪60年代建成的布朗平衡语料库(Brown Corpus)达到了百万词级别,而今很多语料库的规模已过亿,如COCA,美国当代英语语料库(Corpus of Contemporary American English),目前总词数达到5.6亿,是世界上规模最大的平衡语料库之一。随着语料库规模增长,检索效率愈发重要。

语料库应用于教学已有较多案例,张继东,邵苗[2]利用BNC语料库探讨了英语母语者和非英语母语者在使用条件句时的差异并用于改进语用情况;Byun M A等[3]使用语料库对儿童特有的音位模式进行了统计和分析,提取主要的影响因素并用于教学;LV Maastricht等[4]借助语料库开展第一语言和第二语言的信息结构迁移差异分析,用于提升语言能力;S Solt等[5]使用语料库在测量理论的基础上建立了语义分析系统,用于鉴定人的分析能力并提出改进建议;等等。但是自建语料库规模较大时,检索效率往往下降,影响使用。

Elasticsearch(以下简称ES)[6]使用Java开发,是基于全文检索引擎工具包Lucene构建的开源分布式引擎框架,借助简单的RESTful API隐藏技术细节,其主要优点包括:

⑴ 分布式文件存储和灵活的索引机制。

⑵ 可实现近乎实时分析的分布式搜索:利用分片和副本自动协调负载。

⑶ 扩展性良好。

⑷ 支持多样化插件,等等。

2013年初,GitHub采取ES做PB级的搜索,内容包括12亿个文件和1300亿行代码。百度、Wikipedia、Goldman Sachs等企业或机构也纷纷使用ES实现数据检索。

ES平台的性能优化在国内外也是研究热点,宣明[7]通过设计索引Schema,改进索引存储策略等方法降低索引大小,缩短索引重建时间,提高查询响应速度;JM Andre等[8]使用ES分层集群对元数据和动态信息进行索引,实现非结构化数据的实时检索;陈亚杰[9]设计优化并实现了ES检索请求的标准描述语言,对请求进行了统一预处理;曾亚飞[10]设计了基于ES的分布式智能搜索引擎,基于递归的发现算法和用户数自适应的协同过滤算法提升垂直词典和用户发现的性能表现。

本文使用ES平台,将现有语料库进行格式转换并导入设计的数据结构,对平台的索引、存储和检索进行优化以提升检索性能,将方案应用于语料库教学。

2 基于ES的语料库教学方案的设计与实现

2.1 方案环境

使用6台联想ThinkStation搭建分布式集群,硬件配置为:Xeon 3104×2;16 G×8内存;1.2 T SAS硬盘×3,使用Raid5。

操作系统为CentOS7。

2.2 语料导入

已有规模约为7.70亿词数的英语单一语言历时标注语料库,使用自编Python爬虫抓取、RSS聚合获得和OCR识别+校对整理,已完成内容准确性、完整性校验,并已去重。语料分布于2006年3月至2019年5月,语体以正式出版物特别是期刊杂志为主,占60%,另有口语、小说、报纸和剧本语料,每种约占10%,均已整理、清洗和赋码,统一符号、拼写和缩略语;部分语料进行了词形还原以方便对比,语料元信息完整。

已有的数据存储分为两部分,符合索引规范的JSON文本和来自MongoDB的非结构化数据,前者使用RESTful API的Post命令导入;后者使用优化后的mongo-connector插件导入。

2.3 索引优化

⑴ 比较ES的API、bulk API、UDP bulk API和River共4种主流索引方式,特别优化bulk API的执行效率。

⑵ Lucene使用TF/IDF算法作为默认的评分机制,本文进行了自定义,采用随机偏离的相似度模型进行优化。

⑶ 根据索引热度设计倒排索引以降低内存占用,优化检索速度。

⑷ 设置阈值,根据索引热度选择使用字段数据缓存,在CPU资源和内存开销合理增加的范围内启用缓存机制。

⑸ 通过预热器动态调整缓存的刷新频率,提高缓存命中率和查询性能。

2.4 存储优化

⑴ 对比了ES中mmapfs、simplefs、default_fs等存储类型的性能表现,在windows平台上,32位和64位系统时分别使用simplefs和mmapfs的性能较好,本文使用default_fs。

⑵ 当语料库规模扩展到一定程度时,分片和副本配置机制对性能表现的影响增加,考虑到学生个人计算机加入集群后的节点规模及其加入/退出网络的灵活性,对分片和副本的配置需要灵活调节并在一定范围内取得动态平衡。因此,通过even_shard和balanced分片分配器对分片权重进行调节,另外使用了cluster.routing.allocation.type设置自定义分配器。

⑶ 设置触发条件和执行方式在tiered、log_byte_size和log_doc等3种段合并策略间进行选择以提高I/O效率。

2.5 检索优化

⑴ 使用path参数调整路由的指向,同时使用别名在用户端简化搜索细节。

⑵ 设置ES Suggest API,自动改正用户的拼写错误。

⑶ 配置Term Suggester,给出检索建议。

⑷ 配置Phrase Suggester,在检索中提示完整词组。

⑸ 使用Complete Suggester,在硬件开销可承担的前提下提供自动补全功能。

⑹ 在Apacha Solr的基础上通过显式、等价和扩展定义等方式进行同义词规则优化。

方案性能采用了单元测试和集成测试、功能测试和性能测试相结合的方法。数据导入时测试了mapping效率和倒排索引的输出结果,在检索模块分别验证不同分词器对检索响应时间的影响。在集成阶段,验证了当前语料库规模下,随着集群规模增长,检索效率和稳定并发数有所提升,集群节点数为6时提升趋向平缓。浏览器兼容性、平台稳定性等指标也进行了相应的测试。

2.6 语料库教学应用

课题工作可大致分为5个阶段,如图1所示,矩形框表示课题的不同阶段。圆形框表示涉及到的方法或技术,粗箭头反映系统流程,细箭头表示优化,其中箭头来源表示优化的理论和实践依据,箭头方向对应具体的优化目标。

整体过程可描述为:收集信息→平台设计与搭建→方案测试与初步优化→现有语料库导入→语料库教学试运行→增加参与的学生数、扩大项目规模→进一步优化→大规模语料库教学→学习实效检验→总结和最终优化。

方案教学的内容包括:高频单词、短语提取;发掘四六级考试常见考点;同义词辨析;特殊文体中特定单词、搭配的惯用含义的辨析;单词、固定搭配误用;语义韵辨析;不同语体中常见结构、用法、句型的归纳;结合语音引擎加强形、音、义的一体关联,综合培养同学的听说读写各方面的语言能力;语法迁移现象探讨,等等。

教学手段和形式方面,以趣味性和实用性为基本立足点、以问题为导向,贯彻应用型课程的理念,分层设置多样化的小项目让同学解决实际问题,强调自主学习、协作学习,尝试翻转课堂,综合运用多媒体等各种教学载体等。

此外,方案尝试使用了Kibana实现可视化的统计分析,以提高学生的学习兴趣,改善学习效果。

方案执行过程中通过不定期组织面对面交流访谈,问卷量表调查,以及对测验、考试结果的统计分析等方式考核教学实效。统计实验从2个水平相当的班级中各选出成绩中游的20名同学,编为实验组和对照组,在开课前后分别进行测试,通过比较教学前后的成绩均值、标准差,以及95%置信区间内的成绩提升水平,验证了语料库教学相比传统教学方式具备一定优势。

3 结论

本课题使用ES分布式检索框架并进行优化,旨在解决海量语料下数据存储和检索方面的性能瓶颈,快速概括、归纳语言使用现象,发现语言规则及语用特征,将分析结果用于教学以提高学习效果。后续改进方向包括ES的查询机制改写,以及引入Logstash,即使用完整ELK框架实现语料库的动态更新和分析,以及进一步提升可视化表现。

猜你喜欢
语料语料库分布式
基于归一化点向互信息的低资源平行语料过滤方法*
《语料库翻译文体学》评介
分布式光伏热钱汹涌
分布式光伏:爆发还是徘徊
基于DDS的分布式三维协同仿真研究
基于JAVAEE的维吾尔中介语语料库开发与实现
《苗防备览》中的湘西语料
国内外语用学实证研究比较:语料类型与收集方法
语篇元功能的语料库支撑范式介入
西门子 分布式I/O Simatic ET 200AL