自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

提升LLM結(jié)果:何時(shí)使用知識(shí)圖譜RAG

人工智能
簡(jiǎn)而言之,知識(shí)圖譜與向量存儲(chǔ)相結(jié)合,可以提供一種方法來直接連接在向量空間中可能不接近或不相似,因此在檢索過程中不會(huì)被認(rèn)為是“相關(guān)”的文本塊。

通過知識(shí)圖譜增強(qiáng) RAG 可以幫助檢索,使系統(tǒng)能夠更深入地挖掘數(shù)據(jù)集以提供詳細(xì)的響應(yīng)。

譯自Boost LLM Results: When to Use Knowledge Graph RAG,作者 Brian Godsey。

有時(shí),檢索增強(qiáng)生成 (RAG) 系統(tǒng)無法深入文檔集以找到所需的答案。我們可能會(huì)得到泛泛的或膚淺的回復(fù),或者我們可能會(huì)得到回復(fù),其中RAG系統(tǒng)檢索到的細(xì)節(jié)很少,然后用不相關(guān)或不正確的信息填補(bǔ)空白——這被稱為“幻覺”。

深度知識(shí)庫(kù)和文檔集可能包含我們用 RAG 提示回答問題所需的所有信息,但RAG 系統(tǒng)可能無法找到所有信息,尤其是在所需信息分散在多個(gè)文檔和不同主題或子主題中的情況下。特別是,向量檢索通常會(huì)產(chǎn)生一組很好的文檔,但這些文檔中的一些概念需要更多信息才能讓系統(tǒng)理解它們,因此直接檢索與這些概念相關(guān)的其他文檔將很有幫助。

以下是一些可能存在這些問題的類型的數(shù)據(jù)集:

  • 經(jīng)常相互引用的文檔集合。
  • 包含章節(jié)、術(shù)語定義和詞匯表的文檔,其中檢查交叉引用是了解給定主題的完整情況的唯一方法。
  • 大型維基或知識(shí)庫(kù),其中幾乎每段都包含指向其他頁(yè)面和外部網(wǎng)站的 HTML 鏈接。

此類數(shù)據(jù)集通常存在于:

  • 法律文件
  • 技術(shù)文檔
  • 研究和學(xué)術(shù)出版物
  • 高度互聯(lián)的網(wǎng)站

如果您的組織擁有深度且復(fù)雜的數(shù)據(jù)集,其中包含相互關(guān)聯(lián)的文檔和其他內(nèi)容,則標(biāo)準(zhǔn) RAG 實(shí)現(xiàn)可能無法成功解決一些最常見的用例,尤其是在提示要求提供詳細(xì)的解釋時(shí),這些解釋包括廣泛和高度具體的層面的信息。將實(shí)現(xiàn)轉(zhuǎn)換為圖 RAG,這意味著用知識(shí)圖譜增強(qiáng) RAG 系統(tǒng),該圖譜可以幫助檢索,可以使系統(tǒng)能夠更深入地挖掘數(shù)據(jù)集,以提供對(duì)請(qǐng)求詳細(xì)和專業(yè)信息的提示的詳細(xì)且正確的響應(yīng)。

讓我們探討知識(shí)圖譜如何提高 RAG 系統(tǒng)性能的關(guān)鍵概念,這種圖譜可能是什么樣子以及如何開始在您自己的數(shù)據(jù)上構(gòu)建圖 RAG 系統(tǒng)。

圖譜如何提供幫助?

簡(jiǎn)而言之,知識(shí)圖譜與向量存儲(chǔ)相結(jié)合,可以提供一種方法來直接連接在向量空間中可能不接近或不相似,因此在檢索過程中不會(huì)被認(rèn)為是“相關(guān)”的文本塊。

