Comments (5)
这个问题我之前也思考过。
我看T2 rank对4个level的定义如下:
只有0是不相关的,1应该也算相关吧。T2rank提到他们follow了TREC的标准,来定义了这4个level。
值得注意的是,你提到的代码里的evaluator, MTEB实际跑的时候是没有调用到的
实际用到的evaluator应该下面是这行:
https://github.com/embeddings-benchmark/mteb/blob/main/mteb/abstasks/AbsTaskRetrieval.py#L54
MTEB在retrieval的任务上采用了BEIR的evaluator,BEIR用的包则是pytrec_eval,看上去和T2Rank的标准是一致的。
我在翻越pytrec_eval的时候看到了这个issue,看上去1-5的rel系数也是支持的。
cvangysel/pytrec_eval#4
在计算dcg 的时候,如果我理解的没错的话,计算增益的方式应该是
(2**rel - 1) / (log2(i+2))
如果rel系数为0的话,增益也为0。
所以我得到的结论就是T2rank计算dcg也不需要额外的处理,计算应该没有问题。
from uniem.
感谢!感谢!感谢!
from uniem.
MAP 的计算是通过 pytrec_eval ,把大于等于 1(relevance_level) 的当作相关,没有挡位的概念了,只有 0 和 大于等于 1。
class RelevanceEvaluator(_RelevanceEvaluator):
def __init__(self, query_relevance, measures, relevance_level=1):
measures = self._expand_nicknames(measures)
measures = self._combine_measures(measures)
super().__init__(query_relevance=query_relevance, measures=measures, relevance_level=relevance_level)
MRR 的计算在 beir 的代码中,也没有挡位的概念,只把分数大于 0 或者说大于等于 1 的看成是相关。和 MAP 的默认实现一致。
def mrr(qrels: Dict[str, Dict[str, int]],
results: Dict[str, Dict[str, float]],
k_values: List[int]) -> Tuple[Dict[str, float]]:
MRR = {}
for k in k_values:
MRR[f"MRR@{k}"] = 0.0
k_max, top_hits = max(k_values), {}
logging.info("\n")
for query_id, doc_scores in results.items():
top_hits[query_id] = sorted(doc_scores.items(), key=lambda item: item[1], reverse=True)[0:k_max]
for query_id in top_hits:
query_relevant_docs = set([doc_id for doc_id in qrels[query_id] if qrels[query_id][doc_id] > 0]) # 注意这里
for k in k_values:
for rank, hit in enumerate(top_hits[query_id][0:k]):
if hit[0] in query_relevant_docs:
MRR[f"MRR@{k}"] += 1.0 / (rank + 1)
break
from uniem.
这个问题我之前也思考过。 我看T2 rank对4个level的定义如下:
只有0是不相关的,1应该也算相关吧。T2rank提到他们follow了TREC的标准,来定义了这4个level。
值得注意的是,你提到的代码里的evaluator, MTEB实际跑的时候是没有调用到的 实际用到的evaluator应该下面是这行: https://github.com/embeddings-benchmark/mteb/blob/main/mteb/abstasks/AbsTaskRetrieval.py#L54 MTEB在retrieval的任务上采用了BEIR的evaluator,BEIR用的包则是pytrec_eval,看上去和T2Rank的标准是一致的。
我在翻越pytrec_eval的时候看到了这个issue,看上去1-5的rel系数也是支持的。 cvangysel/pytrec_eval#4
在计算dcg 的时候,如果我理解的没错的话,计算增益的方式应该是 (2**rel - 1) / (log2(i+2)) 如果rel系数为0的话,增益也为0。 所以我得到的结论就是T2rank计算dcg也不需要额外的处理,计算应该没有问题。
还想继续问下,在算MAP和MRR的时候还考虑这个相关性的档位吗?
from uniem.
实际的计算方式在pytrec_eval中应该有写,不过我c++实在不太好,没找到相关的代码。
不过根据我的理解,map@k是这样计算的:
- 对于每个query,计算precision@k: (number of relevant docs in top k) / k
- 对于所有的query的precision@k取均值。得到map@k
所以看上去计算map@k是不会在意top k内部是如何排位的,个人理解这种指标应该是给retrieval这种粗排任务用的。
而对于精排的话,看ndcg应该更合理一些。
from uniem.
Related Issues (20)
- 关于模型效果 HOT 1
- m3e模型支持openai的接口调用方式吗 HOT 1
- 无法使用图嵌入 HOT 1
- 关于huggingface方法调用 HOT 1
- sentence-transformer调用huggingface模型 HOT 1
- 负采样 HOT 3
- 请教贴:文本最大长度 HOT 5
- 进行评测时会报错,分叉可能会导致死锁. HOT 1
- 求一份评测数据集 HOT 1
- 微调后模型保存和load的问题 HOT 3
- m3e-large数据集的相关问题 HOT 1
- m3e训练的时候使用的数据集是hugg上面列出的数据集,训练和测试集和验证集一起用来训练了吗? HOT 1
- 请问微调之后的模型如何支持C_MTEB数据集上的评测呢 HOT 2
- 实际测试 PairInBatchNegSoftmaxContrastLoss和PairInBatchNegCoSentLoss的值是一样的 HOT 1
- 转onnx问题 HOT 1
- 能不能说明一下显卡要求啊? HOT 3
- fintuner如何使用gpu? HOT 1
- 问题 HOT 3
- 代码跑着跑着就挂了,CUDA out of memory HOT 1
- Loss固定不变或者上升 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from uniem.