wangyuxinwhy / uniem

unified embedding model

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

用正负样本三元组进行微调,遇到无法微调的问题

KekeWa opened this issue · comments

commented

🐛 bug 说明

image # 期望三元组形式训练 #读取的数据来自于csv,然后通过dataframe转为json对象,但是遇到无法读数据的问题,希望大大帮忙解答下 image

Python Version

None

抱歉,这两天有点忙,才来处理 issue。能提供 uniem 使用的版本,以及可复现 bug 的代码吗?

我在 colab 上,没有复现这个bug

image

commented

你好 怎么pip install 不了 uniem

你好 怎么pip install 不了 uniem

uniem 只支持 3.10 以上,是不是 python 版本不匹配呀?

commented

确实是! 您好,除了能够在微调过程中看到loss 外 ,可以看到其他评价指标之类的吗?微调了之后可以放到哪里去对比模型性能是否提升了呢?

目前不支持其他指标,主要支持各种指标是一件非常麻烦的事情,我希望代码尽量的轻一点,所以没加这个功能。微调后可以在自己的数据集上面测试,看看指标是不是提升了。

commented

好的 谢谢了 !“微调后可以在自己的数据集上面测试,看看指标是不是提升了”?比如呢?不太明白。

commented

您好 在微调时 ,发现会自动减少batch_size这是什么原因 ?难道是cuda 内存不足?

好的 谢谢了 !“微调后可以在自己的数据集上面测试,看看指标是不是提升了”?比如呢?不太明白。

可以参考 https://github.com/wangyuxinwhy/uniem/tree/main/mteb-zh 的评测方式,分类任务就看准确率有没有提升,召回任务就看 ndcg 有没有提升。

您好 在微调时 ,发现会自动减少batch_size这是什么原因 ?难道是cuda 内存不足?

如果不指定 batch_size 的话,cuda 内存不足时,会自动的减小 batch_size

commented

好的!感谢您 ,目前微调时,在训练集上loss下降的并不大,仅仅是6.9364--6.9305的变化,而且在验证集上的loss 还增加了 ,出现了一定的拟合,我该如何处理呢?您有什么建议吗?再次感谢您

commented

您好 ,微调后用自己的数据集进行评测是需要搭建和自己任务相关的模型吗?

commented

https://github.com/wangyuxinwhy/uniem/tree/main/mteb-zh 能否直接读取本地微调后的模型进行一键评测?

好的!感谢您 ,目前微调时,在训练集上loss下降的并不大,仅仅是6.9364--6.9305的变化,而且在验证集上的loss 还增加了 ,出现了一定的拟合,我该如何处理呢?您有什么建议吗?再次感谢您

尝试调节一下学习率,或者测一测能不能过拟合到 loss 为 0

您好 ,微调后用自己的数据集进行评测是需要搭建和自己任务相关的模型吗?

嗯嗯,最好在自己任务上面测,如果担心微调后会减弱其他场景能力,也可以在 mteb-zh 的数据上面测。

https://github.com/wangyuxinwhy/uniem/tree/main/mteb-zh 能否直接读取本地微调后的模型进行一键评测?

如果可以通过 sentence_transformers 加载就可以,指定自己的模型就可以了

commented

好的!感谢您的解答 “可以通过 sentence_transformers 加载 ”是什么意思啊?我看您的测评代码中并没有给定模型的地址或url

具体的模型加载代码可以查看 https://github.com/wangyuxinwhy/uniem/blob/main/mteb-zh/mteb_zh/models.py

比如 sentence_transformers 的加载是这样的,通过指定 model_id 就可以了

def load_model(model_type: ModelType, model_id: str | None = None) -> MTEBModel:
    match model_type:
        case ModelType.sentence_transformer:
            if model_id is None:
                raise ValueError('model_name must be specified for sentence_transformer')
            return SentenceTransformer(model_id)
commented

好的 感谢您

commented

你好 在微调过程中,验证集的loss一在上升??不知道咋回事

代表模型过拟合了,学习率调小一点,或者加一些正则的手段(weight decay 大一点)都可以。

commented

你好,微调m3e系列的模型数据量有建议吗?还是多少都行呢?我试了很多,都是验证集的loss一在上升。很疑惑是不是数据量出问题了

这个数据量不是很好建议,视情况而定,一般来讲多多益善,可以尝试使用 GPT-4 来做数据增强。另外,是不是训练和验证的数据分布差的比较多呀?

commented

好的,感谢,不会啊 ,数据都是公开发布的领域数据。对了,我看代码里面没有test data ,只有train和valid 数据集,为啥啊??我的数据有train和valid,test,我可以合并train 和valid,,把test当作vaild吗?

如果分布差不多,那可能是数据量比较少,任务比较难。如果你的 test 有标签,可以这么操作,问题不大。

commented

试了好多次,weight_decay 调到0.1了 ,还是几个epoch(2-3个),valid和train上的loss差就 开始变大 ,太困惑了

嗯呢,调模型的超参也比较复杂,比较看经验。

commented

le-3
类似这种情况呢?一定要达到平稳的转态吗?我思考了一下,模型都会拟合,是要达到怎么样的趋势才算微调成功了啊?

这是啥数据集呀?如果是公开的,我也试验一下,这个 validation loss 看起来,模型没有学到东西。

commented

方便加一个微信吗?私聊一下,法律文本相关的数据

commented

大佬,难道是数据集的问题吗?应该用句子对相似的?而不是这种文档相似的案件描述?

我看了一下数据集,感觉没啥问题.... 我也试试微调一下.... 有结果我和你说

commented

感谢佬!!

commented

{"answer": ["B"], "id": "1_4269", "option_list": {"A": "我国商务部在确定进口橡胶制品是否存在补贴时必须证明出国(地区)政府直接向出口商提供了现金形式的财政资助", "B": "在反补贴调查期间,该八国政府或橡胶制品的出口经营者,可以向**商务部作出承诺,取消、限制补贴或改变价格", "C": "如果我国商务部终局裁定决定对该八国进口橡胶制品征收反补贴税,该反补贴税的征收期限不得超过10年", "D": "如果**橡胶制品进口商对商务部征收反补贴税的终局裁定不服,必须首先向商务部请求行政复审,对行政复审决定还不服,才能向**有管辖权的法院起诉"}, "statement": "**商务部决定对原产于马来西亚等八国的橡胶制品展开反补贴调查。根据我国《反补贴条例》以及相关法律法规,下列关于此次反补贴调查的哪项判断是正确的?", "subject": "国际经济法", "type": "0"}大佬 ,可以用这个数据集吗?采用PairRecord的形式

这是哪个数据集呀?可以采用 PairRecord 或者 TripletRecord 都可以

commented

大佬 咋样了 有后续吗?