万方数据基于paddlenlp的文献检索系统实践

Wang_AI Wang_AI     2023-01-03     787

关键词:


又是一年开学季,看着大批莘莘学子步入高校,同时又有大批学生即将面临毕业,这一年要饱受论文的洗礼。在学术论文领域,几乎每一位大学生都避不开论文检索、查重环节。想写出一篇高质量论文,前期大量的信息储备必不可少,而文献检索成为我们获取信息的重要途径。

万方数据知识服务平台以客户需求为导向,整合了数亿条全球优质知识资源,依托强大的数据采集能力,应用先进的信息处理技术和检索技术,为决策主体、科研主体、创新主体提供高质量的信息资源产品。

今天就来聊聊,我们如何使用百度飞桨 PaddleNLP 升级论文检索系统。

业务背景

万方论文检索系统的核心问题是文本匹配任务,这个系统需要在数亿条知识资源中,基于检索匹配算法,根据用户的检索词快速地在海量文献中查找相似文献。

在系统任务执行过程中,检索词和文献的相关性会直接反映到结果页面的排序上面,而排序准确率直接影响着用户的搜索决策效率和搜索体验。因此,快速且准确地刻画检索词和文档之间的深度语义相关性至关重要。

然而,面对海量数据和频繁的用户搜索请求,同时解决高速和高效问题,给万方文献检索系统带来了诸多挑战:

难点 1— 标注数据少:由于人力资源紧张无法对系统中海量的数据资源进行标注,如何利用海量无监督数据,自动生成弱监督数据?

难点 2— 很难精准计算语义相似度:如何准确计算用户检索词和文献之间的相似度?

难点 3— 检索时效性差:面对海量资源和不断增长的用户需求,如何快速、高效得找到相关文献也是一大挑战。

除了检索场景外,论文查重、相似论文推荐的核心方法也是文本相似度计算。在这些业务上,我们经历了长期的探索,最终使用飞桨。得益于 PaddleNLP 丰富的中文预训练模型,面向工业级场景的模型选型与部署能力,使得我们非常高效的搭建了端到端工业级的文本向量学习和计算环境,实现了学术检索系统的多方面升级。

技术选型和项目实践

飞桨在产业实践方面提供了强悍的产品功能和技术支持,我们基于 PaddleNLP 中丰富前沿的预训练模型、使用 Paddle Serving 实现了服务端的快速部署,解决了实际业务落地中的痛点。

我们通过 PaddleNLP 提供的高质量中文预训练 Word Embedding 构造训练数据标签,结合 SimCSE 以及飞桨深度优化过的文本匹配预训练模型 Sentence-BERT,大幅提升了算法精度。

在模型性能方面,我们采用了多线程数据预处理、模型降层、TensorRT 部署。成熟开发工具的选用,极大地降低了应用深度学习技术进行产业落地的难度。

技术方案整体架构图

我们的技术方案整体架构图如上所示。概括来说,主要包括三部分:构造数据、模型选择和产业部署。

1. 构造数据

万方业务积累了海量的无监督数据,但是标注数据极少。我们使用 PaddleNLP 开源的高质量中文预训练词向量,快速构建了弱监督的相似文本匹配数据,节省了大量的人力标注成本。

为了数据指标的进一步提升,我们还采用了无监督语义匹配模型 SimCSE。

此外,万方搜索系统积累了大量用户行为日志数据(如浏览、点击、阅读、下载等),我们也从业务角度筛选出了大量监督数据。

SimCSE 参考:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_matching/simcse

2. 模型选择

关于文本相似度计算,我们使用过字面匹配、word2vec、FastText 等方法,都无法学到足够精度的文本语义表示。我们知道百度在搜索场景有丰富的技术积累,也关注到 PaddleNLP 里集成了 ERNIE、BERT 等一系列预训练语义模型,并且针对检索场景给出了系统化方案。

近年来,以 BERT、ERNIE 为代表的预训练语言模型成为 NLP 任务的主流模型。

Sentence-BERT 使用孪生网络结构,在 BERT 模型的基础上进行 Fine-Tune,引入(DSSM)双塔模型,符合我们的业务场景,因此我们选择该模型作为我们的基准模型。

