將嵌入映射到 Elasticsearch 字段類型:semantic_text、dense_vector、sparse_vector

作者:?Andre Luiz

討論如何以及何時使用 semantic_textdense_vectorsparse_vector,以及它們與嵌入生成的關系。

通過這個自定進度的 Search AI 實踐學習親自體驗向量搜索。你可以開始免費云試用,或者在本地機器上嘗試 Elastic。


多年來,使用嵌入來提升信息檢索的相關性和準確性已經顯著增長。像 Elasticsearch 這樣的工具已經發展出支持這種類型數據的專用字段類型,比如密集向量、稀疏向量和語義文本。然而,為了獲得良好的效果,關鍵在于理解如何正確地將嵌入映射到 Elasticsearch 可用的字段類型:semantic_textdense_vectorsparse_vector

本文將討論這些字段類型、各自的適用時機,以及它們在索引和查詢過程中與嵌入生成和使用策略之間的關系。

密集向量類型

在 Elasticsearch 中,dense_vector 字段類型用于存儲密集向量,這些向量是文本的數值表示,其中幾乎所有維度都是相關的。這些向量由語言模型生成,如 OpenAI、Cohere 和 Hugging Face,旨在捕捉文本的整體語義含義,即使它與其他文檔沒有共享相同的詞語。

在 Elasticsearch 中,密集向量的維度上限為 4096,具體取決于所使用的模型。例如,all-MiniLM-L6-v2 模型生成 384 維向量,而 OpenAI 的 text-embedding-ada-002 生成 1536 維向量。

當需要更大的控制權時,例如使用預生成的向量、應用自定義相似度函數或與外部模型集成,dense_vector 字段通常被作為存儲這類嵌入的默認類型。

何時以及為何使用 dense_vector 類型?

密集向量非常適合用于捕捉句子、段落或完整文檔之間的語義相似性。當目標是比較文本的整體含義,即使它們不共享相同詞語時,它們也表現得非常好。

當你已經有一個外部嵌入生成流程,使用如 OpenAI、Cohere 或 Hugging Face 等模型,并且只想手動存儲和查詢這些向量時,dense_vector 字段是理想選擇。這種字段類型高度兼容嵌入模型,并在生成和查詢上提供完全的靈活性,讓你可以控制向量的生成、索引以及搜索中的使用方式。

此外,它支持多種語義搜索形式,如 KNNscript_score 查詢,適用于需要調整排序邏輯的場景。這些能力使 dense_vector 成為 RAG(檢索增強生成)、推薦系統以及基于相似度的個性化搜索等應用的理想選擇。

最后,該字段允許你自定義相關性邏輯,可使用如 cosineSimilaritydotProductl2norm 等函數,根據你使用場景的需求來調整排序。

對于那些需要靈活性、自定義能力和與高級用例兼容性的用戶來說,密集向量仍然是最佳選擇。

如何對 dense_vector 類型使用查詢?

對定義為 dense_vector 的字段進行搜索時,使用的是 k-nearest neighbor 查詢(KNN 查詢)。該查詢用于查找與查詢向量最接近的文檔。以下是一個將 KNN 查詢應用于 dense_vector 字段的示例:

{"knn": {"field": "my_dense_vector","k": 10,"num_candidates": 50,"query_vector": [/* vector generated by model */]}
}

除了使用 Knn 查詢外,如果需要自定義文檔評分,也可以使用 script_score 查詢,將其與如 cosineSimilarity、dotProduct 或 l2norm 等向量比較函數結合,以更可控的方式計算相關性。請看示例:

{
"script_score": {"query": { "match_all": {} },"script": {"source": "cosineSimilarity(params.query_vector,
'my_dense_vector') + 1.0","params": {"query_vector": [/* vector */]}}}
}

如果你想深入了解,我推薦閱讀文章《How to set up vector search in Elasticsearch》。

稀疏向量類型

sparse_vector 字段類型用于存儲稀疏向量,這種向量的大多數值為零,只有少數詞語具有顯著權重。這種向量常見于基于詞項的模型,如 SPLADE 或 ELSER(Elastic Learned Sparse EncodeR)。

何時以及為何使用稀疏向量類型?

稀疏向量非常適合在需要詞匯層面更精確搜索,同時不犧牲語義智能的情況下使用。它們將文本表示為 token/value 對,僅突出最相關的詞語及其權重,提供了清晰性、控制力和效率。

這種字段類型在基于詞項生成向量時特別有用,比如 ELSER 或 SPLADE 模型,根據詞元在文本中的相對重要性為每個詞元分配不同權重。

當你想控制查詢中特定詞語的影響時,稀疏向量類型允許你手動調整詞語的權重,以優化結果排序。

主要優勢包括搜索的透明性,因為可以清楚理解為什么某個文檔被認為相關;存儲效率,因為只保存非零值的詞元,而密集向量則保存所有維度。

此外,稀疏向量是混合搜索策略的理想補充,甚至可以與密集向量結合,將詞匯精度與語義理解融合。

如何對稀疏向量類型使用查詢?

sparse_vector 查詢允許你基于詞元/值格式的查詢向量搜索文檔。下面是查詢示例:

{"query": {"sparse_vector": {"field": "field_sparse","query_vector": {"token1": 0.5,"token2": 0.3,"token3": 0.2}}}
}

如果你更喜歡使用訓練好的模型,可以使用推理端點,它會自動將查詢文本轉換為稀疏向量:

{"query": {"sparse_vector": {"field": "field_sparse","inference_id": "the inference ID to produce the token/weights","query": "search text"}}
}

要進一步了解這個主題,我建議閱讀《Understanding sparse vector embeddings with trained ML models》。

語義文本類型 - semantic_text

semantic_text 字段類型是 Elasticsearch 中使用語義搜索最簡單、最直接的方式。它通過推理端點自動處理嵌入生成,既在索引時也在查詢時完成。這意味著你不必擔心手動生成或存儲向量。

何時以及為何使用 semantic_text

semantic_text 字段是采用 Elasticsearch 語義搜索最簡單直接的方式。它適合那些想以最少技術投入開始,并且不想手動處理向量的用戶。該字段自動化了嵌入生成和向量搜索映射等步驟,使設置更快、更方便。

當你重視簡潔和抽象時,應考慮使用 semantic_text,它消除了手動配置映射、嵌入生成和數據接收流程的復雜性。只需選擇推理模型,剩下的由 Elasticsearch 處理。

主要優勢包括自動嵌入生成(在索引和查詢時進行),以及預配置支持所選推理模型的現成映射。

此外,該字段原生支持長文本自動拆分(文本分塊),允許將大段文本分成更小的片段,每個片段都有自己的嵌入,提升搜索精度。這極大提高了生產力,特別適合希望快速交付價值且不想處理語義搜索底層工程的團隊。

不過,雖然 semantic_text 提供速度和簡潔,但也有一定限制。它支持市場標準模型,只要它們作為 Elasticsearch 中的推理端點可用。但不支持像 dense_vector 字段那樣使用外部生成的嵌入。

如果你需要更多控制嵌入生成方式、想使用自己的嵌入,或者需要結合多個字段進行高級策略,dense_vectorsparse_vector 字段則提供了適合更定制或領域專用場景的靈活性。

如何對 semantic_text 類型使用查詢

semantic_text 出現之前,查詢要根據嵌入類型(密集或稀疏)使用不同的查詢。稀疏字段用 sparse_vector 查詢,密集字段用 KNN 查詢。

使用 semantic_text 類型時,搜索通過 semantic 查詢進行,它自動生成查詢向量,并與已索引文檔的嵌入進行比較。semantic_text 類型允許你定義一個推理端點來嵌入查詢,如果沒有指定,則會使用索引時相同的端點來處理查詢。

{"query": {"semantic": {"field": "semantic_text_field","query": "search text"}}
}

要了解更多,我建議閱讀文章《Elasticsearch:使用 semantic_text 簡化語義搜索》。

總結

在選擇如何在 Elasticsearch 中映射嵌入時,理解你想如何生成向量以及需要多少控制權是非常重要的。如果你追求簡單,semantic_text 字段支持自動且可擴展的語義搜索,適合很多初始用例。當需要更多控制、微調性能或與自定義模型集成時,dense_vectorsparse_vector 字段提供所需的靈活性。

理想的字段類型取決于你的用例、可用基礎設施以及機器學習堆棧的成熟度。最重要的是,Elastic 提供了構建現代且高度適應性搜索系統的工具。

原文:Elasticsearch new semantic_text mapping: Simplifying semantic search - Elasticsearch Labs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81270.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp取消瀏覽自動填充

為了防止瀏覽器自動將記住的密碼回填進type"password"輸入框&#xff0c;所以在type"password"輸入框上面加了兩行代碼&#xff0c;使瀏覽器將密碼填充到新加的輸入框里&#xff0c;并將這兩個input隱藏掉 <input type"password" autocomple…

從數據包到可靠性:UDP/TCP協議的工作原理分析

之前我們已經使用udp/tcp的相關接口寫了一些簡單的客戶端與服務端代碼。也了解了協議是什么&#xff0c;包括自定義協議和知名協議比如http/https和ssh等。現在我們再回到傳輸層&#xff0c;對udp和tcp這兩傳輸層巨頭協議做更深一步的分析。 一.UDP UDP相關內容很簡單&#xf…

顯卡、Cuda和pytorch兼容問題

這里寫目錄標題 驅動與CUDA版本兼容性問題1. **驅動與CUDA版本兼容性問題**2. **任務特性與硬件適配差異**3. **優化策略與框架配置差異**4. **散熱與功耗限制**5. **數據傳輸與CPU瓶頸**排查建議總結 查詢PyTorch中實際使用的CUDA版本**1. 查詢PyTorch中實際使用的CUDA版本***…

DeepSeek 大模型部署全指南:常見問題、優化策略與實戰解決方案

DeepSeek 作為當前最熱門的開源大模型之一&#xff0c;其強大的語義理解和生成能力吸引了大量開發者和企業關注。然而在實際部署過程中&#xff0c;無論是本地運行還是云端服務&#xff0c;用戶往往會遇到各種技術挑戰。本文將全面剖析 DeepSeek 部署中的常見問題&#xff0c;提…

Hadoop的目錄結構和組成

Hadoop 目錄結構 bin 目錄&#xff1a;包含了 Hadoop 的各種命令行工具&#xff0c;如hadoop、hdfs等&#xff0c;用于啟動和管理 Hadoop 集群&#xff0c;以及執行各種數據處理任務。etc 目錄&#xff1a;存放 Hadoop 的配置文件&#xff0c;包括core-site.xml、hdfs-site.xm…

Python Matplotlib 庫【繪圖基礎庫】全面解析

讓AI成為我們的得力助手&#xff1a;《用Cursor玩轉AI輔助編程——不寫代碼也能做軟件開發》 一、發展歷程 Matplotlib 由 John D. Hunter 于 2003 年創建&#xff0c;靈感來源于 MATLAB 的繪圖系統。作為 Python 生態中最早的可視化工具之一&#xff0c;它逐漸成為科學計算領…

車載以太網驅動智能化:域控架構設計與開發實踐

title: 車載以太網驅動專用車智能化&#xff1a;域控架構設計與開發實踐 date: 2023-12-01 categories: 新能源汽車 tags: [車載以太網, 電子電氣架構, 域控架構, 專用車智能化, SOME/IP, AUTOSAR] 引言&#xff1a;專用車智能化轉型的挑戰與機遇 專用車作為城市建設與工業運輸…

圖論模板(部分)

圖論模板&#xff08;部分&#xff09; maincpp #include <iostream> #include <climits> #include <limits>typedef unsigned long long ull; typedef long long ll; typedef long double ld; typedef std::pair<int, int> PII;#define rep(i, n) f…

2025年【道路運輸企業安全生產管理人員】考試題庫及道路運輸企業安全生產管理人員考試內容

一、考試概述 2025年道路運輸企業安全生產管理人員考試題庫由【安全生產模擬考試一點通】平臺發布&#xff0c;涵蓋安全生產法律法規、車輛技術管理、從業人員管理、應急預案編制等核心領域。考試重點考察考生對安全生產主體責任、風險管控、隱患排查等實務操作的掌握程度&…

分貝計在噪音污染源識別中的用途

分貝計在噪音污染源識別中的作用 噪音污染是現代社會面臨的一個普遍問題&#xff0c;尤其在城市化進程加快的背景下&#xff0c;交通、工業、建筑和娛樂活動等產生的噪音對人們的生活質量和健康造成了嚴重影響。為了有效管理和控制噪音污染&#xff0c;首先需要準確識別噪音的…

deepin v23.1 搜狗輸入法next配置中文輸入法下默認用英文標點

deepin23.1下, fcitx5的 deepin next搜狗輸入法的屬性頁無法配置中文狀態下默認用英文標點, 但是可以改以下配置來實現這一點. 搜狗輸入法運行期間&#xff0c;用戶修改的配置被存儲在以下位置&#xff1a; ~/.config/cpis/module/im/fcitx5/com.sogou.ime.ng.fcitx5.deepin/k…

C語言:在 Win 10 上,g++ 如何編譯 gtk 應用程序

在 Windows 10 上使用 g&#xff08;或 gcc&#xff09;編譯基于 GTK 的 C 語言程序是完全可行的&#xff0c;且相比 Tcc 更為推薦&#xff0c;因為 g&#xff08;GNU 編譯器套件&#xff09;對 GTK 的支持更加完善&#xff0c;配置也更簡單。以下是詳細步驟和注意事項&#xf…

84.評論日記

原鏈接 這個視頻我發了四五條評論。評論內容甚至和下面這個視頻內的其他評論一樣。 找了另外的賬號也發了。 發現&#xff0c;無論是我這個賬號&#xff0c;還是其他的賬號&#xff0c;評論都無法看到。 我大膽猜測有一種機制&#xff0c;某些官號會被設置成一種高檢測的等…

【RabbitMQ】整合 SpringBoot,實現工作隊列、發布/訂閱、路由和通配符模式

文章目錄 工作隊列模式引入依賴配置聲明生產者代碼消費者代碼 發布/訂閱模式引入依賴聲明生產者代碼發送消息 消費者代碼運行程序 路由模式聲明生產者代碼消費者代碼運行程序 通配符模式聲明生產者代碼消費者代碼運行程序 工作隊列模式 引入依賴 我們在創建 SpringBoot 項目的…

Python-92:最大乘積區間問題

問題描述 小R手上有一個長度為 n 的數組 (n > 0)&#xff0c;數組中的元素分別來自集合 [0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]。小R想從這個數組中選取一段連續的區間&#xff0c;得到可能的最大乘積。 你需要幫助小R找到最大乘積的區間&#xff0c;并輸出這…

windows觸摸板快捷指南

以下是結構化整理后的觸控手勢說明&#xff0c;采用清晰的層級劃分和標準化表述&#xff1a; **觸控手勢操作規范****1. 單指操作****2. 雙指操作****3. 三指操作****4. 四指操作** **優化說明&#xff1a;** 觸控手勢操作規范 1. 單指操作 手勢功能描述等效操作單擊滑動選擇…

VSCode launch.json 配置參數詳解

使用 launch.json 配置調試環境時&#xff0c;會涉及到多個參數&#xff0c;用于定義調試器的行為和目標執行環境。以下是一些常用的配置參數&#xff1a; 1、"type" &#xff1a;指定調試器的類型&#xff0c;例如 "node" 表示 Node.js 調試器&#xff0…

mAP、AP50、AR50:目標檢測中的核心評價指標解析

在目標檢測任務中&#xff0c;評價指標是衡量模型性能的核心工具。其中&#xff0c;mAP&#xff08;mean Average Precision&#xff09;、AP50&#xff08;Average Precision at IoU0.5&#xff09;和AR50&#xff08;Average Recall at IoU0.5&#xff09;是最常用的指標。本…

【論文閱讀】A Survey on Multimodal Large Language Models

目錄 前言一、 背景與核心概念1-1、多模態大語言模型&#xff08;MLLMs&#xff09;的定義 二、MLLMs的架構設計2-1、三大核心模塊2-2、架構優化趨勢 三、訓練策略與數據3-1、 三階段訓練流程 四、 評估方法4-1、 閉集評估&#xff08;Closed-set&#xff09;4-2、開集評估&…

[已解決] LaTeX “Unicode character“ 報錯 (中文字符處理)

問題&#xff1a; 寫 LaTeX 文檔&#xff0c;特別是包含中文時&#xff0c;經常遇到類似下圖的 “Unicode character XXXXXX” 報錯 (X) Unicode character 本 (U672C) LaTeX [行 xx, 列 x] (X) Unicode character 報 (U62A5) LaTeX [行 xx, 列 x] ...這通常意味著我們的 LaTe…