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