【Elasticsearch】diversified sampler

 作用就是聚合前的采样,主要是采样 它就是用来采样的,采完样后在进行聚合操作

`random_sampler`和`diversified_sampler`是 Elasticsearch 中用于聚合查询的两种采样方法,它们的主要区别如下:


采样方式

• `random_sampler`:通过随机选择文档的方式进行采样。它会根据指定的概率(`probability`参数)从整个文档集合中随机抽取文档,而不考虑文档的其他特征。

• `diversified_sampler`:在采样的基础上增加了多样性限制。它会根据指定的字段(`field`参数)对文档进行分组,并限制每个分组中最多采样的文档数量(`max_docs_per_value`参数),从而确保采样结果中包含更多不同的字段值。


适用场景

• `random_sampler`:适用于需要快速获取近似结果的场景,尤其是在数据量非常大时,可以通过采样显著提高查询性能。例如,计算价格的百分位数时,可以使用随机采样来快速得到一个近似的结果。

• `diversified_sampler`:适用于需要消除数据偏差的场景,例如在分析用户生成的内容时,避免某些用户或来源的过度影响。例如,在分析 StackOverflow 上的标签时,可以通过限制每个作者的文档数量来避免某些作者的偏好对结果的影响。


参数设置

• `random_sampler`:

• `probability`:指定采样的概率,必须大于 0 且小于 0.5。

• `seed`:可选参数,用于指定随机采样的种子,确保多次查询的结果一致。

• `diversified_sampler`:

• `field`:指定用于去重的字段。

• `max_docs_per_value`:限制每个字段值最多采样的文档数量,默认为 1。

• `shard_size`:指定每个分片上采样的文档数量。


输出结果

• `random_sampler`:返回的文档数量是根据采样概率计算的,结果是随机的,但可以通过种子参数保持一致。

• `diversified_sampler`:返回的文档数量会受到多样性限制的影响,确保每个字段值的文档数量不超过指定的最大值。

总结来说,`random_sampler`更注重快速采样和性能优化,而`diversified_sampler`更注重采样的多样性和公平性,适用于需要消除数据偏差的场景。

在采样的基础上增加多样性限制,是指在随机抽取文档的过程中,通过一些额外的规则来确保采样结果中包含更多不同的特征或类别,而不是完全随机地抽取文档。这种多样性限制可以帮助减少数据的偏差,使采样结果更具代表性。

具体解释

假设我们有一个文档集合,每个文档都有一个或多个特征(例如,文档的作者、标签、类别等)。在没有多样性限制的情况下,随机采样可能会导致某些特征的文档被过度采样,而其他特征的文档则被忽略。例如,如果某个作者的文档数量特别多,随机采样可能会导致大部分采样结果都来自这个作者,而其他作者的文档则很少被采样到。

为了克服这种偏差,`diversified_sampler`在采样的基础上增加了多样性限制。它会根据指定的字段(例如,作者字段)对文档进行分组,并限制每个分组中最多采样的文档数量。这样可以确保每个分组(即每个作者)都有机会被采样到,从而提高采样结果的多样性。

举例说明

假设我们有一个包含以下文档的集合,每个文档都有一个`author`字段:

 文档ID author 内容         

 1 Alice 文章A        

 2 Alice 文章B        

 3 Bob 文章C        

 4 Charlie 文章D        

 5 Bob 文章E        

 6 Alice 文章F        

如果我们使用普通的随机采样(`random_sampler`),可能会得到以下结果(假设采样概率为 0.5):

 文档ID author 内容         

 1 Alice 文章A        

 2 Alice 文章B        

 5 Bob 文章E        

可以看到,Alice 的文档被过度采样了,而 Charlie 的文档没有被采样到。

如果我们使用`diversified_sampler`,并设置`field=author`和`max_docs_per_value=1`,那么采样结果可能会是:

 文档ID author 内容         

 1 Alice 文章A        

 3 Bob 文章C        

 4 Charlie 文章D        

在这种情况下,每个作者的文档最多被采样一次,从而确保了采样结果中包含更多不同的作者。这就是在采样的基础上增加了多样性限制的含义。

作用

通过增加多样性限制,`diversified_sampler`可以:

1. 减少数据偏差:避免某些特征(如某个作者或某个标签)的文档被过度采样,从而提高采样结果的公平性和代表性。

