AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

  • 2020-05-21
  • 本文字数:2650 字

    阅读完需:约 9 分钟

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-05-21 14:154155

评论 1 条评论

发布
用户头像
学习了
2023-12-28 15:31 · 北京
回复
没有更多了
发现更多内容

Why me, why now Jan 25, 2021

王泰

28天写作

年会游戏:猜数字(前端特效)

德育处主任

CSS html 大前端 js 28天写作

大数据场景下Volcano高效调度能力实践

华为云开发者联盟

大数据 spark Kubernetes Volcano application

MySQL 5.6.35 索引优化导致的死锁案例解析

vivo互联网技术

MySQL 数据库 死锁

[编程参考-连载] Snowflake 算法原理与对应的 Python 实现

穿甲兵

Python 算法

PolarDB-X 并行计算框架

PolarDB-X

数据库 sql 大数据

使用 AWS CDK Python 从零开始构建 EKS 集群

郭旭东

AWS IaC AWS CDK

android开发三大框架!国内一线互联网公司面试题汇总,终局之战

欢喜学安卓

android 程序员 面试 移动开发

聊聊 Git 的三种传输协议及实现

Zoker

git 架构 DevOps

在 ArrayList 使用冒泡法

sinsy

ArrayList 冒泡法

数据库性能调优之始: analyze统计信息

华为云开发者联盟

数据库 sql GaussDB 语义

基于KubeEdge和Kuiper的边缘流式数据处理实践

华为云开发者联盟

spark 边缘计算 kuberedge kuiper 边缘流式数据

OpsMind 前端低代码开发平台——MPlatform

OpsMind

大前端 低代码

碎碎念之「技术文档写作风格」

Justin

碎碎念 文档 28天写作 写作技巧

与前端训练营的日子 --Week13

SamGo

学习

管理的亲和力是怎么练成的?

一笑

管理 沟通与管理 28天写作

当公元成了可以考古的年代「幻想短篇 17/28」

道伟

28天写作

鸿蒙开发者beta!Github标星25K+超火的Android实战项目,赶紧收藏!

欢喜学安卓

android 程序员 面试 移动开发

Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文

Kaito

redis 性能优化 后端

使用 external version 进行 Elasticsearch 并发控制

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

企业项目迁移go-zero全攻略(一)

万俊峰Kevin

微服务 microservice Go 语言

作业2

瑾瑾呀

区块链数字钱包APP系统开发|区块链数字钱包软件开发

系统开发

区块链钱包APP系统开发|区块链钱包软件开发

系统开发

架构师训练营第4周学习总结



第二章作业(一)

LouisN

架构师训练营 - 第四周作业

Mark

生活,在哪里都一样

熊斌

个人成长 28天写作

文章类网站前端日期的显示该如何选择时区?

IT蜗壳-Tango

七日更 服务器时区

循环?还是递归?

xcbeyond

Java 算法 递归 28天写作

字节跳动&火山引擎:企业级机器学习平台建设实践

机器学习 云计算 AI 云原生

WPS智能辅助写作平台架构实践分享_AI&大模型_陈启贤_InfoQ精选文章