当前位置: 首页 > news >正文

Elasticsearch:评估搜索相关性 - 第 1 部分

作者:来自 Elastic Thanos Papaoikonomou, Thomas Veasey

这是一系列博客文章中的第一篇,讨论如何在更好地理解 BEIR 基准的背景下考虑评估你自己的搜索系统。我们将介绍具体的技巧和技术,以便在更好地理解 BEIR 的背景下改进你的搜索评估流程。我们还将介绍导致评估可靠性降低的常见陷阱。最后,我们注意到 LLM 为搜索工程师提供了一个强大的新工具,我们将通过示例展示如何使用它们来帮助评估搜索。

介绍

要改进任何系统,你需要能够衡量其运行情况。在搜索环境中,BEIR(Benchmarking-InformationRetrieval - 或相当于 MTEB 排行榜的检索部分)被认为是信息检索社区的 “holy grail - 圣杯”,这一点并不奇怪。这是一个结构良好的基准,包含不同任务的各种数据集。更具体地说,涵盖以下领域:

  • 论证检索(ArguAna、Touche2020)
  • 开放域问答(HotpotQA、Natural Questions、FiQA)
  • 段落检索(MSMARCO)
  • 重复问题检索(Quora、CQADupstack)
  • 事实核查(FEVER、Climate-FEVER、Scifact)
  • 生物医学信息检索(TREC-COVID、NFCorpus、BioASQ)
  • 实体检索(DBPedia)
  • 引文预测(SCIDOCS)

它提供了一个单一统计数据 nDCG@10,该统计数据与系统在返回的顶级结果中与每个任务示例最相关的文档的匹配程度有关。对于搜索系统来说,人类与顶级结果(top results)的相关性互动至关重要。然而,评估搜索有许多细微差别,而单一的汇总统计数据会忽略这些细微差别。

BEIR 数据集的结构

每个基准都有三个工件:

  • 要检索的语料库或文档
  • 查询
  • 查询的相关性判断(又名 qrels)。

相关性判断以零或更大的分数提供。非零分数表示文档与查询有某种关联。

表 1:数据集统计数据。这些数字是根据数据集的测试部分(MSMARCO 的开发)计算得出的。
DatasetCorpus size#Queries in the test set#qrels positively labeled#qrels equal to zero#duplicates in the corpus
Arguana8,6741,4061,406096
Climate-FEVER5,416,5931,5354,68100
DBPedia4,635,92240015,28628,2290
FEVER5,416,5686,6667,93700
FiQA-201857,6386481,70600
HotpotQA5,233,3297,40514,81000
Natural Questions2,681,4683,4524,021016,781
NFCorpus3,63332312,334080
Quora522,93110,00015,67501,092
SCIDOCS25,6571,0004,92825,0002
Scifact5,18330033900
Touche2020382,545499321,9825,357
TREC-COVID171,3325024,76341,6630
MSMARCO8,841,8236,9807,4370324
CQADupstack (sum)457,19913,145

