国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch:倒數(shù)排序融合 - Reciprocal rank fusion

這篇具有很好參考價(jià)值的文章主要介紹了Elasticsearch:倒數(shù)排序融合 - Reciprocal rank fusion。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

注意:RRF 在 Elastic Stack 8.8 中正式提供。

倒數(shù)排序融合(RRF)是一種將具有不同相關(guān)性指標(biāo)的多個(gè)結(jié)果集組合成單個(gè)結(jié)果集的方法。 RRF 無(wú)需調(diào)優(yōu),不同的相關(guān)性指標(biāo)也不必相互關(guān)聯(lián)即可獲得高質(zhì)量的結(jié)果。該方法的優(yōu)勢(shì)在于不利用相關(guān)分?jǐn)?shù),而僅靠排名計(jì)算。相關(guān)分?jǐn)?shù)存在的問(wèn)題在于不同模型的分?jǐn)?shù)范圍差。

使用 Reciprocal Rank Fusion (RRF) 的簡(jiǎn)化混合搜索

通常,最好的排名是通過(guò)組合多種排名方法來(lái)實(shí)現(xiàn)的,例如 BM25 和生成密集向量嵌入的 ML 模型。 在實(shí)踐中,將結(jié)果集組合成一個(gè)單一的組合相關(guān)性排名結(jié)果集被證明是非常具有挑戰(zhàn)性的。 當(dāng)然,理論上你可以將每個(gè)結(jié)果集的分?jǐn)?shù)歸一化(因?yàn)樵挤謹(jǐn)?shù)在完全不同的范圍內(nèi)),然后進(jìn)行線性組合,根據(jù)每個(gè)排名的分?jǐn)?shù)加權(quán)和排序最終結(jié)果集方法。 只要你提供正確的權(quán)重,Elasticsearch 就支持它并且運(yùn)行良好。 為此,你需要了解環(huán)境中每種方法得分的統(tǒng)計(jì)分布,并有條不紊地優(yōu)化權(quán)重。 實(shí)際上,這超出了絕大多數(shù)用戶的能力。

另一種方法是 RRF 算法,它提供了出色的排序方法零樣本混合,正如學(xué)術(shù)研究所證明的那樣。 如果你不了解不同方法中排名分?jǐn)?shù)的確切分布,這不僅是最好的混合方式,而且客觀上也是混合排名方法的好方法 —— 即使你知道如何歸一化及分?jǐn)?shù)的分布情況,也很難被擊敗。 基本概念是結(jié)果的組合順序由每個(gè)結(jié)果集中每個(gè)文檔的位置(和存在)定義。 因此可以方便地忽略排名分?jǐn)?shù)。

Elastic 8.8 支持具有多個(gè)密集向量查詢和在倒排索引上運(yùn)行的單個(gè)查詢的 RRF。 在不久的將來(lái),我們希望支持來(lái)自 BM25 和 Elastic 的檢索模型(兩者都是稀疏向量)的混合結(jié)果,從而產(chǎn)生同類(lèi)最佳的零樣本集(無(wú)域內(nèi)訓(xùn)練)排名方法。

Elasticsearch:倒數(shù)排序融合 - Reciprocal rank fusion?

  • D - 文檔集
  • R - 一組排名作為 1..|D| 的排列
  • K - 通常默認(rèn)設(shè)置為 60

RRF 使用以下公式來(lái)確定對(duì)每個(gè)文檔進(jìn)行排名的分?jǐn)?shù):

score = 0.0
for q in queries:
    if d in result(q):
        score += 1.0 / ( k + rank( result(q), d ) )
return score

# where
# k is a ranking constant
# q is a query in the set of queries
# d is a document in the result set of q
# result(q) is the result set of q
# rank( result(q), d ) is d's rank within the result(q) starting from 1

倒數(shù)排序融合 API

你可以將 RRF 用作搜索的一部分,以使用來(lái)自:

  • 1 個(gè)查詢(query)和 1 個(gè)或多個(gè) kNN 搜索
  • 2 個(gè)或更多 kNN 搜索

