中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

揭陽(yáng)網(wǎng)站制作專業(yè)適合seo的網(wǎng)站

揭陽(yáng)網(wǎng)站制作專業(yè),適合seo的網(wǎng)站,c 網(wǎng)站開發(fā),做標(biāo)書的網(wǎng)站作者:Jeff Vestal 本指南重點(diǎn)介紹通過(guò) HTTP 或 Python 使用 Elasticsearch API 設(shè)置 Elasticsearch 以進(jìn)行近似 k 最近鄰 (kNN) 搜索。 對(duì)于主要使用 Kibana 或希望通過(guò) UI 進(jìn)行測(cè)試的用戶,請(qǐng)?jiān)L問(wèn)使用 Elastic 爬蟲的語(yǔ)義搜索入門指南。你也可以參考文章…

作者:Jeff Vestal

本指南重點(diǎn)介紹通過(guò) HTTP 或 Python 使用 Elasticsearch API 設(shè)置 Elasticsearch 以進(jìn)行近似 k 最近鄰 (kNN) 搜索。

對(duì)于主要使用 Kibana 或希望通過(guò) UI 進(jìn)行測(cè)試的用戶,請(qǐng)?jiān)L問(wèn)使用 Elastic 爬蟲的語(yǔ)義搜索入門指南。你也可以參考文章 “ChatGPT 和 Elasticsearch:OpenAI 遇見私有數(shù)據(jù)(二)”。

如果你想切入主題并在 Jupyter Notebook 中運(yùn)行一些代碼,我們可以為你提供隨附的 notebook。

Elastic Learned Sparse Encoder

如果你使用的文本是英文文本,請(qǐng)考慮使用 Elastic Learned Sparse Encoder。

Elastic Learned Sparse EncodeR(或 ELSER)是由 Elastic 訓(xùn)練的 NLP 模型,使你能夠使用稀疏向量表示來(lái)執(zhí)行語(yǔ)義搜索。 語(yǔ)義搜索不是根據(jù)搜索詞進(jìn)行字面匹配,而是根據(jù)搜索查詢的意圖和上下文含義來(lái)檢索結(jié)果。

否則,請(qǐng)繼續(xù)閱讀下文,了解有關(guān)使用近似 kNN 搜索進(jìn)行語(yǔ)義向量搜索的信息。

高層架構(gòu)

在 Elastic 中實(shí)現(xiàn)向量搜索有四個(gè)關(guān)鍵組件:

  1. 嵌入模型:機(jī)器學(xué)習(xí)模型,將數(shù)據(jù)作為輸入并返回?cái)?shù)據(jù)的數(shù)字表示(向量,也稱為 “嵌入(embedding)”)
  2. 推理端點(diǎn):將機(jī)器學(xué)習(xí)模型應(yīng)用于文本數(shù)據(jù)的 Elastic Inference API 或 Elastic Inference 管道處理器。 當(dāng)你提取數(shù)據(jù)和對(duì)數(shù)據(jù)執(zhí)行查詢時(shí),你都可以使用推理端點(diǎn)。 **注意:**對(duì)于非文本數(shù)據(jù)(例如圖像文件),請(qǐng)?jiān)谀愕?ML 模型中使用外部腳本,以便生成你將在 Elastic 中存儲(chǔ)和使用的嵌入。
  3. 搜索:Elastic 將嵌入與元數(shù)據(jù)一起存儲(chǔ)在其索引中,然后執(zhí)行(近似)k 最近鄰搜索以查找查詢與數(shù)據(jù)最接近的匹配項(xiàng)(在向量空間中,也稱為“嵌入空間”)
  4. 應(yīng)用程序邏輯:你的應(yīng)用程序在核心向量搜索之外所需的一切,例如與用戶通信或應(yīng)用你的業(yè)務(wù)邏輯。

集群注意事項(xiàng)

集群大小估計(jì)

內(nèi)存注意事項(xiàng)

為了提高性能,向量需要 “適合” 數(shù)據(jù)節(jié)點(diǎn)上的堆外 RAM。 從 Elasticsearch 版本 8.7+ 開始,向量所需的粗略估計(jì)為

NumVectors×4×(NumDimensions+12)

注意:該公式適用于 float 類型向量。

使用 20,000 個(gè)向量字段的快速示例(我們假設(shè)每個(gè)文檔有 1 個(gè)向量):

20,000,000×4×(768+12)≈115 GB of RAM off heap

