萬方數(shù)據(jù)基于PaddleNLP的文獻(xiàn)檢索系統(tǒng)實(shí)踐

又是一年開學(xué)季,看著大批莘莘學(xué)子步入高校,同時(shí)又有大批學(xué)生即將面臨畢業(yè),這一年要飽受論文的洗禮。在學(xué)術(shù)論文領(lǐng)域,幾乎每一位大學(xué)生都避不開論文檢索、查重環(huán)節(jié)。想寫出一篇高質(zhì)量論文,前期大量的信息儲(chǔ)備必不可少,而文獻(xiàn)檢索成為我們獲取信息的重要途徑。萬方數(shù)據(jù)知識(shí)服務(wù)平臺(tái)以客戶需求為導(dǎo)向,整合了數(shù)億條全球優(yōu)質(zhì)知識(shí)資源,依托強(qiáng)大的數(shù)據(jù)采集能力,應(yīng)用先進(jìn)的信息處理技術(shù)和檢索技術(shù),為決策主體、科研主體、創(chuàng)新主體提供高質(zhì)量的信息資源產(chǎn)品。今天就來聊聊,我們?nèi)绾问褂冒俣蕊w槳PaddleNLP升級(jí)論文檢索系統(tǒng)。
業(yè)務(wù)背景
萬方論文檢索系統(tǒng)的核心問題是文本匹配任務(wù),這個(gè)系統(tǒng)需要在數(shù)億條知識(shí)資源中,基于檢索匹配算法,根據(jù)用戶的檢索詞快速地在海量文獻(xiàn)中查找相似文獻(xiàn)。
在系統(tǒng)任務(wù)執(zhí)行過程中,檢索詞和文獻(xiàn)的相關(guān)性會(huì)直接反映到結(jié)果頁面的排序上面,而排序準(zhǔn)確率直接影響著用戶的搜索決策效率和搜索體驗(yàn)。因此,快速且準(zhǔn)確地刻畫檢索詞和文檔之間的深度語義相關(guān)性至關(guān)重要。
然而,面對(duì)海量數(shù)據(jù)和頻繁的用戶搜索請求,同時(shí)解決高速和高效問題,給萬方文獻(xiàn)檢索系統(tǒng)帶來了諸多挑戰(zhàn):
難點(diǎn)1——標(biāo)注數(shù)據(jù)少:由于人力資源緊張無法對(duì)系統(tǒng)中海量的數(shù)據(jù)資源進(jìn)行標(biāo)注,如何利用海量無監(jiān)督數(shù)據(jù),自動(dòng)生成弱監(jiān)督數(shù)據(jù)? 難點(diǎn)2——很難精準(zhǔn)計(jì)算語義相似度:如何準(zhǔn)確計(jì)算用戶檢索詞和文獻(xiàn)之間的相似度? 難點(diǎn)3——檢索時(shí)效性差:面對(duì)海量資源和不斷增長的用戶需求,如何快速、高效得找到相關(guān)文獻(xiàn)也是一大挑戰(zhàn)。
除了檢索場景外,論文查重、相似論文推薦的核心方法也是文本相似度計(jì)算。在這些業(yè)務(wù)上,我們經(jīng)歷了長期的探索,最終使用飛槳。得益于PaddleNLP豐富的中文預(yù)訓(xùn)練模型,面向工業(yè)級(jí)場景的模型選型與部署能力,使得我們非常高效的搭建了端到端工業(yè)級(jí)的文本向量學(xué)習(xí)和計(jì)算環(huán)境,實(shí)現(xiàn)了學(xué)術(shù)檢索系統(tǒng)的多方面升級(jí)。
技術(shù)選型和項(xiàng)目實(shí)踐
飛槳在產(chǎn)業(yè)實(shí)踐方面提供了強(qiáng)悍的產(chǎn)品功能和技術(shù)支持,我們基于PaddleNLP中豐富前沿的預(yù)訓(xùn)練模型、使用Paddle Serving實(shí)現(xiàn)了服務(wù)端的快速部署,解決了實(shí)際業(yè)務(wù)落地中的痛點(diǎn)。
我們通過PaddleNLP提供的高質(zhì)量中文預(yù)訓(xùn)練Word Embedding構(gòu)造訓(xùn)練數(shù)據(jù)標(biāo)簽,結(jié)合SimCSE以及飛槳深度優(yōu)化過的文本匹配預(yù)訓(xùn)練模型Sentence-BERT,大幅提升了算法精度。
在模型性能方面,我們采用了多線程數(shù)據(jù)預(yù)處理、模型降層、TensorRT部署。成熟開發(fā)工具的選用,極大地降低了應(yīng)用深度學(xué)習(xí)技術(shù)進(jìn)行產(chǎn)業(yè)落地的難度。

