【一文讀懂】基于Havenask向量檢索+大模型,構(gòu)建可靠的智能問答服務
01Havenask介紹
Havenask 是阿里巴巴廣泛使用的自研大規(guī)模分布式檢索系統(tǒng),是過去十多年阿里在電商領(lǐng)域積累下來的核心競爭力產(chǎn)品,廣泛應用在搜推廣和大數(shù)據(jù)檢索等典型場景。在2022年云棲大會-云計算加速開源創(chuàng)新論壇上完成開源首發(fā),同時作為阿里云開放搜索OpenSearch底層搜索引擎,OpenSearch 自2014年商業(yè)化,目前已有千余家外部客戶。
02向量檢索
近年來,隨著短視頻、電商等領(lǐng)域的繁榮,產(chǎn)生了越來越多的非結(jié)構(gòu)化數(shù)據(jù),如圖片、音頻、視頻、行為數(shù)據(jù)等。人們通常使用人工智能算法從中提取出特征向量,再通過對這些特征向量的計算和檢索來實現(xiàn)對非結(jié)構(gòu)化數(shù)據(jù)的分析與檢索,以實現(xiàn)搜索推薦、人臉識別等功能場景。因此,需要存儲這些特征向量,并進行高效率的檢索。
傳統(tǒng)的基于關(guān)鍵字的信息檢索,只有命中全部或者部分關(guān)鍵字的數(shù)據(jù)才會被召回。與此不同的是,向量檢索是一種近似搜索(Approximate Nearest Neighbor),從大量數(shù)據(jù)中找出最相似的n個結(jié)果。在業(yè)界主要有兩種支持向量檢索的方式:一是針對向量構(gòu)建索引、提供召回服務的向量數(shù)據(jù)庫。另一種是將向量檢索融合進傳統(tǒng)的搜索引擎或中,作為搜索引擎的一種索引。將傳統(tǒng)倒排索引與向量檢索配合使用,二者互補,提高召回結(jié)果的相關(guān)性。
Havenask作為傳統(tǒng)的搜索引擎,深度集成阿里自研的高性能向量庫Proxima,實現(xiàn)了對向量檢索的支持。在Havenask中有多種倒排索引,如文本索引、數(shù)字索引、字符串索引等。而向量作為一種特殊的自定義索引,與其他普通的倒排索引一樣地使用,從而可以將向量檢索與文本檢索結(jié)合起來,實現(xiàn)向量與文本的混合檢索。
2.1 使用方式
與文本倒排結(jié)合
目前,向量索引是Havenask的一種自定義索引,可以與其他倒排索引一起結(jié)合使用。業(yè)務上比較常見的使用方式,如在nlp場景,將向量檢索的結(jié)果與文本檢索的結(jié)果合并起來,豐富結(jié)果內(nèi)容。文本檢索保證查詢的精確度,向量檢索擴展語義提供更廣泛的內(nèi)容。二者相互補充,能夠提升結(jié)果的準確性,降低無結(jié)果率。
vector:'0.1,0.2,0.3' OR ((title:'havenask' OR content:'havenask') AND type:'1')
解析后的查詢語法樹:
每個葉子節(jié)點做索引的查詢,之后合并結(jié)果。
帶條件過濾檢索
在大多數(shù)業(yè)務場景中,通常會帶有特定的過濾條件,只召回滿足條件的結(jié)果。Havenask的向量檢索將條件過濾和向量相似度計算結(jié)合起來,精確判斷過濾條件,進行高效的向量檢索。從而使得結(jié)果更加準確,且不會缺少結(jié)果。
如:
Query: vector:‘0.1,0.2,0.3’
Filter: count > 10
帶標簽檢索
在一些場景下,數(shù)據(jù)是按某些特定的標簽進行分類。 如數(shù)據(jù)按用戶維度組織,一次查詢只查詢某個指定用戶下的數(shù)據(jù)。針對這種場景,Havenask提供了按標簽查詢的功能,在建索引時就將數(shù)據(jù)按標簽分類,從物理上將數(shù)據(jù)按標簽隔離,分別構(gòu)建索引。查詢時,只需要檢索相應用戶的索引數(shù)據(jù)。這樣能夠提高向量檢索的性能和準確性。
2.2 索引構(gòu)建方式
目前Havenask支持HNSW(圖)、QC(量化距離)、Linear(暴力計算)三種索引構(gòu)建方式。
HNSW
HNSW是經(jīng)典的多層圖算法,召回率高、性能好,適用于對召回結(jié)果要求高的場景。
QC
QC表示量化聚類,與Fassis的IVF類似,通過聚類的方式構(gòu)建向量索引。且支持int8、int16量化,量化后能夠顯著地減少索引的體積,并且保證較高的召回率。適用于超大規(guī)模的向量場景,節(jié)省資源。
Linear
Linear為暴力計算,會遍歷所有的索引數(shù)據(jù),適用于數(shù)據(jù)規(guī)模非常小的場景。
03LLM問答
ChatGPT的出現(xiàn)帶起了大模型熱,大模型能夠幫助從大量的信息里總結(jié)出關(guān)鍵的信息。很多企業(yè)或者個人都希望構(gòu)建知識庫,通過大模型進行歸納、總結(jié)后回答問題。
下圖是典型的知識庫構(gòu)建流程:-
整體流程可以分為兩部分:數(shù)據(jù)處理和問答流程。
- 數(shù)據(jù)處理
這部分主要功能是將已有的知識數(shù)據(jù)向量化,依賴文本向量化模型,將文本數(shù)據(jù)向量化,生成的向量數(shù)據(jù)存入Havenask中。處理步驟如下:
從原始文檔中提取出所有的文本數(shù)據(jù),按文本語義將文本切分成多個chunk
將這些chunk丟給文本模型,生成embedding數(shù)據(jù)
將embedding和chunk,以及chunk所屬的原始文檔的一些屬性信息(如文件名、文章地址等)一起存入Havenask中
- 問答流程
這部分主要處理與LLM的交互,依賴和數(shù)據(jù)處理一樣的文本模型以及一個大模型??梢苑譃槿齻€步驟:
將輸入的問題丟給文本模型,生成embedding數(shù)據(jù)
將embedding數(shù)據(jù)以及一些其他的查詢條件(如:查詢的用戶ID等)給到Havenask,查詢獲取最相關(guān)或相似的內(nèi)容。這里的查詢條件可以將向量與文本以及其他一些屬性信息相結(jié)合,以便查詢出更加精確的知識,降低無結(jié)果率。
讓LLM根據(jù)獲得的最相關(guān)的內(nèi)容,以及問題推理出答案。查詢LLM的prompt可能如下:
請根據(jù)以下已知信息,簡潔和專業(yè)的來回答用戶的問題。如果無法從中得到答案,請說不知道,不允許在答案中添加編造成分,答案請使用中文。
已知信息:
內(nèi)容1
內(nèi)容2
...
問題:
問題內(nèi)容
最后將結(jié)果展示給用戶:
04性能
下面是Havenask向量檢索的測試數(shù)據(jù):
05總結(jié)
Havenask通過深度集成proxima向量庫,以Havenask中的一種索引類型的方式支持向量檢索。支持向量與文本的混合查詢、帶標簽的向量查詢、以及支持按過濾條件的向量查詢。支持HNSW、QC、Linear等3種向量索引構(gòu)建方式。支持超大規(guī)模的向量數(shù)據(jù),支持水平擴展,具有低延遲、高吞吐的特點。
相關(guān)資料
[01]Havenask 開源官網(wǎng)
https://havenask.net/
[02] Havenask-Github 開源項目地址
https://github.com/alibaba/havenask
[03] 阿里云 OpenSearch 官網(wǎng)
https://www.aliyun.com/product/opensearch
本文轉(zhuǎn)載自阿里技術(shù),作者: 本巖
原文鏈接:https://mp.weixin.qq.com/s/9sut-vW2tKpswTcdaax7Ww
