Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能在更多样本训练更准的模型吗 #61

Closed
alexw994 opened this issue Apr 13, 2023 · 10 comments
Closed

能在更多样本训练更准的模型吗 #61

alexw994 opened this issue Apr 13, 2023 · 10 comments
Labels
question Further information is requested

Comments

@alexw994
Copy link

另外,对这个结果有一点疑惑,这个是分别在每一个数据集上训练测试的结果吗?

Arch Backbone Model Name ATEC BQ LCQMC PAWSX STS-B Avg QPS
CoSENT hfl/chinese-macbert-base CoSENT-macbert-base 50.39 72.93 79.17 60.86 80.51 68.77

而下面的关于release模型的测试结果是只在STS-B上训练得到的?

Arch Backbone Model Name ATEC BQ LCQMC PAWSX STS-B Avg QPS
CoSENT hfl/chinese-macbert-base shibing624/text2vec-base-chinese 31.93 42.67 70.16 17.21 79.30 48.25 3008

最后就是数据集的5个part,可以混合训练吗?

@alexw994 alexw994 added the question Further information is requested label Apr 13, 2023
@shibing624
Copy link
Owner

不可以,数据格式都不一样

@tiejunhu
Copy link

tiejunhu commented Jun 7, 2023

我试了一下,用一个类 "SuperDataset" 将所有的数据 concat 前后连接起来,是可以实现使用所有数据同时训练的,大致逻辑是:

class SuperDataset:
    def __init__(self):
        self.datasets = []

    def add_dataset(self, dataset):
        self.datasets.append(dataset)

    def __len__(self):
        return sum([len(dataset) for dataset in self.datasets])

    def __getitem__(self, index):
        for dataset in self.datasets:
            if index < len(dataset):
                return dataset[index]
            index -= len(dataset)

然后:

        datasets = ["STS-B", "ATEC", "BQ", "LCQMC", "PAWSX"]
        train_dataset, eval_dataset = [SuperDataset(), SuperDataset()]
        for dataset in datasets:
            train_dataset.add_dataset(HFCosentTrainDataset(self.tokenizer, dataset, max_len=self.max_seq_length))
            eval_dataset.add_dataset(HFTextMatchingTestDataset(self.tokenizer, dataset, max_len=self.max_seq_length))

最终可以得到91万个sample:

2023-06-07 17:25:53.880 | INFO     | text2vec.cosent_model:train:192 - ***** Running training *****
2023-06-07 17:25:53.880 | INFO     | text2vec.cosent_model:train:193 -   Num examples = 911750
2023-06-07 17:25:53.880 | INFO     | text2vec.cosent_model:train:194 -   Batch size = 64
2023-06-07 17:25:53.880 | INFO     | text2vec.cosent_model:train:195 -   Num steps = 142470
2023-06-07 17:25:53.880 | INFO     | text2vec.cosent_model:train:196 -   Warmup-steps: 14247
2023-06-07 17:25:53.880 | INFO     | text2vec.cosent_model:train:198 -   Training started

@shibing624
Copy link
Owner

写代码适配也行的。点赞

@tiejunhu
Copy link

我用chinese-lert-base,基于所有的数据集,训练了一个模型在这里:https://huggingface.co/oldhu/text2vec-lert-base-5-tasks

测试的数据如下:

STS-B ATEC BQ LCQMC PAWSX
67.60 42.67 61.61 77.79 57.54

@shibing624
Copy link
Owner

嗯,我评估一下。

@shibing624
Copy link
Owner

算了一下,avg score: 61.44, 高于当前单任务训练的模型效果的。

考虑了一下,我这两天放出一个通用匹配模型,在更多数据上训练(百万、千万样本)的模型,然后能覆盖更多任务场景,还是不应该局限在这5个评估任务上。

另外,很多同学用 text2vec + langchain + chatglm6b 的技术路线做本地QA问答,此时相似文本召回也对text2vec的精度要求比较高,这里高准的通用模型也更重要。

@shibing624 shibing624 changed the title 请问开源的数据集中的这5个part,可以混合训练吗? 能在更多样本训练更准的模型吗 Jun 13, 2023
@shibing624 shibing624 pinned this issue Jun 13, 2023
@tiejunhu
Copy link

👍👍👍,现在text2vec的主要用户都是用于语义搜索了。更通用的模型肯定是能造福大家的。

另外,off the topic请教一下,如果要做re-rank(cross encoder),现在SOTA的模型和架构是什么?

@shibing624
Copy link
Owner

@geolvr
Copy link

geolvr commented Jul 3, 2023

算了一下,avg score: 61.44, 高于当前单任务训练的模型效果的。

考虑了一下,我这两天放出一个通用匹配模型,在更多数据上训练(百万、千万样本)的模型,然后能覆盖更多任务场景,还是不应该局限在这5个评估任务上。

另外,很多同学用 text2vec + langchain + chatglm6b 的技术路线做本地QA问答,此时相似文本召回也对text2vec的精度要求比较高,这里高准的通用模型也更重要。

请问这个高准的通用模型现在放出了吗?

@shibing624
Copy link
Owner

放出来了, 是shibing624/text2vec-base-chinese-sentence

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants