iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
DevOps

將 AI Code Review 整進 CICD系列 第 26

HyDE 提高相似性

  • 分享至 

  • xImage
  •  

在 RAG 上,使用者問的問題會被轉成向量資料,跟資料庫向量資料做比對找相似性。但使用者問題有時並不能很明確的對照到向量資料。所以我們會在中間做一層加工,在 HyDE 中,會使用指令跟隨語言模型(InstructLM),它會根據給定的查詢和指令生成"假設性"文檔。藉由中間多一層 LLM 來捕捉查詢的語義和意圖。

論文查看:https://arxiv.org/abs/2212.10496

https://ithelp.ithome.com.tw/upload/images/20240911/20118525qZG8Z4X0Lb.png

ref: https://arxiv.org/pdf/2212.10496

從架構圖來看,我們可以發現最左邊我們採用InstructLM,對用戶的問題延伸了不同的問法,然後用生成出來的文件向 向量資料進行比對,最終的查詢向量會採取這些假設文檔向量的平均值。

HyDE 方法的核心實現有以下步驟

  1. 生成假設文檔
generate_hypothetical_document = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "你是一個專門研究台北大稻埕歷史的專家。"},
            {"role": "user", "content": f"請簡短回答這個關於大稻埕的問題:{query}"}
        ]
    )
  1. 將查詢和假設文檔編碼為向量,這邊使用 sentence transformer 來將文本轉換為向量表示
model = SentenceTransformer('distiluse-base-multilingual-cased-v1')

query_embedding = model.encode([query, hypothetical_doc])
query_vector = np.mean(query_embedding, axis=0)
  1. 將所有文檔編碼為向量
# 編碼文檔
doc_embeddings = model.encode(documents)
  1. 計算相似度
similarities = cosine_similarity([query_vector], doc_embeddings)[0]

上一篇
根據用戶選擇的風格和語言來選擇故事風格
下一篇
CoT 提升評估效率
系列文
將 AI Code Review 整進 CICD28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言