较 FastText 模型,Sentence-BERT 的匹配效果提升了 70%,用户的整体体验大幅度提高。

我们将数据库中的文献预先通过 Sentence-BERT 计算得到文献向量后,通过开源向量数据库 Milvus 建立索引库,快速召回相似向量,减少了检索系统的响应时间。

Sentence-BERT 参考:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_matching/sentence_transformers

语义索引策略参考:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/semantic_indexing

3. 产业部署

线上检索系统尤其需要考虑快速响应需求。Sentence-BERT 12 层 Transfomer 结构,具有庞大的参数量和计算量,在部署上线时面临响应实时性的巨大挑战。

为了满足线上业务对于性能上的要求,我们通过飞桨原生推理库 Paddle Inference 结合飞桨服务化部署框架 Paddle Serving 进行推理预测。

在不损失精度的前提下,我们将 Sentence-BERT 从 12 层压缩至 6 层,并结合了 TensorRT 加速等优化手段,使得 QPS 达到 2600,超预期完成了目标。

延伸 - 检验场景整体方案

以上我们参考了 PaddleNLP 检索场景整体方案,其主要包括领域预训练 (Post-Training)、语义匹配和语义索引三大部分。

  • 领域预训练是在通用预训练模型基础上,在领域数据上继续预训练,让预训练模型学习更多的领域知识。

  • 语义匹配模块针对存在高质量监督数据的场景,给出了检索系统中排序模型方案。此外,针对高质量标注数据获取成本高,数据量少的问题,语义匹配模块还内置了 R-Drop 数据增强策略,进一步提升小数据量场景下排序模型效果,从而帮助检索系统达到更优的效果。

  • 语义索引模块针对无监督和有监督数据场景,分别给出了无监督语义索引 (SimCSE) 和监督语义索引的方案,即使没有监督数据,也能利用无监督语义索引方案提升检索系统的召回效果。

针对工业应用落地部署的高性能需求,预测部署环节还提供了基于 FasterTransformer 的高性能预测能力以及简单易用的 Python API,便于我们将模型快速落地到实际业务中。

后续在万方业务中,我们将使用 R-Drop 数据增强策略、FasterTransformer 进一步应对持续新增的用户需求。

如果您想了解详细方案,可关注 PaddleNLP,⭐️Star⭐️收藏,跟进其最新功能,也可在直播中与我交流哦:

GitHub Repo: https://github.com/PaddlePaddle/PaddleNLP

直播预告

万方数据的技术负责人将为大家直播讲解,如果你也有相同的业务痛点,或者想进一步了解 PaddleNLP 在产业实践中的具体实现,欢迎大家扫码上车!

9 月 14 日晚 19:00-20:00,直播间不见不散~

扫码报名课程,立即加入交流群

精彩内容抢先看

paddlenlp基于ernir3.0文本分类以中医疗搜索检索词意图分类(kuake-qic)为例多分类(单标签)(代码片段)

相关项目链接:Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]Paddlenlp之UIE关系... 查看详情

paddlenlp基于ernir3.0文本分类:wos数据集为例(层次分类)(代码片段)

相关项目链接:Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]Paddlenlp之UIE关系... 查看详情

超硬核分享,代码模型全开源!检索问答情感分析全覆盖

...于人们日常使用的很多产品中,比如商品搜索、学术文献检索、通用搜索引擎等。传统方法匹配能力有限,只能捕捉字面匹配,而语义检索能够捕捉深层语义信息,达到更精准、更广泛地召回相似结果的目的。图&... 查看详情

代码模型全开源!面向检索问答情感分析三大场景,真实产业范例分享...

...于人们日常使用的很多产品中,比如商品搜索、学术文献检索、通用搜索引擎等。传统方法匹配能力有限,只能捕捉字面匹配,而语义检索能够捕捉深层语义信息,达到更精准、更广泛地召回相似结果的目的。图&... 查看详情

基于ernie-3.0cail2019法研杯要素识别多标签分类任务(代码片段)

相关项目:Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]Paddlenlp之UIE关系抽取... 查看详情

paddlenlp基于ernir3.0文本分类以cail2018-small数据集罪名预测任务为例多标签(代码片段)

