Open blmoistawinde opened 2 years ago
最近又检查了一下数字对不上的问题出在哪里,发现有两点:
修复这两点以后,现在的实验数字就跟苏神汇报的一模一样了
https://github.com/blmoistawinde/bert4vec/blob/main/examples/compare_models.ipynb
另外,之前用bert的转换代码来转换roformer总是有点奇怪,所以自己研究了一下roformer的转换代码,也附在里面了
最近又检查了一下数字对不上的问题出在哪里,发现有两点:
- 使用了mean pooling而不是CLS pooling
- 不应该在CLS embedding上再加tanh激活
修复这两点以后,现在的实验数字就跟苏神汇报的一模一样了
https://github.com/blmoistawinde/bert4vec/blob/main/examples/compare_models.ipynb
另外,之前用bert的转换代码来转换roformer总是有点奇怪,所以自己研究了一下roformer的转换代码,也附在里面了
你好,我发现你提供的 roformer-ft 测试例子都是苏神原博客的几个例子,但我在下面数据上进行测试发现,roformer-ft 计算出来的相似度区分性不够:
queries = ["光眼睛大就好看吗", "小蝌蚪找妈妈怎么样", "给我推荐一款红色的车", "电影不错", "我喜欢北京"] keys = ["眼睛好看吗?", "小蝌蚪找妈妈是谁画的", "给我推荐一款黑色的车", "电影不好", "我不喜欢北京"] print(sv.similarity(queries, keys))
roformer-ft 计算出的余弦相似度矩阵为:
[[0.7833775 0.18097427 0.3469231 0.48279086 0.32417536] [0.49847323 0.6883738 0.35418096 0.38131297 0.3605941 ] [0.43186927 0.1605316 0.71349144 0.38259056 0.35559577] [0.66077334 0.18071806 0.49310035 0.6396949 0.33369505] [0.56831586 0.22106932 0.5294188 0.4273827 0.532035 ]]
观察最后一行,“我喜欢北京” 这个句子和 "眼睛好看吗?" 的相似度达到 0.56831586,和 “我不喜欢北京” 的相似度只有 0.532035。我做这个工具的出发点是相似文本检索,如果说因为加了一个 “不” 字,导致召回出其他毫不相关的句子,那我觉得意义不大。
嗯嗯,对于什么样的句子算“相似”,这个定义确实在不同的场景和需求下可以是很不同的。
我这边也只是增加了一些选项。如果使用的用户面对的场景类似于那个模型finetune的数据集,比如金融、搜索领域的相似query检索等,或者对于是否、颜色等属性的区别要求敏感的,那么这些新的模型会有优势。如果不需要的话,那就继续用原来的模型就行了。
你好,感谢你写的这个工具库,接口包装得用起来很方便!
注意到苏建林老师后面又提供了有监督训练增强的roformer-sim-ft,得到的相似度结果会一般会更加符合人的直觉,不过目前在这个库中还没有得到支持。
所以我仿照了你提到的方法对苏神release的ckpt做了转换和上传,然后在代码里添加了相应模型的支持。
https://huggingface.co/blmoistawinde/roformer-sim-ft-small-chinese https://huggingface.co/blmoistawinde/roformer-sim-ft-base-chinese
我比较了增强前后的模型(实验代码也放在里面了),发现ft模型确实能体现出更符合普通常规认知的相似度打分,比如加了“不”字后相似度明显降低。(虽然跟苏神原文中的数字有一点点不同,不知道是转化中出现了误差还是什么别的问题,但是感觉输出的效果基本上还是挺好的)。如果你觉得可以的话,就把这个PR merge一下吧。