自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何借助假設文檔嵌入改進語義搜索?

譯文
人工智能
找到合適的AI模型來構建工作流程很困難。由于不同平臺上有眾多的模型可用,因此不可能知道從哪里入手,或者如何找到最適合您特定需求的模型。

想了解更多AIGC的內容,請訪問:

51CTO AI.x社區(qū)

http://www.scjtxx.cn/aigc/

本文介紹了如何使用簡單的大語言模型(LLM)調用來顯著改善語義搜索結果的質量。

找到合適的AI模型來構建工作流程很困難。由于不同平臺上有眾多的模型可用,因此不可能知道從哪里入手,或者如何找到最適合您特定需求的模型。這就是我打算用AIModels.fyi解決的問題,這是唯一用來發(fā)現(xiàn)和比較網上AI模型的搜索引擎。

該網站有一個簡單的前提:用自然語言描述問題,然后詳細列出可能會解決問題的AI模型。比如說,您可以搜索“我需要一個模型,可以在不失去清晰度的情況下幫助提升圖像質量”或“讓我的貓看起來像是在唱歌”。目的是讓任何人(不僅僅是機器學習工程師)都能為其項目輕松找到有用的AI工具。

在底層,搜索的工作原理是獲取用戶的查詢后,將其與來自Hugging Face、Replicate、Cerebrium和DeepInfra等主要平臺的7500多個創(chuàng)建者的逾24萬個AI模型組成的數(shù)據(jù)庫進行比較。用戶輸入搜索后,使用OpenAI的text-embedding-ada-002模型將查詢嵌入到向量中。然后將該查詢向量與數(shù)據(jù)庫中模型名稱、描述和用例的預計算向量表示進行比較。余弦距離最相似的模型作為搜索結果返回。

以下是我使用了六個月的核心搜索邏輯的簡化版本:

const fetchData = async (query) => {
  // Embed the search query
  const embeddingResponse = await openAi.createEmbedding({
    model: "text-embedding-ada-002",
    input: query,
  });
  
  const embedding = embeddingResponse.data.data[0].embedding;

  // Find the most similar models in the vector database 
  const { data: modelsData, error } = await supabase.rpc("search_models", {
    query_embedding: embedding,
    similarity_threshold: 0.75,
    match_count: 10,
  });

  return modelsData;
};

當查詢術語和模型描述之間存在直接重疊時,這種向量搜索方法可以很好地顯示相關模型。但是面對更抽象、更復雜或更小眾的查詢時,由于用戶的語言與數(shù)據(jù)庫中的技術術語并不完全匹配,它的實現(xiàn)效果就勉為其難。

比如說,我最近想找到一種模型,可以使用音頻片段來創(chuàng)建具有動畫效果的肖像圖像。我知道有幾個很好的模型,但我搜索“由圖像和音頻創(chuàng)建會說話的肖像”并沒有返回預期的結果。問題在于,我的查詢術語與模型描述中使用的特定詞沒有足夠的文字匹配,即使語義意圖是相似的。

