作者 | 火山引擎 VikingDB
AI 時代,如何用好大模型是當前各行各業矚目的焦點。向量數據庫作為大模型“記憶體”,不僅能夠為其提供數據存儲,而且能通過數據檢索、分析讓大模型進行知識增強,成為生成式 AI 應用開發新范式的重要組成部分。
用圖片搜索圖片或者文本搜索文本時,在數據庫中存儲和對比的并不是圖片和視頻片段,而是通過深度學習等算法將其提取出來的“特征”,“特征”提取的過程稱為 Embedding,提取出的“特征”用數學中的向量來表示。向量化的目的是為了通過向量相似來進行非結構化數據的檢索,向量化后的數據才能夠被 AI 模型更好的理解使用。向量數據庫就是用于生產、存儲、索引和分析來自機器學習模型產生的海量向量數據的數據庫系統。其典型應用場景比如:基于大語言模型的智能客服、基于企業知識庫的問答以及 Chatdoc 等工具應用。
火山引擎向量數據庫技術演進之路
存算分離的分布式架構搭建
在抖音集團內部,早期的向量化檢索引擎是圍繞搜索、推薦、廣告業務來構建的,由于這些業務天然具有極大的數據規模,因此從一開始,就需要思考如何在向量索引中支持百億數據的檢索需求,比如圖蟲擁有幾億圖片素材,數量規模早已超出單機內存的極限,舉個例子,對于 1 億條 128 維的 Float 向量,不考慮任何輔助結構,就需要 100000000*128*4 bytes 也就是約 48GB 的服務器內存。
研發團隊設計了一套存算分離的分布式系統架構,來進行向量數據的分片和分布式編排,通過向量存儲、批式構建和實時在線檢索,解決一份向量多個索引、支持多個場景的問題,同時,還能夠節省索引構建資源,加快索引構建,使在線檢索服務穩定性得到明顯提升。對于用戶來講,在抖音上搜索內容則會又快又準。
計算內核性能優化
構建一個企業級的向量檢索應用,數據量可能超過億級,延遲在 10ms 內,要求用起來更快、更穩,所以在計算框架搭建好之后,也必須關注其內核,如何提供高性能的向量化檢索服務以滿足業務的苛刻需求。由于向量化檢索是典型的計算密集、數據密集場景,其優化方向主要圍繞提升吞吐、降低服務成本、提升穩定性開展。通過一系列性能優化工作,如降低內存占用、優化索引性能、CPU 指令集計算優化、優化過濾和重排序等業務相關的計算過程,這套架構可以很好解決各類業務場景的離線和在線檢索計算需求,相同檢索精度下的吞吐和時延相比開源基線有了 3 倍以上的改善,且滿足大規模線上業務的穩定性要求,因此被抖音集團大量業務采用。
但因為每個索引搭建一套集群的成本較高,且存在配置復雜等問題,研發團隊又對框架進一步迭代,進行云原生改造,實現組件多租戶化,提供自動化調度能力,以降低錯誤率,加快交付。
向量標量混合檢索能力
向量數據庫用于業務場景時,向量數據通常與結構化數據配合使用,例如,在將文檔表示為向量的同時,還需要存儲文檔所屬的部門,以方便在檢索時進行權限過濾。這類需求可以抽象為使用與向量相關的結構化數據進行過濾,業界通常有兩種解決方案:一是后過濾,將排名 top 的 K 個結果擴大一定倍數,檢索出更多的向量,然后用結構化數據做過濾,留下 topK 個,這種方法適用于結構化過濾掉的比例較低,向量召回結果比例較高的場景;二是先過濾,先使用 DSL 過濾數據集,然后在結果集中進行向量排序,適用于 DSL 過濾結果較少的場景。
隨著數據量的增加,這兩種檢索鏈路的性能各有適用的場景,但如何在執行時自動找到最適合的執行路徑呢?為此,技術團隊又研發了 DSL 定向引擎,支持在檢索過程中同時進行向量檢索和 DSL 過濾(結構化過濾),具有高性能、邏輯完備、可按需終止和執行計劃優化等特點。在混合查詢性能對比行業評測中,該向量數據庫的無過濾吞吐、1% 過濾吞吐和 99% 過濾吞吐多項性能均排名第一。
幫助大模型知識庫更快落地
大模型應用場景的不斷拓寬,催生了向量數據的存儲、檢索需求。將企業自身數據轉化為向量數據時遇到不少困難,如何幫助業務選擇開箱即用的向量化模型,也影響到大模型應用的落地速度。技術團隊在知識庫、生成式 AI 素材管理等場景,開始嘗試提供預設的向量化方法以供業務選擇。大多數業務只需要選擇一個適合自身數據的向量化方法,即可用原始數據直接寫入向量數據庫,并用相同的模型將請求數據轉換為請求向量進行查詢。
向量數據庫技術全景
經過長期的內部探索和優化,抖音采用的向量數據庫產品結構如下圖所示:基于云基礎設施,提供經過深度打磨和優化的各個引擎,提供從多模態數據寫入,到向量生成,再到在線檢索,以及上線后的彈性調度和監控的一整套全鏈路解決方案。
火山引擎向量數據庫的
場景化落地實踐
經過抖音集團內部的技術實踐,向量數據庫目前已經覆蓋 50+ 的業務線,基本支撐了內部所有的向量檢索場景,比如抖音、頭條、懂車帝、圖蟲、火山引擎 Oncall 智能問答和剪映等,主要的業務場景包括智能搜索、AIGC 跨模態檢索、推薦和去重、智能問答、相關排序、聚類分析和數據挖掘等,并且多個場景庫規模達百億級別。
下面以圖蟲和火山引擎 Oncall 智能問答為例,展示向量數據庫的應用實踐。
智能搜索場景——圖蟲的以圖搜圖
圖蟲提供了以圖搜圖的能力,致力于為用戶提供正版素材內容及數字資產管理解決方案。目前,圖蟲創意在庫圖片量 4.6 億、高清視頻超 2000 萬條,每天有大量用戶來搜索、查詢圖片和視頻。億級海量數據對向量檢索服務能力提出更高要求,業務如何靈活的設置分片,當數據量大幅增加時又如何避免重新部署集群,加快索引構建、節約資源。
解決方案是提供端到端的圖片搜索能力,流程是先將圖片源數據上傳到向量數據庫,把圖片數據進行向量化、存儲并形成向量索引,然后,用戶將要搜索的圖片上傳,上傳后向量化,向量化的圖片與向量數據庫進行向量檢索比對查詢,獲取相似度最高的結果,返回給用戶。
企業知識庫場景——火山引擎 Oncall 智能問答
火山引擎 Oncall 智能問答能夠輔助一線客服、提供客戶問題回復參考。火山引擎官網每天會收到大量的客戶售后進線,高峰時段人均要并行受理多個問題,需要能夠快速排查并且給出客戶反饋。對于工程師來講,面對眾多技術門檻較高的產品,要進行快速理解和判斷,難度較大。
解決方案就是,將火山知識庫文檔和數據通過向量特征提取,然后存儲到向量數據庫中,應用LLM 大語言模型與向量化的知識庫檢索和比對知識,構建火山引擎 Oncall 智能問答,可以讓聊天機器人的回答更具專業性和時效性,構建專屬 Chatbot。未來,火山引擎 Oncall 的 FAQ 知識將持續沉淀,知識庫持續完善,同時還能提供大模型訓練數據,處理大量客戶咨詢問題,實現機器人自動生成回復結果。
火山引擎向量數據庫技術經過抖音等業務的實踐打磨,已經對外開放,賦能千行百業,加速 AI 大模型落地應用。隨著用戶需求和應用場景的多樣化,向量數據庫會提供更加豐富完善的功能,包括向量算法的優化和創新、提升多模態數據的處理能力,提供多種多模態向量化能力模型、跨模態檢索等能力,進一步優化向量數據庫的通用性和易用性等。如今,向量數據庫已經成為整個大模型生態的基礎設施,支撐著大模型在業界的推廣和應用。火山引擎向量數據庫將持續創新,提供更加靈活和多樣化的功能,滿足不同用戶的需求。