Jimme

Results 7 comments of Jimme

确实是稀疏化的问题。主要的问题点在于在将张量分散到多个GPU上会涉及到稀疏矩阵相乘的问题,而torch不支持稀疏和密集(稀疏)矩阵相乘。 解决方案如你所说,需要修改collate_fn。但不需要把生成labels的过程放过去,只需要在collate_fn将稀疏矩阵稠密化。

修正方案如下: 在global_pointer_bert_named_entity_recognition.py 的 GlobalPointerNERTask() 中添加 def _train_collate_fn(self, batch): input_ids = default_collate([f['input_ids'] for f in batch]) attention_mask = default_collate([f['attention_mask'] for f in batch]) token_type_ids = default_collate([f['token_type_ids'] for f in batch]) label_ids...

感谢你提供的建议以及能适配低内存的代码,这个改动方式能够有效减少内存的消耗,但会影响模型训练的速度。 我们考虑在v0.1.0引入lazy机制来处理这一类的问题。

你好,这里的“字典”应该是描述错误,就是类似下面列表的形式, **[头实体, 头实体首字符在文本的位置, 头实体尾字符在文本的位置, 关系类型, 尾实体, 尾实体首字符在文本的位置, 尾实体尾字符在文本的位置]** 具体的输入格式你可以参考example文件下CMeIE.ipynb中train_df的格式。例子如下: **[[产后抑郁症, 0, 4, 鉴别诊断@疾病, 轻度情绪失调, 14, 19]]**

我通过输入单条数据复现出了相同的错误,定位到的是CasRelLoss中包含的torch.nn.functional.binary_cross_entropy报的错。输入多条数据的时候不存在这个错误。 我尝试修复了下,临时的修复方案是在ark_nlp.factory.loss_function.casrel_loss的_compute_loss中将gold也展开。比如将 `pred = pred.squeeze(-1)` 修改为 `pred, gold = pred.squeeze(-1), gold.squeeze(-1)`

这个情况应该是输入的text中没有包含任何关系,所以结果为空,造成的原因是你用的数据太少了,建议你先用CMeIE的数据试试。 输出格式你可以自己根据需求自行处理,目前的模型的输出格式和输入label略有不同。