2. 提高结果的多样性:确保采样结果中包含更多不同的特征或类别,这对于数据分析和机器学习等场景非常有用,因为这些场景通常需要多样化的数据来训练模型或进行分析。

总之,`diversified_sampler`在随机采样的基础上增加了多样性限制,使得采样结果更加均衡和多样化。

 

 

那diversified_sampler最终不还是随机吗?

是的,`diversified_sampler`的采样过程仍然具有随机性,但它在随机采样的基础上增加了多样性限制,以确保采样结果中包含更多不同的特征或类别。这种多样性限制可以减少某些特征(如作者或来源)的文档过度占据采样结果的可能性,从而提高结果的代表性和公平性。

 

 

随机性与多样性的结合

 

1. 随机性:`diversified_sampler`在选择文档时仍然会随机选择,这意味着每次运行查询时,即使设置了相同的参数,采样结果可能也会有所不同。这种随机性确保了采样过程的公平性,避免了对某些特定文档的偏袒。

 

2. 多样性限制:通过设置`field`和`max_docs_per_value`参数,`diversified_sampler`会限制每个分组(如每个作者或每个来源)中最多采样的文档数量。这确保了采样结果中包含更多不同的特征或类别,从而减少某些特征的文档过度占据结果的可能性。

 

 

具体实现

 

• 随机选择:在每个分片内,`diversified_sampler`会随机选择文档。

 

• 多样性限制:在随机选择的过程中,它会根据`field`参数对文档进行分组,并根据`max_docs_per_value`参数限制每个分组中最多采样的文档数量。

 

 

示例说明

假设你有一个包含以下文档的集合,每个文档都有一个`author`字段:

 

 

 文档ID author 内容         

 1 Alice 文章A        

 2 Alice 文章B        

 3 Bob 文章C        

 4 Charlie 文章D        

 5 Bob 文章E        

 6 Alice 文章F        

 

 

 

如果你使用`diversified_sampler`,并设置`field=author`和`max_docs_per_value=1`,那么采样过程如下:

 

 

1. 随机选择:在每个分片内,随机选择文档。

 

2. 多样性限制:对于每个作者,最多只选择一个文档。

 

假设随机选择的结果如下:

 

 

 文档ID author 内容         

 1 Alice 文章A        

 3 Bob 文章C        

 4 Charlie 文章D        

 

 

 

可以看到,虽然选择过程是随机的,但由于多样性限制,每个作者最多只有一个文档被采样,从而确保了结果的多样性。

 

 

总结

`diversified_sampler`的确是随机的,但它通过多样性限制确保了采样结果中包含更多不同的特征或类别。这种结合随机性和多样性的方法可以有效减少某些特征的文档过度占据结果的可能性,从而提高结果的代表性和公平性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965857.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2月7号.

二叉树是一种特殊的树形数据结构,具有以下特点: 基本定义 节点的度:二叉树中每个节点最多有两个子节点,分别称为左子节点和右子节点。 子树的顺序性:二叉树的子树有左右之分,且顺序不能颠倒。 递归定义&…

openpnp2.2 - 环境搭建 - 编译 + 调试 + 打包

文章目录 openpnp2.2 - 环境搭建 - 编译 调试 打包概述笔记前置任务克隆代码库切到最新的tag清理干净编译工程关掉旧工程打开已经克隆好的openpnp2.2工程将IDEA的SDK配置为openjdk23 切换中英文UI设置JAVA编译器 构建工程跑测试用例单步调试下断点导出工程的JAR包安装install…

【复现论文】DAVE

网站: GitHub - jerpelhan/DAVE 下载完以后,阅读 readme文件 新建终端,打印文件树,不包含隐藏文件: 命令:tree -I .* . ├── LICENSE ├── README.md ├── demo.py ├── demo_zero.py ├── mai…

GB/T28181 开源日记[8]:国标开发速知速会

服务端源代码 github.com/gowvp/gb28181 前端源代码 github.com/gowvp/gb28181_web 介绍 go wvp 是 Go 语言实现的开源 GB28181 解决方案,基于GB28181-2022标准实现的网络视频平台,支持 rtmp/rtsp,客户端支持网页版本和安卓 App。支持rts…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 **一、**自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成phpstudy中的数据库无法启动,这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#…

