Tencent / NeuralNLP-NeuralClassifier

An Open-source Neural Hierarchical Multi-label Text Classification Toolkit
Other
1.83k stars 402 forks source link

HMCN运行报错 #114

Closed xjtuleeyf closed 1 year ago

xjtuleeyf commented 2 years ago

您好,我在实验中导入了自己的层次结构,层次结构为一级7,二级36,三级518,按照这个结构组织了conf中的参数: "HMCN": { "hierarchical_depth": [0, 384, 384, 384], "global2local": [0, 7, 36, 518] }, 但是运行后报错: Traceback (most recent call last): File "train.py", line 261, in train(config) File "train.py", line 214, in train model = get_classification_model(model_name, empty_dataset, conf) File "train.py", line 82, in get_classification_model model = globals()[model_name](dataset, conf) File "/data/zhanglingling/lyf/NeuralNLP-NeuralClassifier/model/classification/hmcn.py", line 62, in init torch.nn.Linear(self.global2local[i], self.hierarchical_class[i-1]) IndexError: list index out of range 于是我查看了报错位置附近的代码,发现self.hierarchical_class输出为[7,518]只有两层,想问一下可能是什么原因导致的这样的错误呢?

xjtuleeyf commented 2 years ago

您好,我想补充一下我的问题,我现在好像发现了问题所在,self.hierarchical_class好像是对题目中的标签的个数统计,也就是说,比如我的知识结构中的一级标签是A1,A2,A3等,但是他们从未以一个单独的标签在knowledge中出现过,都是以A1-A12-A123的形式出现的,所以相当于模型默认了我只有二级标签和三级标签,是这个意思吗?如果是这样的话有什么解决方案呢,期待您的回复,多谢

MagiaSN commented 2 years ago

可以把一、二级标签也补充到数据中,例如一条数据标签为["A1-A12-A123"],将父类目也扩充到标签中,变为["A1", "A1-A2", "A1-A12-A123"]

xjtuleeyf commented 2 years ago

明白了,感谢解答,麻烦还有一个小问题想请教您,在修改global2local的参数之后,代码不再报之前的错误了,但是在loss.py和train.py中的有个参数logits,总是报错这个参数应该是一个tensor,实际上是一个长度为3的tuple,为了让代码正常运行,我在loss.py和train.py中的报错位置加入了logits = logits[0],经过运行发现效果(F1 = 0.50)远差于利用TextRNN的结果(F1 = 0.74),而且在用TextRNN运行模型的时候不会报这种错误,期待得到您的解答!

xjtuleeyf commented 2 years ago

另外还想请问一下存储标签层次的taxonomy文件在哪个部分发挥作用呢?

MagiaSN commented 2 years ago

另外还想请问一下存储标签层次的taxonomy文件在哪个部分发挥作用呢?

taxonomy文件中包含的标签父子关系会用于loss中的hierarchical penalty计算等

hyzhang91 commented 5 months ago

明白了,感谢解答,麻烦还有一个小问题想请教您,在修改global2local的参数之后,代码不再报之前的错误了,但是在loss.py和train.py中的有个参数logits,总是报错这个参数应该是一个tensor,实际上是一个长度为3的tuple,为了让代码正常运行,我在loss.py和train.py中的报错位置加入了logits = logits[0],经过运行发现效果(F1 = 0.50)远差于利用TextRNN的结果(F1 = 0.74),而且在用TextRNN运行模型的时候不会报这种错误,期待得到您的解答!

遇到同样 ogits 的问题,请问有解决吗? l