表 1 列出了构成 BEIR 基准的数据集的一些统计数据,例如语料库中的文档数量、测试数据集中的查询数量以及 qrels 文件中的正/负(查询、文档)对数量。快速浏览数据后,我们可以立即推断出以下内容:

  • 大多数数据集在 qrels 文件中不包含任何负面关系,即零分数,这明确表示文档与给定查询无关。
  • 每个查询的平均文档关系数(#qrels/#queries)从 ArguAna 的 1.0 到 TREC-COVID 的 493.5 不等,但大多数情况下的值小于 5。
  • 一些数据集的语料库中存在重复文档,在某些情况下可能会导致错误的评估,即当文档被认为与查询相关但其重复项不相关时。例如,在 ArguAna 中,我们已识别出 96 个重复文档对案例,其中每个文档对只有一个文档被标记为与查询相关。通过 “expanding - 扩展” 初始 qrels 列表以包括重复项,我们观察到 nDCG@10 得分平均相对增加约 1%。
{"_id": "test-economy-epiasghbf-pro02b","title": "economic policy international africa society gender house believes feminisation","text": "Again employment needs to be contextualised with …","metadata": {}
}
{"_id": "test-society-epiasghbf-pro02b","title": "economic policy international africa society gender house believes feminisation","text": "Again employment needs to be contextualised with …","metadata": {}
}

ArguAna 中重复对的示例。在 qrels 文件中,只有第一个似乎与查询(“test-economy-epiasghbf-pro02a”)相关(作为反驳)

在 MTEB 排行榜上比较模型时,人们很容易关注平均检索质量。这是模型整体质量的一个很好的代表,但它不一定能告诉你模型的表现如何。由于结果是按数据集报告的,因此有必要了解不同数据集与搜索任务的密切关系,并仅使用最相关的数据集对模型进行重新评分。如果你想深入挖掘,你还可以检查与各种数据集语料库的主题重叠。按主题对质量指标进行分层可以更细致地评估它们的具体优势和劣势。

这里需要注意的一点是,如果文档未在 qrels 文件中标记,则默认情况下它被视为与查询无关。我们深入研究这个领域,并收集一些证据来进一步阐明以下问题:“How often is an evaluator presented with (query, document) pairs for which there is no ground truth information? - 评估者多久会遇到一次没有基本事实信息的(查询、文档)对?”。这很重要的原因是,当只有浅层标记可用时(因此并非每个相关文档都标记为浅层标记),一个信息检索系统可能会被判定为比另一个更差,因为它 “选择” 显示不同的相关(但未标记)文档。这是创建高质量评估集时常见的问题,尤其是对于大型数据集。为了切实可行,手动标记通常侧重于当前系统返回的最佳结果,因此可能会错过盲点中的相关文档。因此,通常最好将更多资源集中在更少查询的更完整标记上,而不是广泛的浅层标记。

为了开始我们的分析,我们实施以下场景(参见 notebook):

  • 首先,我们将每个数据集的语料库加载到 Elasticsearch 索引中。
  • 对于测试集中的每个查询,我们使用 BM25 检索前 100 个文档。
  • 我们使用各种 SOTA 重新排序模型对检索到的文档进行重新排序。
  • 最后,我们报告来自步骤 2(检索后)和步骤 3(重新排序后)的前 10 个文档的 “判断率”。换句话说,我们计算 qrels 文件中具有分数的前 10 个文档的平均百分比。

我们使用的重新排序模型列表如下:

  • Cohere's rerank-english-v2.0 and rerank-english-v3.0
  • BGE-base
  • mxbai-rerank-xsmall-v1
  • MiniLM-L-6-v2
表 2:根据检索/重新排序的前 10 个文档计算的每对(数据集,重新排序器)的判断率
RetrievalReranking
DatasetBM25 (%)Cohere Rerank v2 (%)Cohere Rerank v3 (%)BGE-base (%)mxbai-rerank-xsmall-v1 (%)MiniLM-L-6-v2 (%)
Arguana7.544.877.874.524.536.84
Climate-FEVER5.756.248.159.367.797.58
DBPedia61.1860.7864.1563.963.567.62
FEVER8.899.9710.0810.199.889.88
FiQa-20187.0211.0210.778.439.19.44
HotpotQA12.5914.514.7615.114.0214.42
Natural Questions5.948.848.718.378.148.34
NFCorpus31.6732.933.9130.6332.7732.45
Quora12.210.4613.0411.2612.5812.78
SCIDOCS8.629.419.718.048.798.52
Scifact9.079.579.779.39.19.17
Touche202038.7830.4132.2433.0637.9633.67
TREC-COVID92.498.498.293.899.697.4
MSMARCO3.976.006.036.075.476.11
CQADupstack (avg.)5.47

从表 2 中,除了 TREC-COVID(覆盖率 > 90%)、DBPedia(~65%)、Touche2020 和 nfcorpus(~35%)之外,我们发现大多数数据集在检索或重新排序后的标记率在 5% 到 10% 多一点之间。这并不意味着所有这些未标记的文档都是相关的,但其中可能有一个子集(尤其是那些位于顶部位置的文档)可能是正面的。

随着通用指令调整语言模型的出现,我们有了一个强大的新工具,可以自动判断相关性。这些方法通常计算成本太高,无法在线用于搜索,但在这里我们关注的是离线评估。在下文中,我们将使用它们来探索一些 BEIR 数据集存在浅层标记的证据。

为了进一步研究这一假设,我们决定专注于 MSMARCO,并选择 100 个查询的子集以及当前未标记为相关的前 5 个重新排序的文档(使用 Cohere v2)。我们遵循了两种不同的评估路径:首先,我们使用精心调整的提示(稍后将详细介绍)来启动最近发布的 Phi-3-mini-4k 模型,以预测文档与查询的相关性(或不相关性)。同时,这些案例也被手动标记,以便评估 LLM 输出和人类判断之间的一致率。总体而言,我们可以得出以下两个结论:

  • LLM 响应和人类判断之间的一致率略高于 80%,这似乎足以作为该方向的起点。
  • 在 54.5% 的案例中(基于人类判断),返回的文档被发现与查询实际上相关。换一种说法:对于 100 个查询,我们有 107 个文档被判定为相关,但至少有 0.545 x 5 x 100 = 273 个额外的文档实际上是相关的!

以下是从 MSMARCO/dev 数据集中提取的一些示例,其中包含查询、带注释的真(positive)文档(来自 qrels)和由于标记不完整而导致的假(negative)文档:

示例 1:

{"query":{"_id": 155234,"text": "do bigger tires affect gas mileage"},"positive_doc":{"_id": 502713,"text": "Tire Width versus Gas Mileage. Tire width is one of the only tire size factors that can influence gas mileage in a positive way. For example, a narrow tire will have less wind resistance, rolling resistance, and weight; thus increasing gas mileage.",},"negative_doc":{"_id": 7073658,"text": "Tire Size and Width Influences Gas Mileage. There are two things to consider when thinking about tires and their effect on gas mileage; one is wind resistance, and the other is rolling resistance. When a car is driving at higher speeds, it experiences higher wind resistance; this means lower fuel economy."}
}

示例 2:

{"query":{"_id": 300674,"text": "how many years did william bradford serve as governor of plymouth colony?"},"positive_doc":{"_id": 7067032,"text": "http://en.wikipedia.org/wiki/William_Bradford_(Plymouth_Colony_governor) William Bradford (c.1590 \u00e2\u0080\u0093 1657) was an English Separatist leader in Leiden, Holland and in Plymouth Colony was a signatory to the Mayflower Compact. He served as Plymouth Colony Governor five times covering about thirty years between 1621 and 1657."},"negative_doc":{"_id": 2495763,"text": "William Bradford was the governor of Plymouth Colony for 30 years. The colony was founded by people called Puritans. They were some of the first people from England to settle in what is now the United States. Bradford helped make Plymouth the first lasting colony in New England."}
}

手动评估此类特定查询是一种普遍有用的技术,可用于了解搜索质量,可补充 nDCG@10 等定量指标。如果你有一组代表性查询,并且在更改搜索时始终运行这些查询,那么它将为你提供有关性能如何变化的重要定性信息,而这些信息在统计数据中是不可见的。例如,它可以让你更深入地了解搜索返回的错误结果:它可以帮助你发现检索结果中明显的错误、相关错误类别(例如误解特定领域的术语)等等。

我们的结果与 MSMARCO 评估的相关研究一致。例如,Arabzadeh 等人遵循类似的程序,他们雇用众包工作人员进行偏好判断:除其他事项外,他们表明,在许多情况下,与 MSMARCO qrels 文件中的文档相比,重新排名模块返回的文档更受欢迎。另一个证据来自 RocketQA 重新排名器的作者,他们报告说,经过手动检查,发现 70% 以上的重新排名文档是相关的。

主要收获和后续步骤

  • 对更好的基本事实的追求永无止境,因为它对于基准测试和模型比较至关重要。如果谨慎使用并按照适当的说明进行调整,LLMs 可以在一些评估领域提供帮助
  • 更一般地说,鉴于基准测试永远不会完美,最好从纯分数比较转向更强大的技术来捕捉统计上显着的差异。Arabzadeh 等人的工作提供了一个很好的例子,他们根据他们的发现建立了 95% 的置信区间,表明各个运行之间存在显着(或不显着)差异。在随附的 notebook 中,我们使用引导程序提供了置信区间的实现。
  • 从最终用户的角度来看,在阅读基准测试结果时考虑任务对齐很有用。例如,对于构建 RAG 管道并知道最典型的用例涉及从不同来源收集多条信息的 AI 工程师来说,评估其检索模型在 multi-hop QA 数据集(如 HotpotQA)上的性能比评估整个 BEIR 基准的全局平均值更有意义

在下一篇博文中,我们将深入探讨使用 Phi-3 作为 LLM 评判员以及对其进行调整以预测相关性的过程。

准备好自己尝试了吗?开始免费试用。

希望将 RAG 构建到你的应用程序中?想要使用矢量数据库尝试不同的 LLM?

在 Github 上查看我们针对 LangChain、Cohere 等的示例笔记本,并立即加入 Elasticsearch Relevance Engine 培训。

原文:Elasticsearch search relevance: Evaluating using the BEIR benchmark — Search Labs

相关文章:

Elasticsearch:评估搜索相关性 - 第 1 部分

作者:来自 Elastic Thanos Papaoikonomou, Thomas Veasey 这是一系列博客文章中的第一篇,讨论如何在更好地理解 BEIR 基准的背景下考虑评估你自己的搜索系统。我们将介绍具体的技巧和技术,以便在更好地理解 BEIR 的背景下改进你的搜索评估流程…...

超声波清洗机哪款好用?保姆级教学,教你手把手挑选适合自己的超声波清洗机

提及超声波清洗机,大家都不陌生,尤其是佩戴眼镜的小伙伴,眼镜的镜片长时间不清洁容易模糊不清,而超声波清洗机的出现,可以轻松清洗还不会损坏镜片,备受眼镜党喜爱。但由于现在市面上的超声波清洗机的款式太…...

vscode常用组件

1.vue-helper 启用后点击右下角注册,可以通过vue组件点击到源码里面 2.【Auto Close Tag】和【Auto Rename Tag】 3.setting---Auto Reveal Exclude vscode跳转node_modules下文件,没有切换定位到左侧菜单目录> 打开VSCode的setting配置&#xff…...

IDEA创建普通Java项目

环境准备 Java环境 运行javac查看java环境是否安装完成 开发工具Intellij IDEA 下载地址:https://www.jetbrains.com/idea/download/?sectionwindows 创建项目 点击新建项目 填入项目名字,项目路径,选择maven,点击下面的创建 运行项目 …...

华为“铁三角模式”在数据类项目中的应用和价值

引言:随着信息技术的飞速发展,企业纷纷踏上数字化转型的道路,希望通过数据分析和智能决策来提升企业竞争力。在这一过程中,数据类项目成为关键,它们旨在构建高效的数据治理和分析平台,为企业决策提供有力支…...

P1-AI产品经理--九五小庞

产品经理的定位 AI基于现有业务挖掘AI应用场景,服务提供商选择及算法定制等,配合已有产品完成整体产品工工资基于从事医疗行业的考虑,我们走的应该是AI产品经理(软件型) AI产品经理(行业型) AI…...

PHP手边酒店多商户版平台小程序系统源码

🏨【旅行新宠】手边酒店多商户版小程序,一键解锁住宿新体验!🛌 🌈【开篇:旅行新伴侣,尽在掌握】🌈 还在为旅行中的住宿选择而纠结吗?是时候告别繁琐的搜索和比价过程&a…...

计算机视觉7 kag比赛

Kaggle 是一个非常知名的数据竞赛平台,提供了许多计算机视觉相关的竞赛项目,以下是一些在 Kaggle 上可能会遇到的计算机视觉项目类型及相关的简单介绍和示例: 图像分类:给定一组图像,任务是将它们分类到不同的类别中。…...

Go 协程通道使用注意

目录 关闭channel 引入 不关闭通道是有风险的,主要存在两条: 如何优雅的关闭? 1.只有一个发送者 2.多个发送者 判断通道是否关闭 有缓存和无缓存的通道有什么区别? 错误的关闭通道 关闭channel close(chan):关…...

React基础学习-Day04

React基础学习-Day04 常见的钩子函数及基础使用方式 1.useState useState 是 React 的一个 Hook,用于在函数组件中添加状态。它返回一个状态变量和一个更新该状态的函数。与类组件的 this.state 和 this.setState 相对应,useState 让函数组件也能拥有…...

python爬虫获取网易云音乐评论歌词以及歌曲地址

python爬虫获取网易云音乐评论歌词以及歌曲地址 一.寻找数据接口二.对负载分析三.寻找参数加密过程1.首先找到评论的请求包并找到发起程序2.寻找js加密的代码 四.扣取js的加密源码1.加密函数参数分析①.JSON.stringify(i0x)②bse6Y(["流泪", "强"])③bse6Y…...

中间件的理解

内容来源于学习网站整理。【一看就会】什么是前端开发的中间件?_哔哩哔哩_bilibili 每日八股文~白话说mq,消息中间件_哔哩哔哩_bilibili 例如: 1)两个人打电话,中间的通信网络就是中间件。 2)菜鸟驿站&…...