典型的 RAG 系統(tǒng)從向量存儲(chǔ)中檢索與提示最相關(guān)的文檔(或“塊”,根據(jù)向量相似性的度量。如果這些文檔包含指向其他文檔的鏈接或引用,那么很明顯,文檔的作者認(rèn)為它們是有意義地相關(guān)的。如果文檔是有意義地相關(guān)的,為什么我們不想利用這些信息來更深入地挖掘并獲得更多可能有助于回答提示的細(xì)節(jié)?

重述一下情況:我們擁有通過鏈接或引用明確且直接相關(guān)的文檔,我們希望確保我們的 RAG 系統(tǒng)在檢索文檔時(shí)考慮這些連接。構(gòu)建一個(gè)鏈接文檔的網(wǎng)絡(luò)會(huì)產(chǎn)生一個(gè)圖結(jié)構(gòu),我們可以遍歷該結(jié)構(gòu)以找到在典型文檔檢索過程中可能無法找到的相關(guān)文檔,使用圖來增強(qiáng) RAG;這被稱為圖 RAG。

主要思想是我們已經(jīng)擁有一個(gè)隱式且高置信度的圖,它通過直接鏈接和引用將文檔相互關(guān)聯(lián),我們希望我們的 RAG 系統(tǒng)在依賴不太確定的向量相似性和相關(guān)性分?jǐn)?shù)來填充響應(yīng)中的細(xì)節(jié)之前,充分利用這些已知的、高確定性的連接,這將有更高的風(fēng)險(xiǎn)以幻覺進(jìn)行響應(yīng)。

我們可以使用哪些類型的連接?

定義圖的可能性是無限的,但我們發(fā)現(xiàn),在圖 RAG 中使用最有效和最有效的連接類型是那些定義明確且有意義的連接。也就是說,我們希望清楚地知道什么是連接,什么是沒有連接的,因此我們傾向于避免為模糊的概念(如一般主題和情感)定義連接。我們希望這些連接是有意義的,從某種意義上說,兩個(gè)文檔在圖中存在連接使得每個(gè)文檔中的內(nèi)容很可能與另一個(gè)文檔相關(guān)。以下是定義圖 RAG 中文檔之間連接的一些最有用方法。

HTML 鏈接

如今,連接文檔最清晰、最明顯的方法之一是在一個(gè)文檔中直接鏈接到另一個(gè)文檔,從 HTML 鏈接在基于 Web 的文檔中的意義上來說。從人類的角度(而不是 AI 的角度)來看,如果我們點(diǎn)擊一個(gè)文檔中的鏈接并最終到達(dá)另一個(gè)文檔,那么它們之間就存在一個(gè)鏈接。這可以通過任何數(shù)量的鏈接提取工具在軟件中定義和實(shí)現(xiàn)。通常,文檔的作者添加鏈接是有原因的,因此它們之間存在有意義的連接。這樣,HTML 鏈接是我們可以在知識(shí)圖中使用的文檔之間最明確和最有意義的鏈接之一。

從 HTML 鏈接構(gòu)建知識(shí)圖在技術(shù)文檔和大型維基或知識(shí)庫(kù)等數(shù)據(jù)集上非常有效。這些類型的數(shù)據(jù)集的互連性質(zhì)使得圖 RAG 特別適用于深入研究專業(yè)細(xì)節(jié)、定義和子主題,這些細(xì)節(jié)、定義和子主題可能無法通過向量搜索單獨(dú)找到。

從 HTML 文檔中提取鏈接的一些示例代碼:

from bs4 import BeautifulSoup
from ragstack_langchain.graph_store.extractors import HtmlLinkEdgeExtractor


html_link_extractor = HtmlLinkEdgeExtractor()


# starting with an HTML document called `html`
soup = BeautifulSoup(html.page_content, "html.parser")
content = select_content(soup, url)


# Extract HTML links from the content.
html_link_extractor.extract_one(html, content)

有關(guān)使用 HTML 鏈接提取構(gòu)建圖的圖 RAG 的端到端示例,請(qǐng)查看最近的這篇文章,“使用以內(nèi)容為中心的知識(shí)圖實(shí)現(xiàn)更好的 LLM 集成和相關(guān)性”。

關(guān)鍵詞和主題

雖然從基于一般主題或情感的連接構(gòu)建圖對(duì)于圖 RAG 的目的來說可能過于模糊和不確定,但通??梢允褂枚x明確且有意義的高度專業(yè)化的關(guān)鍵詞和主題。特別是,專業(yè)領(lǐng)域內(nèi)的關(guān)鍵詞可以有效地用于在圖 RAG 中建立文檔之間的連接。專業(yè)關(guān)鍵詞并不總是包含在文檔的向量嵌入表示中,因此將從知識(shí)圖提供的更強(qiáng)大、更刻意連接中受益。

有一些優(yōu)秀的工具可以提取關(guān)鍵詞;以下是如何使用“keyBERT”提取關(guān)鍵詞的簡(jiǎn)單示例:

from keybert import KeyBERT


doc = """
         Supervised learning is the machine learning task of learning a function that
         maps an input to an output based on example input-output pairs. It infers a
         function from labeled training data consisting of a set of training examples.
         In supervised learning, each example is a pair consisting of an input object
         (typically a vector) and a desired output value (also called the supervisory signal).
         A supervised learning algorithm analyzes the training data and produces an inferred function,
         which can be used for mapping new examples. An optimal scenario will allow for the
         algorithm to correctly determine the class labels for unseen instances. This requires
         the learning algorithm to generalize from the training data to unseen situations in a
         'reasonable' way (see inductive bias).
      """


kw_model = KeyBERT()
keywords = kw_model.extract_keywords(doc)

這將提取專業(yè)領(lǐng)域關(guān)鍵詞:

>>> kw_model.extract_keywords(doc, keyphrase_ngram_range=(1, 2), stop_words=None)
[('learning algorithm', 0.6978),
 ('machine learning', 0.6305),
 ('supervised learning', 0.5985),
 ('algorithm analyzes', 0.5860),
 ('learning function', 0.5850)]

我們將這些關(guān)鍵詞如何轉(zhuǎn)化為知識(shí)圖取決于我們的用例和數(shù)據(jù)模型。一個(gè)例子可以在RAGStack 文檔關(guān)于知識(shí)圖 RAG 的部分中找到。

使用有意義的關(guān)鍵詞作為節(jié)點(diǎn)構(gòu)建圖,這些節(jié)點(diǎn)連接到包含它們的文檔,這可能是一種有效的圖 RAG 策略。請(qǐng)注意,要通過圖將文檔相互連接,我們必須遍歷圖到深度為 2 或更大:從文檔到其關(guān)鍵詞的一步,以及到包含這些關(guān)鍵詞的其他文檔的第二步。

術(shù)語和定義

在法律文件、學(xué)術(shù)出版物和研究作品中,我們有術(shù)語和定義作為列表或詞匯表,通常出現(xiàn)在文檔的開頭或結(jié)尾。在這些情況下,在整個(gè)文檔中引用這些術(shù)語和定義非常有用,這樣我們就可以始終清楚地了解所表達(dá)的內(nèi)容。如果沒有這些術(shù)語的定義,文檔的某些部分可能會(huì)變得模糊或幾乎毫無意義。

一個(gè)特別恰當(dāng)?shù)睦邮谴罅课臋n的情況,這些文檔是租戶和房東之間的合同;我們將使用我們的 RAG 系統(tǒng)查詢它們。這些文檔通常會(huì)在加載到數(shù)據(jù)存儲(chǔ)之前進(jìn)行分塊,這意味著出現(xiàn)在文檔開頭或結(jié)尾的任何術(shù)語和定義本身并不包含在分塊中。由于存在許多不同租戶和房東之間的合同,任何引用“租戶”或“房東”一詞的分塊在沒有將其與所討論的特定租戶和特定房東聯(lián)系起來的情況下將是模棱兩可的。

在這種情況下,擁有一個(gè)明確地將文檔片段與其中出現(xiàn)的術(shù)語的適當(dāng)定義連接起來的知識(shí)圖將非常有用。提取這些定義和術(shù)語以及將它們連接到文檔的正確片段的具體實(shí)現(xiàn)將取決于原始文檔本身的格式、術(shù)語表或定義相對(duì)于文檔其余部分的結(jié)構(gòu)等。許多文本和文檔解析器可用于此目的,并且正在進(jìn)行工作以將該過程標(biāo)準(zhǔn)化為圖 RAG。

當(dāng)文檔被分割并加載到向量存儲(chǔ)中時(shí),除非我們以某種方式捕獲它,否則文檔結(jié)構(gòu)中所有超出片段的部分都會(huì)丟失。對(duì)于許多 RAG 用例,系統(tǒng)能夠知道每個(gè)文檔片段在文檔的整體結(jié)構(gòu)中的位置、所有標(biāo)題和副標(biāo)題、頁(yè)碼以及哪些片段緊接在給定片段之前和之后將非常有用。

