Elastic Learned Sparse EncodeR(或 ELSER)是一種由 Elastic 訓(xùn)練的 NLP 模型,使你能夠使用稀疏向量表示來(lái)執(zhí)行語(yǔ)義搜索。 語(yǔ)義搜索不是根據(jù)搜索詞進(jìn)行字面匹配,而是根據(jù)搜索查詢的意圖和上下文含義檢索結(jié)果。
本教程中的說(shuō)明向你展示了如何使用 ELSER 對(duì)數(shù)據(jù)執(zhí)行語(yǔ)義搜索。
提示:在使用 ELSER v1 進(jìn)行語(yǔ)義搜索期間,僅考慮每個(gè)字段的前 512 個(gè)提取的標(biāo)記。 有關(guān)詳細(xì)信息,請(qǐng)參閱此頁(yè)面。
要求
要使用 ELSER 執(zhí)行語(yǔ)義搜索,你必須在集群中部署 NLP 模型。 請(qǐng)參閱 ELSER 文檔以了解如何下載和部署模型。
創(chuàng)建索引映射
首先,必須創(chuàng)建目標(biāo)索引的映射 —— 包含模型根據(jù)你的文本創(chuàng)建的標(biāo)記的索引。 目標(biāo)索引必須有一個(gè)具有 rank_features 字段類型的字段來(lái)索引 ELSER 輸出。
PUT my-index
{
"mappings": {
"properties": {
"ml.tokens": {
"type": "rank_features"
},
"text_field": {
"type": "text"
}
}
}
}
注意:
- 包含預(yù)測(cè)的字段是 rank_features 字段。
- 用于創(chuàng)建稀疏向量表示的 text 字段。
有關(guān) rank_features 字段的使用,請(qǐng)?jiān)敿?xì)閱讀文章 “Elasticsearch:Rank feature query - 排名功能查詢”。
使用推理處理器創(chuàng)建攝取管道
創(chuàng)建一個(gè)帶有推理處理器的攝取管道,以使用 ELSER 對(duì)管道中攝取的數(shù)據(jù)進(jìn)行推理。
PUT _ingest/pipeline/elser-v1-test
{
"processors": [
{
"inference": {
"model_id": ".elser_model_1",
"target_field": "ml",
"field_map": {
"text": "text_field"
},
"inference_config": {
"text_expansion": {
"results_field": "tokens"
}
}
}
}
]
}
text_expansion 推理類型需要在推理攝取處理器中使用。
加載數(shù)據(jù)
在此步驟中,你將加載稍后在推理攝取管道中使用的數(shù)據(jù),以從中提取 token。
使用 msmarco-passagetest2019-top1000 數(shù)據(jù)集,它是 MS MACRO Passage Ranking 數(shù)據(jù)集的子集。 它包含 200 個(gè)查詢,每個(gè)查詢都附有相關(guān)文本段落的列表。 所有獨(dú)特的段落及其 ID 都已從該數(shù)據(jù)集中提取并編譯成一個(gè) tsv 文件。
使用機(jī)器學(xué)習(xí) UI 中的數(shù)據(jù)可視化工具下載文件并將其上傳到你的集群。 將名稱 id 分配給第一列,將 text 分配給第二列。 索引名稱是 test-data。 上傳完成后,n你可以看到一個(gè)名為 test-data 的索引,其中包含 182469 個(gè)文檔。
關(guān)于如何加載這個(gè)數(shù)據(jù),請(qǐng)?jiān)敿?xì)閱讀文章 “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索”。
通過(guò)推理攝取管道攝取數(shù)據(jù)
通過(guò)使用 ELSER 作為推理模型的推理管道重新索引數(shù)據(jù),從文本創(chuàng)建 tokens。
POST _reindex?wait_for_completion=false
{
"source": {
"index": "test-data"
},
"dest": {
"index": "my-index",
"pipeline": "elser-v1-test"
}
}
該調(diào)用返回一個(gè)任務(wù) ID 以監(jiān)控進(jìn)度:
GET _tasks/<task_id>
你還可以打開經(jīng)過(guò)訓(xùn)練的模型 UI,選擇 ELSER 下的 Pipelines 選項(xiàng)卡以跟蹤進(jìn)度。 完成該過(guò)程可能需要幾分鐘時(shí)間。
我們通過(guò)如下的命令來(lái)查看被寫入的文檔:
GET my-index/_search
使用 text_expansion 查詢進(jìn)行語(yǔ)義搜索
要執(zhí)行語(yǔ)義搜索,請(qǐng)使用 text_expansion 查詢,并提供查詢文本和 ELSER 模型 ID。 下面的示例使用查詢文本 “How to avoid muscle soreness after running?”:?
GET my-index/_search
{
"query":{
"text_expansion":{
"ml.tokens":{
"model_id":".elser_model_1",
"model_text":"How to avoid muscle soreness after running?"
}
}
}
}
上面搜索的結(jié)果是:
結(jié)果是根據(jù)相關(guān)性排序的 my-index 索引中與你的查詢文本含義最接近的前 10 個(gè)文檔。 結(jié)果還包含為每個(gè)相關(guān)搜索結(jié)果提取的 token 及其權(quán)重。
"hits":[
{
"_index":"my-index",
"_id":"978UAYgBKCQMet06sLEy",
"_score":18.612831,
"_ignored":[
"text.keyword"
],
"_source":{
"id":7361587,
"text":"For example, if you go for a run, you will mostly use the muscles in your lower body. Give yourself 2 days to rest those muscles so they have a chance to heal before you exercise them again. Not giving your muscles enough time to rest can cause muscle damage, rather than muscle development.",
"ml":{
"tokens":{
"muscular":0.075696334,
"mostly":0.52380747,
"practice":0.23430172,
"rehab":0.3673556,
"cycling":0.13947526,
"your":0.35725075,
"years":0.69484913,
"soon":0.005317828,
"leg":0.41748235,
"fatigue":0.3157955,
"rehabilitation":0.13636169,
"muscles":1.302141,
"exercises":0.36694175,
(...)
},
"model_id":".elser_model_1"
}
}
},
(...)
]
將語(yǔ)義搜索與其他查詢相結(jié)合
你可以將 text_expansion 與復(fù)合查詢中的其他查詢結(jié)合使用。 例如,在布爾或全文查詢中使用過(guò)濾器子句,可能會(huì)或可能不會(huì)使用與 text_expansion 查詢相同的查詢文本。 這使你能夠合并來(lái)自兩個(gè)查詢的搜索結(jié)果。
來(lái)自 text_expansion 查詢的搜索命中往往得分高于其他 Elasticsearch 查詢。 這些分?jǐn)?shù)可以通過(guò)使用 boost 參數(shù)增加或減少每個(gè)查詢的相關(guān)性分?jǐn)?shù)來(lái)規(guī)范化。 text_expansion 查詢的召回率可能很高,因?yàn)橄嚓P(guān)性較低的結(jié)果很長(zhǎng)。 使用 min_score 參數(shù)修剪那些不太相關(guān)的文檔。
GET my-index/_search
{
"query": {
"bool": {
"should": [
{
"text_expansion": {
"ml.tokens": {
"model_text": "How to avoid muscle soreness after running?",
"model_id": ".elser_model_1",
"boost": 1
}
}
},
{
"query_string": {
"query": "toxins",
"boost": 4
}
}
]
}
},
"min_score": 10
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-500101.html
說(shuō)明:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-500101.html
- text_expansion 和 query_string 查詢都在 bool 查詢的 should 子句中。
- text_expansion 查詢的提升值為 1,這是默認(rèn)值。 這意味著該查詢結(jié)果的相關(guān)性分?jǐn)?shù)沒(méi)有提高。
- query_string 查詢的提升值為 4。 此查詢結(jié)果的相關(guān)性分?jǐn)?shù)增加,導(dǎo)致它們?cè)谒阉鹘Y(jié)果中排名更高。
- 僅顯示分?jǐn)?shù)等于或高于 10 的結(jié)果。
到了這里,關(guān)于Elasticsearch:使用 ELSER 進(jìn)行語(yǔ)義搜索的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!