django实现用户的注册、登录、注销功能

创建django项目的步骤:Django项目的创建步骤-CSDN博客 一、前置工作 配置数据库,设置数据库引擎为mysql 1、在settings文件中找到DATABASES, 配置以下内容 DATABASES {"default": {ENGINE: django.db.backends.mysql, # 数据库引擎NAME: dja…...

【JAVA 常用API】数据库字段存储JSON格式数据,JAVA中如何将List<Entity>或者对象实体转换为字符串

在Java中,可以使用第三方库如Jackson或Gson来进行JSON的转换。这些库提供了将Java对象转换为JSON字符串的方法。 一:Gson API转Json Getter Setter NoArgsConstructor AllArgsConstructor ToString Builder public class Person {private String name;p…...

AI算不出9.11和9.9哪个大?六家大模型厂商总结了这些原因

大模型“答对”或“答错”其实是个概率问题。关于“9.11和9.9哪个大”,这样一道小学生难度的数学题难倒了一众海内外AI大模型。7月17日,第一财经报道了国内外“12个大模型8个都会答错”这道题的现象,大模型的数学能力引发讨论。 “从技术人员…...

MacBook电脑远程连接Linux系统的服务器方法

一、问题简介 Windows 操作系统的电脑可使用Xshell等功能强大的远程连接软件。通过连接软件,用户可以在一台电脑上访问并控制另一台远程计算机。这对于远程技术支持、远程办公等场景非常有用。但是MacBook电脑的macOS无法使用Xshell。 在Mac上远程连接到Windows服…...

CSS-0_3 CSS和单位

文章目录 CSS的值和单位属性值长度单位CSS和绝对单位CSS和相对单位百分比em & rem视口 颜色单位 碎碎念 CSS的值和单位 我们知道,CSS是由属性和属性值所组成的表 随着CSS的发展,属性不说几千也有几百,我从来不支持去背诵所有的可能性。…...

【代码随想录|贪心算法 455. 分发饼干 376. 摆动序列 53. 最大子数组和】

代码随想录|贪心算法 455. 分发饼干 一、455. 分发饼干1.代码2.问题 二、376. 摆动序列1.代码 三、53. 最大子数组和1.代码 总结 python 一、455. 分发饼干 455. 分发饼干 1.代码 代码如下(示例): class Solution:def findContentChildr…...

swift小知识点(二)

1、 Swift 枚举 Swift 中使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内: enum enumname {// 枚举定义放在这里 } 如下事例: // 定义枚举 enum DaysofaWeek {case Sundaycase Mondaycase TUESDAYcase WEDNESDAYcase THURSDAYcase…...

机器人产业发展格局多元化,创业公司突破瓶颈需多维施策

当前,机器人产业的发展格局呈现出多元化、快速增长和技术不断创新的特点。从全球视角来看,机器人市场持续增长,预计到2026年全球人形机器人市场规模将超过20亿美元,到2030年有望突破200亿美元,显示出巨大的市场潜力和发…...

接口测试JMeter-1.接口测试初识

第一章 接口测试初识 1. 接口测试理论基础 “接口测试”一个让人觉得非常高大上的名词,特别是对于刚入门的测试同学而言。随着测试技术不断的深化,“接口测试”出现在我们视野中的频次越来越高。那么接口测试到底是如何做的?接口测试的优势又…...

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-22 TPG图像测试数据发生器设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…...

如何通过企业微信会话存档保护企业利益?

赵总: 张经理,最近行业内频发数据泄露事件,我们的客户资料和内部沟通记录安全吗? 张经理: 赵总,我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录,我们最近引入了安企神软件,它能很…...

git修改提交姓名

git config --global user.name “新用户名” git config --global user.email “新邮箱地址” 修改提交的用户名 git config --global user.name “yu***”...

5、在共享内存无指针编程:句柄HANDLE转换为指针

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 共享内存里面不能用指针&#…...

hive动态分区导致xceivercount超限,hdfs无法创建新连接

目录 一、事件复盘: 二、解决方案: 三、讨论 一、事件复盘: hdfs无法创建新的文件,xceivercount超过最大设置,平时每个datanode只有100个左右的连接,突然达到8000以上。 事故原因,跨多天的…...

如何识别Android init 中的缓慢操作

Android 14 开机时间优化措施汇总-CSDN博客 Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客Android系统设置kernel log level的…...

JVM:常用工具总结

文章目录 一、jstat工具 一、jstat工具 Jstat工具是JDK自带的一款监控工具,可以提供各种垃圾回收、类加载、编译信息等不同的数据。使用方法为:jstat -gc进程ID每次统计的时间间隔(毫秒)统计次数。 C代表Capacity容量&#xff0c…...

二染色,CF 1594D - The Number of Imposters

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1594D - The Number of Imposters 二、解题报告 1、思路分析 并查集&…...

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中,多个线程传递数据的方式一般都是共享内存,而Go语言中多Goroutine通信的主要方案是Cha…...

政府机构做门户网站的好处/落实好疫情防控优化措施

说到GTA5这款游戏,那可以说和现实中非常相似的,尤其是在线上模式当中,你需要靠自己一步一步的去努力达到人生巅峰,而且可以用钱买任何东西,房产,载具,武器等一系列的东西,你可以用这…...

四川酒店网站建设/网站收录查询网

我会通过本系列文章,详细介绍如何从零开始用51单片机去实现智能小车的控制,在本系列的上一篇文章中介绍了如何让小车实现自动避障,本文作为本系列的第四篇文章,主要介绍蓝牙模块的使用,如何通过蓝牙进行数据传输&#…...

学院网站建设/cnzz数据统计

V831在jupyter 显示拍摄图像使用方法遇到的问题及解决方法折腾了好久终于成功了。不废话看效果 使用方法 怎么做到的呢?一起来吧,先复习一下jupyter怎么用。 本机CMD 输入jupyter notebook 启动jupyter V831启动服务 maixpy3_rpycs 在jupyter建一个网…...

深圳较便宜的网站建设/seo行业

获取变量类型 typeof(var) Number String 类型转换 parseInt parseFloat Date() getDate() 1-31日 getTime() 1970-1-1到当前的毫秒数 getDay() 星期几0-6 getHours() getMinutes() getSeconds() setFullYear() setDate() getFullYear()...

商城网站建设流程图/如何查询百度收录情况

语法 switch(n) { case 1:执行代码块 1break; case 2:执行代码块 2break; default:n 与 case 1 和 case 2 不同时执行的代码 }工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配&am…...

网站源码制作/百度联盟怎么加入赚钱

从十二星座分布图来看,我们不同星座位于不同的位置(废话),所以我们夏天旅游也要去不同的地方!要去就要去符合我们气场的地方,舒服。 这有关系吗???你又在骗我&#xff01…...