Retrieval Augmented Generation(RAG)其實就是優化大型語言模型(LLM)輸出的過程。在生成回應之前,RAG會參考訓練資料以外的權威知識庫。大型語言模型是在大量資料上訓練出來的,擁有數十億個參數,可以回答問題、翻譯語言、完成句子等等。RAG讓這些本來就很強大的模型可以使用特定領域或組織內部的知識庫,而不需要重新訓練模型。這是一種成本效益很高的方法,可以讓LLM在各種情況下都保持相關、準確和有用。
簡單來說就是:
讓大型語言模型(LLM)有了 「小抄」 的輔助,當LLM沒有學過某方面的資訊時,這些小抄就能派上用場,提供必要的支持。
讓LLM參照特定資料來回應,比如醫療衛教資訊。如果讓LLM自由發揮,可能會出現資訊錯誤的情況。但搭配RAG後,LLM可以參考正確的資料進行「統整」而非「生成」,大大提升回應的正確率。
查表功能,即使不搭配LLM使用,RAG本身也可以用來進行模糊查表。比如查詢新聞時,當新聞或文章資料向量化後,可以使用RAG進行模糊查詢,達到快速檢索的效果。
可以使用文字轉向量的方式來將文字向量化(Word Embedding),並存入向量資料庫(Vector DB)。
1. Count Vector
Count Vector是一種簡單的詞向量表示方法。它計算每個詞在文檔中出現的次數,並用這些次數來表示文檔中的詞語。這種方法的缺點是沒有考慮詞語之間的語義關係和詞語的重要性。
2. TF-IDF Vector
TF-IDF(Term Frequency-Inverse Document Frequency)是一種改進的詞向量表示方法。它不僅計算詞語在文檔中的出現頻率(TF),還考慮詞語在整個語料庫中的出現頻率(IDF)。如果一個詞語在某個文檔中頻繁出現,但在整個語料庫中很少出現,那麼這個詞語對該文檔的重要性就比較高。這種方法能夠更好地反映詞語的重要性。
3. Predicted Based Embedding
預測型嵌入方法包括Word2Vec、Doc2Vec和GloVe等,這些方法能夠捕捉詞語之間的語義關係,生成更豐富的詞向量表示。
Word2Vec
Word2Vec是一種由Google提出的詞嵌入方法,它使用神經網絡來學習詞語的向量表示。Word2Vec有兩種主要模型架構:CBOW(Continuous Bag of Words)和Skip-Gram。CBOW通過上下文詞預測中心詞,而Skip-Gram則通過中心詞預測上下文詞。這種方法能夠捕捉詞語之間的語義相似性,使語義相近的詞在向量空間中彼此接近。
Doc2Vec
Doc2Vec是Word2Vec的擴展,用於生成文檔級別的向量表示。它在Word2Vec的基礎上引入了文檔標識符,使得模型能夠學習整個文檔的向量表示。這對於需要處理長文本或整個文檔的任務非常有用,例如文檔分類和主題建模。
GloVe
GloVe(Global Vectors for Word Representation)是一種由斯坦福大學提出的詞嵌入方法。它基於詞語共現矩陣,通過矩陣分解來學習詞語的向量表示。GloVe能夠捕捉全局語義信息,使得生成的詞向量在語義上更加豐富和準確。
當前有多種向量資料庫(Vector DB)可用來存儲和檢索向量數據。這些資料庫在處理高維度向量和進行快速最近鄰搜索方面表現出色。
1. Elasticsearch
Elasticsearch是一個強大的分布式搜索和分析引擎,最初用於全文檢索,但也支持向量搜索。它利用了Elasticsearch的插件(如elasticsearch-vector-scoring插件)來實現高效的向量檢索。Elasticsearch的優勢在於其強大的查詢語法、擴展性和與其他Elastic Stack工具的無縫集成。
2. ChromaDB(之後會用這個去擴寫)
ChromaDB是一個專門設計用於處理向量數據的資料庫。它支持高效的向量檢索和相似度搜索,適用於各種應用場景,如推薦系統、圖像和語音檢索等。ChromaDB的設計重點在於高性能和可擴展性,能夠處理大量的向量數據並提供快速的查詢響應。
3. Qdrant
Qdrant是一個開源的向量數據庫,專注於提供高效的向量檢索和相似度搜索。它支持多種相似度度量方法,如歐氏距離、餘弦相似度等,並且可以處理大規模的向量數據。Qdrant的設計考慮了高可用性和擴展性,適合在生產環境中使用。
4. Pinecone
Pinecone是一個商業化的向量數據庫服務,提供即時的向量檢索和相似度搜索。它簡化了向量數據庫的部署和管理,並提供了高性能的查詢服務。Pinecone支持多種向量索引方法,並且能夠輕鬆集成到現有的應用中。它的優勢在於其簡單易用的API和強大的性能。
5. Weaviate
Weaviate是一個開源的向量數據庫,設計用於處理和檢索高維度向量數據。它支持多種數據模型和查詢方法,並且可以與多種機器學習和自然語言處理工具集成。Weaviate的優勢在於其靈活性和可擴展性,使其能夠應對各種不同的應用場景。
6. Milvus
Milvus是一個開源的向量數據庫,專門用於處理高維度向量數據。它支持大規模向量數據的高效檢索和相似度搜索,適用於圖像檢索、推薦系統、自然語言處理等應用。Milvus的設計重點在於高性能和易用性,並且支持多種索引方法,如IVF、HNSW等。
在處理向量數據時,距離計算是非常重要的一環。不同的距離計算方法能夠衡量向量之間的相似度或差異性。以下是三種常見的距離計算方法的介紹:
1. Cosine Similarity(餘弦相似度)
餘弦相似度是一種衡量兩個向量之間角度的相似度方法。它計算的是兩個向量之間的餘弦值,而不是它們之間的歐幾里得距離。餘弦相似度的取值範圍在-1到1之間,1表示兩個向量完全相同,0表示兩個向量正交(即沒有相似性),-1表示兩個向量完全相反。餘弦相似度常用於文本相似度計算、信息檢索和推薦系統等場景,因為它能夠有效地忽略向量的大小,只關注它們的方向。
2. L2 Similarity(歐幾里得距離)(之後會展示這個)
L2距離,也稱為歐幾里得距離,是最常用的距離度量方法之一。它計算的是兩個向量之間的直線距離,反映了這兩個向量在空間中的實際距離。L2距離的取值範圍是非負數,值越小表示兩個向量越相似。L2距離常用於圖像檢索、聚類分析和機器學習中的多種應用,因為它能夠真實反映向量之間的差異。
3. IP Similarity(內積相似度)
內積相似度是通過計算兩個向量的內積來衡量它們的相似度。內積的值越大,表示兩個向量越相似。與餘弦相似度不同,內積相似度不會對向量進行歸一化,因此向量的大小會影響相似度的計算。