注意:添加的每個(gè)副本都需要相同數(shù)量的額外 RAM(例如,對(duì)于上面的示例,1 個(gè)主副本和 1 個(gè)副本,我們估計(jì)需要 2 倍的 RAM,即 130GB)。

性能測(cè)試

由于每個(gè)用戶的數(shù)據(jù)都不同,估計(jì) RAM 需求的最佳方法是通過(guò)測(cè)試。 我們建議從單個(gè)節(jié)點(diǎn)、單個(gè)主分片、無(wú)副本開始,然后進(jìn)行測(cè)試,以找出在性能下降之前有多少向量 “適合” 節(jié)點(diǎn)。

實(shí)現(xiàn)這一目標(biāo)的一種方法是使用 Elastic 的基準(zhǔn)測(cè)試工具 Rally。

如果所有向量都相當(dāng)小(例如,64GB 節(jié)點(diǎn)上的 3GB),你可以簡(jiǎn)單地加載向量并一次性開始測(cè)試。

使用上面的估計(jì)公式,將向量數(shù)量的 75% 加載到單個(gè)節(jié)點(diǎn)中,運(yùn)行挑戰(zhàn),并評(píng)估響應(yīng)時(shí)間指標(biāo)。 逐漸增加向量計(jì)數(shù),重新運(yùn)行測(cè)試,直到性能下降到可接受的水平以下。 響應(yīng)時(shí)間可接受的最大計(jì)數(shù)通常可以被認(rèn)為是單個(gè)節(jié)點(diǎn)的向量數(shù)量。 從那里你可以橫向擴(kuò)展節(jié)點(diǎn)和副本。

Jupyter Notebook Code

下面的所有代碼都可以在 python Jupyter Notebook 中找到 該代碼可以完全從瀏覽器中運(yùn)行,使用 Google Colab,以便使用隨附的 notebook 進(jìn)行快速設(shè)置和測(cè)試

集群配置

每個(gè)字段單個(gè)向量與每個(gè)字段多個(gè)向量

向量布局的標(biāo)準(zhǔn)方法是每個(gè)字段一個(gè)向量。 這就是我們下面將遵循的方法。 但是,從 8.11 開始,Elasticsearch 支持嵌套向量,允許每個(gè)字段使用多個(gè)向量。 有關(guān)設(shè)置該方法的信息,請(qǐng)查看 Elasticsearch Labs 博客 “通過(guò)攝取管道對(duì)大型文檔進(jìn)行分塊加上嵌套向量等于簡(jiǎn)單的段落搜索”。

加載嵌入模型

嵌入模型在機(jī)器學(xué)習(xí)節(jié)點(diǎn)上運(yùn)行。 確保你部署了一個(gè)或多個(gè) ML 節(jié)點(diǎn)。

要將嵌入模型加載到 Elasticsearch 中,你需要使用 Eland。 Eland 是一個(gè) Python Elasticsearch 客戶端,用于使用熟悉的 Pandas 兼容 API 探索和分析 Elasticsearch 中的數(shù)據(jù)。

  • 你可以使用 Docker 從 Hugging Face 快速加載模型。
  • 嗎還可以在 Colab 中使用 jupyter 筆記本快速加載模型(后續(xù)“部署NLP模型”)
  • 對(duì)于無(wú)法直接連接到 Hugging Face 的環(huán)境,請(qǐng)按照文檔在氣隙環(huán)境中使用 Eland 加載嵌入模型中概述的步驟操作

攝取管道設(shè)置

有多種方法可以生成新文檔的嵌入。 最簡(jiǎn)單的方法是創(chuàng)建攝取管道并配置針對(duì)索引的數(shù)據(jù),以自動(dòng)使用管道通過(guò)推理處理器調(diào)用模型。

在下面的示例中,我們將創(chuàng)建一個(gè)帶有一個(gè)處理器(推理處理器)的管道。 該處理器將:

  • 將我們要為其創(chuàng)建嵌入的字段 my_text 映射到嵌入模型在本例中期望的名稱 text_field
  • 通過(guò) model_id 配置要使用的模型。 這是 Elasticsearch 中模型的名稱
  • 監(jiān)控可能出現(xiàn)錯(cuò)誤時(shí)進(jìn)行處理。