技術(shù)方案整體架構(gòu)圖
我們的技術(shù)方案整體架構(gòu)圖如上所示。概括來說,主要包括三部分:構(gòu)造數(shù)據(jù)、模型選擇和產(chǎn)業(yè)部署。
1.構(gòu)造數(shù)據(jù)
萬方業(yè)務(wù)積累了海量的無監(jiān)督數(shù)據(jù),但是標(biāo)注數(shù)據(jù)極少。我們使用PaddleNLP開源的高質(zhì)量中文預(yù)訓(xùn)練詞向量,快速構(gòu)建了弱監(jiān)督的相似文本匹配數(shù)據(jù),節(jié)省了大量的人力標(biāo)注成本。
為了數(shù)據(jù)指標(biāo)的進(jìn)一步提升,我們還采用了無監(jiān)督語義匹配模型SimCSE。此外,萬方搜索系統(tǒng)積累了大量用戶行為日志數(shù)據(jù)(如瀏覽、點(diǎn)擊、閱讀、下載等),我們也從業(yè)務(wù)角度篩選出了大量監(jiān)督數(shù)據(jù)。
SimCSE參考:
https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_matching/simcse
2.模型選擇
關(guān)于文本相似度計(jì)算,我們使用過字面匹配、word2vec、FastText等方法,都無法學(xué)到足夠精度的文本語義表示。我們知道百度在搜索場景有豐富的技術(shù)積累,也關(guān)注到PaddleNLP里集成了ERNIE、BERT等一系列預(yù)訓(xùn)練語義模型,并且針對(duì)檢索場景給出了系統(tǒng)化方案

近年來,以BERT、ERNIE為代表的預(yù)訓(xùn)練語言模型成為NLP任務(wù)的主流模型。
Sentence-BERT使用孿生網(wǎng)絡(luò)結(jié)構(gòu),在BERT模型的基礎(chǔ)上進(jìn)行Fine-Tune,引入(DSSM)雙塔模型,符合我們的業(yè)務(wù)場景,因此我們選擇該模型作為我們的基準(zhǔn)模型。
較FastText模型,Sentence-BERT的匹配效果提升了70%,用戶的整體體驗(yàn)大幅度提高。
我們將數(shù)據(jù)庫中的文獻(xiàn)預(yù)先通過Sentence-BERT計(jì)算得到文獻(xiàn)向量后,通過開源向量數(shù)據(jù)庫Milvus建立索引庫,快速召回相似向量,減少了檢索系統(tǒng)的響應(yīng)時(shí)間。
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.產(chǎn)業(yè)部署
線上檢索系統(tǒng)尤其需要考慮快速響應(yīng)需求。Sentence-BERT 12層Transfomer結(jié)構(gòu),具有龐大的參數(shù)量和計(jì)算量,在部署上線時(shí)面臨響應(yīng)實(shí)時(shí)性的巨大挑戰(zhàn)。為了滿足線上業(yè)務(wù)對(duì)于性能上的要求,我們通過飛槳原生推理庫Paddle Inference 結(jié)合飛槳服務(wù)化部署框架Paddle Serving進(jìn)行推理預(yù)測。
在不損失精度的前提下,我們將Sentence-BERT 從12層壓縮至6層,并結(jié)合了TensorRT加速等優(yōu)化手段,使得QPS達(dá)到2600,超預(yù)期完成了目標(biāo)。
延伸–檢索場景整體方案
以上我們參考了PaddleNLP檢索場景整體方案,其主要包括領(lǐng)域預(yù)訓(xùn)練(Post-Training)、語義匹配和語義索引三大部分。
領(lǐng)域預(yù)訓(xùn)練是在通用預(yù)訓(xùn)練模型基礎(chǔ)上,在領(lǐng)域數(shù)據(jù)上繼續(xù)預(yù)訓(xùn)練,讓預(yù)訓(xùn)練模型學(xué)習(xí)更多的領(lǐng)域知識(shí)。 語義匹配模塊針對(duì)存在高質(zhì)量監(jiān)督數(shù)據(jù)的場景,給出了檢索系統(tǒng)中排序模型方案。此外,針對(duì)高質(zhì)量標(biāo)注數(shù)據(jù)獲取成本高,數(shù)據(jù)量少的問題,語義匹配模塊還內(nèi)置了 R-Drop 數(shù)據(jù)增強(qiáng)策略,進(jìn)一步提升小數(shù)據(jù)量場景下排序模型效果,從而幫助檢索系統(tǒng)達(dá)到更優(yōu)的效果。 語義索引模塊針對(duì)無監(jiān)督和有監(jiān)督數(shù)據(jù)場景,分別給出了無監(jiān)督語義索引(SimCSE)和監(jiān)督語義索引的方案,即使沒有監(jiān)督數(shù)據(jù),也能利用無監(jiān)督語義索引方案提升檢索系統(tǒng)的召回效果。

針對(duì)工業(yè)應(yīng)用落地部署的高性能需求,預(yù)測部署環(huán)節(jié)還提供了基于 FasterTransformer 的高性能預(yù)測能力以及簡單易用的Python API,便于我們將模型快速落地到實(shí)際業(yè)務(wù)中。
后續(xù)在萬方業(yè)務(wù)中,我們將使用R-Drop 數(shù)據(jù)增強(qiáng)策略、FasterTransformer進(jìn)一步應(yīng)對(duì)持續(xù)新增的用戶需求。
如果您想了解詳細(xì)方案,可關(guān)注PaddleNLP,??Star ??收藏,跟進(jìn)其最新功能,也可在直播中與我交流哦:
GitHub Repo:
https://github.com/PaddlePaddle/PaddleNLP
直播預(yù)告
萬方數(shù)據(jù)的技術(shù)負(fù)責(zé)人將為大家直播講解,如果你也有相同的業(yè)務(wù)痛點(diǎn),或者想進(jìn)一步了解
PaddleNLP在產(chǎn)業(yè)實(shí)踐中的具體實(shí)現(xiàn),歡迎大家掃碼上車!
9月14日晚19:00-20:00,直播間不見不散~
掃碼報(bào)名課程,立即加入交流群
精彩內(nèi)容搶先看
