Try   HackMD

AI / ML領域相關學習筆記入口頁面

Deeplearning.ai GenAI/LLM系列課程筆記

Large Language Models with Semantic Search。大型語言模型與語意搜索

Finetuning Large Language Models。微調大型語言模型

LangChain for LLM Application Development


Large Language Models with Semantic Search
大型語言模型與語意搜索

課程介紹(Introduction)

授課者:Andrew Ng、Jay Allamar(Hands-On Large Language Models作者)和Luis Serrano

課程的目的是教你如何在你自己的應用中使用大型語言模型(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 →
Large Language Models with Semantic Search/introduction
  • 如何使用基本的關鍵字搜尋(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,學習上還是要更著重在基本的原理(深)跟建立系統性的理解(廣),這些方便的工具就可以成為手上眾多選擇之一

「當你手裡只有錘子,在你看起來,所有東西都像是釘子。」 如果你唯一的工具是把錘子,你很容易把每件事情都當成釘子來處理。


概要

本節介紹關鍵字搜索的基本概念和原理。先連接到Weaviate這個開源數據庫,它包含1000萬條維基百科段落記錄。然后通過實例了解關鍵字搜索的運作 - 查詢時根據文本中的共同關鍵詞計算文檔相關性分數,返回匹配度最高的結果。同時討論了關鍵字搜索的一些局限,如文本中關鍵詞完全不一致时匹配困難。語言模型可以通過理解文本語意來改進搜索引擎。後續課程將學習如何結合語言模型提升搜索的兩個階段 - (retrieval)和(re-ranking)。最后還會介紹大語言模型如何根據搜索結果進行回副生成。

  • 詞彙(lexical)搜索 vs 語意(semantic)搜索

    詞彙(lexical)搜索 語意(semantic)搜索
    定義 依賴關鍵字匹配,返回包含指定關鍵字的結果 利用自然語言處理技術瞭解用戶的搜索意圖,返回與意圖相關的結果
    搜索引擎示例 (Keyword-based search engines)
    (Google, Bing)
    ANS: (Semantic search engines)
    (Google Discover, Microsoft Bing Insights)
    匹配方式 匹配文檔中存在的確切關鍵字 匹配概念層面的意義,即使關鍵字不同也可找到相關內容
    優點 簡單直接,容易實現 可識別不同表達方式的相同意思,結果更貼近用戶意圖
    缺點 關鍵字選擇受限,可能漏掉相關資訊 更複雜,需要自然語言理解技術的支持
    應用情境 用戶搜索需求簡單明確時很適用 用戶搜索意圖可能更抽象、概念性強時更適用

    整理自2023.02。speakai.co。Lexical Search Vs Semantic Search

課程範例程式碼

環境設定與連接資料庫

  • 這段程式碼從環境變數取得 API 金鑰,並使用它們建立連接到 Weaviate 資料庫的 client
  • 課程連結的DEMO資料庫是wikipedia的內容,包含100萬筆的資料、來自10種語言
# !pip install cohere # !pip install weaviate-client import os from dotenv import load_dotenv, find_dotenv # Weaviate 是一個開源的向量資料庫(source vector)database import weaviate # 這段程式碼從環境變數取得 API 金鑰, # 並使用它們建立連接到 Weaviate 資料庫的 client # 從環境變數中取出 Weaviate 的 API key,並建立一個 auth_config 對象 這將用於後面連線時的驗證 auth_config = weaviate.auth.AuthApiKey( api_key=os.environ['WEAVIATE_API_KEY']) # 從 .env 檔案讀取環境變數 _ = load_dotenv(find_dotenv()) # read local .env file auth_config = weaviate.auth.AuthApiKey( api_key=os.environ['WEAVIATE_API_KEY']) # 課程連結的DEMO資料庫是wikipedia的內容 # 包含100萬筆的資料、來自10種語言 client = weaviate.Client( url=os.environ['WEAVIATE_API_URL'], auth_client_secret=auth_config, additional_headers={ "X-Cohere-Api-Key": os.environ['COHERE_API_KEY'], } ) # 完成資料庫連線 client.is_ready() # True
  • 使用出現的共同字數當作指標來進行排序

    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 →

  • def keyword_search

    • 對Weaviate資料庫執行具有篩選和分頁的關鍵字搜索,並返回指定屬性字段的結果。展示了如何利用Weaviate API進行關鍵字查詢
    • properties中的views代表文章的瀏覽數,是這個維基百科數據集裡的一個自定義屬性
      • 當在properties中指定"views"時,查詢返回的結果會包含一個views字段,顯示該篇維基百科文章被瀏覽的次數。
      • 這可以用來按文章瀏覽量進行排序和篩選。例如可以查詢瀏覽量最高的文章,或者只查詢瀏覽量超過某個閾值的文章
    BM25演算法補充

    BM25是一種常用的關鍵字搜索演算法,主要步驟如下:
    * 對每個文檔計算詞頻(TF),即詞語在文檔中出現的頻率
    * 對每個詞計算文檔頻率(DF),即包含該詞的文檔數量
    * 根據TF和DF計算每個詞的權重,公式如下:

    weight=TF×(k1+1)TF+k1×(1b+b×DLAVDL)×logNDF

    其中:
    *

    k1
    b
    為經驗參數,通常取k1=1.2,b=0.75
    *
    DL
    為文檔長度,
    AVDL
    為所有文檔平均長度
    *
    N
    為文檔總數
    * 將詞的權重相加得到文檔與查詢的相關分數
    * 按分數對結果排序後返回

def keyword_search(query, results_lang='en', # 支援繁體中文在內的多種語言 properties = ["title","url","text", "views", num_results=3): # 加入篩選條件 where_filter = { "path": ["lang"], "operator": "Equal", "valueString": results_lang } response = ( client.query.get("Articles", properties) # 使用BM25演算法進行關鍵字搜索 .with_bm25( query=query ) .with_where(where_filter) .with_limit(num_results) .do() ) result = response['data']['Get']['Articles'] return result def print_result(result): """ Print results with colorful formatting """ for i,item in enumerate(result): print(f'item {i}') for key in item.keys(): print(f"{key}:{item.get(key)}") print() print()
  • 查詢
    • 輸入query
    ​​​​query = "What is the most viewed televised event?" ​​​​keyword_search_results = keyword_search(query) ​​​​print_result(keyword_search_results)
    • 雖然文章中出現很多共同關鍵字,但排序第一的文章其實跟問題不太相關,排序第二的文章"Super Bowl XXXVIII halftime show controversy"才是比較接近使用者想要的答案
    ​​​​item 0 ​​​​text:"The most active Gamergate supporters or "Gamergaters"..." ​​​​title:Gamergate (harassment campaign) ​​​​url:https://zh.wikipedia.org/wiki?curid=1147446 ​​​​ ​​​​item 1 ​​​​text:"Rolling Stone" stated Jackson's Super Bowl performance "is far and away the most famous moment in the history of the Super Bowl halftime show". ​​​​ ​​​​title:Super Bowl XXXVIII halftime show controversy ​​​​url:https://en.wikipedia.org/wiki?curid=498971

關鍵字搜尋的內部運作機制 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
  1. 建立倒排索引(Inverted Index)
    • 將文檔中所有詞語提取出來
    • 為每個詞建立一個條目,記錄包含該詞的文檔ID
    • 還記錄詞語在每個文檔中的詞頻TF
  2. 查詢時
    • 對查詢進行詞切分,獲取查詢詞項
    • 在倒排索引中查找每個詞項,獲取相關文檔列表
    • 根據文檔中詞頻TF計算詞項權重
    • 計算文檔與查詢的相關分數,例如使用BM25算法
    • 按分數排序後返回最相關的文檔
  3. 優化
    • 壓縮索引結構減少空間
    • 利用缓存加速查找速度
    • 分片和分散存儲提高擴展性
  4. 效果提升
    • 降低詞項維度,通過疊字、拼寫校正等提高匹配
    • 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
  • 需要查詢和文檔使用足夠相近的詞彙表達,才能被匹配上
  • 同義詞問題 - 不同詞語表達相同意思时匹配困難
  • 多詞詞組問題 - 固定詞組被切分后匹配度降低
  • 語意理解缺乏 - 無法判斷詞語間的語意關係
  • 查詢擴展不足 - 無法自動补充相關詞彙進行擴展
  • 匹配結果依賴詞頻統計 - 對生僻詞條目匹配弱
  • 詞性、句法結構無法被利用
  • 外部知識無法引入提升
    綜上,關鍵詞匹配存在上述缺陷,無法深入理解語意,也難以匹配語意上相關而詞彙表達不同的文本。需要引入外部知識和語意理解來改進。

語言模型可同時改善兩個搜索階段

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 →
Language Models Can Improve both Search Stages

語言模型可以改進搜索引擎的兩個階段:

  1. Retrieval階段:
    • 使用內嵌向量(embedding)表示詞彙語意(word semantics)
    • 通過向量相似度匹配查詢與文檔
    • 改進基於關鍵詞匹配的檢索算法
  2. 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 LLM University

Cohere技術文件內的學習資源