grafana面板配置opentsdb

新增面板: 这里add-panel: 如果不是想新增面板而是想新增一行条目,则点击convert to row: 在新增的面板这里可以看到选择数据源 Aggregator:聚合条件,区分下第一行和第二行的aggregator,第一个是对指标值的聚合&…

论文翻译学习:《DeepSeek-R1: 通过强化学习激励大型语言模型的推理能力》

摘要 我们介绍了我们的第一代推理模型 DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个通过大规模强化学习(RL)训练的模型,没有经过监督微调(SFT)作为初步步骤,展示了卓越的推理能力。通过强化…

【Uniapp-Vue3】从uniCloud中获取数据

需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…

【自然语言处理】TextRank 算法提取关键词(Python实现)

文章目录 前言PageRank 实现TextRank 简单版源码实现jieba工具包实现TextRank 前言 TextRank 算法是一种基于图的排序算法,主要用于文本处理中的关键词提取和文本摘要。它基于图中节点之间的关系来评估节点的重要性,类似于 Google 的 PageRank 算法。Tex…

免费windows pdf编辑工具

Epdf(完全免费) 作者:不染心 时间:2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器,目前仍在开发中。它提供了一系列实用的命令行选项,方便用户对 PDF …

星闪开发入门级教程之安装编译器与小项目烧录

系列文章目录 星闪开发入门级教程 好久不见,已经好几年没有发文章了,星闪-作为中国原生的新一代近距离无线联接技术品牌。我想着写点东西。为了适合新手,绝对小白文。 文章目录 系列文章目录前言一、Hispark Studio1.安装Hispark Studio2.安…

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException解决办法

1.问题描述 在编写完一个功能后,第一次启动这个模块的启动类时,报以下错误, 2.文件解决 检查了controller,service和mapper,均未发现有问题,核对了依赖也未发现依赖冲突 在网上也找了资料,有总结的比较好的: controller层service层dao层注解是否都使用正确?接口…

记录 | WPF基础学习Style局部和全局调用

目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章&#xff…

信创数据库使用问题汇总

笔者工作中需要使用多种信创数据库,在使用过程中发现一些问题,现记录如下。 1 OceanBase-Oracle租户的Python连接方式 用Python连接OB数据库的mysql租户可以使用连接mysql的包,但连接oracle租户是没有官方包的,必须使用基于jdbc…

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…

Web3 与区块链:开启透明、安全的网络新时代

在这个信息爆炸的时代,我们对网络的透明性、安全性和隐私保护的需求日益增长。Web3,作为新一代互联网的代表,正携手区块链技术,引领我们走向一个更加透明、安全和去中心化的网络世界。本文将深入探讨 Web3 的基本概念、区块链技术…

[Android] 全球网测-版本号4.3.8

[Android] 全球网测 链接:https://pan.xunlei.com/s/VOIV5G3_UOFWnGuMQ_GlIW2OA1?pwdfrpe# 应用介绍 "全球网测"是由中国信通院产业与规划研究所自主研发的一款拥有宽带测速、上网体验和网络诊断等功能的综合测速软件。APP突出六大亮点优势&#xff1a…

AI智算-k8s部署DeepSeek Janus-Pro-7B 多模态大模型

文章目录 简介环境依赖模型下载下载Janus库GPU环境镜像模型manifest调用Janus多模态文生图 简介 DeepSeek Janus Pro 作为一款强大的多模态理解与生成框架,正在成为研究人员和开发者的热门选择。本文将详细介绍如何在云原生k8s环境中部署配置和使用 DeepSeek Janus…

windows 安装nvidaia驱动和cuda

安装nvidaia驱动和cuda 官网搜索下载驱动 https://www.nvidia.cn/drivers/lookup/ 这里查出来的都是最高支持什么版本的cuda 安装时候都默认精简就行 官网下载所需版本的cuda包 https://developer.nvidia.com/cuda-toolkit-archive 安装成功但是nvcc -V 失败 &#xff0c…

HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)

目录 前言 GPIO(通用输入输出引脚) 推挽输出模式 浮空输入和上拉输入模式 GPIO其他模式以及内部电路原理 输出驱动器 输入驱动器 中断 外部中断(EXTI) 深入中断(内部机制及原理) 外部中断/事件控…