這讓我開始思考如何改善搜索體驗,以更好地處理這種抽象或復雜的查詢。我怎樣才能讓系統(tǒng)更智能地理解用戶的真實意圖,并將其映射到數(shù)據(jù)庫中的相關模型?我無意中看到了這篇研究論文(https://arxiv.org/abs/2212.10496),因此有機會了解了假設文檔嵌入(HyDE)想法。

HyDE——查詢擴展器!

HyDE背后的關鍵理論是,在嵌入搜索之前,使用大語言模型(LLM)將用戶的簡短查詢擴展為更詳細的假設“理想”文檔。因此,它不是直接將查詢嵌入與數(shù)據(jù)庫嵌入相匹配,而是先將查詢轉換為與實際文檔在相同語義空間中更豐富的表示。

整個過程是這樣的:

  • 用戶輸入表達需求的自然語言查詢,比如“我想把一個圖像轉換成3D模型。”
  • 然后使用像OpenAI的text-embedding-ada-002這樣的模型,將生成的這個偽文檔嵌入到密集向量中。
  • 因此獲得的嵌入用于查詢向量數(shù)據(jù)庫,并找到最相似的實際模型文檔。

該查詢被饋入到指令調優(yōu)的LLM(比如GPT-3)中,以生成假設文檔。提示要求模型想象一個回答查詢的理想文檔。舉例說:

查詢:我要將圖像轉換為3D模型。

假設文檔:市面上有幾種AI模型可以將2D圖像轉換為3D模型。這個過程名為單視圖重建或3D估計。它通常需要使用深度學習由2D輸入圖像預測深度圖和3D形狀。處理這項任務的一些流行模型包括Pix2Vox、Pixel2Mesh、AtlasNet和OccNet。這些模型是使用龐大的3D對象數(shù)據(jù)集加以訓練的,可以處理復雜形狀。要使用它們,您就要提供輸入圖像,模型會輸出一個3D網格或三維像素表示,您可以在3D建模工具中渲染或進一步編輯。

LLM步驟有助于彌合用戶的簡單查詢和模型描述中使用的技術性更強的語言之間的差距。它在初始查詢的基礎上進行擴展,以推斷有助于檢索更好匹配的其他相關術語、概念和上下文。與此同時,使用真實的文檔嵌入作為最終的搜索索引可以使搜索結果更可靠,防止幻覺問題。

我在現(xiàn)有的AIModels搜索上實施了HyDE的基礎版本,初步結果令人滿意。在我測試的一些示例查詢中,HyDE顯示的相關模型比原始關鍵字匹配方法多兩三倍。對于會說話的頭像查詢,它能夠生成一個假設文檔,含有“對口型”、“臉部動畫”和“音頻驅動動畫”等關鍵術語,這有助于檢索普通搜索忽略的一些強匹配模型。

如何在您自己的搜索系統(tǒng)中實現(xiàn)HyDE?

不妨展示如何將HyDE添加到現(xiàn)有的語義搜索系統(tǒng)上,從而顯著提高質量。

不妨從基于我當前搜索流的簡化代碼草圖入手。以下是完整的文件,在我們查看各部分之前,您可以瀏覽一下整體:

const fetchData = async (query) => {
  // Generate a hypothetical document embedding for the query 
  const hypotheticalDocument = await generateHypotheticalDocument(query);
  
  const embeddingResponse = await openAi.createEmbedding({
    model: "text-embedding-ada-002",
    input: hypotheticalDocument,
  });
  
  const embedding = embeddingResponse.data.data[0].embedding;

  // Search the real model embeddings using the hypothetical document embedding
  const { data: modelsData, error } = await supabase.rpc("search_models", {
    query_embedding: embedding,
    similarity_threshold: 0.75,
    match_count: 10,
  });

  return modelsData;
};

const generateHypotheticalDocument = async (query) => {
  // Use GPT-3 to expand the query into a hypothetical ideal document
  const prompt = `The user entered the following search query: 
  "${query}"
  
  Please generate a detailed hypothetical document that would be highly relevant to answering this query. The document should use more technical language and expand on the key aspects of the query.

  Hypothetical Document:`;

  const response = await openAi.createCompletion({
    model: "text-davinci-002",
    prompt: prompt,
    max_tokens: 200,
    n: 1,
    stop: null,
    temperature: 0.5,
  });

  const hypotheticalDocument = response.data.choices[0].text.trim();
  return hypotheticalDocument;
}

看看它是如何工作的。我們將從fetchData函數(shù)開始,這是搜索過程的主要入口點。首先:

const hypotheticalDocument = await generateHypotheticalDocument(query);

這一行調用generateHypotheticalDocument函數(shù)(稍后會有詳細解釋),基于用戶的搜索查詢生成一個假設的理想文檔。

假設文檔是HyDE方法的關鍵部分,因為它旨在以比原始查詢更詳細和更技術的方式捕獲用戶的搜索意圖。

const embeddingResponse = await openAi.createEmbedding({
  model: "text-embedding-ada-002",
  input: hypotheticalDocument,
});
const embedding = embeddingResponse.data.data[0].embedding;

這幾行使用OpenAI的text-embedding-ada-002模型為假設文檔生成嵌入向量。我認為這是目前為止最好的嵌入選項。

嵌入是一種將文本表示為密集數(shù)字向量的方法,其中相似的文本有相似的向量。這便于我們執(zhí)行語義相似度搜索。

通過嵌入假設文檔而不是原始查詢,我們旨在獲得更好地捕獲擴展搜索意圖的向量表示。接下來:

const { data: modelsData, error } = await supabase.rpc("search_models", {
  query_embedding: embedding,
  similarity_threshold: 0.75,
  match_count: 10,
});

這部分在模型數(shù)據(jù)庫中執(zhí)行實際的相似度搜索。它對Supabase數(shù)據(jù)庫調用遠程過程(search_models),將假設文檔的嵌入作為query_embedding傳入。

similarity_threshold和match_count這兩個參數(shù)控制結果需要匹配的程度和返回的數(shù)量。

搜索基于余弦相似度尋找與查詢嵌入最相似的模型嵌入。

現(xiàn)在不妨看看generateHypotheticalDocument函數(shù):

const prompt = `The user entered the following search query: 
"${query}"

Please generate a detailed hypothetical document that would be highly relevant to answering this query. The document should use more technical language and expand on the key aspects of the query.

Hypothetical Document:`;

這部分構建將發(fā)送給語言模型以生成假設文檔的提示。

提示包括用戶的原始查詢和指令,以便模型生成詳細的技術文檔,從而擴展查詢的關鍵方面。構建有效的提示對于指導語言模型生成實用的假設文檔至關重要。

現(xiàn)在是下一個部分:

const response = await openAi.createCompletion({
  model: "text-davinci-002",
  prompt: prompt,
  max_tokens: 200,
  n: 1,
  stop: null,
  temperature: 0.5,
});

這幾行使用OpenAI的text-davinci-002模型基于提示生成假設的文檔。

max_tokens參數(shù)限制所生成文檔的長度,而temperature控制隨機性(較高的值使輸出更多樣化,但可能不那么集中)。調整這些參數(shù)有助于調整所生成文檔的質量和多樣性。

接下來,我們有:

const hypotheticalDocument = response.data.choices[0].text.trim();

這一行從GPT-3 API響應中提取所生成的假設文檔文本。然后返回所生成的文本,以便用在嵌入步驟中。

回顧:我們剛剛構建了什么?

我希望代碼和我的解釋能夠演示如何在現(xiàn)有的語義搜索系統(tǒng)上實現(xiàn)HyDE方法。其實沒那么難!關鍵思想是這個:我們旨在通過將假設文檔生成和嵌入步驟插入到搜索管道中,借助更好地捕獲用戶的意圖來改進搜索結果。

總結一下,幾個關鍵部分是:

  • 使用語言模型將用戶的查詢擴展為更詳細的技術性假設文檔。
  • 嵌入假設文檔,以獲得與模型數(shù)據(jù)庫一致的向量表示。
  • 在假設文檔嵌入和模型嵌入之間執(zhí)行相似度搜索,以找到最相關的結果。

當然,這只是一種簡化的實現(xiàn),真正的實現(xiàn)中還有許多細節(jié)和優(yōu)化需要考慮。但它闡明了HyDE方法的核心流程和組成部分。

結束語

因為這只是一個初始原型,還有很多試驗和改進的余地。我在思考一些關鍵的開放性問題:

  • 生成有用的假設文檔的最佳提示結構和輸出長度是什么?我想嘗試不同的提示模板和輸出大小,看看它們如何影響結果質量。
  • 如何使假設文檔對用戶更易于解釋、更透明?如果用戶不明白為什么添加某些術語,可能會備感困惑。我正考慮將所生成文本的一部分顯示為“查詢解釋”,以便更深入地揭示該過程。
  • 結果質量在多大程度上依賴所使用的特定LLM和嵌入模型?我很想對不同的模型組合進行基準測試(比如GPT-4 vs GPT-3和Contriever vs OpenAI嵌入等),以找到最佳配方。
  • 如何有效地擴展這種方法,以便處理數(shù)百萬個數(shù)據(jù)庫條目?在像GPT-3這樣的大型LLM上進行推理昂貴又緩慢。我需要研究緩存、優(yōu)化或提煉模型,以便這種方法在大規(guī)模環(huán)境中切實可行。

我對語言模型的潛力感到興奮,可以幫助像AIModels這樣的搜索界面對更廣泛的受眾而言更直觀、更強大。彌合用戶如何自然表達需求和如何技術上描述AI模型之間的語義差距,是解決這個難題的一個重要環(huán)節(jié)。HyDE之類的技術為深刻理解用戶意圖,并滿足用戶需求的搜索體驗指明了一條道路。

我的長期目標是不斷完善這個界面,直到任何人都可以輕松地找到符合他們需求的相關AI模型,無論他們的技術專業(yè)水平如何。無論您是想“把您的頭像變成Studio Ghibli插圖”、“由圖像生成3D模型”、“為虛擬助手創(chuàng)建文本到語音功能”,還是“找到最好的標志設計AI”,我都希望AIModels是個不錯的起點。

隨著我繼續(xù)試驗HyDE及其他方法,會分享更多細節(jié)。如果您想進一步了解技術方面,建議您查看原始論文。

原文標題:How to improve your semantic search with hypothetical document embeddings,作者:Mike Young

鏈接:https://notes.aimodels.fyi/improving-ai-model-search-with-hypothetical-document-embeddings/。

想了解更多AIGC的內容,請訪問:

51CTO AI.x社區(qū)

http://www.scjtxx.cn/aigc/

責任編輯:姜華 來源: 51CTO內容精選
相關推薦

2025-02-10 08:19:09

2009-09-22 12:52:37

ibmdwWiki

2011-06-15 16:45:03

UIKitCocoa TouchiOS

2024-09-29 00:00:02

2019-03-13 22:40:15

機器學習假設算法

2024-09-14 15:19:11

2022-03-11 15:44:11

嵌入式開發(fā)技巧技術

2023-06-28 08:23:41

搜索語義模型

2012-09-04 15:32:47

搜狗文檔

2025-02-21 08:00:00

2011-06-01 14:50:55

iOS谷歌

2018-07-03 15:46:35

數(shù)據(jù)集訓練模型

2016-12-07 09:26:27

GlusterFS存儲池

2018-12-14 09:00:00

MoleculeAnsible角色軟件測試

2014-02-17 10:48:57

NagiosBGP會話

2013-12-23 10:36:57

Nagios監(jiān)控監(jiān)測

2024-11-27 08:14:43

2013-07-26 17:07:33

Foglight容量

2025-01-06 09:03:41

2022-04-29 08:20:59

微軟Windows 11
點贊
收藏

51CTO技術棧公眾號