Tencent / NeuralNLP-NeuralClassifier

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

How is hierarchical vs flat compared in section 3? #33

Closed MingleiLI closed 4 years ago

MingleiLI commented 4 years ago

In section 3 of readme, the table shows the reuslt of hierarchical vs flat. Here does hierarchical mean that model has hierarchical regularization or just mean the evaluation value is the value with is_flat False in the code? Does flat means that the model does not have hierarchical regularization (hierar_penalty=0) or just mean that the evaluation value is caculated with is_flat True in the code?

liqunhit commented 4 years ago

对于一个层次分类问题来说,模型训练既可以用层次方法解决,也可以用Flat方法解决。对于模型预测来说也是一样,层次分类问题既可以用层次的metric,也可以用flat的metric来评估。 hierar_penalty是训练时候的策略。is_flat是评测时候的策略。 在section 3中,比较的是训练时候的策略(不是评测的策略,readme里的是is_flat=true,其实也可以是is_flat=false,这时候就需要有多个层级的指标对比了)

GodMadoka commented 4 years ago

也遇到这个问题,我用的是框架内的TextRCNN,在RCV1数据集来进行实验,发现hierar_penalty越高,模型的micro和macro都会随之降低,也就是说recursive_regularize没有带来什么提升,无法复现文中hierarchical的0.8313 | 0.6047,使用默认的1e-6也不行,不过flat的结果和文中基本一致。

Funtodo commented 4 years ago

我测试也遇到这个问题,一切设置按照代码中的默认,然后只是hierarchical=True/False的区别,基本没有提升,是哪里设置的不对吗? 另外请问readme的实验结果是代码中提供的数据吗? 还是官网提供的特殊过的数据?还是需要申请的原始文本的rcv1 ?

liqunhit commented 4 years ago

工具里提供的只是rcv1的一个采样数据,作为工具的示例数据,仅是为了跑通工具作用。 rcv1数据大家去自行下载完整版。

Funtodo commented 4 years ago

工具里提供的只是rcv1的一个采样数据,作为工具的示例数据,仅是为了跑通工具作用。 rcv1数据大家去自行下载完整版。

可否提供示例数据的指标结果?

liqunhit commented 4 years ago

示例数据没必要提供提供指标效果,因为量级太小,受模型、输入配置影响很大。仅为了作为示例数据跑通工具的作用。

guotong1988 commented 4 years ago

对于一个层次分类问题来说,模型训练既可以用层次方法解决,也可以用Flat方法解决。对于模型预测来说也是一样,层次分类问题既可以用层次的metric,也可以用flat的metric来评估。 hierar_penalty是训练时候的策略。is_flat是评测时候的策略。 在section 3中,比较的是训练时候的策略(不是评测的策略,readme里的是is_flat=true,其实也可以是is_flat=false,这时候就需要有多个层级的指标对比了)

这个是需要层级信息确定的情况下是吧

guotong1988 commented 4 years ago

说的层次分类,前提是各层级信息已经给定了是吧?

liqunhit commented 4 years ago

“更层级信息”指的是类目体系吗?这个肯定是先人工定义好的。

guotong1988 commented 4 years ago

各层级信息,对,先人工定义好的,OK。

egrcc commented 4 years ago

示例数据没必要提供提供指标效果,因为量级太小,受模型、输入配置影响很大。仅为了作为示例数据跑通工具的作用。

@liqunhit 你好,我也测试了这里面的数据和代码,发现也无法复现。我看这里提供的rcv1数据集,训练集和验证集是完整的,只是测试集不完整,按理说应该不会差很吧?

我的复现方法,下载代码,一点不改,直接运行如下两条命令:

python train.py conf/train.json
python eval.py conf/train.json

显示

Performance is precision: 0.809085, recall: 0.671724, fscore: 0.734034, right: 17401, predict: 21507, standard: 25905.

我看 conf/train.json 里的默认配置就是使用层次分类,模型是 TextCNN,按照 3. Hierarchical vs Flat 里提供的指标,TextCNN 的 Micro-F1 应该在 0.77,这里只有 0.73。

是否我只要换一个完整的测试集就能得到 0.77 的结果?还是我哪里操作有误了?

谢谢!

egrcc commented 4 years ago

示例数据没必要提供提供指标效果,因为量级太小,受模型、输入配置影响很大。仅为了作为示例数据跑通工具的作用。

@liqunhit 你好,我也测试了这里面的数据和代码,发现也无法复现。我看这里提供的rcv1数据集,训练集和验证集是完整的,只是测试集不完整,按理说应该不会差很吧?

我的复现方法,下载代码,一点不改,直接运行如下两条命令:

python train.py conf/train.json
python eval.py conf/train.json

显示

Performance is precision: 0.809085, recall: 0.671724, fscore: 0.734034, right: 17401, predict: 21507, standard: 25905.

我看 conf/train.json 里的默认配置就是使用层次分类,模型是 TextCNN,按照 3. Hierarchical vs Flat 里提供的指标,TextCNN 的 Micro-F1 应该在 0.77,这里只有 0.73。

是否我只要换一个完整的测试集就能得到 0.77 的结果?还是我哪里操作有误了?

谢谢!

@liqunhit 我又使用了全量测试数据,结果仍然差不多(0.73),不知道我这里的步骤时候搞错了?

guancheng817 commented 4 years ago

示例数据没必要提供提供指标效果,因为量级太小,受模型、输入配置影响很大。仅为了作为示例数据跑通工具的作用。

@liqunhit 你好,我也测试了这里面的数据和代码,发现也无法复现。我看这里提供的rcv1数据集,训练集和验证集是完整的,只是测试集不完整,按理说应该不会差很吧? 我的复现方法,下载代码,一点不改,直接运行如下两条命令:

python train.py conf/train.json
python eval.py conf/train.json

显示

Performance is precision: 0.809085, recall: 0.671724, fscore: 0.734034, right: 17401, predict: 21507, standard: 25905.

我看 conf/train.json 里的默认配置就是使用层次分类,模型是 TextCNN,按照 3. Hierarchical vs Flat 里提供的指标,TextCNN 的 Micro-F1 应该在 0.77,这里只有 0.73。 是否我只要换一个完整的测试集就能得到 0.77 的结果?还是我哪里操作有误了? 谢谢!

@liqunhit 我又使用了全量测试数据,结果仍然差不多(0.73),不知道我这里的步骤时候搞错了?

你好,请问你可以成功复现了吗

egrcc commented 4 years ago

,请问你可以成功复

使用 glove 后有提升

leehelenah commented 4 years ago

我使用自己的dataset (size > 10000 samples), 也覺得 recursive_regularize沒有什麼幫助