寫在前面在講RAG之前,我們先說一個大模型的普遍現象,大家應該都用過大模型了,比如 ChatGPT、DeepSeek、豆包、文心一言等等… 那么大家在用的時候其實會發現,有時候大模型會亂回答,一本正經地胡說八道,語義不同,前言不搭后語。 舉個例子:你問大模型,美國成立時間。大模型可能會回答:美國成立在1997年,距離現在已有400年的歷史… 這種現象叫hallucination,幻覺。大模型本質的就是不斷的預測下一個生成的文字應該是什么,而選擇預測概率中最大的一個。 ![]() 產生幻覺的原因有很多, 而我們要說的RAG就是 RAG簡介RAG(Retrieval-Augmented Generation,檢索增強生成) ?核心原理??為
這樣說可能比較生硬,打個比方:LLM在考試的時候面對陌生的領域,只會寫一個解字(因為LLM也只是局限于特定的數據集進行訓練),然后就準備放飛自我了,而此時RAG給了億些提示,讓LLM懂了開始往這個提示的方向做,最終考試的正確率從60%到了90%! ![]() 簡單來說就是大家的 為什么是向量數據庫?傳統數據庫為啥不行? 向量數據庫向量數據庫是通過存儲 如果使用傳統數據庫(如MySQL)結合關鍵詞檢索,但無法實現語義理解,可能導致漏檢或誤檢?。 舉個例子,同一個query進行搜索:“2024年騰訊的技術創新”。
我們先明白 RAG 過程![]() 回到最開頭的例子:
這樣就 那么向量數據庫如何構造呢?
那這里為什么要進行chunking呢? chunking是為了把相同語義的 token 聚集在一起,不同語義的 token 互相分開,在長文檔中各個片段的語義可能存在較大差異,如果將整個文檔作為一個整體進行知識檢索,會導致語義雜揉,影響檢索效果。 將長文檔切分成多個小塊,可以使得每個小塊內部表意一致,塊之間表意存在多樣性,從而更充分地發揮知識檢索的作用。 所以如果我們的塊太小會導致錯過真正的相關內容,太大則可能導致搜索結果不準確 參考[1] https://aws.amazon.com/what-is/retrieval-augmented-generation/ [2] https://blog.csdn.net/2301_78285120/article/details/144360003 |
|