PUT _ingest/pipeline/vector_embedding_demo
{"processors": [{"inference": {"field_map": {"my_text": "text_field"},"model_id": "sentence-transformers__all-distilroberta-v1","target_field": "ml.inference.my_vector","on_failure": [{"append": {"field": "_source._ingest.inference_errors","value": [{"message": "Processor 'inference' in pipeline 'ml-inference-title-vector' failed with message '{{ _ingest.on_failure_message }}'","pipeline": "ml-inference-title-vector","timestamp": "{{{ _ingest.timestamp }}}"}]}}]}},{"set": {"field": "my_vector","if": "ctx?.ml?.inference != null && ctx.ml.inference['my_vector'] != null","copy_from": "ml.inference.my_vector.predicted_value","description": "Copy the predicted_value to 'my_vector'"}},{"remove": {"field": "ml.inference.my_vector","ignore_missing": true}}]
}

索引映射/模板設(shè)置

嵌入(向量)存儲(chǔ)在 Elasticsearch 中的密集向量字段類型中。 接下來(lái),我們將在索引文檔和生成嵌入之前配置索引模板。

下面的 API 調(diào)用將創(chuàng)建一個(gè)索引模板來(lái)匹配具有 my_vector_index-* 模式的任何索引

它會(huì):

  1. 如文檔中所述,為 my_vector 配置密集向量。
  2. 建議從 _source 中排除向量字段
  3. 我們還將在本示例中包含一個(gè)文本字段 my_text,它將作為生成嵌入的源。
PUT /_index_template/my_vector_index
{"index_patterns": ["my_vector_index-*"],"priority": 1,"template": {"settings": {"number_of_shards": 1,"number_of_replicas": 1,"index.default_pipeline": "vector_embedding_demo"},"mappings": {"properties": {"my_vector": {"type": "dense_vector","dims": 768,"index": true,"similarity": "dot_product"},"my_text": {"type": "text"}},"_source": {"excludes": ["my_vector"]}}}
}

索引數(shù)據(jù)

有多種方法可以將數(shù)據(jù)索引到 Elasticsearch 中。 下面的示例顯示了要索引到示例索引中的一組快速測(cè)試文檔。 當(dāng)推理處理器對(duì)嵌入模型進(jìn)行內(nèi)部 API 調(diào)用時(shí),嵌入將由攝取管道在攝取中生成。

POST my_vector_index-01/_bulk?refresh=true
{"index": {}}
{"my_text": "Hey, careful, man, there's a beverage here!", "my_metadata": "The Dude"}
{"index": {}}
{"my_text": "I’m The Dude. So, that’s what you call me. You know, that or, uh, His Dudeness, or, uh, Duder, or El Duderino, if you’re not into the whole brevity thing", "my_metadata": "The Dude"}
{"index": {}}
{"my_text": "You don't go out looking for a job dressed like that? On a weekday?", "my_metadata": "The Big Lebowski"}
{"index": {}}
{"my_text": "What do you mean brought it bowling, Dude? ", "my_metadata": "Walter Sobchak"}
{"index": {}}
{"my_text": "Donny was a good bowler, and a good man. He was one of us. He was a man who loved the outdoors... and bowling, and as a surfer he explored the beaches of Southern California, from La Jolla to Leo Carrillo and... up to... Pismo", "my_metadata": "Walter Sobchak"}

查詢數(shù)據(jù)

Approximate k-nearest neighbor

GET my_vector_index-01/_search
{"knn": [{"field": "my_vector","k": 1,"num_candidates": 5,"query_vector_builder": {"text_embedding": {"model_id": "sentence-transformers__all-distilroberta-v1","model_text": "Watchout I have a drink"}}}]
}

具有倒數(shù)排名融合技術(shù)預(yù)覽的混合搜索(kNN + BM25)

GET my_vector_index-01/_search
{"size": 2,"query": {"match": {"my_text": "bowling"}},"knn":{"field": "my_vector","k": 3,"num_candidates": 5,"query_vector_builder": {"text_embedding": {"model_id": "sentence-transformers__all-distilroberta-v1","model_text": "He enjoyed the game"}}},"rank": {"rrf": {}}
}

Filtering

GET my_vector_index-01/_search
{"knn": {"field": "my_vector","k": 1,"num_candidates": 5,"query_vector_builder": {"text_embedding": {"model_id": "sentence-transformers__all-distilroberta-v1","model_text": "Did you bring the dog?"}},"filter": {"term": {"my_metadata": "The Dude"}}}
}

返回選擇字段的聚合

GET my_vector_index-01/_search
{"knn": {"field": "my_vector","k": 2,"num_candidates": 5,"query_vector_builder": {"text_embedding": {"model_id": "sentence-transformers__all-distilroberta-v1","model_text": "did you bring it?"}}},"aggs": {"metadata": {"terms": {"field": "my_metadata"}}},"fields": ["my_text","my_metadata"],"_source": false
}

