写点什么

WPS 智能辅助写作平台架构实践分享

2020 年 5 月 21 日

WPS智能辅助写作平台架构实践分享

结合当下流行的 NLP 等人工智能相关技术,金山办公软件有限公司武汉 AI 部门自主研发了 WPS 智能辅助写作平台。利用意图识别、文本聚类等语义匹配算法,该平台实现了 AI 辅助用户写稿创作,并具备公文模板、素材推荐和辅助生成等特色功能,同时还实现了公文素材的海量收集,数据规模达到千万级文章、百万级提纲和段落。


作为一款技术立业、用户角度的写作产品,wps 智能辅助写作平台在不断提升用户写作体验的同时,也在积极寻求和新思路、新技术的融合碰撞,下面为大家带来结合了 Milvus 相关技术的素材推荐解决方案的案例分享。


整体架构


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



图 1.1 结合 Milvus 的 WPS 智能辅助写作平台示意图


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



图 1.2 素材推荐服务整体架构


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


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


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


组件/技术


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


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


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


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


计算单词频率项(TF):



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



得到 TF-IDF 值:



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


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



图 2.1 NER 模型计算流程


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



图 2.2 NER 模型结构示意图


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



图 2.3 TextRank 算法流程示意图


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


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



图 2.4 TextCNN 模型结构示意图


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


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


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



图 2.5 Infersent 模型结构示意图


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


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


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


性能目标


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


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


应用效果


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



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




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


2020 年 5 月 21 日 14:151799

评论

发布
暂无评论
发现更多内容

机器学习算法之——卷积神经网络(CNN)原理讲解

迈微AI研发社

学习 算法 卷积神经网络 CNN

机器学习算法之——K最近邻(k-Nearest Neighbor,KNN)分类算法原理讲解

迈微AI研发社

学习 算法 KNN K聚类

服务器与普通电脑的区别?

德胜网络-阳

关于 Bash 的 10 个常见误解

柴锋

bash Linux DevOps Shell

2.2.1 类反射 -《SSM深入解析与项目实战》

谙忆

知路,然后智行远;懂行,所以万业兴

脑极体

Kafka处理请求的全流程解析

yes的练级攻略

kafka 后端 面试题 消息队列 源码解析

如何对 ElasticSearch 集群进行压力测试

Bestony

elasticsearch ELK Elastic Stack

如何理解Java8 的函数式编程

Rayjun

Java 函数式编程

List 和 Map 的排序

方明

Java

HTTPS证书过期导致的故障

焦振清

运维 https SRE 服务故障 证书过期

JDK1.8新特性(七):默认方法,真香,开动!接口?我要升级!!

xcbeyond

接口 新特性 JDK1.8 默认方法

区块链+收藏品,全球三种典型应用路径的差异化

CECBC区块链专委会

区块链 应用价值

LeetCode题解:21. 合并两个有序链表,迭代,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

基于 grpc,protobuf搭建 server/client模型通信

是老郭啊

Go: 互斥锁和饥饿

陈思敏捷

go golang mutex

ARTS-week-2

saddamwilson

ARTS 打卡计划

如何设计实现一个证书加密签名工具包

三尾鱼

LeetCode题解:21. 合并两个有序链表,利用数组排序,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

第十章作业

武鹏

重学JavaScript02——类型

张理查rootv

数据库的乐观锁和悲观锁并非真实的锁

架构师修行之路

数据库 架构 乐观锁 悲观锁 分布式锁

DevOps 技术栈

柴锋

Linux DevOps 运维 敏捷 Shell

区块链跃升各国创新战略

CECBC区块链专委会

新基建 国家战略 区块链标准

重学JavaScript03——执行

张理查rootv

ARTS Week11

时之虫

ARTS 打卡计划

视读——沟通的艺术,看入人里,看出人外(第二章)

双儿么么哒

读书笔记 视觉笔记

# spring boot自定义线程池进行异步调用

方明

Java

多省市出台关于区块链人才引进的计划

CECBC区块链专委会

新基建 区块链技术

troubleshoot之:用control+break解决线程死锁问题

程序那些事

Java JVM 死锁

Requests模块基本操作

骆俊

WPS智能辅助写作平台架构实践分享-InfoQ