Large Language Models with Semantic Search 大型語言模型與語意搜索 授課者:Andrew Ng、Jay Allamar( Hands-On Large Language Models 作者)和Luis Serrano
課程的目的是教你如何在你自己的應用中使用大型語言模型(LLMs)來進行資訊檢索
如何使用基本的關鍵字搜尋(lexical search),這是在LLMs之前常用的搜尋方法,它根據查詢和文件之間的詞匹配程度來找到最相關的文件。
如何使用一種叫做重排(re-rank)的方法來改善關鍵字搜尋,這是一種利用LLMs來對檢索結果進行相關性排序的方法。
如何使用一種更先進的搜尋方法,叫做 密集檢索(dense retrieval) ,這是一種利用文本的語意意義(semantic meaning)來進行搜尋的方法,它使用了自然語言處理中的一種強大工具,叫做嵌入(embeddings),它可以將每一段文本轉換成一個數字向量。語意搜尋(semantic search)就是在嵌入空間中找到與查詢最接近的文件。
如何對搜尋演算法進行有效的評估,以及如何使用LLMs來生成答案,這是一種先檢索再回答(retrieve and generate)的方法,它可以利用密集檢索得到的相關文件來創造出答案。
本課程由Cohere和DeepLearning.ai共同製作
課程大綱
Keyword vs. Semantic Search
Ranking Responses
Embeddings
Dense Retrieval
Evaluation Methods
Search-Powered LLMs
課後感想 這門課的的操作大部分使用cohere的API進行,很多細節被包在裡面,當然有些手刻的部分,例如文本切割還可以結合Langchain使用。以ML Engineer來說內容過於淺顯不過可以建立好的入門觀念、但以data scientist來說則多了一項更輕巧好使的匕首
以前在cv領域訓練模型、生成Embeddings表示、計算向量距離等還是一定程度手刻(至少用到numpy、pytorch啦),內部有很多細節設定需要考量,相對也會需要對演算法跟目的有更深層的理解,現在這些流程已經高度模組化,相信對於商業應用來說可以更便利、更快建立DEMO,現在不知道這些套件能客製到什麼程度、是否也會如keras般不好debug,學習上還是要更著重在基本的原理(深)跟建立系統性的理解(廣),這些方便的工具就可以成為手上眾多選擇之一
「當你手裡只有錘子,在你看起來,所有東西都像是釘子。」 如果你唯一的工具是把錘子,你很容易把每件事情都當成釘子來處理。
關鍵字/詞彙搜尋(Keyword/lexical Search) 概要 本節介紹關鍵字搜索的基本概念和原理。先連接到Weaviate這個開源數據庫,它包含1000萬條維基百科段落記錄。然后通過實例了解關鍵字搜索的運作 - 查詢時根據文本中的共同關鍵詞計算文檔相關性分數,返回匹配度最高的結果。同時討論了關鍵字搜索的一些局限,如文本中關鍵詞完全不一致时匹配困難。語言模型可以通過理解文本語意來改進搜索引擎。後續課程將學習如何結合語言模型提升搜索的兩個階段 - (retrieval)和(re-ranking)。最后還會介紹大語言模型如何根據搜索結果進行回副生成。
課程範例程式碼 環境設定與連接資料庫
這段程式碼從環境變數取得 API 金鑰,並使用它們建立連接到 Weaviate 資料庫的 client
課程連結的DEMO資料庫是wikipedia的內容,包含100萬筆的資料、來自10種語言
實作關鍵字搜尋 Keyword Search
查詢
雖然文章中出現很多共同關鍵字,但排序第一的文章其實跟問題不太相關,排序第二的文章"Super Bowl XXXVIII halftime show controversy"才是比較接近使用者想要的答案
關鍵字搜尋的內部運作機制 Keyword Search Internals 關於Keyword Search Internals部分的演算法和執行流程,可以歸納如下:
Image Not Showing
Possible Reasons
The image was uploaded to a note which you don't have access to The note which the image was originally uploaded to has been deleted
Learn More →
Keyword Search Internals
建立倒排索引(Inverted Index)
將文檔中所有詞語提取出來
為每個詞建立一個條目,記錄包含該詞的文檔ID
還記錄詞語在每個文檔中的詞頻TF
查詢時
對查詢進行詞切分,獲取查詢詞項
在倒排索引中查找每個詞項,獲取相關文檔列表
根據文檔中詞頻TF計算詞項權重
計算文檔與查詢的相關分數,例如使用BM25算法
按分數排序後返回最相關的文檔
優化
壓縮索引結構減少空間
利用缓存加速查找速度
分片和分散存儲提高擴展性
效果提升
降低詞項維度,通過疊字、拼寫校正等提高匹配
Query Expansion增加相關詞彙提高召回率
聯合多個匹配模型組合效果
這樣通過建立倒排索引,並利用詞頻統計信息,可以實現快速的大規模關鍵詞搜索。同時還可以通過各種優化手段進一步提升效果。
關鍵字匹配的局限性 Limitation of keyword matching
Image Not Showing
Possible Reasons
The image was uploaded to a note which you don't have access to The note which the image was originally uploaded to has been deleted
Learn More →
Limitation of keyword matching
需要查詢和文檔使用足夠相近的詞彙表達,才能被匹配上
同義詞問題 - 不同詞語表達相同意思时匹配困難
多詞詞組問題 - 固定詞組被切分后匹配度降低
語意理解缺乏 - 無法判斷詞語間的語意關係
查詢擴展不足 - 無法自動补充相關詞彙進行擴展
匹配結果依賴詞頻統計 - 對生僻詞條目匹配弱
詞性、句法結構無法被利用
外部知識無法引入提升
綜上,關鍵詞匹配存在上述缺陷,無法深入理解語意,也難以匹配語意上相關而詞彙表達不同的文本。需要引入外部知識和語意理解來改進。
語言模型可同時改善兩個搜索階段 語言模型可以改進搜索引擎的兩個階段:
Retrieval階段:
使用內嵌向量(embedding)表示詞彙語意(word semantics)
通過向量相似度匹配查詢與文檔
改進基於關鍵詞匹配的檢索算法
Re-ranking階段:
對檢索結果進行重新排名
基於語意理解(semantic understanding)改進相關性判定
結合更多信號如品質、流行度等進行排序
Ranking Responses
Image Not Showing
Possible Reasons
The image was uploaded to a note which you don't have access to The note which the image was originally uploaded to has been deleted
Learn More →
Ranking Responses
Dense Retrieval
Image Not Showing
Possible Reasons
The image was uploaded to a note which you don't have access to The note which the image was originally uploaded to has been deleted
Learn More →
Dense Retrieval
Evaluation Methods
Image Not Showing
Possible Reasons
The image was uploaded to a note which you don't have access to The note which the image was originally uploaded to has been deleted
Learn More →
Evaluation metric
Search-Powered LLMs
Image Not Showing
Possible Reasons
The image was uploaded to a note which you don't have access to The note which the image was originally uploaded to has been deleted
Learn More →
Search-Powered LLMs
學習資源 Cohere技術文件內的學習資源