首頁 > 科技週邊 > 人工智慧 > 增強抹布:超越香草的方法

增強抹布:超越香草的方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2025-02-25 16:38:09
原創
629 人瀏覽過

Enhancing RAG: Beyond Vanilla Approaches

通過集成外部信息檢索,

>檢索效果生成(RAG)可以顯著增強語言模型。 標準抹佈在提高響應相關性的同時,通常會在復雜的檢索情況下步履蹣跚。本文研究了基本抹布的缺點,並提出了提高準確性和效率的高級方法。

基本抹布的限制

考慮一個簡單的方案:從幾個文檔中檢索相關信息。 我們的數據集包括:

    >詳細介紹健康,富有生產力的生活方式實踐的主要文件。
  • >兩個不相關的文檔,其中包含一些重疊的關鍵字,但在不同的上下文中。
  • >
  • 當查詢以下內容時,基本的抹布系統:
>
<code>main_document_text = """
Morning Routine (5:30 AM - 9:00 AM)
✅ Wake Up Early - Aim for 6-8 hours of sleep to feel well-rested.
✅ Hydrate First - Drink a glass of water to rehydrate your body.
✅ Morning Stretch or Light Exercise - Do 5-10 minutes of stretching or a short workout to activate your body.
✅ Mindfulness or Meditation - Spend 5-10 minutes practicing mindfulness or deep breathing.
✅ Healthy Breakfast - Eat a balanced meal with protein, healthy fats, and fiber.
✅ Plan Your Day - Set goals, review your schedule, and prioritize tasks.
...
"""</code>
登入後複製
登入後複製

>

我如何提高自己的健康和生產力?
  1. >健康和富有成效的生活方式的最佳策略是什麼? 可能由於在無關的文檔中存在類似單詞而難以持續檢索主要文檔。
  2. >
  3. 助手功能:簡化抹布管道
  4. >
提高檢索準確性並簡化查詢處理,我們引入了輔助功能。這些功能處理任務,例如查詢chatgpt API,計算文檔嵌入以及確定相似性分數。這會產生更有效的抹布管道。

>

這是助手函數:

評估基本抹布
<code># **Imports**
import os
import json
import openai
import numpy as np
from scipy.spatial.distance import cosine
from google.colab import userdata

# Set up OpenAI API key
os.environ["OPENAI_API_KEY"] = userdata.get('AiTeam')</code>
登入後複製
登入後複製
<code>def query_chatgpt(prompt, model="gpt-4o", response_format=openai.NOT_GIVEN):
    try:
        response = client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.0 , # Adjust for more or less creativity
            response_format=response_format
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"Error: {e}"</code>
登入後複製
登入後複製
<code>def get_embedding(text, model="text-embedding-3-large"): #"text-embedding-ada-002"
    """Fetches the embedding for a given text using OpenAI's API."""
    response = client.embeddings.create(
        input=[text],
        model=model
    )
    return response.data[0].embedding</code>
登入後複製
我們使用預定義的查詢測試基本抹布,以評估其基於語義相似性檢索最相關文檔的能力。 這突出了它的局限性。
<code>def compute_similarity_metrics(embed1, embed2):
    """Computes different similarity/distance metrics between two embeddings."""
    cosine_sim = 1- cosine(embed1, embed2)  # Cosine similarity

    return cosine_sim</code>
登入後複製
<code>def fetch_similar_docs(query, docs, threshold = .55, top=1):
  query_em = get_embedding(query)
  data = []
  for d in docs:
    # Compute and print similarity metrics
    similarity_results = compute_similarity_metrics(d["embedding"], query_em)
    if(similarity_results >= threshold):
      data.append({"id":d["id"], "ref_doc":d.get("ref_doc", ""), "score":similarity_results})

  # Sorting by value (second element in each tuple)
  sorted_data = sorted(data, key=lambda x: x["score"], reverse=True)  # Ascending order
  sorted_data = sorted_data[:min(top, len(sorted_data))]
  return sorted_data</code>
登入後複製
用於增強rag的高級技術

為了改善檢索過程,我們介紹了生成結構化信息以增強文檔檢索和查詢處理的功能。

>

實現了三個關鍵增強:

<code>"""# **Testing Vanilla RAG**"""

query = "what should I do to stay healthy and productive?"
r = fetch_similar_docs(query, docs)
print("query = ", query)
print("documents = ", r)

query = "what are the best practices to stay healthy and productive ?"
r = fetch_similar_docs(query, docs)
print("query = ", query)
print("documents = ", r)</code>
登入後複製

1。生成常見問題解答

>從文檔創建常見問題解答會擴展查詢匹配的可能性。 這些常見問題解答是一次生成並存儲的,可以豐富搜索空間而無需重複成本。

>

2。創建概述

簡明的摘要捕獲了該文件的核心思想,從而提高了檢索效率。概述的嵌入被添加到文檔集合中。

<code>def generate_faq(text):
  prompt = f'''
  given the following text: """{text}"""
  Ask relevant simple atomic questions ONLY (don't answer them) to cover all subjects covered by the text. Return the result as a json list example [q1, q2, q3...]
  '''
  return query_chatgpt(prompt, response_format={ "type": "json_object" })</code>
登入後複製
3。查詢分解

廣泛的查詢被分解為較小,更精確的子查詢。 將這些子查詢與增強的文檔集合(原始文檔,常見問題解答和概述)進行了比較。 結果合併以提高相關性。

>
<code>main_document_text = """
Morning Routine (5:30 AM - 9:00 AM)
✅ Wake Up Early - Aim for 6-8 hours of sleep to feel well-rested.
✅ Hydrate First - Drink a glass of water to rehydrate your body.
✅ Morning Stretch or Light Exercise - Do 5-10 minutes of stretching or a short workout to activate your body.
✅ Mindfulness or Meditation - Spend 5-10 minutes practicing mindfulness or deep breathing.
✅ Healthy Breakfast - Eat a balanced meal with protein, healthy fats, and fiber.
✅ Plan Your Day - Set goals, review your schedule, and prioritize tasks.
...
"""</code>
登入後複製
登入後複製

評估增強的抹布

通過這些增強功能重新運行初始查詢,顯示出顯著改善。查詢分解產生多個子征服,從而成功地從常見問題解答和原始文檔中取回。

>示例常見問題解答輸出:
<code># **Imports**
import os
import json
import openai
import numpy as np
from scipy.spatial.distance import cosine
from google.colab import userdata

# Set up OpenAI API key
os.environ["OPENAI_API_KEY"] = userdata.get('AiTeam')</code>
登入後複製
登入後複製

<code>def query_chatgpt(prompt, model="gpt-4o", response_format=openai.NOT_GIVEN):
    try:
        response = client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.0 , # Adjust for more or less creativity
            response_format=response_format
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"Error: {e}"</code>
登入後複製
登入後複製
成本效益分析

在預處理(生成常見問題解答,概述和嵌入)的同時,增加了前期成本,這是每個文檔的一次性費用。 這抵消了優化不良的抹布系統的效率低下:使用戶感到沮喪,並從檢索無關的信息中提高了查詢成本。 對於大批量系統,預處理是一項值得投資的。 >

結論

>將文檔預處理(常見問題解答和概述)與查詢分解結合起來會產生更智能的抹布系統,以平衡準確性和成本效益。 這提高了檢索質量,降低了無關緊要的結果並改善了用戶體驗。 未來的研究可以探索進一步的優化,例如動態閾值和加強輔助學習以進行查詢。

以上是增強抹布:超越香草的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板