rrf 參數(shù)是一個(gè)可選對(duì)象,定義為搜索請(qǐng)求 rank parameter 的一部分。 rrf 對(duì)象包含以下參數(shù):

條目 描述
rank_constant (可選,整數(shù))此值確定每個(gè)查詢的單個(gè)結(jié)果集中的文檔對(duì)最終排名結(jié)果集的影響程度。 較高的值表示排名較低的文檔具有更大的影響力。 此值必須大于或等于 1。默認(rèn)為 60。
window_size (可選,整數(shù))此值確定每個(gè)查詢的單個(gè)結(jié)果集的大小。 較高的值將以性能為代價(jià)提高結(jié)果相關(guān)性。 最終排名的結(jié)果集被修剪為搜索請(qǐng)求的 <<search-size-param, size>。 window_size 必須大于或等于 size 且大于或等于 1。默認(rèn)為 100。

使用 RRF 的示例請(qǐng)求:

GET example-index/_search
{
    "query": {
        "term": {
            "text": "shoes"
        }
    },
    "knn": {
        "field": "vector",
        "query_vector": [1.25, 2, 3.5],
        "k": 50,
        "num_candidates": 100
    },
    "rank": {
        "rrf": {
            "window_size": 50,
            "rank_constant": 20
        }
    }
}

在上面的示例中,我們首先執(zhí)行 kNN 搜索以獲取其全球前 50 名的結(jié)果。 然后我們執(zhí)行查詢以獲取其全球前 50 名的結(jié)果。 之后,在一個(gè)協(xié)調(diào)節(jié)點(diǎn)上,我們將 knn 搜索結(jié)果與查詢結(jié)果結(jié)合起來(lái),根據(jù) RRF 方法對(duì)它們進(jìn)行排序,得到最終的 top 10 結(jié)果。

請(qǐng)注意,如果來(lái)自 knn 搜索的 k 大于 window_size,則結(jié)果將被截?cái)酁?window_size。 如果 k 小于 window_size,則結(jié)果為 k 大小。

倒數(shù)排序融合支持的功能

RRF 確實(shí)支持:

  • from
  • aggregations

RRF 目前不支持:

  • scroll
  • point in time
  • sort
  • rescore
  • suggesters
  • highlighting
  • collapse
  • explain
  • profiling

使用不支持的功能作為使用 RRF 的搜索的一部分將導(dǎo)致異常。

倒數(shù)排序融合完整示例

我們首先為具有文本字段、向量字段和整數(shù)字段的索引創(chuàng)建映射,同時(shí)索引多個(gè)文檔。 對(duì)于這個(gè)例子,我們將使用一個(gè)只有一個(gè)維度的向量來(lái)使排名更容易解釋。

PUT example-index
{
  "mappings": {
    "properties": {
      "text": {
        "type": "text"
      },
      "vector": {
        "type": "dense_vector",
        "dims": 1,
        "index": true,
        "similarity": "l2_norm"
      },
      "integer": {
        "type": "integer"
      }
    }
  }
}

PUT example-index/_doc/1
{
    "text" : "rrf",
    "vector" : [5],
    "integer": 1
}

PUT example-index/_doc/2
{
    "text" : "rrf rrf",
    "vector" : [4],
    "integer": 2
}

PUT example-index/_doc/3
{
    "text" : "rrf rrf rrf",
    "vector" : [3],
    "integer": 1
}

PUT example-index/_doc/4
{
    "text" : "rrf rrf rrf rrf",
    "integer": 2
}

PUT example-index/_doc/5
{
    "vector" : [0],
    "integer": 1
}

POST example-index/_refresh

現(xiàn)在,我們使用帶有查詢、kNN 搜索和術(shù)語(yǔ)聚合的 RRF 執(zhí)行搜索。

GET example-index/_search
{
  "query": {
    "term": {
      "text": "rrf"
    }
  },
  "knn": {
    "field": "vector",
    "query_vector": [
      3
    ],
    "k": 5,
    "num_candidates": 5
  },
  "rank": {
    "rrf": {
      "window_size": 5,
      "rank_constant": 1
    }
  },
  "size": 3,
  "aggs": {
    "int_count": {
      "terms": {
        "field": "integer"
      }
    }
  }
}

