如何调整Longformer适配Multimodal Transformers,解决句子嵌入形状不匹配问题?
我已fork Multimodal Transformers包并添加Longformer支持,仓库为Multimodal-Toolkit-Longformer。该包维护方Georgian.io针对我遇到的错误给出如下分析:
您好@jtfields,我还未查看您的代码,但从错误判断,Longformer可能需要额外步骤。具体来说,您的forward()方法返回的形状不符合预期。错误信息为:RuntimeError: stack expects each tensor to be equal size, but got [32, 2, 768] at entry 0 and [32, 43] at entry 1。当前输出形状为(batch_size, sequence_length, embedding_dim),对应词嵌入;而我们需要的是每个句子(或段落)对应一个嵌入的句子嵌入,形状应为(batch_size, embedding_dim)。不同模型获取句子嵌入的方式不同,BERT类模型用[CLS] token的嵌入,XLM则用额外层(可查看multimodal_transformers/model/tabular_transformers.py中的sequence_summary部分)。我不熟悉Longformer,无法给出具体方案,但肯定有标准实现方法。
请问有谁能提供适配Longformer的分词修改方案?我不确定应修改notebook中的如下代码,还是修改tabular_transformers.py:
tokenizer_path_or_name = model_args.tokenizer_name if model_args.tokenizer_name else model_args.model_name_or_path print('Specified tokenizer: ', tokenizer_path_or_name) tokenizer = AutoTokenizer.from_pretrained( tokenizer_path_or_name, cache_dir=model_args.cache_dir, )
内容的提问来源于stack exchange,提问作者John Fields

