tokenizer的相关问题
你好,请教一下我想用自己的tokenizer【chatglm的tokenizer】来训练bge模型应该怎么做呢?我现在的想法是把【chatglm的tokenizer】改成类似bert-tokenizer,这样可行吗?
替换tokenizer后,词表与原来不同,需要从头开始重新训练。 如果需要chatglm的词表,建议直接将chatglm训练为向量模型。但FlagEmbedding目前没有适配chatglm这类大模型训练的脚步,后面会更新上。 如果想加入领域词汇,在文件https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/baai_general_embedding/finetune/run.py#L78 加入tokenizer.add_tokens和model.resize_token_embeddings,而后继续微调,具体可参考网络上的教程。
感谢您的建议,我计划采用add_tokens的方案,我拿已经训练好的bge,先在我的语料上pretrain,然后微调。 但是我现在有一个担心是,我这样可能会对原始的参数有较大的改变: 因为已经训练好的bge已经是产生用于计算相似度的embedding了,此时我pretrain会让它学习一种为重构句子为目标的embedding,我认为这两者会存在gap,也就是我的pretrain会对参数产生很大变化,而我的第二步微调显然是做不到像你们第二阶段训练bge的资源和效果,最终可能我的模型训练不佳
我关注到[LM-Cocktail],我觉得符合我现在的困境,但我想了解下LM-Cocktail应该在我的pretrain阶段做还是微调时做呢?还是两个阶段都需要呢,这有什么需要参考的原则吗?
补充一下,因为我发现在我的场景里涉及一些专有词汇时bge召回的有些不理想,所以我大概add了200左右的专有词汇token,因为embedding矩阵会增加一些随机参数,我不太确定这个量级是一个什么概念会带来多大影响,,,,如果影响很小的话,我或许可以试试直接继续微调而不pretrain?
补充一下,因为我发现在我的场景里涉及一些专有词汇时bge召回的有些不理想,所以我大概add了200左右的专有词汇token,因为embedding矩阵会增加一些随机参数,我不太确定这个量级是一个什么概念会带来多大影响,,,,如果影响很小的话,我或许可以试试直接继续微调而不pretrain?
我觉得可以直接微调。不过注意微调数据中应包含专有词汇。