LLM 如火如荼地發(fā)展了大半年,各類(lèi)大模型和相關(guān)框架也逐步成型,可被大家應(yīng)用到業(yè)務(wù)實(shí)際中。在這個(gè)過(guò)程中,我們可能會(huì)遇到一類(lèi)問(wèn)題是:現(xiàn)有的哪些數(shù)據(jù),如何更好地與 LLM 對(duì)接上。像是大家都在用的知識(shí)圖譜,現(xiàn)在的圖譜該如何借助大模型,發(fā)揮更大的價(jià)值呢?
在本文,我便會(huì)和大家分享下如何利用知識(shí)圖譜構(gòu)建更好的 In-context Learning 大語(yǔ)言模型應(yīng)用。
此文最初以英文撰寫(xiě)的,而后我麻煩 ChatGPT 幫我翻譯成了英文。下面是翻譯的 prompt:
“In this thread, you are a Chinese Tech blogger to help translate my blog in markdown from English into Chinese, the blog style is clear, fun yet professional. I will paste chapters in markdown to you and you will send back the translated and polished version.”
LLM 應(yīng)用的范式
作為認(rèn)知智能的一大突破,LLM 已經(jīng)改變了許多行業(yè),以一種我們沒(méi)有預(yù)料到的方式進(jìn)行自動(dòng)化、加速和啟用。我們每天都會(huì)看到新的 LLN 應(yīng)用被創(chuàng)建出來(lái),我們?nèi)匀辉谔剿魅绾卫眠@種魔力的新方法和用例。
將 LLM 引入流程的最典型模式之一,是要求 LLM 根據(jù)專(zhuān)有的/特定領(lǐng)域的知識(shí)理解事物。目前,我們可以向 LLM 添加兩種范式以獲取這些知識(shí):微調(diào)——fine-tune 和 上下文學(xué)習(xí)—— in-context learning。
微調(diào)是指對(duì) LLM 模型進(jìn)行附加訓(xùn)練,以增加額外的知識(shí);而上下文學(xué)習(xí)是在查詢(xún)提示中添加一些額外的知識(shí)。
據(jù)觀察,目前由于上下文學(xué)習(xí)比微調(diào)更簡(jiǎn)單,所以上下文學(xué)習(xí)比微調(diào)更受歡迎,在這篇論文中講述了這一現(xiàn)象:https://arxiv.org/abs/2305.16938。
下面,我來(lái)分享 NebulaGraph 在上下文學(xué)習(xí)方法方面所做的工作。
Llama Index:數(shù)據(jù)與 LLM 之間的接口
上下文學(xué)習(xí)
上下文學(xué)習(xí)的基本思想是使用現(xiàn)有的 LLM(未更新)來(lái)處理特定知識(shí)數(shù)據(jù)集的特殊任務(wù)。
例如,要構(gòu)建一個(gè)可以回答關(guān)于某個(gè)人的任何問(wèn)題,甚至扮演一個(gè)人的數(shù)字化化身的應(yīng)用程序,我們可以將上下文學(xué)習(xí)應(yīng)用于一本自傳書(shū)籍和 LLM。在實(shí)踐中,應(yīng)用程序?qū)⑹褂糜脩?hù)的問(wèn)題和從書(shū)中"搜索"到的一些信息構(gòu)建提示,然后查詢(xún) LLM 來(lái)獲取答案。
┌───────┐ ┌─────────────────┐ ┌─────────┐
│ │ │ Docs/Knowledge │ │ │
│ │ └─────────────────┘ │ │
│ User │─────────────────────────────────────? LLM │
│ │ │ │
│ │ │ │
└───────┘ └─────────┘
在這種搜索方法中,實(shí)現(xiàn)從文檔/知識(shí)(上述示例中的那本書(shū))中獲取與特定任務(wù)相關(guān)信息的最有效方式之一是利用嵌入(Embedding)。
嵌入(Embedding)
嵌入通常指的是將現(xiàn)實(shí)世界的事物映射到多維空間中的向量的方法。例如,我們可以將圖像映射到一個(gè)(64 x 64)維度的空間中,如果映射足夠好,兩個(gè)圖像之間的距離可以反映它們的相似性。
嵌入的另一個(gè)例子是 word2vec 算法,它將每個(gè)單詞都映射到一個(gè)向量中。例如,如果嵌入足夠好,我們可以對(duì)它們進(jìn)行加法和減法操作,可能會(huì)得到以下結(jié)果:
vec(apple) + vec(pie) ≈ vec("apple apie")
,或者向量測(cè)量值 vec(apple) + vec(pie) - vec("apple apie")
趨近于 0:
|vec(apple) + vec(pie) - vec("apple apie")| ≈ 0
類(lèi)似地,“pear” 應(yīng)該比 “dinosaur” 更接近 “apple”:|vec(apple) - vec(pear)| < |vec(apple) - vec(dinosaur)|
有了這個(gè)基礎(chǔ),理論上我們可以搜索與給定問(wèn)題更相關(guān)的書(shū)籍片段?;具^(guò)程如下:
- 將書(shū)籍分割為小片段,為每個(gè)片段創(chuàng)建嵌入并存儲(chǔ)它們
- 當(dāng)有一個(gè)問(wèn)題時(shí),計(jì)算問(wèn)題的嵌入
- 通過(guò)計(jì)算距離找到與書(shū)籍片段最相似的前 K 個(gè)嵌入
- 使用問(wèn)題和書(shū)籍片段構(gòu)建提示
- 使用提示查詢(xún) LLM
┌────┬────┬────┬────┐
│ 1 │ 2 │ 3 │ 4 │
├────┴────┴────┴────┤
│ Docs/Knowledge │
┌───────┐ │ ... │ ┌─────────┐
│ │ ├────┬────┬────┬────┤ │ │
│ │ │ 95 │ 96 │ │ │ │ │
│ │ └────┴────┴────┴────┘ │ │
│ User │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─? LLM │
│ │ │ │
│ │ │ │
└───────┘ ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ └─────────┘
│ ┌──────────────────────────┐ ▲
└────────┼?│ Tell me ....., please │├───────┘
└──────────────────────────┘
│ ┌────┐ ┌────┐ │
│ 3 │ │ 96 │
│ └────┘ └────┘ │
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
Llama Index
Llama Index 是一個(gè)開(kāi)源工具包,它能幫助我們以最佳實(shí)踐去做 in-context learning:
- 它提供了各種數(shù)據(jù)加載器,以統(tǒng)一格式序列化文檔/知識(shí),例如 PDF、維基百科、Notion、Twitter 等等,這樣我們可以無(wú)需自行處理預(yù)處理、將數(shù)據(jù)分割為片段等操作。
- 它還可以幫助我們創(chuàng)建嵌入(以及其他形式的索引),并以一行代碼的方式在內(nèi)存中或向量數(shù)據(jù)庫(kù)中存儲(chǔ)嵌入。
- 它內(nèi)置了提示和其他工程實(shí)現(xiàn),因此我們無(wú)需從頭開(kāi)始創(chuàng)建和研究,例如,《用 4 行代碼在現(xiàn)有數(shù)據(jù)上創(chuàng)建一個(gè)聊天機(jī)器人》。
文檔分割和嵌入的問(wèn)題
嵌入和向量搜索在許多情況下效果良好,但在某些情況下仍存在挑戰(zhàn),比如:丟失全局上下文/跨節(jié)點(diǎn)上下文。
想象一下,當(dāng)查詢(xún)"請(qǐng)告訴我關(guān)于作者和 foo 的事情",在這本書(shū)中,假設(shè)編號(hào)為 1、3、6、19-25、30-44 和 96-99 的分段都涉及到 foo 這個(gè)主題。那么,在這種情況下,簡(jiǎn)單地搜索與書(shū)籍片段相關(guān)的前 k 個(gè)嵌入可能效果不盡人意,因?yàn)檫@時(shí)候只考慮與之最相關(guān)的幾個(gè)片段(比如 k = 3),會(huì)丟失了許多上下文信息。
┌────┬────┬────┬────┐
│ 1 │ 2 │ 3 │ 4 │
├────┴────┴────┴────┤
│ Docs/Knowledge │
│ ... │
├────┬────┬────┬────┤
│ 95 │ 96 │ │ │
└────┴────┴────┴────┘
而解決、緩解這個(gè)問(wèn)題的方法,在 Llama Index 工具的語(yǔ)境下,可以創(chuàng)建組合索引和綜合索引。
其中,向量存儲(chǔ)(VectorStore)只是其中的一部分。除此之外,我們可以定義一個(gè)摘要索引、樹(shù)形索引等,以將不同類(lèi)型的問(wèn)題路由到不同的索引,從而避免在需要全局上下文時(shí)錯(cuò)失它。
然而,借助知識(shí)圖譜,我們可以采取更有意思的方法:
知識(shí)圖譜
知識(shí)圖譜這個(gè)術(shù)語(yǔ)最初由谷歌在 2012 年 5 月提出,作為其增強(qiáng)搜索結(jié)果,向用戶(hù)提供更多上下文信息的一部分實(shí)踐。知識(shí)圖譜旨在理解實(shí)體之間的關(guān)系,并直接提供查詢(xún)的答案,而不僅僅返回相關(guān)網(wǎng)頁(yè)的列表。
知識(shí)圖譜是一種以圖結(jié)構(gòu)形式組織和連接信息的方式,其中節(jié)點(diǎn)表示實(shí)體,邊表示實(shí)體之間的關(guān)系。圖結(jié)構(gòu)允許用戶(hù)高效地存儲(chǔ)、檢索和分析數(shù)據(jù)。
它的結(jié)構(gòu)如下圖所示:
現(xiàn)在問(wèn)題就來(lái)了,上面說(shuō)過(guò)知識(shí)圖譜能幫忙搞定文檔分割和嵌入的問(wèn)題。那么,知識(shí)圖譜到底能怎么幫到我們呢?
嵌入和知識(shí)圖譜的結(jié)合
這里的基本實(shí)現(xiàn)思想是,作為信息的精煉格式,知識(shí)圖譜可切割的數(shù)據(jù)顆粒度比我們?nèi)斯さ姆指畹母?xì)、更小。將知識(shí)圖譜的小顆粒數(shù)據(jù)與原先人工處理的大塊數(shù)據(jù)相結(jié)合,我們可以更好地搜索需要全局/跨節(jié)點(diǎn)上下文的查詢(xún)。
下面來(lái)做個(gè)題:請(qǐng)看下面的圖示,假設(shè)提問(wèn)同 x
有關(guān),所有數(shù)據(jù)片段中有 20 個(gè)與 x
高度相關(guān)?,F(xiàn)在,除了獲取主要上下文的前 3 個(gè)文檔片段(比如編號(hào)為 1、2 和 96 的文檔片段),我們還從知識(shí)圖譜中對(duì) x
進(jìn)行兩次跳轉(zhuǎn)查詢(xún),那么完整的上下文將包括:
- 問(wèn)題:“Tell me things about the author and x”
- 來(lái)自文檔片段編號(hào) 1、2 和 96 的原始文檔。在 Llama Index 中,它們被稱(chēng)為節(jié)點(diǎn) 1、節(jié)點(diǎn) 2 和節(jié)點(diǎn) 96。
- 包含 “x” 的知識(shí)圖譜中的 10 個(gè)三元組,通過(guò)對(duì)
x
進(jìn)行兩層深度的圖遍歷得到:- x -> y(來(lái)自節(jié)點(diǎn) 1)
- x -> a(來(lái)自節(jié)點(diǎn) 2)
- x -> m(來(lái)自節(jié)點(diǎn) 4)
- x <- b-> c(來(lái)自節(jié)點(diǎn) 95)
- x -> d(來(lái)自節(jié)點(diǎn) 96)
- n -> x(來(lái)自節(jié)點(diǎn) 98)
- x <- z <- i(來(lái)自節(jié)點(diǎn) 1 和節(jié)點(diǎn) 3)
- x <- z <- b(來(lái)自節(jié)點(diǎn) 1 和節(jié)點(diǎn) 95)
┌──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ .─. .─. │ .─. .─. │ .─. │ .─. .─. │
│( x )─────? y ) │ ( x )─────? a ) │ ( j ) │ ( m )?────( x ) │
│ `▲' `─' │ `─' `─' │ `─' │ `─' `─' │
│ │ 1 │ 2 │ 3 │ │ 4 │
│ .─. │ │ .▼. │ │
│( z )?────────────┼──────────────────┼───────────( i )─┐│ │
│ `?────┐ │ │ `─' ││ │
├───────┼──────────┴──────────────────┴─────────────────┼┴──────────────────┤
│ │ Docs/Knowledge │ │
│ │ ... │ │
│ │ │ │
├───────┼──────────┬──────────────────┬─────────────────┼┬──────────────────┤
│ .─. └──────. │ .─. │ ││ .─. │
│ ( x ?─────( b ) │ ( x ) │ └┼?( n ) │
│ `─' `─' │ `─' │ │ `─' │
│ 95 │ │ │ 96 │ │ │ 98 │
│ .▼. │ .▼. │ │ ▼ │
│ ( c ) │ ( d ) │ │ .─. │
│ `─' │ `─' │ │ ( x ) │
└──────────────────┴──────────────────┴──────────────────┴──`─'─────────────┘
顯然,那些(可能很寶貴的)涉及到主題 x
的精煉信息來(lái)自于其他節(jié)點(diǎn)以及跨節(jié)點(diǎn)的信息,都因?yàn)槲覀円胫R(shí)圖譜,而能夠被包含在 prompt 中,用于進(jìn)行上下文學(xué)習(xí),從而克服了前面提到的問(wèn)題。
Llama Index 中的知識(shí)圖譜進(jìn)展
最初,William F.H.將知識(shí)圖譜的抽象概念引入了 Llama Index,其中知識(shí)圖譜中的三元組與關(guān)鍵詞相關(guān)聯(lián),并存儲(chǔ)在內(nèi)存中的文檔中,隨后Logan Markewich還增加了每個(gè)三元組的嵌入。
最近的幾周中,我一直在與 Llama Index 社區(qū)合作,致力于將 “GraphStore” 存儲(chǔ)上下文引入 Llama Index,從而引入了知識(shí)圖譜的外部存儲(chǔ)。首個(gè)知識(shí)圖譜的外部存儲(chǔ)是對(duì)接開(kāi)源分布式圖數(shù)據(jù)庫(kù) NebulaGraph,目前在我的努力下已經(jīng)實(shí)現(xiàn)了。
在實(shí)現(xiàn)過(guò)程中,還引入了遍歷圖的多個(gè)跳數(shù)選項(xiàng)以及在前 k 個(gè)節(jié)點(diǎn)中收集更多關(guān)鍵實(shí)體的選項(xiàng),用于在知識(shí)圖譜中搜索以獲得更多全局上下文。上面提到的這些變更還在陸續(xù)完善中。
在大模型中引入 GraphStore 后,還可以從現(xiàn)有的知識(shí)圖譜中進(jìn)行上下文學(xué)習(xí),并與其他索引結(jié)合使用,這也非常有前景。因?yàn)橹R(shí)圖譜被認(rèn)為具有比其他結(jié)構(gòu)化數(shù)據(jù)更高的信息密度。
本文作為開(kāi)篇,講述了一些知識(shí)圖譜和 LLM 的關(guān)系。在后續(xù)的文章中,將會(huì)偏向?qū)嵅偻蠹曳窒砭唧w的知識(shí)圖譜和 LLM 的應(yīng)用實(shí)踐。
–
謝謝你讀完本文 (///▽///)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-615462.html
歡迎前往 GitHub 來(lái)閱讀 NebulaGraph 源碼,或是嘗試用它解決你的業(yè)務(wù)問(wèn)題 yo~ GitHub 地址:https://github.com/vesoft-inc/nebula 想要交流圖技術(shù)和其他想法,請(qǐng)前往論壇:https://discuss.nebula-graph.com.cn/文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-615462.html
到了這里,關(guān)于圖技術(shù)在 LLM 下的應(yīng)用:知識(shí)圖譜驅(qū)動(dòng)的大語(yǔ)言模型 Llama Index的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!