在與每個(gè)片段連接的知識(shí)圖中保留此信息對(duì)于圖 RAG 的目的有兩個(gè)主要優(yōu)勢(shì)。首先,了解片段在文檔中的位置使我們能夠提取附近的文本,這可能是緊接在片段之前和之后的片段、同一頁(yè)面的文本或同一部分的文本——所有這些都可能為初始片段中提到的主題提供支持證據(jù)和細(xì)節(jié)。其次,一些文檔包含對(duì)其他部分編號(hào)、標(biāo)題和頁(yè)碼的交叉引用,因此擁有一個(gè)允許 RAG 系統(tǒng)直接檢索所引用部分中的片段的知識(shí)圖將非常有用。

我們?cè)谶@篇關(guān)于以內(nèi)容為中心的知識(shí)圖的文章中詳細(xì)介紹了更多技術(shù)細(xì)節(jié),其中我們解釋了如何使用langchain、ragstack、Cassandra 和相關(guān)工具從基于 Web 的技術(shù)文檔構(gòu)建知識(shí)圖。我們從文檔中出現(xiàn)的 HTML 鏈接構(gòu)建知識(shí)圖,這可能是為圖 RAG 構(gòu)建知識(shí)圖的最簡(jiǎn)單和最有用的方法之一。

要處理 HTML 文檔并為圖 RAG 添加適當(dāng)?shù)脑獢?shù)據(jù),我們可以使用以下輔助函數(shù):

from markdownify import MarkdownConverter
from ragstack_langchain.graph_store.extractors import HtmlLinkEdgeExtractor


markdown_converter = MarkdownConverter(heading_style="ATX")
html_link_extractor = HtmlLinkEdgeExtractor()


def convert_html(html: Document) -> Document:
url = html.metadata["source"]
soup = BeautifulSoup(html.page_content, "html.parser")
content = select_content(soup, url)


# Use the URL as the content ID.
html.metadata[CONTENT_ID] = url


# Extract HTML links from the content.
html_link_extractor.extract_one(html, content)


# Convert the content to markdown and add to metadata
html.page_content = markdown_converter.convert_soup(content)


return html

一旦文檔被處理并且添加了適當(dāng)?shù)脑獢?shù)據(jù),它們就可以加載到像下面示例這樣的圖向量存儲(chǔ)中,該示例使用Astra DB作為底層數(shù)據(jù)存儲(chǔ),以及CassandraGraphStore作為GraphVectorStore的實(shí)現(xiàn),它既充當(dāng)知識(shí)圖又充當(dāng)向量存儲(chǔ):

import cassio
from langchain_openai import OpenAIEmbeddings
from ragstack_langchain.graph_store import CassandraGraphStore


# Initialize AstraDB connection
cassio.init(auto=True)


# Create embeddings
embeddings = OpenAIEmbeddings()


# Create knowledge store
graph_store = CassandraGraphStore(embeddings)


...  # load and process your documents, e.g. `convert_html` above


# Add documents to knowledge store
graph_store.add_documents(docs)
責(zé)任編輯:武曉燕 來源: 云云眾生s
相關(guān)推薦

2024-08-06 08:43:17

2025-03-06 10:41:32

2024-01-09 14:05:15

大型語言模型RAG向量數(shù)據(jù)庫(kù)

2024-02-26 00:00:00

RAG系統(tǒng)圖譜

2017-03-06 16:48:56

知識(shí)圖譜構(gòu)建存儲(chǔ)

2021-01-19 10:52:15

知識(shí)圖譜

2025-04-27 00:10:00

AI人工智能知識(shí)圖譜

2021-01-25 10:36:32

知識(shí)圖譜人工智能

2024-10-12 08:03:25

2023-08-22 15:34:01

Python開發(fā)

2024-06-03 07:28:43

2025-01-09 10:52:23

RAG知識(shí)圖譜人工智能

2024-07-03 09:38:35

LLM人工智能

2025-04-08 03:45:00

2021-01-18 10:50:29

知識(shí)圖譜人工智能深度學(xué)習(xí)

2017-04-13 11:48:05

NLP知識(shí)圖譜

2017-05-04 13:18:18

深度學(xué)習(xí)知識(shí)圖譜

2019-05-07 10:01:49

Redis軟件開發(fā)

2021-02-01 22:41:05

語義網(wǎng)知識(shí)圖譜

2024-10-08 10:37:12

語言數(shù)據(jù)自然語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)