整体架构

在 WPS 智能辅助写作平台重要组成部分的素材推荐模块中,基于 Milvus 的向量处理模块作为核心功能,发挥了极其重要的作用,其目标是在海量的文本中高效提取、存储高质量公文素材,并针对不同用户需求进行精准推荐。

基于Milvus向量引擎的WPS智能写作平台架构实践_java

本案例的素材推荐服务按模块可以分为数据处理模块和编码存储模块以及推荐查询模块。涉及到 Milvus 向量数据库的主要是编码存储模块以及推荐查询模块。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_02

数据处理模块主要分为数据清洗、提纲及段落抽取,从海量数据中得到筛选后的提纲、段落数据。

编码存储模块则涉及到文本编码和向量存储两部分。文本编码通过深度学习方法得到 256 维高维向量,再将向量及其对应的原文 id 等信息插入 Milvus 向量数据库,并按照 Milvus 提供的索引建立方法 IVFFLAT 对每条数据建立索引。

推荐查询模块则根据用户输入等搜索条件进行编码得到输入搜索向量,在 Milvus 向量数据库中使用官方提供的相似度计算方法 (L2 距离) 进行最近邻搜索,返回粗召回的向量和原文 id 等,再通过画像、模型等进行精准排序推荐。

组件 / 技术

在数据处理模块,所用方法主要涉及到特征工程、正则匹配及 NLP 模型打分等。

文档是人类使用复杂语义的代表,从字到词、句子、段落和文章,多层次分布着大量的语义信息。对文档建立特征工程,是最大化提取语义特征的有效途径之一。

结合实际文本数据,本案例选择从词汇、句子等多级别出发,建立文档的词汇特征和语句特征。

在词汇特征级别上,经过分词建立语料词库,再通过 TF-IDF 算法,

计算单词频率项 (TF):

以及逆文档频率项 (IDF):

得到 TF-IDF 值:

经过排序提取出文档关键词。

同时考虑到对象文本含有大量的人名、机构名称等实体词汇,这些实体在排序召回尤其是精准排序时发挥了巨大作用,因此采用深度学习模型:BLSTM-CNNs-CRF 对文档中的实体词进行抽取。

BLSTM-CNNs-CRF 模型可以分为三个部分,首先在字符级别嵌入 (Char Embedding) 的基础上,使用 CNN 模型对每个单词计算其字符级别表示 (Char Representation),再将该结果连接到单词级别嵌入向量 (Word Embedding),输送到双向长短期记忆网络 (BLSTM),最后将 BLSTM 的输出反馈到条件随机场 (CRF),共同解码最佳标签序列。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_03

在语句特征级别上,本案例使用 TextRank 抽取文档中表达观点的摘要性句子作为文档关键句,TextRank 算法作为一种抽取式的无监督的文本摘要方法,借鉴了用于对在线搜索结果中的网页进行排序的 PageRank 算法,通过分割文本、向量化并建立图模型, 利用转移概率矩阵对文本语句进行排序, 在文档内部实现了关键句抽取。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_04

同时本案例还训练了一个 TextCNN 模型用于提取文档中的高质量段落和语句,将抽取任务看作分类任务,为了更好的捕捉语句之间的局部相关性,本案例在使用预训练的词向量 (Word2Vec) 基础上,利用多个不同大小 (Size) 的卷积核 (Kernel),实现语句对单词的强关联。

TextCNN 主要分为嵌入层 (Embedding)、卷积层 (Convolution)、池化层 (MaxPooling) 和全连接输出层 (Full-Connection and Softmax),作为常用的文本分类算法之一,其优势体现在结构简单,效果良好,可扩展性强。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_05

在编码存储模块,编码主要使用语义理解模型,在存储中主要用到了索引 Index 组件。

在编码部分,传统的语句嵌入多使用无监督方法,然而这些方法在处理长语句时不够鲁棒。在本案例场景下,采用了有监督训练方法的语句嵌入模型中的 Infersent 模型,尽可能对句子进行通用表征。

作为有监督模型,Infersent 选取 SNLI 作为分类任务,通过设计好的编码器 (Encoder) 对句子对 (text, hypothesis) 进行编码得到其对应的特征向量 U、V,经过连接、差值和内积后得到分类所用的特征,经过全连接层和 Softmax 层后输出对应分类 (Judgements),在训练完成后即可通过 Encoder 得到语句的编码向量。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_06

在索引部分,IndexFlatL2 索引是作为针对欧式距离计算设计的暴力搜索索引,但考虑到际应用场景,本案例选择了在 IndexFlatL2 索引基础上添加聚类的 IVF-FLAT 索引,通过划分搜索空间,在查询时检索某几个聚类,大大加快了整体速度。

本案例也用到了 Milvus 的分区功能,为数据划分不同的种类,使得查询变得更加快速和准确。

线上服务部分主要使用 K8s 共享集群,同时考虑具体数据内容,选择 mysql 保存元数据信息,没有使用默认的 SQLite,侧面也反映了 Milvus 组件的灵活性。

性能目标

目前部署于 0.6.0-CPU 版本 Milvus 向量数据库约有 200 万文本,用于支持 WPS 智能辅助写作微信小程序搜索,同时正在处理增加数据,预计可以达到千万级规模语料。

在响应时间方面,本案例使用共享集群,计算资源被其他应用所共享,因此本案例的数据只能作为参考标志,在目前的版本中单次单条服务总体响应时间平均达到 0.2s。

应用效果

在面向党政领域的素材智能推荐功能上,意图识别准确率达 80% 以上,用户素材引用率达 40%;在面向公文领域的辅助生成功能上,实现了多类法定公文的写作模板和辅助创作,并支持一键生成全文。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_07

以 WPS 智能辅助写作网页客户端为例,现支持工作总结、心得体会以及评论观点等 9 类常见公文类型的辅助写作,辅助功能则主打一键全文和智能生成功能。一键全文功能通过对标题、关键词的意图理解,通过相关推荐算法选择合适的提纲和段落,生成一篇完整的文章供用户修改使用。而特色的智能生成功能则先初步为用户提供多篇可更换的提纲段落,同时在用户修改创作过程中,通过 AI 生成算法对选中字段结合上下文语境生成适度文字段落供用户引用和发散思维,达到以人为主、辅助创作的效果。

基于Milvus向量引擎的WPS智能写作平台架构实践_java_08

基于Milvus向量引擎的WPS智能写作平台架构实践_java_09

WPS 智能辅助写作平台微信小程序在相关公文功能的基础上,开发了诸如诗词创作、信件模板推荐等实用功能,同时引入了写作社区,方便用户开拓视野、分享创作,以文交友,进一步提升写作体验。