天天看點

手把手教你用ChatGPT Embedding打造個人知識庫系統(理論篇)

作者:AIGC研究社

為什麼需要個人知識庫?

大概有很多人跟我一樣,被現在資訊過載弄得非常焦慮。很自然想到通過整理的方式來對抗資訊過載,試圖使用各種知識管理工具來整理這些資訊,但最後折騰完各種工具後,才發現根本用不起來。因為這些工具常常需要我們按照預設的架構去管理和整理我們的資訊,而這些架構可能并不完全符合我們的需求,缺乏足夠的靈活性。

是以我在想,是否存在這樣一種方案?既不改變我們現有攝入處理資訊的方式,又能在整理資訊時幫助我們連結和管理我們曆史的知識。在大模型語言出現之前,這可能是難以實作的。但現在以 OpenAI 為代表的語言模型,具備了這個能力,他們能非常精準地了解你的自然語言。是以,我們完全可以不必關心整理這一趴,所有的知識點都可以散落一地,我們隻在需要它的時候,撿起我想要的。

這麼做的好處在于,它可以給你的大腦減負。而那些收藏夾吃灰系列的内容,也有被再度回收利用的可能。總之就是,拿來當第二大腦,真的超級适合!并且,通過提問的方式去使用它也非常符合直覺。另外我在成本上也做了驗證,具體步驟在這裡 ChatGPT 插件做個人知識庫的成本計算,3.7K 的中文字數,收了 2 分錢,太良心了好吧?

原理介紹

為了友善之後更好地使用它,我們還是需要提前了解兩個基本概念,有技術背景的童鞋可以跳過這一趴。

什麼是嵌入 (embedding)

簡而言之,嵌入就是一個向量,它是可以被機器了解的數字清單。将自然語言映射成這樣的向量,可以幫助機器了解詞的含義以及詞與詞之間的關系。

手把手教你用ChatGPT Embedding打造個人知識庫系統(理論篇)

embedding 示意圖

比如下面三句話,在二維向量空間中,它們的位置大概如圖示中這樣,其中「貓吃老鼠」、「貓吃咀嚼型動物」和「」,在空間中的位置是相近的,而「小吉愛吃魚」這句話則在空間中位置則相對較遠。這還隻是在二維空間中,OpenAI 的 text-embedding-ada-002 模型的空間向量有 1536 個次元。是以,在更多元度的加持和上下文的幫助下,它基本上可以準确地檢索出我們想要的結果。

手把手教你用ChatGPT Embedding打造個人知識庫系統(理論篇)

向量空間映射原理示意圖

在做個人知識庫的場景中,當我們發起一個提問時,問題首先被轉換成一個向量,然後去向量資料庫中檢索到我們最相關的向量塊,再結合 OpenAI 自身的總結摘要能力,将我們想要的内容總結成友善了解的自然語言傳回給我們。

什麼是向量資料庫(vector database)

向量資料庫是一種将資訊存儲為向量或數字數組的資料庫。每一條資訊都被表示為一個向量,其中向量中的每一個數字對應于資料的一個特定屬性或特征。

設計思路

本教程基于官方的開源項目 ChatGPT-retrieval-plugin,為了友善了解,我畫了一下原理圖,并解釋其中的各個子產品的作用。原理圖如下

手把手教你用ChatGPT Embedding打造個人知識庫系統(理論篇)

搭建知識庫的原理示意圖

ChatGPT 知識庫插件運作原理圖

首先,你需要将你的文檔或文本,通過官方的向量映射語言模型轉換成向量,并存到向量資料庫中。當你想要檢索資料庫中的内容時,隻要導入你開發的插件,然後向正常使用 ChatGPT 一樣使用即可,插件會将你的聊天内容分割成查詢的詞,然後通過 Api 調用 text-embedding-ada-002-v2 模型,将查詢詞轉換成向量,接着去資料庫中,查找語義相關的問題區塊,并在查詢到結果後,經過整理傳回給你。

手把手教你用ChatGPT Embedding打造個人知識庫系統(理論篇)

運作的最終效果圖

運作的最終效果圖如上所示,本教程前半部分這一節主要解釋其原理,下一節将進入實戰環節,帶你一步一步搭建一個本地可運作的知識庫檢索插件。

參考資料

New and improved embedding model

繼續閱讀