描述
我正在使用的模型(UniLM,MiniLM,LayoutLM等):LayoutReader
你好@zlwang-cs
我正在使用layoutreader
来预测仅包含布局数据的类似这样的数据,顺序是从右到左,从上到下。
然而,我遇到了一些问题,希望你能分享一些见解。
- 当我尝试训练模型时,在
line 671
处出现了一个错误,表示两个求和Tensor的维度不对齐,当我移除self.bias
时,我可以正常训练。
unilm/layoutreader/s2s_ft/modeling.py
第669行至第673行的代码:
| | defforward(self, hidden_states, src_emb): |
| | hidden_states=self.transform(hidden_states) |
| | hidden_states=torch.einsum('btf,bsf->bts', hidden_states, src_emb) +self.bias |
| | # hidden_states = F.linear(hidden_states, weight=src_emb, bias=self.bias) |
| | returnhidden_states |
- 训练过程正常,初始损失约为30,可以降至0.01。然而,当我用测试集(shuffle rate=1.0)进行测试时,结果可能非常差。很多框都丢失了,ARD大约为20.1。当我用规则(简单地按x坐标排序)预先对测试集中的输入进行排序,并将它们输入到网络中。但是网络只是预测与输入完全相同的阅读顺序。而且,当我用训练集进行测试时,结果也非常差
5条答案
按热度按时间vof42yt11#
你好,感谢你对我们论文的兴趣。我很乐意帮助你解决这些问题。
对于第一个问题,由于没有更多的详细信息,我不确定问题出在哪里。我建议你使用停止点或其他调试工具来查看在这个步骤中Tensor的形状。
对于第二个问题,我认为问题可能来自于你的数据集的读取顺序。你可以看到你使用的数据显示与我们论文中的原始设置有很大不同。预训练的权重是基于从左到右和从上到下的阅读顺序,因此这样的预训练设置可能会成为你在实验中遇到的障碍。考虑到这一点,我认为性能不佳并不令人惊讶。如果你想继续解决这个阅读顺序设置的问题,你可能需要收集足够的数据来再次预训练模型,或者尝试其他方法。另一个可能的方法是将图像顺时针旋转90度,使其与常见的阅读顺序设置相似。
xxb16uws2#
你好,zlwang-cs
感谢及时的回复。我会尝试调试这个问题,看看能否找到问题所在。顺时针旋转90度似乎是一个合理的方法,我也会尝试这个方法。
还有一件事情让我感到困惑。你提到
LayoutReader
在训练过程中加载了预训练权重。这个预训练权重是基于word-level
还是textline-level
的?看起来我在这里需要textline-level
的预训练权重。n53p2ov03#
你好,@Mountchicken。预训练模型是基于词级别的。很遗憾,我无法帮助你进行文本级别的预训练。
xam8gpfp4#
你好,zlwang-cs
感谢你的回复。顺便问一下,如何在自己的数据集上加载预训练权重并进行微调?我从这个链接下载了
layoutreader-base-readingbank.zip
,解压后得到了config.json
和pytorch_model.bin
。下面应该填写哪个参数
ou6hu8tu5#
你好,@Mountchicken。我假设在实践中,载重是很常见的。请参考一些相关的文档,我相信你能找到正确的答案。我看到你正在使用
run_seq2seq.py
进行训练,但你下载的重量实际上是用于解码的。我想这就是你感到困惑的原因。