- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Azure 搜索上的索引中添加评分配置文件。更具体地说,我索引中的每个文档都有一个 Edm.Double
类型的 weight
字段,我想根据这个值来提升它们。我不想直接根据权重
对它们进行排序,因为搜索词的相关性也很重要。
所以为了测试它,我创建了一个评分配置文件,其幅度函数的提升值为 1000(只是为了看看我是否了解这个东西是如何工作的)、线性插值、起始值 0 和结束值 1。我是什么期望将提升值添加到整体搜索分数中。因此,权重为 0.5 的文档将获得 500 的提升,而权重为 0.125 的文档将获得 125 的提升。然而,所得分数远没有这么直观。
对于这种情况,我有几个问题:
1) 本例中的函数分数是如何生成的?我的文档权重彼此接近(假设为 0.5465 和 0.5419),但它们的最终分数之间的差异约为 100-150,而我预计其约为 4-5。
2) 函数得分和权重如何汇总为每个搜索结果的最终得分?
最佳答案
因此,Nate 提供的答案很难理解,并且遗漏了一些组件。我概括了整个评分过程,相当复杂。
因此,当用户执行搜索时,将向 Azure 搜索提供查询
。 Azure 搜索使用 TF-IDF
算法根据分析器形成的 Token
确定 0-1 的分数。请记住,特定于语言的分析器可以为一个单词提供多个标记。对于每个可搜索字段,都会生成分数,然后乘以
评分配置文件中的权重。最后将所有加权分数相加,即为初始加权分数。
评分配置文件还可能包含评分函数。评分函数可以是基于大小、新鲜度、地理或标签的函数。可以在一个评分配置文件中创建多个功能。
将对函数进行评估,函数的分数可以进行求和,也可以取平均值、最小值、最大值或第一个匹配。然后将所有函数的总和乘以总加权得分,即为最终得分。
示例,这是带有评分配置文件的示例索引。
{
"name": "musicstoreindex",
"fields": [
{ "name": "key", "type": "Edm.String", "key": true },
{ "name": "albumTitle", "type": "Edm.String" },
{ "name": "genre", "type": "Edm.String" },
{ "name": "genreDescription", "type": "Edm.String", "filterable": false },
{ "name": "artistName", "type": "Edm.String" },
{ "name": "rating", "type": "Edm.Int32" },
{ "name": "price", "type": "Edm.Double", "filterable": false },
{ "name": "lastUpdated", "type": "Edm.DateTimeOffset" }
],
"scoringProfiles": [
{
"name": "boostGenre",
"text": {
"weights": {
"albumTitle": 1.5,
"genre": 5,
"artistName": 2
}
}
},
{
"name": "newAndHighlyRated",
"functions": [
{
"type": "freshness",
"fieldName": "lastUpdated",
"boost": 10,
"interpolation": "linear",
"freshness": {
"boostingDuration": "P365D"
}
},
{
"type": "magnitude",
"fieldName": "rating",
"boost": 8,
"interpolation": "linear",
"magnitude": {
"boostingRangeStart": 1,
"boostingRangeEnd": 5,
"constantBoostBeyondRange": false
}
}
],
"functionAggregation": 0
}
]
}
假设输入的查询是 Linkin Park 的著名专辑 meteora
。假设我们的索引中有以下文档。
{
"key": 123,
"albumTitle": "Meteora",
"genre": "Rock",
"genreDescription": "Rock with a flick of hiphop",
"artistName": "Linkin Park",
"rating": 4,
"price": 30,
"lastUpdated": "2020-01-01"
}
我不是 TF-IDF 方面的专家,但我可以想象将产生以下未加权分数:
{
"albumTitle": 1,
"genre": 0,
"genreDescription": 0,
"artistName": 0
}
评分配置文件在 albumTitle 字段上的权重为 1.5,因此总加权分数将为:1 * 1.5 + 0 + 0 + 0 = 1.5
之后,将评估评分配置文件函数。在本例中,有 2 个。第一个评估新鲜度,范围为 365 天,一年。最后更新的字段值为今年 4 月 1 日。假设那是从现在起 50 天后。总范围为 365,因此如果最后更新日期是今天,您将获得 1 分。如果过去 365 天或更长时间,则为 0。在我们的例子中,它是 1 - 50/365 = 0.8630..
。该函数的提升为 10
,因此第一个函数的得分为 8.630
。
第二个函数是一个幅度函数,范围从 1 到 5。该文档获得了 4 星评级,因此得分为 0.8,因为 1 星是 0,5 星是 1。所以 a 代表 4 星显然是4/5 = 0.8
。幅度函数的提升为 8,因此我们必须将该值乘以 8。0.8 * 8 = 6.4
。
functionAggregation
为 0,这意味着我们必须对所有函数的结果求和。给我们评分配置文件函数的总分:6.4 + 8.630 = 15.03
。然后,规则是将总评分配置文件函数分数乘以字段的总加权分数,得出总计:15.03 * 1.5 = 22.545
。
希望您能喜欢这个例子。
关于ranking - 评分配置文件如何在 Azure 搜索中生成分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427940/
直接从 Python 代码运行 pylint 时,我似乎无法获得任何返回值。从命令行运行它会生成一个漂亮的报告,在底部有一个总结分数。 我已经尝试将“Run”的返回值放入一个变量中,并获取它的“rep
我是 Python 新手,正在尝试学习单词检测。我有一个带有单词的数据框 sharina['transcript'] Out[25]: 0 thank you for calling my
http://jsfiddle.net/q8P7Y/ 我在最后显示最终分数时遇到问题,有很多方法可以做到这一点,但我不确定什么是最好的。 正如你所看到的,下一个按钮只是 div 的显示/隐藏,而不是页
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我试图在按下按钮时添加分数,分数显示在 JTextField 中,但是当按下按钮时,分数会添加,它显示为 0。我有一个存储分数的整数字段 private int score=0; yesButton
我可以在选项(单选按钮)随机播放之前计算分数/分数,如下面的代码所示。在Collection.shuffle()之前,选项是固定的,因为 CorrectChoice将始终分配给c2单选按钮。那么我可以
我在这里的代码只能得到87%的代码,因为“带有非正参数的加法参数什么也没做。我该如何解决呢?我尝试了更多的方法,但是我什至无法解决此错误在同学的帮助下 说明是: 对于此分配,您将创建一个存储分数的类。
昨天,我尝试以一种方式执行此操作...今天我尝试另一种方式,但仍然卡住了。我必须找到一种使用整数除法和取模来做到这一点的方法。这是我的代码,后面是错误消息。 public int evaluateFr
我这里有一些特殊字符: http://209.141.56.244/test/char.php 但是当我在这里通过 ajax 抓取这个文件时,它们显示为 back ?标记: http://209.14
我得到了一张图表 G与 n顶点,标记自 1至 n (2 a_1 -> a_2 -> ... a_k -> n A然后将占据 1 的所有“子节点”节点, a_1 , ... a_x (其中 x = ce
我有一个看起来像这样的 mongodb 集合: db.scores.insert({"name": "Bob", value: 96.3, timeStamp:'2010-9-27 9:32:00'}
我试图更好地了解 lucene 如何对我的搜索进行评分,以便我可以对我的搜索配置或文档内容进行必要的调整。 以下是分数明细的一部分。 产品: 0.34472802 = queryWeight,
在我网站上用户生成的帖子下,我有一个类似亚马逊的评级系统: Was this review helpful to you: Yes | No 如果有投票,我会在该行上方显示结果,如下所示:
对于我的项目,我需要找出哪些搜索结果被视为“良好”匹配。目前,分数因查询而异,因此需要以某种方式对它们进行标准化。标准化分数将允许选择高于给定阈值的结果。 我为 Lucene 找到了几个解决方案: h
我有一个由 57 个变量组成的数据文件。由于测量水平不均匀,我想将其中的大约 12 个转换为 z 分数。我查找了互联网资源和帮助文件。一个互联网资源建议我需要 Rbasic 包(不存在)。我使用了 s
我对 SOLR 核心运行查询并使用过滤器限制结果例如 fq: {!frange l=0.7 }query($q)。我知道 SOLR 分数不有绝对意义,但是0.7(只是一个例子)是计算出来的基于用户输入
我想找到不同的方法来解决我遇到的现实生活问题:想象一下进行一场比赛或一场游戏,在此期间用户收集积分。您必须构建一个查询来显示具有最佳“n”分数的用户列表。 我举一个例子来澄清。假设这是用户表,其中包含
我有很多 wiki 页面,我想训练一个分类器,看看是否可以通过一些特征(包括段落的位置和段落的 lucene 分数)来确定重点搜索的位置。我尝试将每个段落视为一个文档,这使我能够获得每个段落的 luc
我是 R 编程新手,在使用一些基本代码时遇到问题。 我有一个包含以下列的数据框:条件(因子)、用户(因子)和灵敏度(int)。对于每个用户有 20 个敏感项。我需要为每个用户创建一个具有标准化敏感度分
我是一名优秀的程序员,十分优秀!