我們收到帶有排名 hits 和術(shù)語(yǔ)聚合結(jié)果的響應(yīng)。 請(qǐng)注意,_score 為 null,我們改為使用 _rank 來(lái)顯示排名靠前的文檔。

{
  "took": 16,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 5,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [
      {
        "_index": "example-index",
        "_id": "3",
        "_score": null,
        "_rank": 1,
        "_source": {
          "text": "rrf rrf rrf",
          "vector": [
            3
          ],
          "integer": 1
        }
      },
      {
        "_index": "example-index",
        "_id": "2",
        "_score": null,
        "_rank": 2,
        "_source": {
          "text": "rrf rrf",
          "vector": [
            4
          ],
          "integer": 2
        }
      },
      {
        "_index": "example-index",
        "_id": "4",
        "_score": null,
        "_rank": 3,
        "_source": {
          "text": "rrf rrf rrf rrf",
          "integer": 2
        }
      }
    ]
  },
  "aggregations": {
    "int_count": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 1,
          "doc_count": 3
        },
        {
          "key": 2,
          "doc_count": 2
        }
      ]
    }
  }
}

讓我們分解一下這些點(diǎn)擊率是如何排名的。 我們首先分別運(yùn)行查詢和 kNN 搜索,以收集它們各自的命中率。

首先,我們查看查詢的 hits。

GET example-index/_search?filter_path=**.hits
{
  "query": {
    "term": {
      "text": "rrf"
    }
  }
}

上面的命令顯示的結(jié)果為:

{
  "hits": {
    "hits": [
      {
        "_index": "example-index",
        "_id": "4",
        "_score": 0.16152832,         [1]
        "_source": {
          "text": "rrf rrf rrf rrf",
          "integer": 2
        }
      },
      {
        "_index": "example-index",
        "_id": "3",
        "_score": 0.15876243,         [2]
        "_source": {
          "text": "rrf rrf rrf",
          "vector": [
            3
          ],
          "integer": 1
        }
      },
      {
        "_index": "example-index",
        "_id": "2",
        "_score": 0.15350538,         [3]
        "_source": {
          "text": "rrf rrf",
          "vector": [
            4
          ],
          "integer": 2
        }
      },
      {
        "_index": "example-index",
        "_id": "1",
        "_score": 0.13963442,         [4]
        "_source": {
          "text": "rrf",
          "vector": [
            5
          ],
          "integer": 1
        }
      }
    ]
  }
}
  • [1]??rank 1, _id 4
  • [2]??rank 2, _id 3
  • [3]??rank 3, _id 2
  • [4]? rank 4, _id 1

請(qǐng)注意,我們的第一個(gè)命中沒(méi)有 vector 字段的值。 現(xiàn)在,我們查看 kNN 搜索的結(jié)果。

GET example-index/_search?filter_path=**.hits
{
  "knn": {
    "field": "vector",
    "query_vector": [
      3
    ],
    "k": 5,
    "num_candidates": 5
  }
}

上面搜索的結(jié)果為:

{
  "hits": {
    "hits": [
      {
        "_index": "example-index",
        "_id": "3",                      [1]
        "_score": 1,
        "_source": {
          "text": "rrf rrf rrf",
          "vector": [
            3
          ],
          "integer": 1
        }
      },
      {
        "_index": "example-index",
        "_id": "2",                     [2]
        "_score": 0.5,
        "_source": {
          "text": "rrf rrf",
          "vector": [
            4
          ],
          "integer": 2
        }
      },
      {
        "_index": "example-index",
        "_id": "1",                     [3]
        "_score": 0.2,
        "_source": {
          "text": "rrf",
          "vector": [
            5
          ],
          "integer": 1
        }
      },
      {
        "_index": "example-index",
        "_id": "5",                     [4]
        "_score": 0.1,
        "_source": {
          "vector": [
            0
          ],
          "integer": 1
        }
      }
    ]
  }
}
  • [1]??rank 1, _id 3
  • [2]??rank 2, _id 2
  • [3]??rank 3, _id 1
  • [4]? rank 4, _id 5

