Skip to content

Comments

增加对roformer-ft新模型的支持#4

Open
blmoistawinde wants to merge 3 commits intozejunwang1:mainfrom
blmoistawinde:main
Open

增加对roformer-ft新模型的支持#4
blmoistawinde wants to merge 3 commits intozejunwang1:mainfrom
blmoistawinde:main

Conversation

@blmoistawinde
Copy link

你好,感谢你写的这个工具库,接口包装得用起来很方便!

注意到苏建林老师后面又提供了有监督训练增强的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一下吧。

@blmoistawinde
Copy link
Author

最近又检查了一下数字对不上的问题出在哪里,发现有两点:

  1. 使用了mean pooling而不是CLS pooling
  2. 不应该在CLS embedding上再加tanh激活

修复这两点以后,现在的实验数字就跟苏神汇报的一模一样了

https://github.com/blmoistawinde/bert4vec/blob/main/examples/compare_models.ipynb

另外,之前用bert的转换代码来转换roformer总是有点奇怪,所以自己研究了一下roformer的转换代码,也附在里面了

https://github.com/blmoistawinde/bert4vec/blob/main/examples/convert_roformer_sim_original_tf_checkpoint_to_pytorch.py

@zejunwang1
Copy link
Owner

最近又检查了一下数字对不上的问题出在哪里,发现有两点:

  1. 使用了mean pooling而不是CLS pooling
  2. 不应该在CLS embedding上再加tanh激活

修复这两点以后,现在的实验数字就跟苏神汇报的一模一样了

https://github.com/blmoistawinde/bert4vec/blob/main/examples/compare_models.ipynb

另外,之前用bert的转换代码来转换roformer总是有点奇怪,所以自己研究了一下roformer的转换代码,也附在里面了

https://github.com/blmoistawinde/bert4vec/blob/main/examples/convert_roformer_sim_original_tf_checkpoint_to_pytorch.py

你好,我发现你提供的 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。我做这个工具的出发点是相似文本检索,如果说因为加了一个 “不” 字,导致召回出其他毫不相关的句子,那我觉得意义不大。

@blmoistawinde
Copy link
Author

嗯嗯,对于什么样的句子算“相似”,这个定义确实在不同的场景和需求下可以是很不同的。

我这边也只是增加了一些选项。如果使用的用户面对的场景类似于那个模型finetune的数据集,比如金融、搜索领域的相似query检索等,或者对于是否、颜色等属性的区别要求敏感的,那么这些新的模型会有优势。如果不需要的话,那就继续用原来的模型就行了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants