知識圖譜與向量數據庫的相遇
原創在《大模型應用的10種架構模式》一文 中,知識圖譜是RAG系統中的一種重要的技術, 基于知識圖譜的大模型應用也成為一個典型的架構模式。但是,在一般的RAG系統中, 都會用到向量數據庫,那么,當知識圖譜與向量數據庫相遇后,會是怎樣的場景呢?
1.關于知識圖譜
知識圖譜是一種結構化的信息表示形式,用于說明不同概念之間的關系。它充當一張地圖,連接各種數據,并以易于理解的方式表示這些關系。知識圖譜經常被用來存儲復雜的信息,并通過鏈接相關概念來促進對大量數據集的理解。
1.1 知識圖譜的主要特征
知識數據庫一般通過圖數據庫承載,是集中式信息管理的關鍵,它提供了優化可訪問性的結構化存儲庫。先進的搜索功能提高了數據檢索效率,確保快速和準確的信息發現。協作工具進一步促進實時貢獻,促進共享知識和不斷改進的文化。
節點與邊緣
知識圖譜由節點(表示實體或想法)和邊(表示這些實體之間的聯系)組成。例如,在以書籍為中心的知識圖譜中,實體可以象征特定的書籍、作者和類別,而連接可以象征鏈接,如“屬于什么類別”或“由誰所有”等。
語義關系
它們捕獲語義關系,這意味著它們理解數據的上下文和含義。這使得它們對于像推薦系統和搜索引擎這樣的應用程序非常有用,因為在這些應用程序中,理解數據背后的含義是至關重要的。
靈活性
知識圖譜具有高度的靈活性,能夠以傳統數據庫難以處理的方式表示復雜的、相互連接的數據。
1.2 查詢示例
以一個簡單的圖書知識圖譜為例,在這里,我們希望搜索由特定作者編著的所有書籍。
# 使用SPARQL 來通過作者查找圖書
query = "
SELECT ?bookTitle WHERE {
?book rdf:type :Book .
?book :writtenBy :AuthorName .
?book :title ?bookTitle .
}
“
BookTitle 是一個變量,它將保存指定作者所寫的書的標題。此查詢在圖中搜索具有: writtenBy 關系的所有書籍。
2. 關于向量數據庫
矢量數據庫以矢量的形式存儲數據。向量只是表示某些信息的數字序列。例如,在機器學習中,向量經常被用來表示數據點的特征。
2.1 矢量數據庫的主要特征
矢量數據庫在處理復雜和大型數據(如照片、文檔和傳感器信號)方面正變得越來越流行。它們是為快速有效地處理大型數據集而設計的。
數值表達
這里數據以數值向量的形式存儲。這使得它適用于需要數學運算的應用程序,例如相似性搜索或機器學習。
高效率的搜尋
矢量數據庫非常適合執行快速搜索和比較。特別是在處理大型數據集時。它們是圖像或文本相似性搜索等應用程序的理想選擇,在這些應用程序中,需要查找與給定查詢最相似的項。
高維空間
向量可以有多個維度,允許復雜和詳細的數據表示。例如,圖像可以由一個高維向量來表示,該向量捕獲圖像的像素信息、顏色和其他特征。
2.2 向量數據庫查詢示例
假設我們擁有一個矢量數據庫,每個矢量代表一個圖像。我們的目標是識別類似于指定查詢圖像的圖像。
import faiss
import numpy as np
# `image_vectors` 是一個圖像向量;`query_vector` 是待查找的圖像向量
index = faiss.IndexFlatL2(image_vectors.shape[1])
index.add(image_vectors)
# 查找最相似的5個圖像
D, I = index.search(np.array([query_vector]), 5)
print("Indices of similar images:", I)
其中,IndexFlatL2被用來創建一個基于最近鄰搜索歐幾里得度量的索引,搜索以查詢向量的方式提供了前5個最相似的圖像。
3. 知識圖譜與矢量數據庫的比較
當對知識圖譜與矢量數據庫進行比較時,了解它們在顯示和查找數據方面的差異非常重要。知識圖譜能很好地顯示事物之間的聯系,非常適合根據意義來查找信息。與此同時,矢量數據庫更善于處理復雜的數據,比如文本、圖像和沒有組織的數據,這使得它們成為需要處理這類數據的任務的關鍵。
知識圖譜與矢量數據庫在數據表達、性能和典型用例的比較如下:
對比項 | 知識圖譜 | 向量知識庫 |
數據表達 | 使用帶有節點和邊的圖形結構來表示實體及其關系 | 使用矢量(數字陣列)表示數據點,適用于數值和高維數據。 |
用例 | 對于理解實體之間的關系至關重要的應用程序非常理想。它們通常用于語義搜索、推薦系統和知識管理系統。 | 最適合于需要相似性搜索的應用程序,如圖像識別、自然語言處理和機器學習。 |
性能 | 在表示復雜關系方面提供了很大的靈活性,但在處理大規模的數字數據時可能會遇到性能問題。 | 為數值數據和相似性搜索提供優秀的性能,但在表示復雜的、相互關聯的數據時可能不那么靈活。 |
4. 知識圖譜與向量數據庫的結合
在某些情況下,同時使用知識圖和矢量數據庫可能非常強大。例如,在推薦系統中,可以使用知識圖譜來理解目標和用戶之間的關系,而向量數據庫可以用來執行快速相似性搜索以找到最相關的目標。
kg_query = "'
SELECT ?relatedItem WHERE {
:UserID :likes ?item .
?item :relatedTo ?relatedItem .
}
"'
# 從知識圖譜中找到目標列表
related_items = ["Item1", "Item2", "Item3"]
# 使用向量數據庫查找相似的目標
similar_items = []
for item in related_items:
item_vector = get_vector(item)
D, I = index.search(np.array([item_vector]), 5)
similar_items.extend(I)
# 得出推薦列表
print("Recommended items:", similar_items)
在這個例子中,使用知識圖來查找與用戶喜歡的對象相關目標,使用向量數據庫來查找與這些相關對象相似的目標,從而形成一個相對全面的推薦系統。
5. 知識圖譜的向量化
知識圖譜的向量化一般表達為嵌入模型,這些模型旨在將實體和關系映射到度量空間中的低維向量表示(嵌入)。在關系型相關變換下,實體之間的接近度反映了知識圖譜中存在相應的邊的可能性。換句話說,如果兩個實體通過知識圖譜中的一個特定關系連接在一起,那么在應用相應的關系特定轉換之后,它們的嵌入應該是緊密相關的。
5.1 嵌入模型
例如,兩種知識圖譜嵌入模型:TransE 和 PairRE。TransE 將每個實體和關系表示為嵌入空間中的一個向量。對于給定的三元組(頭部、關系、尾部) ,TransE 的目標是使頭部實體的嵌入和關系的嵌入之和近似等于尾部實體的嵌入。這種基于翻譯的方法允許 TransE 有效地建模實體之間的簡單關系。
另一方面,PairRE 將每個關系表示為一對向量(rH,rT) ,并將元素相乘(Hadamard 乘積)應用于實體嵌入。對于一個給定的三元組(頭,關系,尾) ,PairRE 的目的是使 rh ° h (其中 rh 是頭特定關系嵌入)的元素智能積近似等于 rt ° t (其中 rt 是尾特定關系嵌入)的元素的Hadamard乘積。這種方法允許 PairRE 建模實體之間更復雜的關系,同時考慮到頭部和尾部實體在關系中的特定角色。
TransE 和 PairRE 都使用梯度下降法進行訓練,以便在滿足各自的約束時盡量減少誤差。然而,由于問題的規模,在大型知識圖譜中訓練這些模式可能是具有挑戰性的。隨著知識圖譜中實體數量的增加,潛在三元組的數量以二次方式增加,這使得在訓練期間考慮所有可能的三元組在計算上是不可行的。為了解決這個問題,一般會使用負抽樣來估計知識圖譜中不存在的三元組的誤差。這種技術通過破壞正三元組(即 知識圖譜中存在的三元組)來生成負三元組,方法是用一個隨機實體替換頭部或尾部的實體。然后,訓練該模型,使其正三元組的得分高于負三元組。這種方法允許模型從現有的和不存在的關系中學習,同時保持可管理的計算復雜性。
5.2 鏈路預測和評估度量
知識圖譜嵌入模型的主要任務之一是鏈接預測,它包括推斷圖中缺失的鏈接。鏈路預測有兩個常見的應用: 二叉鏈路分類和潛在鏈路完成度排序。
- 二叉鏈路分類。給定一個三元組(頭部,關系,尾部) ,預測三元組可能是真或假。這對于諸如事實檢查或知識庫補全等任務非常有用。
- 潛在鏈路補全的排序。給定一個部分三元組,例如,(頭,關系,?),模型對缺失實體的潛在候選者進行排序。這對于諸如推薦系統或問題回答之類的任務非常有用。
為了評估 KG 嵌入模型在鏈路預測任務中的性能,使用了兩個常用的指標:
- hit@N,衡量的是排在 N 個預測前列的正確實體的比例。例如,如果給定(頭部,關系)對的正確尾部實體在100個潛在候選者中排名第3,那么 Hits@10得分將為1(因為正確的實體在前10名中) ,而 Hits@1得分將為0(因為正確的實體不是最高預測)。
- MRR,此度量計算正確實體的倒數排名的平均值。倒數排名是第一個正確預測的排名的倒數。例如,如果正確的尾部實體排名第三,倒數排名將是1/3。
5.3 學習機制
當前,大致有三種不同的學習機制,有助于提升知識圖譜嵌入模型的性能: 非結構化統計學習,網絡學習和主題學習。這些機制為嵌入式模型如何捕獲和利用知識圖譜中的信息提供了不同的視角。通過了解每個機制的作用,深入了解各種嵌入模型的優點和局限性,從而開發出更有效的知識圖譜學習方法。
非結構化統計學習
非結構化統計學習是一種面向知識圖譜的學習方法,其重點是利用潛在變量建模三元組(h,r,t)的概率分布。此方法沒有明確考慮圖結構或關系之間的邏輯規則。相反,它依賴于實體的統計共同出現的頻率和知識圖譜內的關系作出預測。在非結構化統計學習中,每個頭部實體、尾部實體和關系在嵌入空間中用一個不同的向量表示。模型根據這些嵌入在數據中共同出現的頻率和模式來學習它們。三元組(h,r,t)的得分通常使用點積或嵌入的頭部、關系和尾部之間的另一個相似性度量來計算。
這種方法不直接利用圖的結構屬性,而是關注實體和關系之間的統計關系。這使得非結構化統計學習在數據表現出強共現模式時特別有用,這種模式不需要詳細的圖結構分析就可以捕獲。
網絡學習
網絡學習是一種不需要明確考慮關系的語義就可以獲取知識圖譜的結構特征的機制。這種方法利用連通性模式和圖的拓撲結構來學習反映實體的鄰近性和相關性的嵌入。
像 TransE 這樣的嵌入模型可以通過基于圖譜中觀察到的連通性調整實體和關系嵌入來學習潛在的網絡模式。在訓練過程中,該模型試圖最小化由邊直接連接的實體之間的嵌入距離,同時最大化不直接連接的實體之間的距離。這個優化過程允許模型學習反映圖結構的嵌入,在圖中更接近的實體具有更相似的嵌入。
通過學習這些結構模式,網絡學習允許嵌入模型捕獲知識圖譜的重要拓撲特征,這對于像鏈接預測或實體聚類這樣的任務可能是至關重要的,尤其是在沒有詳細的關系信息的情況下。
主題學習
這是知識圖嵌入過程中發現關系規則的一種機制。主題是知識圖譜中可以表示邏輯規則或關系之間約束的小的、重復出現的子圖。
知識圖譜的嵌入模型,如 TransE,可以通過優化關系嵌入來學習這些模式,以滿足模式所隱含的約束條件。主題學習可以捕捉圖結構之外的各種規則,比如對稱性(如果 A 與 B 相關,那么 B 與 A 相關),為知識圖譜中的規則學習提供了一個精確的定義,它完全依賴于圖的結構而不是外部信息或推理。這種方法有助于捕獲和利用知識圖譜中固有的模式來提高嵌入質量和預測性能。
5.4 評價知識圖譜的嵌入
在鏈接預測任務中增加負樣本的數量和多樣性,以提供更具挑戰性和代表性的測試。重采樣指標(R-MRR)和標準指標一起使用,可以以獲得更準確的模型性能評估,特別是對于大型知識圖譜,統一的負樣本可能會產生誤導。
6. 小結
知識圖譜和矢量數據庫各有其獨特的優勢,適合不同類型的任務。知識圖譜擅長表示和查詢實體之間的復雜關系,這使它們成為語義搜索和推薦系統等應用程序的理想選擇。矢量數據庫為存儲和搜索大量數字數據而進行了優化,使它們非常適合進行圖像和文本相似性搜索等任務。在某些情況下,結合這兩種技術可以提供一個強大的解決方案,利用各自的優勢來獲得更好的結果。其中,知識圖譜的向量化提供了一種新的結合嘗試。