相关项目链接:Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]Paddlenlp之UIE关系... 查看详情

windows环境下搭建paddlenlp端到端语义检索系统(代码片段)

PaddleNlp官方安装流程见https://github.com/PaddlePaddle/PaddleNLP/blob/develop/pipelines/examples/semantic-search/Install_windows.md。里面有些说的不清楚的,我这里又写了一份。Anaconda安装好以后,进入AnacondaPowershellPrompt。注意不要用AnacondaPrompt(... 查看详情

文献检索报告

文献检索第一篇检索作业总结第一章检索任务1.1检索课题1.2确定选题所属学科1.3中英文检索词第二章检索策略与结果2.1检索中文期刊文献2.1.1CNKI中国期刊全文数据库2.1.2维普期刊全文数据库2.1.3万方期刊数据库2.1.4超星期刊全文2.2... 查看详情

文献检索报告

文献检索第一篇检索作业总结第一章检索任务1.1检索课题1.2确定选题所属学科1.3中英文检索词第二章检索策略与结果2.1检索中文期刊文献2.1.1CNKI中国期刊全文数据库2.1.2维普期刊全文数据库2.1.3万方期刊数据库2.1.4超星期刊全文2.2... 查看详情

文献检索报告

文献检索第一篇检索作业总结第一章检索任务1.1检索课题1.2确定选题所属学科1.3中英文检索词第二章检索策略与结果2.1检索中文期刊文献2.1.1CNKI中国期刊全文数据库2.1.2维普期刊全文数据库2.1.3万方期刊数据库2.1.4超星期刊全文2.2... 查看详情

自然语言处理(nlp)基于paddlenlp的短文本相似度计算(代码片段)

【自然语言处理(NLP)】基于PaddleNLP的短文本相似度计算(文章目录)前言(一)、任务描述短文本语义匹配(SimailarityNet,SImNet)是一个计算短文本相似度的框架,可以根据用户输入的两个文本,计算出相似度得分。SimNet框架在百度各产... 查看详情

基于 Facebook Id 检索 Firebase uid 的最佳实践

...用户的好友检索到Facebookid列表中。我将每个用户的附加数据存储在 查看详情

基于simcse和faiss的文本向量检索实践(代码片段)

...查找flat2、HNSWx3、IVFx4、PQx5、LSH对博客标题进行向量检索数据向量化构建索引文本检索测试检索传统的文本检索一般是建立倒排索引,对搜索词的召回结果进行打分排序返回最终结果,但是在海量的数据面前,召回结... 查看详情

效果提升28个点基于领域预训练和对比学习simcse的语义检索(代码片段)

...有趣的是,在查相关资料的时候,发现百度飞桨PaddleNLP最近刚开源了类似的功能,可谓国货之光!之前使用过PaddleNLP,基本覆盖了NLP的各种应用和SOTA模型&#x 查看详情

基于mysql+tablestore分层存储架构的大规模订单系统实践-架构篇

...MySQL结合Tablestore的大规模订单系统方案。这种方案支持大数据存储、高性能数据检索、SQL搜索、实时与全量数据分析,且部署简单、运维成本低。作者|弘楠来源|阿里技术公众号一背景订单系统存在于各行各业,如电商订... 查看详情

检索式对话系统在美团客服场景的探索与实践

...回答用户的各类问题非常有必要。我们设计并迭代了一套基于检索式对话系统的框架,以推荐回复的方式,基于对话上文为坐席提供候选回复ÿ 查看详情

应用实践:paddle分类模型大集成者[paddlehubfinetuneprompt](代码片段)

相关文章:Paddlenlp之UIE模型实战实体抽取任务【打车数据、快递单】Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)项目连接:应用实践:分类模型大集成者[PaddleHub、Finetune、prompt]1.基于P... 查看详情

美团外卖搜索基于elasticsearch的优化实践(代码片段)

...大量的实践案例及优化总结。然而在高并发、高可用、大数据量的C端场景,目前可参考的资料并不多。因此,我们希望通过分享在外卖搜索场景下的优化实践,能为大家提供Elasticsearch优化思路上的一些借鉴。美团在... 查看详情