yuanzhoulvpi2017 / zero_nlp

中文nlp解决方案(大模型、数据、模型、训练、推理)
MIT License
2.85k stars 355 forks source link

想请教一下做微调的时候用 embedding 输入模型而不是 input_ids,应该在哪部分做修改呀? #114

Closed shtdbb closed 1 year ago

shtdbb commented 1 year ago

想把多模态的 token 向量和输入文本的 word embedding 拼接起来输入模型进行训练和推理,看了官方推理的 chat() 和这个微调的代码输入模型的都是 input_ids,但是多模态 token 只有特征向量,所以需要在 embedding 层后输入,想请教一下应该在哪部分修改呢? 尝试了用 transformers 加载模型,可以给 model 传入 embedding,但是输出是 logits,好像还需要 softmax,再继续预测下一个token。这种做微调的时候需要怎么修改呀? 感谢!

yuanzhoulvpi2017 commented 1 year ago

多模态,他用的是另外一个模型架构了,叫bclip?具体我记不得了。不能直接改的

shtdbb commented 1 year ago

多模态,他用的是另外一个模型架构了,叫bclip?具体我记不得了。不能直接改的

我是想仿照VisualGLM,把音频模态的特征做成很多个和 word embedding 一样大小的 token 向量来输入 GLM。就是把音频部分拼到文本的前面,向模型输入词嵌入向量。一般流程是文本 --> token id --> word embedding 嘛,我这边有音频编码器对标 blip 可以转成和文本一样的向量,所以想直接就当做文本输入到模型里,然后在做端到端微调。 我看用 hf 加载的 model 可以传入嵌入向量,但是返回的貌似是 logits,后面的处理因为是自回归模型,感觉有点复杂。