kNN 調(diào)整選項(xiàng)

調(diào)整近似 kNN 搜索文檔中介紹了調(diào)整選項(xiàng)的概述

搜索的計(jì)算成本:向量數(shù)量的對(duì)數(shù),前提是它們通過(guò) HNSW 進(jìn)行索引。 dot_product 相似度的維數(shù)略好于線性。

調(diào)整近似 kNN 以提高速度或準(zhǔn)確性文檔

距離度量的選擇

  • 只要有可能,我們建議在將向量搜索部署到生產(chǎn)環(huán)境時(shí)使用 dot_product 而不是余弦相似度。 使用點(diǎn)積可以避免每次相似性計(jì)算時(shí)都必須計(jì)算向量幅度(因?yàn)橄蛄恳烟崆皻w一化為全部幅度為 1)。 這意味著它可以將搜索和索引速度提高約 2-3 倍。
  • 也就是說(shuō),consine 在文本應(yīng)用程序中很受歡迎:查詢的長(zhǎng)度通常比攝取的文檔短得多,因此與原始文檔的距離對(duì)相似性的測(cè)量沒(méi)有有意義的貢獻(xiàn)。 請(qǐng)記住,余弦每個(gè)元組需要 6 次運(yùn)算,而點(diǎn)積每個(gè)維度只需要兩次(將每個(gè)元素相乘,然后求和)。 因此,我們建議僅將余弦用于測(cè)試/探索,并在投入生產(chǎn)時(shí)切換到點(diǎn)積(通過(guò)歸一化,點(diǎn)積畢竟會(huì)計(jì)算余弦)。
  • 在所有其他用例中首先嘗試 dot_product - 因?yàn)樗膱?zhí)行速度比 L2 規(guī)范(標(biāo)準(zhǔn)歐幾里得)快得多。

Ingest

Indexing considerations Docs

索引新數(shù)據(jù)

除非你生成自己的嵌入,否則你必須在攝取新數(shù)據(jù)時(shí)生成嵌入。 對(duì)于文本,這是通過(guò)帶有調(diào)用托管嵌入模型的推理處理器的攝取管道來(lái)完成的。 請(qǐng)注意,這需要白金許可證。
添加更多數(shù)據(jù)也會(huì)增加 RAM - 因?yàn)槟阈枰獙⑺邢蛄勘A粼诙淹?#xff08;而傳統(tǒng)搜索則需要在磁盤上)

精確 kNN 搜索

又名強(qiáng)力(brute force)或腳本分?jǐn)?shù)

精確 kNN 搜索文檔

不要假設(shè)你需要 ANN,因?yàn)槟承┯美裏o(wú)需 ANN 也能正常工作。 根據(jù)經(jīng)驗(yàn),如果你實(shí)際排名的文檔數(shù)量(即應(yīng)用過(guò)濾器后)低于 10k,那么使用強(qiáng)力選項(xiàng)可能會(huì)更好。

在本地環(huán)境中運(yùn)行 jupyter notebook

在很多情況下,我們?cè)诒镜仉娔X里來(lái)運(yùn)行上面的練習(xí)。我們可以按照如下的步驟來(lái)進(jìn)行:

安裝 Elasticsearch 及 Kibana

如果你還沒(méi)有安裝好自己的 Elasticsearch 及 Kibana,請(qǐng)參考如下的文章來(lái)進(jìn)行安裝:

  • 如何在 Linux,MacOS 及 Windows 上進(jìn)行安裝 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安裝 Elastic 棧中的 Kibana

特別注意的是:我們將以最新的 Elastic Stack 8.6.1 來(lái)進(jìn)行展示。請(qǐng)參考 Elastic Stack 8.x 的文章進(jìn)行安裝。

啟動(dòng)白金版試用功能

由于上傳模型是一個(gè)白金版的功能,我們需要啟動(dòng)試用功能。更多關(guān)于訂閱的信息,請(qǐng)參考網(wǎng)址:訂閱 | Elastic Stack 產(chǎn)品和支持 | Elastic。

這樣我們就成功地啟動(dòng)了白金版試用功能。?

上傳模型

我們使用如下的命令來(lái)安裝 eland:

pip3 install eland
pip3 install -q elasticsearch eland[pytorch]

然后,我們使用如下的命令來(lái)上傳所需要的模型:

eland_import_hub_model --url https://elastic:o6G_pvRL=8P*7on+o6XH@localhost:9200 \--hub-model-id sentence-transformers/all-distilroberta-v1 \--task-type text_embedding \--ca-certs /Users/liuxg/elastic/elasticsearch-8.11.0/config/certs/http_ca.crt \--start

在上面,我們需要根據(jù)自己的安裝:

  • 修改上面的 elastic 超級(jí)用戶的密碼
  • 修改上面的證書路徑

完成上面的命令后,我們可以在 Kibana 中看到:

運(yùn)行 Notebook

我們把 Elasticsearch 的證書拷貝到當(dāng)前的項(xiàng)目根目錄下:

cp ~/elastic/elasticsearch-8.11.0/config/certs/http_ca.crt .

我們使用 jupyter notebook 來(lái)創(chuàng)建一個(gè)叫做?vector_search_implementation_guide_api.ipynb 的 notebook。你可以發(fā)現(xiàn)整個(gè) notebook。

原文:Vector Search (kNN) Implementation Guide - API Edition — Elastic Search Labs

http://www.risenshineclean.com/news/8851.html

相關(guān)文章:

  • 營(yíng)銷型網(wǎng)站建設(shè)費(fèi)用怎么這么大網(wǎng)絡(luò)營(yíng)銷渠道
  • 賣模具做哪個(gè)網(wǎng)站好地推的60種方法
  • 華為云 wordpress微信搜一搜seo
  • 網(wǎng)站建設(shè)與發(fā)布百度推廣怎么優(yōu)化排名
  • 網(wǎng)站運(yùn)營(yíng)軟件站長(zhǎng)工具seo綜合查詢可以訪問(wèn)
  • 設(shè)計(jì)師網(wǎng)上接單的網(wǎng)站三只松鼠有趣的軟文
  • 淘客推廣有用嗎店鋪seo是什么意思
  • 沈陽(yáng)市有做網(wǎng)站的公司百度推廣北京總部電話
  • 建設(shè)網(wǎng)站免費(fèi)模板百度問(wèn)答庫(kù)
  • 運(yùn)城鹽湖區(qū)姚孟信通網(wǎng)站開發(fā)中心專業(yè)網(wǎng)站優(yōu)化外包
  • 北京網(wǎng)站建設(shè)模板網(wǎng)絡(luò)優(yōu)化app哪個(gè)好
  • 鄭州網(wǎng)站建設(shè)專家百度老年搜索
  • 德惠市建設(shè)局網(wǎng)站seo網(wǎng)絡(luò)營(yíng)銷推廣排名
  • seo關(guān)鍵詞優(yōu)化培訓(xùn)泉州seo報(bào)價(jià)
  • 德陽(yáng)網(wǎng)站建設(shè)平臺(tái)百度收錄軟件
  • 專門做稀有產(chǎn)品的網(wǎng)站seo代碼優(yōu)化包括哪些
  • 工作室有專門的網(wǎng)站如何找友情鏈接
  • 有什么國(guó)外的黃網(wǎng)站百度服務(wù)中心投訴
  • 課程設(shè)計(jì)代做網(wǎng)站推薦優(yōu)化疫情二十條措施
  • 寶雞做網(wǎng)站公司谷歌瀏覽器下載官網(wǎng)
  • 公司網(wǎng)站建設(shè)怎么選擇主機(jī)大小百度推廣個(gè)人怎么開戶
  • 太原網(wǎng)站建設(shè)制作報(bào)價(jià)南寧seo營(yíng)銷推廣
  • 網(wǎng)站建設(shè)維護(hù)及使用管理辦法自動(dòng)友鏈網(wǎng)
  • 企業(yè)網(wǎng)站運(yùn)營(yíng)推廣難做嗎天津seo數(shù)據(jù)監(jiān)控
  • erp系統(tǒng)哪家做得好武漢整站seo數(shù)據(jù)上云
  • 如何做網(wǎng)站呢上海網(wǎng)絡(luò)推廣平臺(tái)
  • 蘇州專業(yè)網(wǎng)站建設(shè)定制正規(guī)考證培訓(xùn)機(jī)構(gòu)
  • 在哪里學(xué)做網(wǎng)站網(wǎng)絡(luò)seo優(yōu)化公司
  • 自己可以做開獎(jiǎng)網(wǎng)站嗎方象科技服務(wù)案例
  • 重慶做網(wǎng)站微信的公司百度灰色詞排名代發(fā)