我們現(xiàn)在可以獲取兩個(gè)單獨(dú)排名的結(jié)果集并將 RRF 公式應(yīng)用于它們以獲得我們的最終排名。

# doc  | query     | knn       | score
_id: 1 = 1.0/(1+4) + 1.0/(1+3) = 0.4500
_id: 2 = 1.0/(1+3) + 1.0/(1+2) = 0.5833
_id: 3 = 1.0/(1+2) + 1.0/(1+1) = 0.8333
_id: 4 = 1.0/(1+1)             = 0.5000
_id: 5 =             1.0/(1+4) = 0.2000

我們根據(jù) RRF 公式對(duì)文檔進(jìn)行排名,其中 window_size 為 5,截?cái)?RRF 結(jié)果集中底部的 2 個(gè)文檔,大小為 3。我們以 _id: 3 作為?_rank: 1, _id: 2 作為?_rank: 2, 及?_id: 4 作為?_rank: 3。這個(gè)排名符合預(yù)期的原始 RRF 搜索的結(jié)果集。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-482083.html

到了這里,關(guān)于Elasticsearch:倒數(shù)排序融合 - Reciprocal rank fusion的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL 分組排序后 → 如何取前N條或倒數(shù)N條

    MySQL 分組排序后 → 如何取前N條或倒數(shù)N條

    晚上,老婆輔導(dǎo)女兒寫(xiě)語(yǔ)文作業(yè) 填空題:春天來(lái)了,__綠了 女兒:春天來(lái)了,爸爸綠了 老婆一臉不悅地問(wèn)道:你再說(shuō)一遍,春天來(lái)了,什么玩意綠了? 女兒:春天來(lái)了,爸爸綠了呀 老婆很生氣,但依舊溫柔地問(wèn)道:春天來(lái)了,爸爸怎么綠了呢 女兒略帶哭腔的說(shuō)道:那冬天

    2024年02月05日
    瀏覽(16)
  • LLM-Blender: 用成對(duì)排序和生成融合集成大型語(yǔ)言模型

    LLM-Blender: 用成對(duì)排序和生成融合集成大型語(yǔ)言模型

    LLM-Blender: Ensembling Large Language Models with Pairwise Ranking and Generative Fusion Dongfu Jiang, Xiang Ren, Bill Yuchen Lin [Zhejiang University University of Southern California Allen Institute for Artificial Intelligence] LLM-Blender: 用成對(duì)排序和生成融合集成大型語(yǔ)言模型 動(dòng)機(jī):大型語(yǔ)言模型(LLM)在多種任務(wù)中表現(xiàn)出了令

    2024年02月11日
    瀏覽(16)
  • Langchain 與 Elasticsearch:創(chuàng)新數(shù)據(jù)檢索的融合實(shí)戰(zhàn)

    Langchain 與 Elasticsearch:創(chuàng)新數(shù)據(jù)檢索的融合實(shí)戰(zhàn)

    在信息爆炸的時(shí)代,有效地檢索和處理數(shù)據(jù)變得至關(guān)重要。Langchain 和 Elasticsearch 的結(jié)合,為我們提供了一個(gè)強(qiáng)大的工具,以更智能的方式進(jìn)行數(shù)據(jù)檢索和分析。 作為一名擁有多年 Elasticsearch 實(shí)戰(zhàn)經(jīng)驗(yàn)的技術(shù)博主,我將在本文中詳細(xì)介紹這兩種技術(shù)的整合應(yīng)用。 Langchain是一個(gè)

    2024年01月19日
    瀏覽(25)
  • Elasticsearch使用篇 - 查詢排序

    Elasticsearch 查詢默認(rèn)按照分值由大到小進(jìn)行排序。 分值計(jì)算基于 BM25 算法。 Elasticsearch排序 可以使用 boost 對(duì)字段加權(quán),從而影響排序結(jié)果。 可以使用 script_score 查詢指定分值,從而影響排序結(jié)果 對(duì)指定字段進(jìn)行排序,對(duì)應(yīng)的 doc_values 參數(shù)需要設(shè)置為 true。而 doc_values 參數(shù)在創(chuàng)

    2024年02月03日
    瀏覽(17)
  • Elasticsearch之排序解析(十二)

    ????????在默認(rèn)情況下,ES對(duì)搜索結(jié)果是按照相關(guān)性降序排序的。有時(shí)需要按照某些字段的值進(jìn)行升序或者降序排序。 ????????ES提供了sort子句可以對(duì)數(shù)據(jù)進(jìn)行排序。使用sort子句一般是按照字段信息進(jìn)行排序,不受相關(guān)性影響,而且打分步驟需要耗費(fèi)一定的硬件資源和

    2024年02月11日
    瀏覽(12)
  • SpringBoot ElasticSearch 聚合排序

    Spring Boot和Elasticsearch的集成主要涉及使用Spring Data Elasticsearch庫(kù)。Elasticsearch是一個(gè)分布式搜索引擎,它提供了豐富的RESTful API,用于索引、搜索和分析大量數(shù)據(jù)。 在Spring Boot中,你可以使用Spring Data Elasticsearch來(lái)簡(jiǎn)化與Elasticsearch的交互。Spring Data Elasticsearch提供了對(duì)Elasticsearch的

    2024年01月23日
    瀏覽(22)
  • Elasticsearch搜索與排序經(jīng)驗(yàn)小記

    最近維護(hù)公司的APP搜索項(xiàng)目,在實(shí)際需求中,領(lǐng)導(dǎo)對(duì)搜索關(guān)心兩方面,第一要搜出來(lái),第二排序要符合人的搜索習(xí)慣,最近一段時(shí)間的搜索經(jīng)驗(yàn)記錄下來(lái)分享一下。 先來(lái)說(shuō)說(shuō)Elasticsearch基本的搜索,一段文字在es中能被搜索出來(lái),拋開(kāi)復(fù)雜的原理,簡(jiǎn)單理解成一句話: ? 搜索詞

    2024年02月09日
    瀏覽(14)
  • Elasticsearch 分組分頁(yè)排序查詢

    Elasticsearch 分組分頁(yè)排序查詢

    背景:elasticsearch聚合之后進(jìn)行分頁(yè)是非常常見(jiàn)的操作 ? 實(shí)現(xiàn)思路: ? ? ? ? 基于es聚合函數(shù)bucket_sort、terms和指標(biāo)聚合cardinality實(shí)現(xiàn) 實(shí)現(xiàn)方式:(以會(huì)員編碼分組分頁(yè)展示會(huì)員最近一條時(shí)間記錄排序?yàn)槔?: 1、查詢實(shí)現(xiàn) 2、es語(yǔ)句 es查詢結(jié)果: 3、java獲取結(jié)果 最終實(shí)現(xiàn)分組分頁(yè)

    2024年02月13日
    瀏覽(14)
  • ElasticSearch 實(shí)戰(zhàn):查詢Sort(查詢排序)

    在Elasticsearch中,查詢排序(Sort)功能允許用戶控制搜索結(jié)果的返回順序。這有助于根據(jù)特定字段的值對(duì)匹配文檔進(jìn)行升序(asc)或降序(desc)排列。以下是如何在實(shí)戰(zhàn)中使用Elasticsearch查詢排序的示例: 一、基本排序 **1. 在URL參數(shù)中指定排序 : 此請(qǐng)求將按照 title 字段的值

    2024年04月16日
    瀏覽(18)
  • elasticsearch index sorting ,索引排序

    es默認(rèn)的搜索排序是_score,通過(guò)評(píng)分排序,但是對(duì)于大數(shù)據(jù)量,評(píng)分一致的情況下也還是會(huì)亂序,官方說(shuō)可以使用_doc,但是這個(gè)索引插入順序是按照分片存的,也就是為2 的順序可能多個(gè)分片都存在。所以實(shí)測(cè)并不好用。博主在做大數(shù)據(jù)量的排序時(shí)候,使用 datatime字段排序 ,解

    2024年02月04日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包