Comments (9)
感觉rerank的分数区分度很小 下面这个例子,bge-rerank-base 和 bce-rerank-base-v1的得分,
pairs = [['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']] with torch.no_grad(): inputs = bge_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) for key in inputs: inputs[key]=inputs[key].to("cuda:0") bge_scores = bge_model(**inputs, return_dict=True).logits.view(-1, ).float() print(bge_scores)
inputs = bce_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) for key in inputs: inputs[key]=inputs[key].to("cuda:0") bce_scores = bce_model(**inputs, return_dict=True).logits.view(-1, ).float() print(bce_scores)
未sigmoid结果: tensor([-8.1544, 6.1821], device='cuda:0') tensor([-0.6458, 0.3187], device='cuda:0')
sigmoid结果: tensor([2.8739e-04, 9.9794e-01], device='cuda:0') tensor([0.3439, 0.5790], device='cuda:0')
感谢您对bce的关注,是这样的:
1、rerank判断query和passage的语义相关性分数,bce是0~1的,这个例子中0.34和0.58是很合理的。因为一般bce的rerank分数用来过滤低质量的passage,推荐的rerank分数阈值是0.35或0.4,所以这个0.35或0.4是一个门槛,0.58是一个相对比较正的正例对了。
2、bge一般不用sigmoid来获取分数,因为bge模型训练过程中语义相关分数是用softmax得出来的,但是softmax得到的分数是相对分数(相对分数只能用来排序,但用来表征query和passage到底有多么语义相关就不可靠了(具体可以看一下softmax公式);绝对分数用处就比较大了,既可以用来排序,也可以表征query和passage到底有多么相关,可以用来过滤低质量passage)。
3、你举的例子bge rerank+sigmoid分数看着更符合的你预期只是巧合,多试几个例子你就会发现问题(问题根源是bge rerank不应该用sigmoid)。而且你细想,你举的例子,其实bce rerank分数更加科学,因为例子中的正例bge rerank能达到0.998,这个分数高的出奇,你细想就会发现问题(这个分数太硬了,更正的正例分数应该预期是多少呢?bge rerank分数太硬的原因是错用了sigmoid输出分数,应该用softmax)。
相对来说bce rerank负例0.34,正例0.58是更科学的,正负例的rerank分数更加smooth(其实这个smooth就是我们bce rerank精排能力强的一个原因:https://github.com/netease-youdao/BCEmbedding?tab=readme-ov-file#1-multiple-domains-scenarios)。
更多解释,详见bce技术报告:https://zhuanlan.zhihu.com/p/681370855
4、总结一下:bce rerank可以输出绝对的语义相关分数,而且rerank 分数是smooth的,以0.35或0.4为界,可用于过滤低质量passage。
from bcembedding.
感觉 bce reranker 训练阶段先 pointwise 得到绝对语义分,再 listwise 转相对排序分,实现兼顾的**。但从技术报告来看,似乎更加复杂,如提到的 “其分数的绝对值可表征真实的语义相关程度”。能再详细的解释一下吗 @shenlei1020
from bcembedding.
不能这么设置:
1、建议根据你的场景测试数据来定阈值,跑一遍,就能看出来不相关和相关的阈值分界线;
from bcembedding.
谢谢回复!
因为在检索的过程中,如果我的query和passage是一样的话,余弦相似度的值是1,而在使用排序模型进行Rerank时,Query和Passage一样的时候,这个得到的score的分数每次不一样,也不是1,所有很好奇这是不是用的sigmod损失训练的,如果是sigmoid损失的话,低于0.5就可以认为它是负相关,高于0.5则是正相关了
from bcembedding.
是这样的,RerankerModel对query和passage相同的情况,只会得分比较高,但不会是1,这是算法底层原理决定的。
关于阈值,我建议按照自己的场景来定,我们自己用的话,取的阈值是0.35或0.4,仅供参考。
from bcembedding.
好的 非常感谢!!!很有用的建议!
from bcembedding.
感觉rerank的分数区分度很小
下面这个例子,bge-rerank-base 和 bce-rerank-base-v1的得分,
pairs = [['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']]
with torch.no_grad():
inputs = bge_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)
for key in inputs:
inputs[key]=inputs[key].to("cuda:0")
bge_scores = bge_model(**inputs, return_dict=True).logits.view(-1, ).float()
print(bge_scores)
inputs = bce_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512)
for key in inputs:
inputs[key]=inputs[key].to("cuda:0")
bce_scores = bce_model(**inputs, return_dict=True).logits.view(-1, ).float()
print(bce_scores)
未sigmoid结果:
tensor([-8.1544, 6.1821], device='cuda:0')
tensor([-0.6458, 0.3187], device='cuda:0')
sigmoid结果:
tensor([2.8739e-04, 9.9794e-01], device='cuda:0')
tensor([0.3439, 0.5790], device='cuda:0')
from bcembedding.
感觉 bce reranker 训练阶段先 pointwise 得到绝对语义分,再 listwise 转相对排序分,实现兼顾的**。但从技术报告来看,似乎更加复杂,如提到的 “其分数的绝对值可表征真实的语义相关程度”。能再详细的解释一下吗
感觉rerank的分数区分度很小 下面这个例子,bge-rerank-base 和 bce-rerank-base-v1的得分,
pairs = [['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']] with torch.no_grad(): inputs = bge_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) for key in inputs: inputs[key]=inputs[key].to("cuda:0") bge_scores = bge_model(**inputs, return_dict=True).logits.view(-1, ).float() print(bge_scores)inputs = bce_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) for key in inputs: inputs[key]=inputs[key].to("cuda:0") bce_scores = bce_model(**inputs, return_dict=True).logits.view(-1, ).float() print(bce_scores)
未sigmoid结果: tensor([-8.1544, 6.1821], device='cuda:0') tensor([-0.6458, 0.3187], device='cuda:0')
sigmoid结果: tensor([2.8739e-04, 9.9794e-01], device='cuda:0') tensor([0.3439, 0.5790], device='cuda:0')感谢您对bce的关注,是这样的:
1、rerank判断query和passage的语义相关性分数,bce是0~1的,这个例子中0.34和0.58是很合理的。因为一般bce的rerank分数用来过滤低质量的passage,推荐的rerank分数阈值是0.35或0.4,所以这个0.35或0.4是一个门槛,0.58是一个相对比较正的正例对了。
2、bge一般不用sigmoid来获取分数,因为bge模型训练过程中语义相关分数是用softmax得出来的,但是softmax得到的分数是相对分数(相对分数只能用来排序,但用来表征query和passage到底有多么语义相关就不可靠了(具体可以看一下softmax公式);绝对分数用处就比较大了,既可以用来排序,也可以表征query和passage到底有多么相关,可以用来过滤低质量passage)。
3、你举的例子bge rerank+sigmoid分数看着更符合的你预期只是巧合,多试几个例子你就会发现问题(问题根源是bge rerank不应该用sigmoid)。而且你细想,你举的例子,其实bce rerank分数更加科学,因为例子中的正例bge rerank能达到0.998,这个分数高的出奇,你细想就会发现问题(这个分数太硬了,更正的正例分数应该预期是多少呢?bge rerank分数太硬的原因是错用了sigmoid输出分数,应该用softmax)。
相对来说bce rerank负例0.34,正例0.58是更科学的,正负例的rerank分数更加smooth(其实这个smooth就是我们bce rerank精排能力强的一个原因:https://github.com/netease-youdao/BCEmbedding?tab=readme-ov-file#1-multiple-domains-scenarios)。 更多解释,详见bce技术报告:https://zhuanlan.zhihu.com/p/681370855
4、总结一下:bce rerank可以输出绝对的语义相关分数,而且rerank 分数是smooth的,以0.35或0.4为界,可用于过滤低质量passage。
可能有 《Joint Optimization of Ranking and Calibration with Contextualized Hybrid Model》 这篇论文的**在里面,能大概捋一下吗
from bcembedding.
感觉rerank的分数区分度很小 下面这个例子,bge-rerank-base 和 bce-rerank-base-v1的得分,
pairs = [['what is panda?', 'hi'], ['what is panda?', 'The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear or simply panda, is a bear species endemic to China.']] with torch.no_grad(): inputs = bge_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) for key in inputs: inputs[key]=inputs[key].to("cuda:0") bge_scores = bge_model(**inputs, return_dict=True).logits.view(-1, ).float() print(bge_scores)inputs = bce_tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) for key in inputs: inputs[key]=inputs[key].to("cuda:0") bce_scores = bce_model(**inputs, return_dict=True).logits.view(-1, ).float() print(bce_scores)
未sigmoid结果: tensor([-8.1544, 6.1821], device='cuda:0') tensor([-0.6458, 0.3187], device='cuda:0')
sigmoid结果: tensor([2.8739e-04, 9.9794e-01], device='cuda:0') tensor([0.3439, 0.5790], device='cuda:0')感谢您对bce的关注,是这样的:
1、rerank判断query和passage的语义相关性分数,bce是0~1的,这个例子中0.34和0.58是很合理的。因为一般bce的rerank分数用来过滤低质量的passage,推荐的rerank分数阈值是0.35或0.4,所以这个0.35或0.4是一个门槛,0.58是一个相对比较正的正例对了。
2、bge一般不用sigmoid来获取分数,因为bge模型训练过程中语义相关分数是用softmax得出来的,但是softmax得到的分数是相对分数(相对分数只能用来排序,但用来表征query和passage到底有多么语义相关就不可靠了(具体可以看一下softmax公式);绝对分数用处就比较大了,既可以用来排序,也可以表征query和passage到底有多么相关,可以用来过滤低质量passage)。
3、你举的例子bge rerank+sigmoid分数看着更符合的你预期只是巧合,多试几个例子你就会发现问题(问题根源是bge rerank不应该用sigmoid)。而且你细想,你举的例子,其实bce rerank分数更加科学,因为例子中的正例bge rerank能达到0.998,这个分数高的出奇,你细想就会发现问题(这个分数太硬了,更正的正例分数应该预期是多少呢?bge rerank分数太硬的原因是错用了sigmoid输出分数,应该用softmax)。
相对来说bce rerank负例0.34,正例0.58是更科学的,正负例的rerank分数更加smooth(其实这个smooth就是我们bce rerank精排能力强的一个原因:https://github.com/netease-youdao/BCEmbedding?tab=readme-ov-file#1-multiple-domains-scenarios)。 更多解释,详见bce技术报告:https://zhuanlan.zhihu.com/p/681370855
4、总结一下:bce rerank可以输出绝对的语义相关分数,而且rerank 分数是smooth的,以0.35或0.4为界,可用于过滤低质量passage。
你好,我通过以下方式计算出来的分数是:
for key in inputs:
inputs[key]=inputs[key]
scores = model(**inputs, return_dict=True).logits.view(-1, ).float()
tensor([ 2.9957, -10.7941, -10.8128, -10.8182, -10.8041, -10.4744, -10.8346,
-10.7246, -10.6901, -10.8047, -10.8207, -10.8142, -10.8110, -10.7981,
-10.8313, -10.4111, -10.8006, -9.8900, -10.8348, -8.9105, -10.8347,
-10.7687, -10.8125, -10.6540, -10.8346, -10.2274, -10.7834, -10.4933,
-10.8300, -10.8356, -10.8261], grad_fn=)
请问是需要对他进行softmax处理吗?应该怎么处理?
from bcembedding.
Related Issues (20)
- 测试“Embedding和Reranker集成常用RAG框架”中的样例代码1 HOT 2
- 使用gpu就会崩溃 HOT 4
- 关于模型微调的问题 HOT 1
- 使用 langchain 调用程序报错 HOT 2
- pydantic版本问题 HOT 1
- 下载 tokenizer 时不能指定 auth token HOT 2
- bce-reranker-base_v1原生支持的passage长度问题 HOT 1
- Are there any optimization methods to support the optimized run of this project? HOT 1
- RerankerModel的token数量 HOT 4
- 复现 LlamaIndex RAG评测结果时的一些问题 HOT 1
- Xinference对比手动部署 HOT 4
- 单独部署-用api的方式提供服务 HOT 1
- python3.11报错 HOT 1
- 请问有 C-MTEB (非英文)的测试结果么? HOT 1
- 请问有没有提交到最新的mteb leaderboard的结果对比?
- 请问出现这种情况:Token indices sequence length is longer than the specified maximum sequence length for this model (781 > 512),如何解决? HOT 1
- query只能是一个句子吗?多轮交互下的召回或者排序,BCEEmbedding支持处理呢? HOT 3
- Input validation error: `inputs` must have less than 512 tokens. Given: 1009 HOT 1
- accelerate加速,微调bce模型报错:Could not find the transformer layer class to wrap in the model. HOT 1
- FYI:最近测了 bce chunksize & bge 对比 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 bcembedding.