ark-nlp icon indicating copy to clipboard operation
ark-nlp copied to clipboard

输入数据的格式

Open 666-zhang opened this issue 2 years ago • 7 comments

请问关系抽取中输入数据的格式是什么样子的?

“列表中每个元素是如下组织的字典”([头实体, 头实体首字符在文本的位置, 头实体尾字符在文本的位置, 关系类型, 尾实体, 尾实体首字符在文本的位置, 尾实体尾字符在文本的位置])

以上所说的字典是什么意思?没太理解

666-zhang avatar Sep 16 '22 10:09 666-zhang

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

jimme0421 avatar Sep 16 '22 12:09 jimme0421

感谢回复,我输入的是如下的数据格式:

截屏2022-09-16 23 42 48

在model.fit的步骤会报错,在其中 # 计算损失 logits, loss = self._get_train_loss(inputs, outputs, **kwargs)

这一步时会显示输入数据的shape与期待不符: ValueError: Using a target size (torch.Size([1, 100, 1])) that is different to the input size (torch.Size([1, 100])) is deprecated. Please ensure they have the same size.

请问输入的格式哪里有问题呀?

666-zhang avatar Sep 16 '22 15:09 666-zhang

我通过输入单条数据复现出了相同的错误,定位到的是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)

jimme0421 avatar Sep 17 '22 00:09 jimme0421

我将输入数据改为多条: 截屏2022-09-17 09 29 51

model.fit阶段没有问题,在predict单条text的时候只返回一个空的集合, 截屏2022-09-17 09 30 07

请问predict的时候对于text的格式有什么要求吗?或者说怎样能得到和输入的label一样格式的输出?

666-zhang avatar Sep 17 '22 01:09 666-zhang

这个情况应该是输入的text中没有包含任何关系,所以结果为空,造成的原因是你用的数据太少了,建议你先用CMeIE的数据试试。

输出格式你可以自己根据需求自行处理,目前的模型的输出格式和输入label略有不同。

jimme0421 avatar Sep 17 '22 01:09 jimme0421

收到谢谢

666-zhang avatar Sep 17 '22 01:09 666-zhang

请问这个报错可能是什么原因呢? token_ids, masks, text_len, sub_heads, sub_tails, sub_head, sub_tail, obj_heads, obj_tails, triples, tokens, token_mapping = zip(*batch) ValueError: not enough values to unpack (expected 12, got 0) 这是我的数据集 Screenshot 2023-05-31 at 20 33 30

samueljsluo avatar May 31 '23 12:05 samueljsluo