SpeechGPT icon indicating copy to clipboard operation
SpeechGPT copied to clipboard

这 ma adaption pretrain代码和论文完全不一样啊

Open dyyoungg opened this issue 1 year ago • 3 comments

按照论文的意思,第一步应该是让语言模型理解语音的语义,所以使用speechTokenizer去获得语音的离散化token表示,讲道理是应该将speechtokenizer codebook的表示project后(因为hidden dim可能不一致,需要project)添加到 语言模型的embedding层中,然后使用自回归形式预测语音token。但我在code中没有看到任何关于speechtokenizer的部分,并且tokenize部分 更像是在扩大词表,训speech的文本语料,我实在不能理解。

# line 230 ~ 250
text_column_name = "text" if "text" in column_names else column_names[0]

def tokenize_function(examples):
     output = tokenizer(examples[text_column_name])
     return output


tokenized_cache_file_names = {
        "train":os.path.join(model_args.cache_dir, 'tokenized', 'train', 'processed_train.arrow'),
        "validation":os.path.join(model_args.cache_dir, 'tokenized', 'valid', 'processed_valid.arrow'),
        }
with training_args.main_process_first(desc="dataset map tokenization"):
      if not data_args.streaming:
          tokenized_datasets = raw_datasets.map(
                tokenize_function,
                batched=True,
                num_proc=data_args.preprocessing_num_workers,
                remove_columns=column_names,
                load_from_cache_file=not data_args.overwrite_cache,
                desc="Running tokenizer on dataset",
                cache_file_names=tokenized_cache_file_names
            )

是我理解有误吗?有懂的麻烦解释一下

dyyoungg avatar Sep 08 '24 16:09 dyyoungg

可能是因为默认语音数据已经转换为token数据了

bigcash avatar Sep 09 '24 03:09 bigcash

可能是因为默认语音数据已经转换为token数据了

这样确实是可以的,提前提取audio token,以类似 “audio” 的token占位,但是这样的话必须修改model 的数据prepare,即在forward中根据token id 插入 project后的audio feature,但是code中显然没有这一步,直接是 LLamaForCausalLLM,显然是不合理的

dyyoungg avatar Sep 10 '24 03:09 dyyoungg

可能是因为默认语音数据已经转换为token数据了

这样确实是可以的,提前提取audio token,以类似 “audio” 的token占位,但是这样的话必须修改model 的数据prepare,即在forward中根据token id 插入 project后的audio feature,但是code中显然没有这一步,直接是 LLamaForCausalLLM,显然是不合理的

根据tree/main/speechgpt#train-speechgpt的stage1部分,首先将音频使用hubert转换为语音标签,然后将这些所有的标签作为大模型的预训练部分的输入数据,来做next token的预测训练。完成这步骤后,大模型应该是已经学习到了怎么理解语音token了。

然后在stage2中,使用语音+文本的混合指令数据,进一步训练大模型的跨模态sft能力。stage3好像是输入语音数据,返回也是语音数据的进一步微调。

以上是个人理解,如有错误请大神指导

bigcash avatar Sep 23 '24 06:09 bigcash

”tokenize部分 更像是在扩大词表,训speech的文本语料。“原文就是这样写的啊。train部分

LiuMY13 avatar Nov 07 '24 07:11 LiuMY13