Upload 0_ent_175_negs_hr_05_wr25_1's state dict
Browse files- .gitattributes +1 -0
- 0_ent_175_negs_hr_05_wr25_1/0_ent_175_negs_hr_05_wr25_1.py +1934 -0
- 0_ent_175_negs_hr_05_wr25_1/lasts/0_ent_175_negs_hr_05_wr25_1_s26092004_f0_last_ema.pth +3 -0
- 0_ent_175_negs_hr_05_wr25_1/logs/0_ent_175_negs_hr_05_wr25_1_log_plot.jpg +3 -0
- 0_ent_175_negs_hr_05_wr25_1/logs/0_ent_175_negs_hr_05_wr25_1_s26092004_f0_logging.json +1 -0
- 0_ent_175_negs_hr_05_wr25_1/r1s/0_ent_175_negs_hr_05_wr25_1_s26092004_f0_r1_vs0.71461_ema.pth +3 -0
- 0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_error_analyze_result.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_pred_test.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_test.json +26 -0
- 0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_test_df.xlsx +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_test_df_best.xlsx +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_0.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_1.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_10.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_11.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_12.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_13.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_14.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_15.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_16.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_17.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_18.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_19.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_2.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_20.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_21.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_22.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_23.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_24.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_25.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_26.json +1770 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_3.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_4.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_5.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_6.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_7.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_8.json +0 -0
- 0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_9.json +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
0_ent_175_negs_hr_05_wr25_1/logs/0_ent_175_negs_hr_05_wr25_1_log_plot.jpg filter=lfs diff=lfs merge=lfs -text
|
0_ent_175_negs_hr_05_wr25_1/0_ent_175_negs_hr_05_wr25_1.py
ADDED
|
@@ -0,0 +1,1934 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# %% [code]
|
| 2 |
+
get_ipython().system('pip install evaluate seqeval underthesea positional-encodings[pytorch]')
|
| 3 |
+
|
| 4 |
+
# %% [code]
|
| 5 |
+
import warnings
|
| 6 |
+
warnings.filterwarnings('ignore')
|
| 7 |
+
|
| 8 |
+
import torch
|
| 9 |
+
import torch.nn as nn
|
| 10 |
+
import torch.optim as optim
|
| 11 |
+
from torch.utils.data import Dataset, TensorDataset, DataLoader
|
| 12 |
+
import torch.nn.functional as F
|
| 13 |
+
import albumentations as albu
|
| 14 |
+
from transformers import AutoTokenizer, AutoModel
|
| 15 |
+
import torch.distributed as dist
|
| 16 |
+
from torch.nn.parallel import DistributedDataParallel as DDP
|
| 17 |
+
from positional_encodings.torch_encodings import PositionalEncoding1D
|
| 18 |
+
|
| 19 |
+
from sklearn.metrics import f1_score
|
| 20 |
+
from sklearn.preprocessing import MinMaxScaler, StandardScaler
|
| 21 |
+
from scipy.spatial.transform import Rotation as R
|
| 22 |
+
from sklearn.model_selection import KFold, StratifiedGroupKFold, GroupKFold, StratifiedKFold
|
| 23 |
+
from sklearn.metrics import precision_recall_fscore_support
|
| 24 |
+
from timm.utils import ModelEmaV3
|
| 25 |
+
import timm
|
| 26 |
+
|
| 27 |
+
import os
|
| 28 |
+
import gc
|
| 29 |
+
import json
|
| 30 |
+
from pathlib import Path
|
| 31 |
+
import pickle
|
| 32 |
+
from tqdm.auto import tqdm
|
| 33 |
+
import copy
|
| 34 |
+
import numpy as np
|
| 35 |
+
import pandas as pd
|
| 36 |
+
import polars as pl
|
| 37 |
+
from PIL import Image
|
| 38 |
+
import time
|
| 39 |
+
from tqdm import tqdm
|
| 40 |
+
from matplotlib import pyplot as plt
|
| 41 |
+
import seaborn as sns
|
| 42 |
+
from multiprocessing import Manager as MemoryManager
|
| 43 |
+
from functools import lru_cache
|
| 44 |
+
import shutil
|
| 45 |
+
import glob
|
| 46 |
+
import cv2
|
| 47 |
+
import random
|
| 48 |
+
import re
|
| 49 |
+
import joblib
|
| 50 |
+
import math
|
| 51 |
+
from huggingface_hub import HfApi, snapshot_download
|
| 52 |
+
import evaluate
|
| 53 |
+
from underthesea import word_tokenize as vi_tokenize_tool
|
| 54 |
+
import spacy
|
| 55 |
+
en_tokenize_tool = spacy.load("en_core_web_sm")
|
| 56 |
+
from collections import defaultdict, Counter
|
| 57 |
+
|
| 58 |
+
# %% [code]
|
| 59 |
+
# Global config
|
| 60 |
+
SEEDS = [26092004]
|
| 61 |
+
topk = 1
|
| 62 |
+
nfolds = 5
|
| 63 |
+
only_fold_idx = 0
|
| 64 |
+
test_only = 0
|
| 65 |
+
debug_only = 0
|
| 66 |
+
|
| 67 |
+
# Config thư mục
|
| 68 |
+
dataset = 'kltn/only_entities' # conll003, ontonotes, phoner, vietbio, vietmed, vimed, kltn/only_entities, kltn/raw
|
| 69 |
+
root_dir = f'/kaggle/input/notebooks/sambui22022517/kltn-data/{dataset}' ## Thư mục chứa file train, val, test
|
| 70 |
+
train_dir = f'{root_dir}'
|
| 71 |
+
# val_dir = f'{root_dir}/val'
|
| 72 |
+
test_dir = f'{root_dir}'
|
| 73 |
+
|
| 74 |
+
# Config checkpoints
|
| 75 |
+
|
| 76 |
+
# Config training
|
| 77 |
+
epochs = 18 if not debug_only else 2
|
| 78 |
+
batch_size = 32
|
| 79 |
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 80 |
+
# # Thêm biến toàn cục nào đó vào đây
|
| 81 |
+
repo_name = 'SS3M/kltn-ien-experiments'
|
| 82 |
+
state_dict_save_name = "0_ent_175_negs_hr_05_wr25_1"
|
| 83 |
+
checkpoints_dir = state_dict_save_name
|
| 84 |
+
pretrained_dir = "/kaggle/working"
|
| 85 |
+
os.makedirs(f'{checkpoints_dir}', exist_ok=True)
|
| 86 |
+
|
| 87 |
+
backbone_model_name = "bert-base-uncased" if dataset in ["conll003", "ontonotes"] else "vinai/phobert-base"
|
| 88 |
+
word_tokenize = lambda text: [token.text for token in en_tokenize_tool(text)] if dataset == dataset in ["conll003", "ontonotes"] else vi_tokenize_tool(text)
|
| 89 |
+
max_len_dict = {
|
| 90 |
+
'kltn/raw': 256,
|
| 91 |
+
'kltn/only_entities': 68,
|
| 92 |
+
'conll003': 46,
|
| 93 |
+
'ontonotes': 61,
|
| 94 |
+
'phoner': 68,
|
| 95 |
+
'vietbio': 125,
|
| 96 |
+
'vietmed': 36,
|
| 97 |
+
'vimed': 100,
|
| 98 |
+
}
|
| 99 |
+
zero_entities_rate_dict = {
|
| 100 |
+
'kltn/raw': 1000,
|
| 101 |
+
'kltn/only_entities': 0.2,
|
| 102 |
+
'conll003': 1000, # mean keep all zero-entities samples
|
| 103 |
+
'ontonotes': 1000,
|
| 104 |
+
'phoner': 1000,
|
| 105 |
+
'vietbio': 1000,
|
| 106 |
+
'vietmed': 1000,
|
| 107 |
+
'vimed': 1000,
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
max_len = max_len_dict[dataset]
|
| 111 |
+
max_n_parts = 3 if dataset in ['kltn/raw'] else 1
|
| 112 |
+
max_span_len = 14
|
| 113 |
+
zero_entities_rate = zero_entities_rate_dict[dataset]
|
| 114 |
+
n_negs = 175
|
| 115 |
+
|
| 116 |
+
# Trainer
|
| 117 |
+
trainer_params = {
|
| 118 |
+
"training_time": "00:11:30:00",
|
| 119 |
+
"eval_mode": "max",
|
| 120 |
+
"topk": topk,
|
| 121 |
+
"save_name": state_dict_save_name,
|
| 122 |
+
"save_best": True,
|
| 123 |
+
"save_last": True,
|
| 124 |
+
"device": device,
|
| 125 |
+
"logging": True,
|
| 126 |
+
"logging_file": True,
|
| 127 |
+
"checkpoints_dir": checkpoints_dir,
|
| 128 |
+
"early_stopping": 30,
|
| 129 |
+
"eval_from_ratio": 0.4,
|
| 130 |
+
"eval_every": 1,
|
| 131 |
+
"schedule_in_step": False,
|
| 132 |
+
"use_ema": True,
|
| 133 |
+
"ema_from_ratio": 0.3,
|
| 134 |
+
"ema_decay": 0.9995,
|
| 135 |
+
"max_grad_norm": 200.0,
|
| 136 |
+
"return_best": True,
|
| 137 |
+
"return_last": True,
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
# Memory
|
| 141 |
+
train_memory_params = {
|
| 142 |
+
'max_len': max_len,
|
| 143 |
+
'max_n_parts': max_n_parts,
|
| 144 |
+
'max_span_len': max_span_len,
|
| 145 |
+
'n_negs': n_negs,
|
| 146 |
+
'weight_sampling': True,
|
| 147 |
+
'weight_rate': 2.5,
|
| 148 |
+
'hard_rate': 0.5,
|
| 149 |
+
}
|
| 150 |
+
val_memory_params = {
|
| 151 |
+
'max_len': max_len,
|
| 152 |
+
'max_n_parts': max_n_parts,
|
| 153 |
+
'max_span_len': max_span_len,
|
| 154 |
+
'n_negs': n_negs,
|
| 155 |
+
'weight_sampling': True,
|
| 156 |
+
'weight_rate': 2.5,
|
| 157 |
+
'hard_rate': 0.5,
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
# Data Loader
|
| 161 |
+
def seed_worker(worker_id):
|
| 162 |
+
worker_seed = torch.initial_seed() % 2**32
|
| 163 |
+
np.random.seed(worker_seed)
|
| 164 |
+
random.seed(worker_seed)
|
| 165 |
+
|
| 166 |
+
train_loader_params = {
|
| 167 |
+
'batch_size': batch_size,
|
| 168 |
+
'shuffle': True,
|
| 169 |
+
'pin_memory':True,
|
| 170 |
+
'num_workers': 2,
|
| 171 |
+
'drop_last': False,
|
| 172 |
+
'worker_init_fn': seed_worker,
|
| 173 |
+
'persistent_workers': False,
|
| 174 |
+
}
|
| 175 |
+
val_loader_params = {
|
| 176 |
+
'batch_size': batch_size,
|
| 177 |
+
'shuffle': False,
|
| 178 |
+
'pin_memory':True,
|
| 179 |
+
'num_workers': 1,
|
| 180 |
+
'drop_last': False,
|
| 181 |
+
'worker_init_fn': seed_worker,
|
| 182 |
+
'persistent_workers': False,
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
# Model
|
| 186 |
+
model_params = {
|
| 187 |
+
'backbone_model_name': backbone_model_name,
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
# Loss Func
|
| 191 |
+
loss_func_params = {
|
| 192 |
+
|
| 193 |
+
}
|
| 194 |
+
eval_func_params = {}
|
| 195 |
+
|
| 196 |
+
# Optim
|
| 197 |
+
optim_params = {
|
| 198 |
+
'name': 'AdamW',
|
| 199 |
+
'lr': 1e-4,
|
| 200 |
+
'weight_decay': 1e-4,
|
| 201 |
+
}
|
| 202 |
+
scheduler_params = {
|
| 203 |
+
'name': 'CosineAnnealingLR',
|
| 204 |
+
'T_max': 20, # Số epoch để hoàn thành một chu kỳ giảm LR
|
| 205 |
+
'eta_min': 1e-6 # Learning rate nhỏ nhất trong chu kỳ
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
# %% [code]
|
| 209 |
+
def set_seed(seed=42):
|
| 210 |
+
random.seed(seed)
|
| 211 |
+
np.random.seed(seed)
|
| 212 |
+
torch.manual_seed(seed)
|
| 213 |
+
torch.cuda.manual_seed(seed)
|
| 214 |
+
torch.cuda.manual_seed_all(seed) # if using multi-GPU
|
| 215 |
+
torch.use_deterministic_algorithms(False)
|
| 216 |
+
torch.backends.cudnn.deterministic = True
|
| 217 |
+
torch.backends.cudnn.benchmark = False
|
| 218 |
+
os.environ['PYTHONHASHSEED'] = str(seed)
|
| 219 |
+
|
| 220 |
+
# %% [code]
|
| 221 |
+
class CustomLoss(nn.Module):
|
| 222 |
+
def __init__(self):
|
| 223 |
+
super().__init__()
|
| 224 |
+
|
| 225 |
+
def forward(self, logits, labels, weights=None):
|
| 226 |
+
B, N, C = logits.shape
|
| 227 |
+
|
| 228 |
+
flat_logits = logits.reshape(-1, C)
|
| 229 |
+
flat_labels = labels.reshape(-1)
|
| 230 |
+
|
| 231 |
+
valid_mask = flat_labels != -100
|
| 232 |
+
|
| 233 |
+
if valid_mask.any():
|
| 234 |
+
losses = F.cross_entropy(
|
| 235 |
+
flat_logits,
|
| 236 |
+
flat_labels,
|
| 237 |
+
reduction='none'
|
| 238 |
+
)
|
| 239 |
+
|
| 240 |
+
losses = losses[valid_mask]
|
| 241 |
+
|
| 242 |
+
if weights is not None:
|
| 243 |
+
flat_weights = weights.reshape(-1)[valid_mask]
|
| 244 |
+
span_loss = (losses * flat_weights).mean()
|
| 245 |
+
else:
|
| 246 |
+
span_loss = losses.mean()
|
| 247 |
+
|
| 248 |
+
else:
|
| 249 |
+
span_loss = logits.new_tensor(0.0)
|
| 250 |
+
|
| 251 |
+
return {
|
| 252 |
+
"total": span_loss,
|
| 253 |
+
"span_loss": span_loss,
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
# %% [code]
|
| 257 |
+
## Viết eval_fn vào đây
|
| 258 |
+
|
| 259 |
+
# Bỏ hết eval_fn và trọng số vào đây
|
| 260 |
+
class CustomEvalFn(nn.Module):
|
| 261 |
+
def __init__(self):
|
| 262 |
+
super().__init__()
|
| 263 |
+
|
| 264 |
+
def compute_f1(self, tp, fp, fn):
|
| 265 |
+
precision = tp / (tp + fp + 1e-8)
|
| 266 |
+
recall = tp / (tp + fn + 1e-8)
|
| 267 |
+
f1 = 2 * precision * recall / (precision + recall + 1e-8)
|
| 268 |
+
return precision, recall, f1
|
| 269 |
+
|
| 270 |
+
def forward(self, pred, gold):
|
| 271 |
+
pred_set = set(pred)
|
| 272 |
+
gold_set = set(gold)
|
| 273 |
+
|
| 274 |
+
tp = len(pred_set & gold_set)
|
| 275 |
+
fp = len(pred_set - gold_set)
|
| 276 |
+
fn = len(gold_set - pred_set)
|
| 277 |
+
|
| 278 |
+
precision, recall, f1 = self.compute_f1(tp, fp, fn)
|
| 279 |
+
|
| 280 |
+
return {
|
| 281 |
+
f"precision": precision,
|
| 282 |
+
f"recall": recall,
|
| 283 |
+
f"f1": f1,
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
class SpanErrorAnalyzer:
|
| 287 |
+
def __init__(self, pad_token_id=0):
|
| 288 |
+
self.pad_token_id = pad_token_id
|
| 289 |
+
|
| 290 |
+
# ===== helper =====
|
| 291 |
+
def _to_set(self, data):
|
| 292 |
+
"""
|
| 293 |
+
data: list of (b, tuple(ids))
|
| 294 |
+
-> dict[b] = set(tuple(ids))
|
| 295 |
+
"""
|
| 296 |
+
res = defaultdict(set)
|
| 297 |
+
for b, ids in data:
|
| 298 |
+
ids = tuple([i for i in ids if i != self.pad_token_id])
|
| 299 |
+
if len(ids) > 0:
|
| 300 |
+
res[b].add(ids)
|
| 301 |
+
return res
|
| 302 |
+
|
| 303 |
+
def _iou(self, a, b):
|
| 304 |
+
"""
|
| 305 |
+
a, b: tuple(ids)
|
| 306 |
+
"""
|
| 307 |
+
set_a, set_b = set(a), set(b)
|
| 308 |
+
inter = len(set_a & set_b)
|
| 309 |
+
union = len(set_a | set_b)
|
| 310 |
+
if union == 0:
|
| 311 |
+
return 0.0
|
| 312 |
+
return inter / union
|
| 313 |
+
|
| 314 |
+
def _boundary_error(self, pred, gold):
|
| 315 |
+
"""
|
| 316 |
+
đo lệch boundary dựa trên overlap prefix/suffix
|
| 317 |
+
"""
|
| 318 |
+
# left match
|
| 319 |
+
left = 0
|
| 320 |
+
for i in range(min(len(pred), len(gold))):
|
| 321 |
+
if pred[i] == gold[i]:
|
| 322 |
+
left += 1
|
| 323 |
+
else:
|
| 324 |
+
break
|
| 325 |
+
|
| 326 |
+
# right match
|
| 327 |
+
right = 0
|
| 328 |
+
for i in range(1, min(len(pred), len(gold)) + 1):
|
| 329 |
+
if pred[-i] == gold[-i]:
|
| 330 |
+
right += 1
|
| 331 |
+
else:
|
| 332 |
+
break
|
| 333 |
+
|
| 334 |
+
return {
|
| 335 |
+
"left_match": left,
|
| 336 |
+
"right_match": right,
|
| 337 |
+
"pred_len": len(pred),
|
| 338 |
+
"gold_len": len(gold),
|
| 339 |
+
}
|
| 340 |
+
|
| 341 |
+
# ===== main =====
|
| 342 |
+
def analyze(self, preds, golds):
|
| 343 |
+
pred_map = self._to_set(preds)
|
| 344 |
+
gold_map = self._to_set(golds)
|
| 345 |
+
|
| 346 |
+
all_batches = set(pred_map.keys()) | set(gold_map.keys())
|
| 347 |
+
|
| 348 |
+
stats = Counter()
|
| 349 |
+
|
| 350 |
+
detailed_errors = []
|
| 351 |
+
|
| 352 |
+
for b in all_batches:
|
| 353 |
+
pset = pred_map.get(b, set())
|
| 354 |
+
gset = gold_map.get(b, set())
|
| 355 |
+
|
| 356 |
+
matched_gold = set()
|
| 357 |
+
|
| 358 |
+
# ===== check predictions =====
|
| 359 |
+
for p in pset:
|
| 360 |
+
if p in gset:
|
| 361 |
+
stats["exact_match"] += 1
|
| 362 |
+
matched_gold.add(p)
|
| 363 |
+
else:
|
| 364 |
+
# tìm gold gần nhất
|
| 365 |
+
best_iou = 0
|
| 366 |
+
best_g = None
|
| 367 |
+
|
| 368 |
+
for g in gset:
|
| 369 |
+
iou = self._iou(p, g)
|
| 370 |
+
if iou > best_iou:
|
| 371 |
+
best_iou = iou
|
| 372 |
+
best_g = g
|
| 373 |
+
|
| 374 |
+
if best_iou > 0:
|
| 375 |
+
stats["partial_match"] += 1
|
| 376 |
+
|
| 377 |
+
boundary = self._boundary_error(p, best_g)
|
| 378 |
+
|
| 379 |
+
detailed_errors.append({
|
| 380 |
+
"type": "boundary_error",
|
| 381 |
+
"batch": b,
|
| 382 |
+
"pred": p,
|
| 383 |
+
"gold": best_g,
|
| 384 |
+
"iou": best_iou,
|
| 385 |
+
**boundary
|
| 386 |
+
})
|
| 387 |
+
else:
|
| 388 |
+
if b not in gold_map:
|
| 389 |
+
stats["no_event_sample"] += 1
|
| 390 |
+
err_type = "no_event_sample"
|
| 391 |
+
else:
|
| 392 |
+
stats["completely_wrong"] += 1
|
| 393 |
+
err_type = "completely_wrong"
|
| 394 |
+
|
| 395 |
+
detailed_errors.append({
|
| 396 |
+
"type": err_type,
|
| 397 |
+
"batch": b,
|
| 398 |
+
"pred": p
|
| 399 |
+
})
|
| 400 |
+
|
| 401 |
+
# ===== check missing =====
|
| 402 |
+
for g in gset:
|
| 403 |
+
if g not in matched_gold:
|
| 404 |
+
# check if any pred overlaps
|
| 405 |
+
overlap = any(self._iou(p, g) > 0 for p in pset)
|
| 406 |
+
|
| 407 |
+
if overlap:
|
| 408 |
+
stats["miss_with_overlap"] += 1
|
| 409 |
+
else:
|
| 410 |
+
stats["miss"] += 1
|
| 411 |
+
|
| 412 |
+
detailed_errors.append({
|
| 413 |
+
"type": "miss",
|
| 414 |
+
"batch": b,
|
| 415 |
+
"gold": g
|
| 416 |
+
})
|
| 417 |
+
|
| 418 |
+
return {
|
| 419 |
+
"summary": {
|
| 420 |
+
"exact_match": (stats["exact_match"], stats["exact_match"] / len(preds)),
|
| 421 |
+
"partial_match": (stats["partial_match"], stats["partial_match"] / len(preds)),
|
| 422 |
+
"no_event_sample": (stats["no_event_sample"], stats["no_event_sample"] / len(preds)),
|
| 423 |
+
"completely_wrong": (stats["completely_wrong"], stats["completely_wrong"] / len(preds)),
|
| 424 |
+
"miss": (stats["miss"], stats["miss"] / len(golds)),
|
| 425 |
+
"miss_with_overlap": (stats["miss_with_overlap"], stats["miss_with_overlap"] / len(golds)),
|
| 426 |
+
},
|
| 427 |
+
"details": detailed_errors
|
| 428 |
+
}
|
| 429 |
+
|
| 430 |
+
# %% [code]
|
| 431 |
+
class DataParallelProxy(nn.DataParallel):
|
| 432 |
+
def __getattr__(self, name):
|
| 433 |
+
try:
|
| 434 |
+
return super().__getattr__(name)
|
| 435 |
+
|
| 436 |
+
except AttributeError:
|
| 437 |
+
|
| 438 |
+
attr = getattr(self.module, name)
|
| 439 |
+
|
| 440 |
+
if callable(attr):
|
| 441 |
+
|
| 442 |
+
def wrapper(*args, **kwargs):
|
| 443 |
+
return self._parallel_apply_method(
|
| 444 |
+
name,
|
| 445 |
+
*args,
|
| 446 |
+
**kwargs
|
| 447 |
+
)
|
| 448 |
+
|
| 449 |
+
return wrapper
|
| 450 |
+
|
| 451 |
+
return attr
|
| 452 |
+
|
| 453 |
+
def _parallel_apply_method(self, method_name, *inputs, **kwargs):
|
| 454 |
+
if not self.device_ids:
|
| 455 |
+
return getattr(self.module, method_name)(*inputs, **kwargs)
|
| 456 |
+
|
| 457 |
+
inputs_scattered, kwargs_scattered = self.scatter(
|
| 458 |
+
inputs,
|
| 459 |
+
kwargs,
|
| 460 |
+
self.device_ids
|
| 461 |
+
)
|
| 462 |
+
|
| 463 |
+
replicas = self.replicate(
|
| 464 |
+
self.module,
|
| 465 |
+
self.device_ids[:len(inputs_scattered)]
|
| 466 |
+
)
|
| 467 |
+
|
| 468 |
+
outputs = self.parallel_apply(
|
| 469 |
+
[getattr(replica, method_name) for replica in replicas],
|
| 470 |
+
inputs_scattered,
|
| 471 |
+
kwargs_scattered
|
| 472 |
+
)
|
| 473 |
+
|
| 474 |
+
return self._custom_gather(outputs, self.output_device)
|
| 475 |
+
|
| 476 |
+
def gather(self, outputs, output_device):
|
| 477 |
+
return self._custom_gather(outputs, output_device)
|
| 478 |
+
|
| 479 |
+
def _custom_gather(self, outputs, output_device):
|
| 480 |
+
first = outputs[0]
|
| 481 |
+
|
| 482 |
+
if torch.is_tensor(first):
|
| 483 |
+
return self._gather_tensor(outputs, output_device)
|
| 484 |
+
|
| 485 |
+
if isinstance(first, tuple):
|
| 486 |
+
return tuple(
|
| 487 |
+
self._custom_gather(
|
| 488 |
+
list(items),
|
| 489 |
+
output_device
|
| 490 |
+
)
|
| 491 |
+
for items in zip(*outputs)
|
| 492 |
+
)
|
| 493 |
+
|
| 494 |
+
if isinstance(first, list):
|
| 495 |
+
if len(first) > 0 and torch.is_tensor(first[0]):
|
| 496 |
+
return self._gather_tensor_list(outputs, output_device)
|
| 497 |
+
|
| 498 |
+
merged = []
|
| 499 |
+
for out in outputs:
|
| 500 |
+
merged.extend(out)
|
| 501 |
+
return merged
|
| 502 |
+
|
| 503 |
+
if isinstance(first, dict):
|
| 504 |
+
return {
|
| 505 |
+
k: self._custom_gather(
|
| 506 |
+
[o[k] for o in outputs],
|
| 507 |
+
output_device
|
| 508 |
+
)
|
| 509 |
+
for k in first.keys()
|
| 510 |
+
}
|
| 511 |
+
return outputs
|
| 512 |
+
|
| 513 |
+
def _gather_tensor(self, tensors, output_device):
|
| 514 |
+
tensors = [
|
| 515 |
+
t.to(output_device)
|
| 516 |
+
for t in tensors
|
| 517 |
+
]
|
| 518 |
+
|
| 519 |
+
try:
|
| 520 |
+
return torch.cat(tensors, dim=0)
|
| 521 |
+
except RuntimeError:
|
| 522 |
+
pass
|
| 523 |
+
|
| 524 |
+
max_shape = list(tensors[0].shape)
|
| 525 |
+
for t in tensors[1:]:
|
| 526 |
+
for d in range(len(max_shape)):
|
| 527 |
+
max_shape[d] = max(max_shape[d], t.shape[d])
|
| 528 |
+
|
| 529 |
+
padded = []
|
| 530 |
+
for t in tensors:
|
| 531 |
+
pad = []
|
| 532 |
+
|
| 533 |
+
for d in reversed(range(len(max_shape))):
|
| 534 |
+
if d == 0:
|
| 535 |
+
pad.extend([0, 0])
|
| 536 |
+
continue
|
| 537 |
+
|
| 538 |
+
diff = max_shape[d] - t.shape[d]
|
| 539 |
+
pad.extend([0, diff])
|
| 540 |
+
|
| 541 |
+
t = F.pad(t, pad)
|
| 542 |
+
padded.append(t)
|
| 543 |
+
return torch.cat(padded, dim=0)
|
| 544 |
+
|
| 545 |
+
def _gather_tensor_list(self, outputs, output_device):
|
| 546 |
+
merged = []
|
| 547 |
+
|
| 548 |
+
for out in outputs:
|
| 549 |
+
merged.extend(out)
|
| 550 |
+
|
| 551 |
+
return self._gather_tensor(merged, output_device)
|
| 552 |
+
|
| 553 |
+
# %% [code]
|
| 554 |
+
class SpanExtractor(nn.Module):
|
| 555 |
+
def __init__(self, hidden_size):
|
| 556 |
+
super().__init__()
|
| 557 |
+
|
| 558 |
+
# self.start_proj = MLP(hidden_size, hidden_size, hidden_size)
|
| 559 |
+
# self.end_proj = MLP(hidden_size, hidden_size, hidden_size)
|
| 560 |
+
|
| 561 |
+
self.span_attn = nn.Sequential(
|
| 562 |
+
nn.Linear(hidden_size, hidden_size),
|
| 563 |
+
nn.GELU(),
|
| 564 |
+
nn.Linear(hidden_size, 1)
|
| 565 |
+
)
|
| 566 |
+
|
| 567 |
+
def forward(self, hidden_states, spans):
|
| 568 |
+
B, L, H = hidden_states.shape
|
| 569 |
+
N = spans.size(1)
|
| 570 |
+
|
| 571 |
+
start_hidden = hidden_states
|
| 572 |
+
end_hidden = hidden_states
|
| 573 |
+
|
| 574 |
+
batch_idx = torch.arange(B, device=hidden_states.device).unsqueeze(1)
|
| 575 |
+
start_idx = spans[..., 0]
|
| 576 |
+
end_idx = spans[..., 1]
|
| 577 |
+
|
| 578 |
+
start_h = start_hidden[batch_idx, start_idx]
|
| 579 |
+
end_h = end_hidden[batch_idx, end_idx]
|
| 580 |
+
|
| 581 |
+
token_idx = torch.arange(L, device=hidden_states.device).view(1, 1, L)
|
| 582 |
+
span_mask = (token_idx >= start_idx.unsqueeze(-1)) & (token_idx <= end_idx.unsqueeze(-1))
|
| 583 |
+
|
| 584 |
+
attn_scores = self.span_attn(hidden_states).squeeze(-1).unsqueeze(1).expand(-1, N, -1)
|
| 585 |
+
attn_scores = attn_scores.masked_fill(~span_mask, float('-inf'))
|
| 586 |
+
attn_weights = torch.softmax(attn_scores, dim=-1)
|
| 587 |
+
span_context = torch.einsum("bnl,blh->bnh", attn_weights, hidden_states)
|
| 588 |
+
|
| 589 |
+
span_repr = torch.cat([start_h, end_h, end_h - start_h, end_h * start_h, span_context], dim=-1)
|
| 590 |
+
# span_repr = torch.cat([start_h, end_h, span_context], dim=-1)
|
| 591 |
+
|
| 592 |
+
return span_repr
|
| 593 |
+
|
| 594 |
+
class MLP(nn.Module):
|
| 595 |
+
def __init__(self, in_size, hid_size, out_size, dropout=0.1):
|
| 596 |
+
super().__init__()
|
| 597 |
+
|
| 598 |
+
self.input_proj = nn.Identity() if in_size == hid_size else nn.Linear(in_size, hid_size)
|
| 599 |
+
|
| 600 |
+
self.block = nn.Sequential(
|
| 601 |
+
nn.Linear(hid_size, hid_size),
|
| 602 |
+
nn.LayerNorm(hid_size),
|
| 603 |
+
nn.GELU(),
|
| 604 |
+
nn.Dropout(dropout),
|
| 605 |
+
|
| 606 |
+
nn.Linear(hid_size, hid_size),
|
| 607 |
+
nn.LayerNorm(hid_size),
|
| 608 |
+
nn.GELU(),
|
| 609 |
+
nn.Dropout(dropout),
|
| 610 |
+
)
|
| 611 |
+
|
| 612 |
+
self.out = nn.Linear(hid_size, out_size)
|
| 613 |
+
|
| 614 |
+
def forward(self, x):
|
| 615 |
+
x = self.input_proj(x)
|
| 616 |
+
x = x + self.block(x) # residual
|
| 617 |
+
return self.out(x)
|
| 618 |
+
|
| 619 |
+
class IEModel(nn.Module):
|
| 620 |
+
def __init__(self, backbone_model_name, num_labels):
|
| 621 |
+
super().__init__()
|
| 622 |
+
|
| 623 |
+
self.encoder = AutoModel.from_pretrained(backbone_model_name)
|
| 624 |
+
hidden_size = self.encoder.config.hidden_size
|
| 625 |
+
|
| 626 |
+
self.span_extractor = SpanExtractor(hidden_size)
|
| 627 |
+
self.spans_classifier = MLP(5 * hidden_size, hidden_size, num_labels)
|
| 628 |
+
|
| 629 |
+
def encode(self, input_ids, attention_mask):
|
| 630 |
+
B, n_parts, L = input_ids.shape
|
| 631 |
+
|
| 632 |
+
input_ids = input_ids.view(-1, L)
|
| 633 |
+
attention_mask = attention_mask.view(-1, L)
|
| 634 |
+
|
| 635 |
+
outputs = self.encoder(input_ids=input_ids, attention_mask=attention_mask)
|
| 636 |
+
hidden_states = outputs.last_hidden_state
|
| 637 |
+
|
| 638 |
+
hidden_states = hidden_states.view(B, n_parts, L, -1).reshape(B, n_parts * L, -1)
|
| 639 |
+
return hidden_states
|
| 640 |
+
|
| 641 |
+
def get_span_logits(self, span_reprs):
|
| 642 |
+
return self.spans_classifier(span_reprs)
|
| 643 |
+
|
| 644 |
+
def forward(self, input_ids, attention_mask, sampled_spans):
|
| 645 |
+
hidden_states = self.encode(input_ids, attention_mask)
|
| 646 |
+
|
| 647 |
+
span_reprs = self.span_extractor(hidden_states, sampled_spans)
|
| 648 |
+
span_logits = self.get_span_logits(span_reprs)
|
| 649 |
+
return span_logits
|
| 650 |
+
|
| 651 |
+
def test_model():
|
| 652 |
+
model = nn.DataParallel(IEModel(backbone_model_name, 17)).to(device)
|
| 653 |
+
model.eval()
|
| 654 |
+
total_params = sum(p.numel() for p in model.parameters())
|
| 655 |
+
print(f"Total params: {total_params:,}")
|
| 656 |
+
|
| 657 |
+
vocab_size = model.module.encoder.config.vocab_size
|
| 658 |
+
max_len = model.module.encoder.config.max_position_embeddings
|
| 659 |
+
|
| 660 |
+
bz = 32
|
| 661 |
+
i = torch.randint(0, vocab_size, (bz, 5, 10)).to(device)
|
| 662 |
+
a = torch.ones(bz, 5, 10).to(device)
|
| 663 |
+
s = torch.ones(bz, 3, 2, dtype=torch.long).to(device)
|
| 664 |
+
gs = torch.ones(bz, 3, 2, dtype=torch.long).to(device)
|
| 665 |
+
|
| 666 |
+
with torch.no_grad():
|
| 667 |
+
r = model(i, a, s)
|
| 668 |
+
|
| 669 |
+
if type(r) == tuple:
|
| 670 |
+
print([r[i].shape if type(r[i]) == type(torch.Tensor()) else len(r[i]) for i in range(len(r))])
|
| 671 |
+
else:
|
| 672 |
+
print(r.shape)
|
| 673 |
+
|
| 674 |
+
test_model()
|
| 675 |
+
|
| 676 |
+
# %% [code]
|
| 677 |
+
def configure_optimizers(network, optim_params, scheduler_params):
|
| 678 |
+
try:
|
| 679 |
+
optim_params = copy.copy(optim_params)
|
| 680 |
+
scheduler_params = copy.copy(scheduler_params)
|
| 681 |
+
|
| 682 |
+
optim_name = optim_params.pop('name')
|
| 683 |
+
scheduler_name = scheduler_params.pop('name')
|
| 684 |
+
|
| 685 |
+
optimizer_cls = globals().get(optim_name) or getattr(optim, optim_name, None)
|
| 686 |
+
scheduler_cls = globals().get(scheduler_name) or getattr(optim.lr_scheduler, scheduler_name, None)
|
| 687 |
+
|
| 688 |
+
if optimizer_cls is None:
|
| 689 |
+
raise ValueError(f"Optimizer '{optim_name}' is not available!")
|
| 690 |
+
|
| 691 |
+
optimizer = optimizer_cls(network.parameters(), **optim_params)
|
| 692 |
+
|
| 693 |
+
scheduler = None
|
| 694 |
+
if scheduler_params and scheduler_cls: # Chỉ tạo scheduler nếu có tham số
|
| 695 |
+
scheduler = scheduler_cls(optimizer, **scheduler_params)
|
| 696 |
+
|
| 697 |
+
return optimizer, scheduler
|
| 698 |
+
|
| 699 |
+
except KeyError as e:
|
| 700 |
+
raise ValueError(f"Missing {e} in config!!")
|
| 701 |
+
|
| 702 |
+
def freeze(self, model):
|
| 703 |
+
model.eval()
|
| 704 |
+
for param in model.parameters():
|
| 705 |
+
param.requires_grad = False
|
| 706 |
+
|
| 707 |
+
def unfreeze(self, model):
|
| 708 |
+
model.train()
|
| 709 |
+
for param in model.parameters():
|
| 710 |
+
param.requires_grad = True
|
| 711 |
+
|
| 712 |
+
def reduce_batch_size(loader, ratio=0.5):
|
| 713 |
+
new_bs = max(1, int(loader.batch_size * ratio))
|
| 714 |
+
|
| 715 |
+
shuffle = isinstance(loader.sampler, RandomSampler)
|
| 716 |
+
|
| 717 |
+
new_loader = DataLoader(
|
| 718 |
+
dataset=loader.dataset,
|
| 719 |
+
batch_size=new_bs,
|
| 720 |
+
shuffle=shuffle,
|
| 721 |
+
sampler=None if shuffle else loader.sampler,
|
| 722 |
+
num_workers=loader.num_workers,
|
| 723 |
+
collate_fn=loader.collate_fn,
|
| 724 |
+
pin_memory=loader.pin_memory,
|
| 725 |
+
drop_last=loader.drop_last,
|
| 726 |
+
timeout=loader.timeout,
|
| 727 |
+
worker_init_fn=loader.worker_init_fn,
|
| 728 |
+
multiprocessing_context=loader.multiprocessing_context,
|
| 729 |
+
generator=loader.generator,
|
| 730 |
+
prefetch_factor=loader.prefetch_factor if loader.num_workers > 0 else None,
|
| 731 |
+
persistent_workers=loader.persistent_workers,
|
| 732 |
+
pin_memory_device=loader.pin_memory_device
|
| 733 |
+
)
|
| 734 |
+
|
| 735 |
+
return new_loader
|
| 736 |
+
|
| 737 |
+
def list_to_tuple(x):
|
| 738 |
+
if isinstance(x, (list, tuple)):
|
| 739 |
+
return tuple(list_to_tuple(i) for i in x)
|
| 740 |
+
return x
|
| 741 |
+
|
| 742 |
+
def fmt(x):
|
| 743 |
+
if isinstance(x, float):
|
| 744 |
+
return round(x, 5)
|
| 745 |
+
if isinstance(x, dict):
|
| 746 |
+
return {k: fmt(v) for k, v in x.items()}
|
| 747 |
+
if isinstance(x, list):
|
| 748 |
+
return [fmt(v) for v in x]
|
| 749 |
+
return x
|
| 750 |
+
|
| 751 |
+
class ModelEmaV3Proxy(ModelEmaV3):
|
| 752 |
+
def __getattr__(self, name):
|
| 753 |
+
try:
|
| 754 |
+
return super().__getattr__(name)
|
| 755 |
+
except AttributeError:
|
| 756 |
+
return getattr(self.module, name)
|
| 757 |
+
|
| 758 |
+
def extract_entities(
|
| 759 |
+
input_ids, # (B, L)
|
| 760 |
+
logits, # (B, N, C)
|
| 761 |
+
pred_spans, # (B, N, 2)
|
| 762 |
+
id2label
|
| 763 |
+
):
|
| 764 |
+
"""
|
| 765 |
+
Return: [(batch_idx, ([token_ids], label_name)),...]
|
| 766 |
+
"""
|
| 767 |
+
|
| 768 |
+
# (B, N)
|
| 769 |
+
pred_labels = logits.softmax(dim=-1).argmax(dim=-1)
|
| 770 |
+
start_idx = pred_spans[..., 0] # (B, N)
|
| 771 |
+
end_idx = pred_spans[..., 1] # (B, N)
|
| 772 |
+
keep = ((pred_labels > 0) & (start_idx > 0) & (end_idx > 0))
|
| 773 |
+
|
| 774 |
+
results = []
|
| 775 |
+
B, N = pred_labels.shape
|
| 776 |
+
for bidx in range(B):
|
| 777 |
+
valid_idxes = keep[bidx].nonzero(as_tuple=False).squeeze(-1)
|
| 778 |
+
|
| 779 |
+
for idx in valid_idxes:
|
| 780 |
+
lb = pred_labels[bidx, idx]
|
| 781 |
+
|
| 782 |
+
s, e = pred_spans[bidx, idx].tolist()
|
| 783 |
+
token_ids = input_ids[bidx, s:e+1].tolist()
|
| 784 |
+
|
| 785 |
+
results.append((bidx, (token_ids, id2label[lb.item()])))
|
| 786 |
+
|
| 787 |
+
return results
|
| 788 |
+
|
| 789 |
+
class Trainer:
|
| 790 |
+
def __init__(
|
| 791 |
+
self, training_time="00:11:30:00", eval_mode="max", topk=1, save_name="network", save_best=True, save_last=False, max_grad_norm=200.0,
|
| 792 |
+
logging=0, logging_file=False, checkpoints_dir="", early_stopping=False, eval_from_ratio=-1, eval_every=1, device='cpu',
|
| 793 |
+
schedule_in_step=True, use_ema=True, ema_from_ratio=-1, ema_decay=0.999, return_best=True, return_last=True
|
| 794 |
+
):
|
| 795 |
+
self.ema_net = None
|
| 796 |
+
|
| 797 |
+
self.training_time = self._time_str_to_seconds(training_time)
|
| 798 |
+
self.mode = eval_mode
|
| 799 |
+
self.topk = topk
|
| 800 |
+
self.device = device
|
| 801 |
+
self.logging = logging if logging < epochs else 1
|
| 802 |
+
self.logging_file = logging_file
|
| 803 |
+
self.checkpoints_dir = checkpoints_dir
|
| 804 |
+
self.early_stopping = early_stopping
|
| 805 |
+
self.eval_from_ratio = eval_from_ratio
|
| 806 |
+
self.eval_every = eval_every
|
| 807 |
+
self.save_name = save_name
|
| 808 |
+
self.save_best = save_best
|
| 809 |
+
self.save_last = save_last
|
| 810 |
+
self.return_best = return_best
|
| 811 |
+
self.return_last = return_last
|
| 812 |
+
self.max_grad_norm = max_grad_norm
|
| 813 |
+
self.schedule_in_step = schedule_in_step
|
| 814 |
+
self.use_ema = use_ema
|
| 815 |
+
self.ema_from_ratio = ema_from_ratio
|
| 816 |
+
self.ema_decay = ema_decay
|
| 817 |
+
|
| 818 |
+
self.best_stage = [[float('-inf') if self.mode == 'max' else float('inf'), None, None]]
|
| 819 |
+
self.grad_scaler = torch.amp.GradScaler(self.device, init_scale=1024.0)
|
| 820 |
+
|
| 821 |
+
def fit(self, network, optimizer, scheduler, loss_fn, epochs, train_loader, val_loader=None, eval_fn=None, start_epoch=1, start_training_time=None, id2label=None):
|
| 822 |
+
if eval_fn is None:
|
| 823 |
+
if self.mode == "max":
|
| 824 |
+
eval_fn = lambda *x: -loss_fn(*x)
|
| 825 |
+
else:
|
| 826 |
+
eval_fn = lambda *x: loss_fn(*x)
|
| 827 |
+
|
| 828 |
+
if torch.cuda.device_count() > 1:
|
| 829 |
+
network = DataParallelProxy(network)
|
| 830 |
+
network = network.to(self.device)
|
| 831 |
+
|
| 832 |
+
if not start_training_time:
|
| 833 |
+
start_training_time = time.time()
|
| 834 |
+
|
| 835 |
+
start_ema = int(epochs * self.ema_from_ratio)
|
| 836 |
+
start_eval = int(epochs * self.eval_from_ratio)
|
| 837 |
+
|
| 838 |
+
if val_loader is None:
|
| 839 |
+
print(f'[Trainer CallBack] 📢 Không có Val Set, không thể đánh giá và Early Stopping!')
|
| 840 |
+
else:
|
| 841 |
+
model_to_use_str = 'mô hình EMA' if self.use_ema else 'mô hình gốc'
|
| 842 |
+
start_model_update_str = f'Bắt đầu cập nhật EMA từ epoch {start_epoch + start_ema}!' if self.use_ema else ''
|
| 843 |
+
print(f'[Trainer CallBack] 📢 Đánh giá bằng {model_to_use_str} từ epoch {start_epoch + start_eval}!', start_model_update_str)
|
| 844 |
+
|
| 845 |
+
training_log = {}
|
| 846 |
+
for epoch in range(start_epoch, epochs+start_epoch):
|
| 847 |
+
if self.use_ema and self.ema_net is None and epoch - start_epoch >= start_ema:
|
| 848 |
+
self.ema_net = ModelEmaV3Proxy(network, self.ema_decay, device=self.device)
|
| 849 |
+
|
| 850 |
+
try:
|
| 851 |
+
teaching_rate = math.cos(math.pi / 2 * epoch / epochs)
|
| 852 |
+
train_loss_epoch, train_loss_epoch_dict = self._train_epoch(network, train_loader, optimizer, scheduler, loss_fn, teaching_rate)
|
| 853 |
+
logging_dict = {'lr': [group['lr'] for group in optimizer.param_groups], 'train_loss': train_loss_epoch}
|
| 854 |
+
logging_dict.update(train_loss_epoch_dict)
|
| 855 |
+
|
| 856 |
+
if val_loader is not None and epoch - start_epoch >= start_eval and (epoch - start_epoch - start_eval) % self.eval_every == 0:
|
| 857 |
+
eval_net = self.ema_net.module if (self.use_ema and self.ema_net is not None) else network
|
| 858 |
+
|
| 859 |
+
val_score, val_score_dict, _ = self._eval_epoch(eval_net, val_loader, eval_fn, id2label)
|
| 860 |
+
update = self._update_best_network(eval_net, val_score, epoch)
|
| 861 |
+
logging_dict.update({'val_score': val_score, 'best_score': self.best_stage[0][0], 'new_best_model': update})
|
| 862 |
+
logging_dict.update(val_score_dict)
|
| 863 |
+
if not self.schedule_in_step and scheduler:
|
| 864 |
+
scheduler.step()
|
| 865 |
+
|
| 866 |
+
except RuntimeError as e:
|
| 867 |
+
if "out of memory" in str(e).lower():
|
| 868 |
+
print(f"[Trainer CallBack] ⚠️ Epoch {epoch}/{epochs}: CUDA Out of Memory! Clearing GPU cache...")
|
| 869 |
+
torch.cuda.empty_cache()
|
| 870 |
+
gc.collect()
|
| 871 |
+
if torch.cuda.is_available():
|
| 872 |
+
torch.cuda.synchronize()
|
| 873 |
+
print(f"[Trainer CallBack] ✅ Epoch {epoch}/{epochs}: GPU memory cleared")
|
| 874 |
+
|
| 875 |
+
train_loader = reduce_batch_size(train_loader, ratio=0.5)
|
| 876 |
+
if val_loader is not None:
|
| 877 |
+
val_loader = reduce_batch_size(val_loader, ratio=0.5)
|
| 878 |
+
|
| 879 |
+
logging_dict = {'lr': [group['lr'] for group in optimizer.param_groups], 'train_loss': float('inf')}
|
| 880 |
+
else:
|
| 881 |
+
raise
|
| 882 |
+
|
| 883 |
+
training_log[epoch] = logging_dict
|
| 884 |
+
if self.is_early_stopping(epoch):
|
| 885 |
+
print(f'[Trainer CallBack] 📢 Epoch {epoch}/{epochs}: Detect Overfitting! Breaking Training Process...')
|
| 886 |
+
break
|
| 887 |
+
if self.logging:
|
| 888 |
+
if epoch % self.logging == 0:
|
| 889 |
+
print(f'[Trainer CallBack] 📢 Epoch {epoch}/{epochs}:', fmt(logging_dict))
|
| 890 |
+
else:
|
| 891 |
+
print(f'{epoch}...', end=' ')
|
| 892 |
+
|
| 893 |
+
if self._at_time_limit(start_training_time):
|
| 894 |
+
print(f'[Trainer CallBack] ⚠️ Epoch {epoch}/{epochs}: Thời gian training giới hạn là {self.training_time}, hết giờ tại epoch {epoch}/{epochs}')
|
| 895 |
+
break
|
| 896 |
+
|
| 897 |
+
if self.logging_file:
|
| 898 |
+
os.makedirs(f'{self.checkpoints_dir}/logs', exist_ok=True)
|
| 899 |
+
with open(f"{self.checkpoints_dir}/logs/{self.save_name}_logging.json", "a", encoding="utf-8") as f:
|
| 900 |
+
f.write(json.dumps(training_log))
|
| 901 |
+
|
| 902 |
+
if self.use_ema and self.ema_net is not None:
|
| 903 |
+
self._save_state_dict(self.ema_net.module)
|
| 904 |
+
else:
|
| 905 |
+
self._save_state_dict(network)
|
| 906 |
+
print(f'[Trainer CallBack] 📢 Kết thúc training.\n')
|
| 907 |
+
|
| 908 |
+
best_model, last_model = None, None
|
| 909 |
+
eval_net = self.ema_net.module if (self.use_ema and self.ema_net is not None) else network
|
| 910 |
+
if self.return_best :
|
| 911 |
+
best_model = self.best_stage[0][2] if self.best_stage[0][2] is not None else eval_net.state_dict()
|
| 912 |
+
best_model = {k.replace("module.", ""): v.detach().cpu().clone() for k, v in best_model.items()}
|
| 913 |
+
if self.return_last:
|
| 914 |
+
last_model = eval_net.state_dict()
|
| 915 |
+
last_model = {k.replace("module.", ""): v.detach().cpu().clone() for k, v in last_model.items()}
|
| 916 |
+
|
| 917 |
+
del network
|
| 918 |
+
torch.cuda.empty_cache()
|
| 919 |
+
gc.collect()
|
| 920 |
+
return training_log, best_model, last_model
|
| 921 |
+
|
| 922 |
+
def _time_str_to_seconds(self, time_str):
|
| 923 |
+
days, hours, minutes, seconds = map(int, time_str.split(":"))
|
| 924 |
+
return days * 86400 + hours * 3600 + minutes * 60 + seconds
|
| 925 |
+
|
| 926 |
+
def _update_best_network(self, network, val_score, epoch):
|
| 927 |
+
topk = max(1, self.topk)
|
| 928 |
+
self.best_stage.append([val_score, epoch, {k: v.detach().cpu().clone() for k, v in network.state_dict().items()}])
|
| 929 |
+
self.best_stage = sorted(self.best_stage, reverse=(self.mode == 'max'), key=lambda x: x[0])[:topk]
|
| 930 |
+
if val_score in [x[0] for x in self.best_stage]:
|
| 931 |
+
return True
|
| 932 |
+
return False
|
| 933 |
+
|
| 934 |
+
def is_early_stopping(self, epoch):
|
| 935 |
+
if self.best_stage[0][1] is None:
|
| 936 |
+
return False
|
| 937 |
+
if not self.early_stopping:
|
| 938 |
+
return False
|
| 939 |
+
return epoch - self.best_stage[0][1] >= self.early_stopping
|
| 940 |
+
|
| 941 |
+
def _at_time_limit(self, start_training_time):
|
| 942 |
+
return time.time() - start_training_time >= self.training_time
|
| 943 |
+
|
| 944 |
+
def _save_state_dict(self, network):
|
| 945 |
+
if self.topk <= 0:
|
| 946 |
+
return
|
| 947 |
+
|
| 948 |
+
if self.save_best:
|
| 949 |
+
for r in range(self.topk):
|
| 950 |
+
os.makedirs(f'{self.checkpoints_dir}/r{r+1}s', exist_ok=True)
|
| 951 |
+
|
| 952 |
+
for rank, (score, epoch, state_dict) in enumerate(self.best_stage):
|
| 953 |
+
if state_dict is None:
|
| 954 |
+
continue
|
| 955 |
+
state_dict = {k.replace("module.", ""): v.detach().cpu().clone() for k, v in state_dict.items()}
|
| 956 |
+
torch.save(state_dict, f'{self.checkpoints_dir}/r{rank+1}s/{self.save_name}_r{rank+1}_vs{score:.5f}_{"ema" if self.ema_net is not None else ""}.pth')
|
| 957 |
+
if self.save_last:
|
| 958 |
+
os.makedirs(f'{self.checkpoints_dir}/lasts', exist_ok=True)
|
| 959 |
+
state_dict = {k.replace("module.", ""): v.detach().cpu().clone() for k, v in network.state_dict().items()}
|
| 960 |
+
torch.save(state_dict, f'{self.checkpoints_dir}/lasts/{self.save_name}_last_{"ema" if self.ema_net is not None else ""}.pth')
|
| 961 |
+
|
| 962 |
+
def _train_epoch(self, network, train_loader, optimizer, scheduler, loss_fn, teaching_rate):
|
| 963 |
+
network.train()
|
| 964 |
+
total_loss = 0
|
| 965 |
+
total_loss_dict = {}
|
| 966 |
+
for batch_idx, batch in enumerate(train_loader):
|
| 967 |
+
optimizer.zero_grad()
|
| 968 |
+
with torch.autocast(device_type=self.device, dtype=torch.float16):
|
| 969 |
+
loss, loss_dict = self._cal_loss(network, batch, batch_idx, loss_fn, teaching_rate)
|
| 970 |
+
|
| 971 |
+
for k, v in loss_dict.items():
|
| 972 |
+
t = total_loss_dict.get(k, 0)
|
| 973 |
+
total_loss_dict[k] = t + v
|
| 974 |
+
self.grad_scaler.scale(loss).backward()
|
| 975 |
+
self.grad_scaler.unscale_(optimizer)
|
| 976 |
+
grad_norm = nn.utils.clip_grad_norm_(network.parameters(), self.max_grad_norm)
|
| 977 |
+
# print(grad_norm) # Bỏ cmt dòng này để biết nên chọn max_grad_norm bằng bao nhiêu...
|
| 978 |
+
self.grad_scaler.step(optimizer)
|
| 979 |
+
self.grad_scaler.update()
|
| 980 |
+
if self.schedule_in_step and scheduler:
|
| 981 |
+
scheduler.step()
|
| 982 |
+
if self.use_ema and self.ema_net is not None:
|
| 983 |
+
self.ema_net.update(network)
|
| 984 |
+
total_loss += loss
|
| 985 |
+
return (total_loss / len(train_loader)).item(), {k: v.item() / len(train_loader) for k, v in total_loss_dict.items()}
|
| 986 |
+
|
| 987 |
+
def _eval_epoch(self, network, val_loader, eval_fn, id2label):
|
| 988 |
+
network.eval()
|
| 989 |
+
total_score = 0.0
|
| 990 |
+
total_score_dict = {}
|
| 991 |
+
object_lists = None # sẽ init sau
|
| 992 |
+
|
| 993 |
+
with torch.no_grad():
|
| 994 |
+
for batch_idx, batch in enumerate(val_loader):
|
| 995 |
+
score, score_dict, objects = self._cal_val_score(network, batch, batch_idx, eval_fn, id2label)
|
| 996 |
+
total_score += score
|
| 997 |
+
|
| 998 |
+
for k, v in score_dict.items():
|
| 999 |
+
t = total_score_dict.get(k, 0)
|
| 1000 |
+
total_score_dict[k] = t + v
|
| 1001 |
+
|
| 1002 |
+
if objects:
|
| 1003 |
+
if object_lists is None:
|
| 1004 |
+
object_lists = [[] for _ in range(len(objects))]
|
| 1005 |
+
|
| 1006 |
+
for i, obj in enumerate(objects):
|
| 1007 |
+
object_lists[i].append(obj.detach())
|
| 1008 |
+
|
| 1009 |
+
if object_lists is not None:
|
| 1010 |
+
object_arrays = [
|
| 1011 |
+
torch.concat(obj_list, dim=0).cpu().numpy()
|
| 1012 |
+
for obj_list in object_lists
|
| 1013 |
+
]
|
| 1014 |
+
else:
|
| 1015 |
+
object_arrays = []
|
| 1016 |
+
|
| 1017 |
+
return total_score / len(val_loader), {k: v / len(val_loader) for k, v in total_score_dict.items()}, object_arrays
|
| 1018 |
+
|
| 1019 |
+
def _cal_loss(self, network, batch, batch_idx, loss_fn, teaching_rate):
|
| 1020 |
+
# Bạn cần override _cal_loss để tính loss
|
| 1021 |
+
input_ids = batch['input_ids'].to(self.device)
|
| 1022 |
+
attention_mask = batch['attention_mask'].to(self.device)
|
| 1023 |
+
|
| 1024 |
+
sampled_spans = batch['sampled_spans'].to(self.device) # B, M, 2
|
| 1025 |
+
sampled_labels = batch['sampled_labels'].to(self.device) # B, M
|
| 1026 |
+
sampled_weights = batch['sampled_weights'].to(self.device) # B, M
|
| 1027 |
+
|
| 1028 |
+
span_logits = network(input_ids, attention_mask, sampled_spans)
|
| 1029 |
+
|
| 1030 |
+
loss_dict = loss_fn(
|
| 1031 |
+
span_logits, sampled_labels, sampled_weights,
|
| 1032 |
+
)
|
| 1033 |
+
return loss_dict['total'], loss_dict
|
| 1034 |
+
|
| 1035 |
+
def _cal_val_score(self, network, batch, batch_idx, eval_fn, id2label):
|
| 1036 |
+
# Bạn cần override _cal_val_score để tính val score, list bên cạnh là để trả về y hay pred gì đó (nếu cần)
|
| 1037 |
+
input_ids = batch['input_ids'].to(self.device)
|
| 1038 |
+
attention_mask = batch['attention_mask'].to(self.device)
|
| 1039 |
+
all_spans = batch['all_spans'].to(self.device) # B, N, 2
|
| 1040 |
+
gold_entities = batch['gold_entities']
|
| 1041 |
+
|
| 1042 |
+
B, _, _ = input_ids.shape
|
| 1043 |
+
|
| 1044 |
+
span_logits = network(input_ids, attention_mask, all_spans)
|
| 1045 |
+
|
| 1046 |
+
pred_ids = extract_entities(input_ids.reshape(B, -1), span_logits, all_spans, id2label)
|
| 1047 |
+
pred_ids = list_to_tuple(pred_ids)
|
| 1048 |
+
|
| 1049 |
+
gold_ids = list_to_tuple(gold_entities)
|
| 1050 |
+
|
| 1051 |
+
score_dict = eval_fn(pred_ids, gold_ids)
|
| 1052 |
+
return score_dict['f1'], score_dict, []
|
| 1053 |
+
|
| 1054 |
+
# %% [code]
|
| 1055 |
+
class PhoBERTSpanAligner:
|
| 1056 |
+
def __init__(self, tokenizer, max_len):
|
| 1057 |
+
self.tokenizer = tokenizer
|
| 1058 |
+
self.max_len = max_len
|
| 1059 |
+
|
| 1060 |
+
# ===== 1. Extract discontinuous spans =====
|
| 1061 |
+
def extract_spans(self, sample):
|
| 1062 |
+
entity_spans = []
|
| 1063 |
+
|
| 1064 |
+
for event in sample["entities"]:
|
| 1065 |
+
entity_type = event["label"]
|
| 1066 |
+
spans = [tuple(event["offset"])]
|
| 1067 |
+
entity_spans.append({
|
| 1068 |
+
"spans": spans,
|
| 1069 |
+
"label": entity_type
|
| 1070 |
+
})
|
| 1071 |
+
|
| 1072 |
+
return entity_spans
|
| 1073 |
+
|
| 1074 |
+
# ===== 2. Word offsets =====
|
| 1075 |
+
def build_word_offsets(self, text, words):
|
| 1076 |
+
offsets = []
|
| 1077 |
+
pointer = 0
|
| 1078 |
+
|
| 1079 |
+
for word in words:
|
| 1080 |
+
start = text.find(word, pointer)
|
| 1081 |
+
end = start + len(word)
|
| 1082 |
+
offsets.append((start, end))
|
| 1083 |
+
pointer = end
|
| 1084 |
+
|
| 1085 |
+
return offsets
|
| 1086 |
+
|
| 1087 |
+
# ===== 3. Char → word =====
|
| 1088 |
+
def char_span_to_word_span(self, word_offsets, start, end):
|
| 1089 |
+
start_word = None
|
| 1090 |
+
end_word = None
|
| 1091 |
+
|
| 1092 |
+
for i, (w_start, w_end) in enumerate(word_offsets):
|
| 1093 |
+
if w_start <= start < w_end:
|
| 1094 |
+
start_word = i
|
| 1095 |
+
if w_start < end <= w_end:
|
| 1096 |
+
end_word = i
|
| 1097 |
+
|
| 1098 |
+
return start_word, end_word
|
| 1099 |
+
|
| 1100 |
+
# ===== 4. Word → subword =====
|
| 1101 |
+
def word_to_subword_map(self, words):
|
| 1102 |
+
mapping = []
|
| 1103 |
+
subword_index = 1 # <s>
|
| 1104 |
+
|
| 1105 |
+
for word in words:
|
| 1106 |
+
sub_tokens = self.tokenizer.tokenize(word)
|
| 1107 |
+
start = subword_index
|
| 1108 |
+
end = subword_index + len(sub_tokens) - 1
|
| 1109 |
+
mapping.append((start, end))
|
| 1110 |
+
subword_index += len(sub_tokens)
|
| 1111 |
+
|
| 1112 |
+
return mapping
|
| 1113 |
+
|
| 1114 |
+
# ===== 5. Span → subword =====
|
| 1115 |
+
def span_to_subword(self, word_offsets, word_subword_map, spans):
|
| 1116 |
+
sub_spans = []
|
| 1117 |
+
|
| 1118 |
+
for span_start, span_end in spans:
|
| 1119 |
+
w_start, w_end = self.char_span_to_word_span(
|
| 1120 |
+
word_offsets, span_start, span_end
|
| 1121 |
+
)
|
| 1122 |
+
if w_start is None or w_end is None:
|
| 1123 |
+
continue
|
| 1124 |
+
|
| 1125 |
+
sub_start = word_subword_map[w_start][0]
|
| 1126 |
+
sub_end = word_subword_map[w_end][1]
|
| 1127 |
+
sub_spans.append((sub_start, sub_end))
|
| 1128 |
+
|
| 1129 |
+
return sub_spans
|
| 1130 |
+
|
| 1131 |
+
def extract_valid_spans(self, sub_spans):
|
| 1132 |
+
valid_spans = []
|
| 1133 |
+
for s, e in sub_spans:
|
| 1134 |
+
if s < 0 or e < 0 or s >= self.max_len or e >= self.max_len or s > e:
|
| 1135 |
+
continue
|
| 1136 |
+
valid_spans.append((s, e))
|
| 1137 |
+
return valid_spans
|
| 1138 |
+
|
| 1139 |
+
def encode(self, sample):
|
| 1140 |
+
text = sample["text"]
|
| 1141 |
+
entities = self.extract_spans(sample)
|
| 1142 |
+
|
| 1143 |
+
# ===== 1. Word tokenize =====
|
| 1144 |
+
words = word_tokenize(text)
|
| 1145 |
+
sentence = " ".join(words)
|
| 1146 |
+
|
| 1147 |
+
# ===== 2. Mapping =====
|
| 1148 |
+
word_offsets = self.build_word_offsets(text, words)
|
| 1149 |
+
word_subword_map = self.word_to_subword_map(words)
|
| 1150 |
+
|
| 1151 |
+
# ===== 3. Tokenize FULL =====
|
| 1152 |
+
encoding = self.tokenizer(
|
| 1153 |
+
sentence,
|
| 1154 |
+
max_length=self.max_len,
|
| 1155 |
+
truncation=True,
|
| 1156 |
+
padding="max_length",
|
| 1157 |
+
return_tensors="pt"
|
| 1158 |
+
)
|
| 1159 |
+
input_ids = encoding["input_ids"][0]
|
| 1160 |
+
attention_mask = encoding["attention_mask"][0]
|
| 1161 |
+
|
| 1162 |
+
# ===== 5. Convert spans =====
|
| 1163 |
+
entities_gold_spans = []
|
| 1164 |
+
|
| 1165 |
+
for ent in entities:
|
| 1166 |
+
label = ent["label"]
|
| 1167 |
+
|
| 1168 |
+
sub_spans = self.span_to_subword(
|
| 1169 |
+
word_offsets,
|
| 1170 |
+
word_subword_map,
|
| 1171 |
+
ent["spans"]
|
| 1172 |
+
)
|
| 1173 |
+
valid_spans = self.extract_valid_spans(sub_spans)
|
| 1174 |
+
if len(valid_spans) == 0:
|
| 1175 |
+
continue
|
| 1176 |
+
entities_gold_spans.append((tuple(valid_spans), label))
|
| 1177 |
+
|
| 1178 |
+
return {
|
| 1179 |
+
"input_ids": input_ids,
|
| 1180 |
+
"attention_mask": attention_mask,
|
| 1181 |
+
"entities_gold_spans": entities_gold_spans,
|
| 1182 |
+
}
|
| 1183 |
+
|
| 1184 |
+
def generate_spans(attention_mask, max_span_len):
|
| 1185 |
+
seq_len = attention_mask.sum().item() - 2
|
| 1186 |
+
spans = []
|
| 1187 |
+
for i in range(1, seq_len+1):
|
| 1188 |
+
for j in range(i, min(i+max_span_len, seq_len+1)):
|
| 1189 |
+
spans.append((i, j))
|
| 1190 |
+
return spans
|
| 1191 |
+
|
| 1192 |
+
def match_gold_labels(
|
| 1193 |
+
gold_spans, # (N, 2)
|
| 1194 |
+
gold_labels, # (N,)
|
| 1195 |
+
pred_spans, # (M, 2)
|
| 1196 |
+
default_label=-100
|
| 1197 |
+
):
|
| 1198 |
+
"""
|
| 1199 |
+
Return:
|
| 1200 |
+
pred_labels: (M,)
|
| 1201 |
+
"""
|
| 1202 |
+
|
| 1203 |
+
pred_labels = torch.full(
|
| 1204 |
+
(pred_spans.size(0),),
|
| 1205 |
+
default_label,
|
| 1206 |
+
dtype=gold_labels.dtype,
|
| 1207 |
+
device=gold_labels.device
|
| 1208 |
+
)
|
| 1209 |
+
if gold_spans.size(0) == 0:
|
| 1210 |
+
return pred_labels
|
| 1211 |
+
|
| 1212 |
+
# (M, N)
|
| 1213 |
+
matched = (pred_spans[:, None, :] == gold_spans[None, :, :]).all(dim=-1)
|
| 1214 |
+
has_match = matched.any(dim=1)
|
| 1215 |
+
|
| 1216 |
+
# lấy index gold đầu tiên match
|
| 1217 |
+
gold_idx = matched.float().argmax(dim=1)
|
| 1218 |
+
|
| 1219 |
+
pred_labels[has_match] = gold_labels[gold_idx[has_match]]
|
| 1220 |
+
|
| 1221 |
+
return pred_labels
|
| 1222 |
+
|
| 1223 |
+
class KLTNDataset(Dataset):
|
| 1224 |
+
def __init__(
|
| 1225 |
+
self,
|
| 1226 |
+
all_data, using_idxes, label2id, tokenizer,
|
| 1227 |
+
max_len, max_n_parts, max_span_len, n_negs,
|
| 1228 |
+
weight_sampling=False, weight_rate=0.0, hard_rate=0.5,
|
| 1229 |
+
):
|
| 1230 |
+
super().__init__()
|
| 1231 |
+
|
| 1232 |
+
self.tokenizer = tokenizer
|
| 1233 |
+
self.aligner = PhoBERTSpanAligner(tokenizer, max_len * max_n_parts)
|
| 1234 |
+
|
| 1235 |
+
self.all_data = all_data
|
| 1236 |
+
self.using_idxes = using_idxes
|
| 1237 |
+
self.label2id = label2id
|
| 1238 |
+
|
| 1239 |
+
self.max_len = max_len
|
| 1240 |
+
self.max_n_parts = max_n_parts
|
| 1241 |
+
self.max_span_len = max_span_len
|
| 1242 |
+
|
| 1243 |
+
self.n_negs = n_negs
|
| 1244 |
+
self.weight_sampling = weight_sampling
|
| 1245 |
+
self.weight_rate = weight_rate
|
| 1246 |
+
self.hard_rate = hard_rate
|
| 1247 |
+
|
| 1248 |
+
def __len__(self):
|
| 1249 |
+
return len(self.using_idxes)
|
| 1250 |
+
|
| 1251 |
+
def compute_iou(self, spans1, spans2):
|
| 1252 |
+
s1 = spans1[:, None, 0]
|
| 1253 |
+
e1 = spans1[:, None, 1]
|
| 1254 |
+
|
| 1255 |
+
s2 = spans2[None, :, 0]
|
| 1256 |
+
e2 = spans2[None, :, 1]
|
| 1257 |
+
|
| 1258 |
+
inter = (torch.minimum(e1, e2) - torch.maximum(s1, s2) + 1).clamp(min=0)
|
| 1259 |
+
|
| 1260 |
+
len1 = e1 - s1 + 1
|
| 1261 |
+
len2 = e2 - s2 + 1
|
| 1262 |
+
|
| 1263 |
+
union = len1 + len2 - inter
|
| 1264 |
+
|
| 1265 |
+
return inter.float() / union.float()
|
| 1266 |
+
|
| 1267 |
+
def sample_spans(self, all_spans, all_labels, gold_spans):
|
| 1268 |
+
pos_mask = all_labels != 0
|
| 1269 |
+
neg_mask = all_labels == 0
|
| 1270 |
+
|
| 1271 |
+
pos_indices = torch.nonzero(pos_mask, as_tuple=False).squeeze(-1)
|
| 1272 |
+
neg_indices = torch.nonzero(neg_mask, as_tuple=False).squeeze(-1)
|
| 1273 |
+
|
| 1274 |
+
n_negs = min(self.n_negs, len(neg_indices))
|
| 1275 |
+
|
| 1276 |
+
sampled_neg_indices = torch.empty(0, dtype=torch.long)
|
| 1277 |
+
sampled_neg_weights = torch.empty(0, dtype=torch.float)
|
| 1278 |
+
|
| 1279 |
+
if n_negs > 0 and len(neg_indices) > 0:
|
| 1280 |
+
neg_spans = all_spans[neg_indices]
|
| 1281 |
+
|
| 1282 |
+
if len(gold_spans) > 0:
|
| 1283 |
+
ious = self.compute_iou(neg_spans, gold_spans)
|
| 1284 |
+
|
| 1285 |
+
max_ious = ious.max(dim=1).values
|
| 1286 |
+
|
| 1287 |
+
else:
|
| 1288 |
+
max_ious = torch.zeros(len(neg_indices))
|
| 1289 |
+
|
| 1290 |
+
neg_weights = 1.0 + self.weight_rate * max_ious
|
| 1291 |
+
|
| 1292 |
+
if self.weight_sampling:
|
| 1293 |
+
hard_mask = max_ious > 0
|
| 1294 |
+
easy_mask = max_ious == 0
|
| 1295 |
+
|
| 1296 |
+
hard_indices = neg_indices[hard_mask]
|
| 1297 |
+
easy_indices = neg_indices[easy_mask]
|
| 1298 |
+
|
| 1299 |
+
hard_weights = neg_weights[hard_mask]
|
| 1300 |
+
easy_weights = neg_weights[easy_mask]
|
| 1301 |
+
|
| 1302 |
+
hard_k = min(int(n_negs * self.hard_rate), len(hard_indices))
|
| 1303 |
+
easy_k = min(n_negs - hard_k, len(easy_indices))
|
| 1304 |
+
|
| 1305 |
+
if hard_k > 0:
|
| 1306 |
+
hard_probs = hard_weights / hard_weights.sum()
|
| 1307 |
+
hard_ids = torch.multinomial(
|
| 1308 |
+
hard_probs,
|
| 1309 |
+
hard_k,
|
| 1310 |
+
replacement=False
|
| 1311 |
+
)
|
| 1312 |
+
|
| 1313 |
+
sampled_hard_indices = hard_indices[hard_ids]
|
| 1314 |
+
sampled_hard_weights = hard_weights[hard_ids]
|
| 1315 |
+
else:
|
| 1316 |
+
sampled_hard_indices = torch.empty(0, dtype=torch.long)
|
| 1317 |
+
sampled_hard_weights = torch.empty(0, dtype=torch.float)
|
| 1318 |
+
|
| 1319 |
+
if easy_k > 0:
|
| 1320 |
+
easy_perm = torch.randperm(len(easy_indices))[:easy_k]
|
| 1321 |
+
sampled_easy_indices = easy_indices[easy_perm]
|
| 1322 |
+
sampled_easy_weights = easy_weights[easy_perm]
|
| 1323 |
+
else:
|
| 1324 |
+
sampled_easy_indices = torch.empty(0, dtype=torch.long)
|
| 1325 |
+
sampled_easy_weights = torch.empty(0, dtype=torch.float)
|
| 1326 |
+
|
| 1327 |
+
sampled_neg_indices = torch.cat([sampled_hard_indices, sampled_easy_indices], dim=0)
|
| 1328 |
+
sampled_neg_weights = torch.cat([sampled_hard_weights, sampled_easy_weights], dim=0)
|
| 1329 |
+
|
| 1330 |
+
else:
|
| 1331 |
+
perm = torch.randperm(len(neg_indices))[:n_negs]
|
| 1332 |
+
sampled_neg_indices = neg_indices[perm]
|
| 1333 |
+
sampled_neg_weights = neg_weights[perm]
|
| 1334 |
+
|
| 1335 |
+
pos_weights = torch.ones(len(pos_indices), dtype=torch.float)
|
| 1336 |
+
sampled_indices = torch.cat([pos_indices, sampled_neg_indices], dim=0)
|
| 1337 |
+
sampled_weights = torch.cat([pos_weights, sampled_neg_weights], dim=0)
|
| 1338 |
+
|
| 1339 |
+
if len(sampled_indices) > 0:
|
| 1340 |
+
perm = torch.randperm(len(sampled_indices))
|
| 1341 |
+
sampled_indices = sampled_indices[perm]
|
| 1342 |
+
sampled_weights = sampled_weights[perm]
|
| 1343 |
+
|
| 1344 |
+
sampled_spans = all_spans[sampled_indices]
|
| 1345 |
+
sampled_labels = all_labels[sampled_indices]
|
| 1346 |
+
return sampled_spans, sampled_labels, sampled_weights
|
| 1347 |
+
|
| 1348 |
+
def __getitem__(self, idx):
|
| 1349 |
+
ridx = self.using_idxes[idx]
|
| 1350 |
+
|
| 1351 |
+
sample = self.all_data[ridx]
|
| 1352 |
+
|
| 1353 |
+
result = self.aligner.encode(sample)
|
| 1354 |
+
|
| 1355 |
+
input_ids = result["input_ids"].squeeze(0)
|
| 1356 |
+
attention_mask = result["attention_mask"].squeeze(0)
|
| 1357 |
+
|
| 1358 |
+
entities_gold_spans = result["entities_gold_spans"]
|
| 1359 |
+
|
| 1360 |
+
all_spans = torch.tensor(generate_spans(attention_mask, self.max_span_len))
|
| 1361 |
+
|
| 1362 |
+
gold_spans = (
|
| 1363 |
+
torch.tensor([spans[0] for spans, _ in entities_gold_spans], dtype=torch.long)
|
| 1364 |
+
if entities_gold_spans else
|
| 1365 |
+
torch.empty(0, 2, dtype=torch.long)
|
| 1366 |
+
)
|
| 1367 |
+
|
| 1368 |
+
gold_labels = (
|
| 1369 |
+
torch.tensor([self.label2id[label] for _, label in entities_gold_spans], dtype=torch.long)
|
| 1370 |
+
if entities_gold_spans else
|
| 1371 |
+
torch.empty(0, dtype=torch.long)
|
| 1372 |
+
)
|
| 1373 |
+
|
| 1374 |
+
all_labels = match_gold_labels(
|
| 1375 |
+
gold_spans,
|
| 1376 |
+
gold_labels,
|
| 1377 |
+
all_spans,
|
| 1378 |
+
default_label=0
|
| 1379 |
+
)
|
| 1380 |
+
|
| 1381 |
+
sampled_spans, sampled_labels, sampled_weights = self.sample_spans(
|
| 1382 |
+
all_spans,
|
| 1383 |
+
all_labels,
|
| 1384 |
+
gold_spans
|
| 1385 |
+
)
|
| 1386 |
+
|
| 1387 |
+
gold_entities = []
|
| 1388 |
+
|
| 1389 |
+
for spans, label in entities_gold_spans:
|
| 1390 |
+
s, e = spans[0]
|
| 1391 |
+
|
| 1392 |
+
gold_entities.append((tuple(input_ids[s:e+1].tolist()), label))
|
| 1393 |
+
|
| 1394 |
+
input_ids = input_ids.reshape(self.max_n_parts, self.max_len)
|
| 1395 |
+
attention_mask = attention_mask.reshape(self.max_n_parts, self.max_len)
|
| 1396 |
+
|
| 1397 |
+
n_valid_parts = math.ceil(attention_mask.sum().item() / self.max_len)
|
| 1398 |
+
|
| 1399 |
+
input_ids = input_ids[:n_valid_parts]
|
| 1400 |
+
attention_mask = attention_mask[:n_valid_parts]
|
| 1401 |
+
|
| 1402 |
+
return {
|
| 1403 |
+
"input_ids": input_ids,
|
| 1404 |
+
"attention_mask": attention_mask,
|
| 1405 |
+
|
| 1406 |
+
"sampled_spans": sampled_spans,
|
| 1407 |
+
"sampled_labels": sampled_labels,
|
| 1408 |
+
"sampled_weights": sampled_weights,
|
| 1409 |
+
|
| 1410 |
+
"all_spans": all_spans,
|
| 1411 |
+
|
| 1412 |
+
"gold_entities": gold_entities,
|
| 1413 |
+
}
|
| 1414 |
+
|
| 1415 |
+
def _pad_batch(tensor_list, pad_value=0):
|
| 1416 |
+
"""
|
| 1417 |
+
tensor_list: list of tensors
|
| 1418 |
+
mỗi tensor shape: (Nk, n_parts_i, max_len_i)
|
| 1419 |
+
|
| 1420 |
+
return:
|
| 1421 |
+
padded tensor shape: (B, max_Nk, max_n_parts, max_len)
|
| 1422 |
+
"""
|
| 1423 |
+
|
| 1424 |
+
# lấy max toàn batch
|
| 1425 |
+
max_Nk = max(t.size(0) for t in tensor_list)
|
| 1426 |
+
max_n_parts = max(t.size(1) for t in tensor_list)
|
| 1427 |
+
max_len = max(t.size(2) for t in tensor_list)
|
| 1428 |
+
|
| 1429 |
+
padded = []
|
| 1430 |
+
|
| 1431 |
+
for t in tensor_list:
|
| 1432 |
+
Nk, n_parts_i, max_len_i = t.shape
|
| 1433 |
+
|
| 1434 |
+
# pad chiều n_parts và max_len trước
|
| 1435 |
+
if n_parts_i < max_n_parts or max_len_i < max_len:
|
| 1436 |
+
new_t = t.new_full(
|
| 1437 |
+
(Nk, max_n_parts, max_len),
|
| 1438 |
+
pad_value
|
| 1439 |
+
)
|
| 1440 |
+
new_t[:, :n_parts_i, :max_len_i] = t
|
| 1441 |
+
t = new_t
|
| 1442 |
+
|
| 1443 |
+
# pad chiều Nk
|
| 1444 |
+
if Nk < max_Nk:
|
| 1445 |
+
pad_tensor = t.new_full(
|
| 1446 |
+
(max_Nk - Nk, max_n_parts, max_len),
|
| 1447 |
+
pad_value
|
| 1448 |
+
)
|
| 1449 |
+
t = torch.cat([t, pad_tensor], dim=0)
|
| 1450 |
+
|
| 1451 |
+
padded.append(t)
|
| 1452 |
+
|
| 1453 |
+
return torch.stack(padded) # (B, max_Nk, max_n_parts, max_len)
|
| 1454 |
+
|
| 1455 |
+
def collate_fn(batch):
|
| 1456 |
+
gold_entities = []
|
| 1457 |
+
for bidx, b in enumerate(batch):
|
| 1458 |
+
for entity in b['gold_entities']:
|
| 1459 |
+
gold_entities.append([bidx, entity])
|
| 1460 |
+
|
| 1461 |
+
input_ids = [b["input_ids"].unsqueeze(-1) for b in batch]
|
| 1462 |
+
attention_mask = [b["attention_mask"].unsqueeze(-1) for b in batch]
|
| 1463 |
+
sampled_spans = [b["sampled_spans"].unsqueeze(-1) for b in batch]
|
| 1464 |
+
sampled_labels = [b["sampled_labels"].unsqueeze(-1).unsqueeze(-1) for b in batch]
|
| 1465 |
+
sampled_weights = [b["sampled_weights"].unsqueeze(-1).unsqueeze(-1) for b in batch]
|
| 1466 |
+
all_spans = [b["all_spans"].unsqueeze(-1) for b in batch]
|
| 1467 |
+
|
| 1468 |
+
# pad theo Nk
|
| 1469 |
+
input_ids = _pad_batch(input_ids, pad_value=0).squeeze(-1)
|
| 1470 |
+
attention_mask = _pad_batch(attention_mask, pad_value=0).squeeze(-1)
|
| 1471 |
+
sampled_spans = _pad_batch(sampled_spans, pad_value=0).squeeze(-1)
|
| 1472 |
+
sampled_labels = _pad_batch(sampled_labels, pad_value=-100).squeeze(-1).squeeze(-1)
|
| 1473 |
+
sampled_weights = _pad_batch(sampled_weights, pad_value=0).squeeze(-1).squeeze(-1)
|
| 1474 |
+
all_spans = _pad_batch(all_spans, pad_value=0).squeeze(-1)
|
| 1475 |
+
|
| 1476 |
+
return {
|
| 1477 |
+
"input_ids": input_ids,
|
| 1478 |
+
"attention_mask": attention_mask,
|
| 1479 |
+
|
| 1480 |
+
"sampled_spans": sampled_spans,
|
| 1481 |
+
"sampled_labels": sampled_labels,
|
| 1482 |
+
"sampled_weights": sampled_weights,
|
| 1483 |
+
|
| 1484 |
+
"all_spans": all_spans,
|
| 1485 |
+
"gold_entities": gold_entities,
|
| 1486 |
+
}
|
| 1487 |
+
|
| 1488 |
+
# %% [code]
|
| 1489 |
+
def shift_bidx(spans, batch_idx):
|
| 1490 |
+
shifted = []
|
| 1491 |
+
for bidx, ent in spans:
|
| 1492 |
+
new_bidx = bidx + batch_idx * batch_size
|
| 1493 |
+
shifted.append((new_bidx, ent))
|
| 1494 |
+
return shifted
|
| 1495 |
+
|
| 1496 |
+
def refactor_entities(entities, save_dict):
|
| 1497 |
+
i, c = [], []
|
| 1498 |
+
for bidx, (ids, lb) in entities:
|
| 1499 |
+
if (bidx, ids) not in i:
|
| 1500 |
+
i.append((bidx, ids))
|
| 1501 |
+
|
| 1502 |
+
if (bidx, (ids, lb)) not in c:
|
| 1503 |
+
c.append((bidx, (ids, lb)))
|
| 1504 |
+
|
| 1505 |
+
save_dict['Ent-I'].extend(i)
|
| 1506 |
+
save_dict['Ent-C'].extend(c)
|
| 1507 |
+
|
| 1508 |
+
def test(network, state_dicts, test_loader, eval_fn, analyzer, device, id2label, tokenizer):
|
| 1509 |
+
if torch.cuda.device_count() > 1:
|
| 1510 |
+
network = DataParallelProxy(network)
|
| 1511 |
+
network = network.to(device)
|
| 1512 |
+
network.eval()
|
| 1513 |
+
|
| 1514 |
+
eval_types = ['Ent-I', 'Ent-C']
|
| 1515 |
+
|
| 1516 |
+
all_pred = {eval_type: [] for eval_type in eval_types}
|
| 1517 |
+
all_gold = {eval_type: [] for eval_type in eval_types}
|
| 1518 |
+
|
| 1519 |
+
list_input_ids = []
|
| 1520 |
+
|
| 1521 |
+
with torch.no_grad():
|
| 1522 |
+
for batch_idx, batch in enumerate(test_loader):
|
| 1523 |
+
input_ids = batch['input_ids'].to(device)
|
| 1524 |
+
attention_mask = batch['attention_mask'].to(device)
|
| 1525 |
+
all_spans = batch['all_spans'].to(device)
|
| 1526 |
+
gold_entities = batch['gold_entities']
|
| 1527 |
+
|
| 1528 |
+
B, _, _ = input_ids.shape
|
| 1529 |
+
list_input_ids.extend(input_ids.reshape(B, -1).tolist())
|
| 1530 |
+
|
| 1531 |
+
list_hidden_states = []
|
| 1532 |
+
list_logits = []
|
| 1533 |
+
list_start_logits = []
|
| 1534 |
+
list_end_logits = []
|
| 1535 |
+
for sd in state_dicts:
|
| 1536 |
+
if torch.cuda.device_count() > 1:
|
| 1537 |
+
network.module.load_state_dict(sd)
|
| 1538 |
+
else:
|
| 1539 |
+
network.load_state_dict(sd)
|
| 1540 |
+
|
| 1541 |
+
span_logits = network(input_ids, attention_mask, all_spans)
|
| 1542 |
+
list_logits.append(span_logits)
|
| 1543 |
+
|
| 1544 |
+
ensemble_logits = torch.stack(list_logits, dim=0).mean(dim=0)
|
| 1545 |
+
pred_entities = extract_entities(input_ids.reshape(B, -1), ensemble_logits, all_spans, id2label)
|
| 1546 |
+
pred_entities = shift_bidx(pred_entities, batch_idx)
|
| 1547 |
+
refactor_entities(pred_entities, all_pred)
|
| 1548 |
+
|
| 1549 |
+
gold_entities = shift_bidx(gold_entities, batch_idx)
|
| 1550 |
+
refactor_entities(gold_entities, all_gold)
|
| 1551 |
+
|
| 1552 |
+
# ===== GLOBAL EVAL =====
|
| 1553 |
+
final_score = {}
|
| 1554 |
+
for eval_type in eval_types:
|
| 1555 |
+
score = eval_fn(list_to_tuple(all_pred[eval_type]), list_to_tuple(all_gold[eval_type]))
|
| 1556 |
+
final_score[eval_type] = score
|
| 1557 |
+
|
| 1558 |
+
analyze_result = analyzer.analyze(list_to_tuple(all_pred['Ent-I']), list_to_tuple(all_gold['Ent-I']))
|
| 1559 |
+
|
| 1560 |
+
# ===== PREDICT =====
|
| 1561 |
+
predictions = []
|
| 1562 |
+
for input_ids in list_input_ids:
|
| 1563 |
+
predictions.append([tokenizer.decode(input_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)])
|
| 1564 |
+
for bidx, (ids, lb) in all_pred['Ent-C']:
|
| 1565 |
+
predictions[bidx].append((tokenizer.decode(ids, skip_special_tokens=True, clean_up_tokenization_spaces=True), lb))
|
| 1566 |
+
|
| 1567 |
+
return final_score, analyze_result, predictions
|
| 1568 |
+
|
| 1569 |
+
# %% [code]
|
| 1570 |
+
with open(f'{train_dir}/train.json', "r", encoding="utf-8") as f:
|
| 1571 |
+
data_train = json.load(f)
|
| 1572 |
+
|
| 1573 |
+
with open(f'{test_dir}/test.json', "r", encoding="utf-8") as f:
|
| 1574 |
+
data_test = json.load(f)
|
| 1575 |
+
|
| 1576 |
+
print('Train:', len(data_train))
|
| 1577 |
+
print('Test:', len(data_test))
|
| 1578 |
+
|
| 1579 |
+
# %% [code]
|
| 1580 |
+
entity_types = ['O'] + sorted(list(set([e['label'] for d in data_train + data_test for e in d['entities']])))
|
| 1581 |
+
# bio_entity_type = ['O'] + [f'{prefix}-{ent}' for ent in entity_types for prefix in ['B', 'I']]
|
| 1582 |
+
label2id = {l: i for i, l in enumerate(entity_types)}
|
| 1583 |
+
id2label = {i: l for l, i in label2id.items()}
|
| 1584 |
+
|
| 1585 |
+
# %% [code]
|
| 1586 |
+
zero_entities_idxes = []
|
| 1587 |
+
for idx, d in enumerate(data_train):
|
| 1588 |
+
if len(d['entities']) == 0:
|
| 1589 |
+
zero_entities_idxes.append(idx)
|
| 1590 |
+
|
| 1591 |
+
n_zero_entities_samples = len(zero_entities_idxes)
|
| 1592 |
+
n_has_entities_samples = len(data_train) - n_zero_entities_samples
|
| 1593 |
+
|
| 1594 |
+
random.seed(42)
|
| 1595 |
+
k = min(int(n_has_entities_samples * zero_entities_rate), len(zero_entities_idxes))
|
| 1596 |
+
sampled_zero_entities_idxes = random.sample(zero_entities_idxes, k)
|
| 1597 |
+
|
| 1598 |
+
new_data_train = []
|
| 1599 |
+
for idx, d in enumerate(data_train):
|
| 1600 |
+
if len(d['entities']) == 0:
|
| 1601 |
+
if idx in sampled_zero_entities_idxes:
|
| 1602 |
+
new_data_train.append(d)
|
| 1603 |
+
else:
|
| 1604 |
+
new_data_train.append(d)
|
| 1605 |
+
data_train = new_data_train
|
| 1606 |
+
|
| 1607 |
+
print('Train:', len(data_train))
|
| 1608 |
+
|
| 1609 |
+
# %% [code]
|
| 1610 |
+
if debug_only:
|
| 1611 |
+
data_train = data_train[:20]
|
| 1612 |
+
data_test = data_test[:20]
|
| 1613 |
+
|
| 1614 |
+
print('Train:', len(data_train))
|
| 1615 |
+
print('Test:', len(data_test))
|
| 1616 |
+
|
| 1617 |
+
# %% [code]
|
| 1618 |
+
tokenizer = AutoTokenizer.from_pretrained(backbone_model_name)
|
| 1619 |
+
|
| 1620 |
+
# %% [code]
|
| 1621 |
+
print('Experiment name:', state_dict_save_name)
|
| 1622 |
+
|
| 1623 |
+
# %% [code]
|
| 1624 |
+
# trainset = KLTNDataset(data_train, np.array(range(len(data_train))), label2id, tokenizer, **train_memory_params)
|
| 1625 |
+
# train_loader = DataLoader(trainset, collate_fn=collate_fn, **train_loader_params)
|
| 1626 |
+
# for b in train_loader:
|
| 1627 |
+
# break
|
| 1628 |
+
|
| 1629 |
+
# %% [code]
|
| 1630 |
+
if not test_only:
|
| 1631 |
+
full_idxes = np.array(range(len(data_train)))
|
| 1632 |
+
training_logs, best_models, last_models = [], [], []
|
| 1633 |
+
start_training_time = time.time()
|
| 1634 |
+
for seed in SEEDS:
|
| 1635 |
+
kf = KFold(n_splits=nfolds, shuffle=True, random_state=seed)
|
| 1636 |
+
for fold_idx, (tr_idx, va_idx) in enumerate(kf.split(full_idxes)):
|
| 1637 |
+
if only_fold_idx is not None and only_fold_idx >= 0 and only_fold_idx != fold_idx:
|
| 1638 |
+
continue
|
| 1639 |
+
set_seed(seed)
|
| 1640 |
+
|
| 1641 |
+
train_idxes, val_idxes = full_idxes[tr_idx], full_idxes[va_idx]
|
| 1642 |
+
|
| 1643 |
+
trainset = KLTNDataset(data_train, train_idxes, label2id, tokenizer, **train_memory_params)
|
| 1644 |
+
valset = KLTNDataset(data_train, val_idxes, label2id, tokenizer, **val_memory_params)
|
| 1645 |
+
|
| 1646 |
+
generator = torch.Generator()
|
| 1647 |
+
generator.manual_seed(seed)
|
| 1648 |
+
train_loader = DataLoader(trainset, generator=generator, collate_fn=collate_fn, **train_loader_params)
|
| 1649 |
+
val_loader = DataLoader(valset, generator=generator, collate_fn=collate_fn, **val_loader_params)
|
| 1650 |
+
|
| 1651 |
+
my_model = IEModel(
|
| 1652 |
+
num_labels=len(label2id),
|
| 1653 |
+
**model_params
|
| 1654 |
+
)
|
| 1655 |
+
total_params = sum(p.numel() for p in my_model.parameters())
|
| 1656 |
+
print(f"Total params: {total_params:,}")
|
| 1657 |
+
|
| 1658 |
+
# optimizer, scheduler = configure_optimizers(my_model, optim_params, scheduler_params)
|
| 1659 |
+
encoder_params = set(map(id, my_model.encoder.parameters()))
|
| 1660 |
+
other_params = [
|
| 1661 |
+
p for p in my_model.parameters()
|
| 1662 |
+
if id(p) not in encoder_params
|
| 1663 |
+
]
|
| 1664 |
+
optimizer = optim.AdamW([
|
| 1665 |
+
{"params": my_model.encoder.parameters(), "lr": 2e-5},
|
| 1666 |
+
{"params": other_params}
|
| 1667 |
+
], lr=5e-4)
|
| 1668 |
+
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=20, eta_min=1e-6)
|
| 1669 |
+
|
| 1670 |
+
loss_fn = CustomLoss(
|
| 1671 |
+
**loss_func_params
|
| 1672 |
+
)
|
| 1673 |
+
eval_fn = CustomEvalFn(**eval_func_params)
|
| 1674 |
+
trainer_params['save_name'] = f'{state_dict_save_name}_s{seed}_f{fold_idx}'
|
| 1675 |
+
trainer = Trainer(**trainer_params)
|
| 1676 |
+
|
| 1677 |
+
print(f'Start Training Fold {fold_idx}...')
|
| 1678 |
+
training_log, best_model, last_model = trainer.fit(
|
| 1679 |
+
my_model, optimizer, scheduler, loss_fn, epochs, train_loader, val_loader, eval_fn,
|
| 1680 |
+
start_epoch=1, start_training_time=start_training_time, id2label=id2label
|
| 1681 |
+
)
|
| 1682 |
+
|
| 1683 |
+
training_logs.append(training_log)
|
| 1684 |
+
best_models.append(best_model)
|
| 1685 |
+
last_models.append(last_model)
|
| 1686 |
+
|
| 1687 |
+
# %% [code]
|
| 1688 |
+
def load_all_state_dicts(folder):
|
| 1689 |
+
files = []
|
| 1690 |
+
|
| 1691 |
+
for file in os.listdir(folder):
|
| 1692 |
+
if file.endswith(".pt") or file.endswith(".pth"):
|
| 1693 |
+
m = re.search(r"f(\d+)", file) # tìm f<số>
|
| 1694 |
+
if m:
|
| 1695 |
+
fold = int(m.group(1))
|
| 1696 |
+
files.append((fold, file))
|
| 1697 |
+
|
| 1698 |
+
# sort theo fold
|
| 1699 |
+
files.sort(key=lambda x: x[0])
|
| 1700 |
+
|
| 1701 |
+
state_dicts = []
|
| 1702 |
+
for fold, file in files:
|
| 1703 |
+
path = os.path.join(folder, file)
|
| 1704 |
+
print(f"Loading fold {fold}: {file}")
|
| 1705 |
+
state_dict = torch.load(path, map_location="cpu")
|
| 1706 |
+
state_dicts.append(state_dict)
|
| 1707 |
+
|
| 1708 |
+
return state_dicts
|
| 1709 |
+
|
| 1710 |
+
if test_only:
|
| 1711 |
+
snapshot_download(repo_id=repo_name, local_dir="", repo_type="model", allow_patterns=[f"{state_dict_save_name}/**"])
|
| 1712 |
+
get_ipython().system('rm -rf .cache .gitattributes')
|
| 1713 |
+
|
| 1714 |
+
best_models = load_all_state_dicts(f"{state_dict_save_name}/r1s")
|
| 1715 |
+
last_models = load_all_state_dicts(f"{state_dict_save_name}/lasts")
|
| 1716 |
+
|
| 1717 |
+
# %% [code]
|
| 1718 |
+
os.makedirs(f'{checkpoints_dir}/results', exist_ok=True)
|
| 1719 |
+
testset = KLTNDataset(data_test, range(len(data_test)), label2id, tokenizer, **val_memory_params)
|
| 1720 |
+
generator = torch.Generator()
|
| 1721 |
+
test_loader = DataLoader(testset, generator=generator, collate_fn=collate_fn, **val_loader_params)
|
| 1722 |
+
eval_fn = CustomEvalFn(**eval_func_params)
|
| 1723 |
+
analyzer = SpanErrorAnalyzer()
|
| 1724 |
+
my_model = IEModel(
|
| 1725 |
+
num_labels=len(label2id),
|
| 1726 |
+
**model_params
|
| 1727 |
+
)
|
| 1728 |
+
total_params = sum(p.numel() for p in my_model.parameters())
|
| 1729 |
+
print(f"Total params: {total_params:,}")
|
| 1730 |
+
|
| 1731 |
+
# %% [code]
|
| 1732 |
+
start_time = time.time()
|
| 1733 |
+
|
| 1734 |
+
best_score, best_analyze_result, best_pred_test = test(my_model, best_models, test_loader, eval_fn, analyzer, device, id2label, tokenizer)
|
| 1735 |
+
last_score, last_analyze_result, last_pred_test = test(my_model, last_models, test_loader, eval_fn, analyzer, device, id2label, tokenizer)
|
| 1736 |
+
|
| 1737 |
+
result_test = {"Best model": best_score, "Last model": last_score}
|
| 1738 |
+
analyze_result = {"Best model": best_analyze_result, "Last model": last_analyze_result}
|
| 1739 |
+
analyze_result_sumary = {"Best model": best_analyze_result['summary'], "Last model": last_analyze_result['summary']}
|
| 1740 |
+
pred_test = {"Best model": best_pred_test, "Last model": last_pred_test}
|
| 1741 |
+
|
| 1742 |
+
with open(f"{checkpoints_dir}/results/{state_dict_save_name}_test.json", "w", encoding="utf-8") as f:
|
| 1743 |
+
json.dump(result_test, f, ensure_ascii=False, indent=2)
|
| 1744 |
+
|
| 1745 |
+
with open(f"{checkpoints_dir}/results/{state_dict_save_name}_error_analyze_result.json", "w", encoding="utf-8") as f:
|
| 1746 |
+
json.dump(analyze_result, f, ensure_ascii=False, indent=2)
|
| 1747 |
+
|
| 1748 |
+
with open(f"{checkpoints_dir}/results/{state_dict_save_name}_pred_test.json", "w", encoding="utf-8") as f:
|
| 1749 |
+
json.dump(pred_test, f, ensure_ascii=False, indent=2)
|
| 1750 |
+
|
| 1751 |
+
print('Test:', time.time() - start_time, 's --> Done!')
|
| 1752 |
+
print(json.dumps(analyze_result_sumary, ensure_ascii=False, indent=4))
|
| 1753 |
+
|
| 1754 |
+
# %% [code]
|
| 1755 |
+
best_pred_test[:10]
|
| 1756 |
+
|
| 1757 |
+
# %% [code]
|
| 1758 |
+
last_pred_test[:10]
|
| 1759 |
+
|
| 1760 |
+
# %% [code]
|
| 1761 |
+
def dict_to_df(data):
|
| 1762 |
+
row_tuples = []
|
| 1763 |
+
row_values = []
|
| 1764 |
+
|
| 1765 |
+
metrics = ["precision", "recall", "f1"]
|
| 1766 |
+
|
| 1767 |
+
# Lấy model đầu tiên
|
| 1768 |
+
first_model = next(iter(data.values()))
|
| 1769 |
+
|
| 1770 |
+
# eval_keys
|
| 1771 |
+
eval_keys = list(first_model.keys())
|
| 1772 |
+
|
| 1773 |
+
for eval_key in eval_keys:
|
| 1774 |
+
row_tuples.append(eval_key)
|
| 1775 |
+
row = {}
|
| 1776 |
+
|
| 1777 |
+
for model_name, model_data in data.items():
|
| 1778 |
+
for metric in metrics:
|
| 1779 |
+
row[(model_name, metric)] = model_data[eval_key][metric]
|
| 1780 |
+
|
| 1781 |
+
row_values.append(row)
|
| 1782 |
+
|
| 1783 |
+
# ===== DataFrame =====
|
| 1784 |
+
df = pd.DataFrame(row_values)
|
| 1785 |
+
|
| 1786 |
+
# MultiIndex columns
|
| 1787 |
+
df.columns = pd.MultiIndex.from_tuples(df.columns)
|
| 1788 |
+
|
| 1789 |
+
# Index
|
| 1790 |
+
df.index = pd.Index(row_tuples, name="evaluation")
|
| 1791 |
+
|
| 1792 |
+
# ===== Sort =====
|
| 1793 |
+
sort_keys = []
|
| 1794 |
+
if ("Best model", "f1") in df.columns:
|
| 1795 |
+
sort_keys.append(("Best model", "f1"))
|
| 1796 |
+
if ("Last model", "f1") in df.columns:
|
| 1797 |
+
sort_keys.append(("Last model", "f1"))
|
| 1798 |
+
|
| 1799 |
+
if sort_keys:
|
| 1800 |
+
df = df.sort_values(by=sort_keys, ascending=False)
|
| 1801 |
+
|
| 1802 |
+
return df
|
| 1803 |
+
|
| 1804 |
+
result_test_df = dict_to_df(result_test)
|
| 1805 |
+
result_test_df.to_excel(f"{checkpoints_dir}/results/{state_dict_save_name}_test_df.xlsx")
|
| 1806 |
+
result_test_df
|
| 1807 |
+
|
| 1808 |
+
# %% [code]
|
| 1809 |
+
key = ("Best model", "f1")
|
| 1810 |
+
result_test_df_best = result_test_df.sort_values(by=key, ascending=False).groupby(level="evaluation").head(1)
|
| 1811 |
+
result_test_df_best.to_excel(f"{checkpoints_dir}/results/{state_dict_save_name}_test_df_best.xlsx")
|
| 1812 |
+
result_test_df_best
|
| 1813 |
+
|
| 1814 |
+
# %% [code]
|
| 1815 |
+
def get_avg_best_score(logs):
|
| 1816 |
+
return float(np.mean([list(log.values())[-1]['best_score'] for log in logs]))
|
| 1817 |
+
|
| 1818 |
+
def get_avg_log(logs, epochs):
|
| 1819 |
+
avg_log = {}
|
| 1820 |
+
|
| 1821 |
+
for epoch in range(1, epochs + 1):
|
| 1822 |
+
val_score = 0.0
|
| 1823 |
+
train_loss = 0.0
|
| 1824 |
+
n_eval = 0
|
| 1825 |
+
|
| 1826 |
+
for idx in range(len(logs)):
|
| 1827 |
+
log = logs[idx].get(epoch, logs[idx].get(str(epoch)))
|
| 1828 |
+
if log is None:
|
| 1829 |
+
continue
|
| 1830 |
+
|
| 1831 |
+
val_score += log.get('val_score', 0.0)
|
| 1832 |
+
train_loss += log.get('train_loss', 0.0)
|
| 1833 |
+
n_eval += 1
|
| 1834 |
+
|
| 1835 |
+
if n_eval == 0:
|
| 1836 |
+
continue
|
| 1837 |
+
|
| 1838 |
+
avg_log[epoch] = {
|
| 1839 |
+
'train_loss': train_loss / n_eval,
|
| 1840 |
+
'val_score': val_score / n_eval if val_score != 0 else float('inf')
|
| 1841 |
+
}
|
| 1842 |
+
|
| 1843 |
+
return avg_log
|
| 1844 |
+
|
| 1845 |
+
def parse_label_key(label: str):
|
| 1846 |
+
try:
|
| 1847 |
+
first = float(label.split('_', 1)[0]) # số đầu: trước dấu _
|
| 1848 |
+
last = float(re.findall(r'_(\d+(?:\.\d+)?)$', label)[0])
|
| 1849 |
+
return first, last
|
| 1850 |
+
except:
|
| 1851 |
+
return (0, 0)
|
| 1852 |
+
|
| 1853 |
+
def plot_training_logs(logs_dict, save_path=None, figsize=(24, 10)):
|
| 1854 |
+
fig, axes = plt.subplots(1, 2, figsize=figsize)
|
| 1855 |
+
|
| 1856 |
+
# ===== Plot Train Loss =====
|
| 1857 |
+
for name, log in logs_dict.items():
|
| 1858 |
+
epochs = sorted(log.keys())
|
| 1859 |
+
train_loss = [log[e]['train_loss'] for e in epochs]
|
| 1860 |
+
axes[0].plot(epochs, train_loss, label=name)
|
| 1861 |
+
|
| 1862 |
+
axes[0].set_xlabel('Epoch')
|
| 1863 |
+
axes[0].set_ylabel('Train Loss')
|
| 1864 |
+
axes[0].set_title('Training Loss')
|
| 1865 |
+
axes[0].grid(True)
|
| 1866 |
+
|
| 1867 |
+
# ===== Plot Validation Score =====
|
| 1868 |
+
for name, log in logs_dict.items():
|
| 1869 |
+
epochs = sorted(log.keys())
|
| 1870 |
+
val_score = [log[e]['val_score'] for e in epochs]
|
| 1871 |
+
axes[1].plot(epochs, val_score, label=name)
|
| 1872 |
+
|
| 1873 |
+
axes[1].set_xlabel('Epoch')
|
| 1874 |
+
axes[1].set_ylabel('Validation Score')
|
| 1875 |
+
axes[1].set_title('Validation Score')
|
| 1876 |
+
axes[1].grid(True)
|
| 1877 |
+
|
| 1878 |
+
# ===== Shared Legend =====
|
| 1879 |
+
handles, labels = axes[0].get_legend_handles_labels()
|
| 1880 |
+
pairs = list(zip(handles, labels))
|
| 1881 |
+
pairs_sorted = sorted(
|
| 1882 |
+
pairs,
|
| 1883 |
+
key=lambda x: parse_label_key(x[1])
|
| 1884 |
+
)
|
| 1885 |
+
handles_sorted, labels_sorted = zip(*pairs_sorted)
|
| 1886 |
+
|
| 1887 |
+
axes[0].legend(
|
| 1888 |
+
handles_sorted,
|
| 1889 |
+
labels_sorted,
|
| 1890 |
+
loc='center left',
|
| 1891 |
+
bbox_to_anchor=(1.01, 0.5),
|
| 1892 |
+
borderaxespad=0.
|
| 1893 |
+
)
|
| 1894 |
+
|
| 1895 |
+
plt.tight_layout(rect=[0, 0, 1, 1])
|
| 1896 |
+
|
| 1897 |
+
if save_path is not None:
|
| 1898 |
+
os.makedirs(os.path.dirname(save_path), exist_ok=True) if os.path.dirname(save_path) else None
|
| 1899 |
+
plt.savefig(save_path, dpi=300, bbox_inches='tight')
|
| 1900 |
+
|
| 1901 |
+
plt.show()
|
| 1902 |
+
|
| 1903 |
+
# %% [code]
|
| 1904 |
+
# if not test_only:
|
| 1905 |
+
# snapshot_download(repo_id=repo_name, local_dir="", repo_type="model", allow_patterns=["**/*.json"])
|
| 1906 |
+
# !rm -rf .cache .gitattributes
|
| 1907 |
+
|
| 1908 |
+
# %% [code]
|
| 1909 |
+
if not test_only:
|
| 1910 |
+
experiments = {}
|
| 1911 |
+
for experiment in os.listdir(pretrained_dir):
|
| 1912 |
+
if '.virtual_documents' in experiment:
|
| 1913 |
+
continue
|
| 1914 |
+
experiment_logs = []
|
| 1915 |
+
try:
|
| 1916 |
+
for seed in SEEDS:
|
| 1917 |
+
for fold_idx in range(nfolds):
|
| 1918 |
+
with open(f"{pretrained_dir}/{experiment}/logs/{experiment}_s{seed}_f{fold_idx}_logging.json", "r", encoding="utf-8") as f:
|
| 1919 |
+
experiment_log = json.load(f)
|
| 1920 |
+
experiment_logs.append(experiment_log)
|
| 1921 |
+
except:
|
| 1922 |
+
pass
|
| 1923 |
+
experiments[experiment] = get_avg_log(experiment_logs, 1000)
|
| 1924 |
+
experiments[state_dict_save_name] = get_avg_log(training_logs, 1000)
|
| 1925 |
+
|
| 1926 |
+
# %% [code]
|
| 1927 |
+
if not test_only:
|
| 1928 |
+
score = get_avg_best_score(training_logs)
|
| 1929 |
+
state_dict_save_name, score
|
| 1930 |
+
|
| 1931 |
+
# %% [code]
|
| 1932 |
+
if not test_only:
|
| 1933 |
+
plot_training_logs(experiments, save_path=f'{checkpoints_dir}/logs/{state_dict_save_name}_log_plot.jpg', figsize=(18, 7.5))
|
| 1934 |
+
|
0_ent_175_negs_hr_05_wr25_1/lasts/0_ent_175_negs_hr_05_wr25_1_s26092004_f0_last_ema.pth
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:00261628dcacf4215e6500533a7eaf9e0bc074286a465b3935e9f83a78fbb0c2
|
| 3 |
+
size 558996179
|
0_ent_175_negs_hr_05_wr25_1/logs/0_ent_175_negs_hr_05_wr25_1_log_plot.jpg
ADDED
|
Git LFS Details
|
0_ent_175_negs_hr_05_wr25_1/logs/0_ent_175_negs_hr_05_wr25_1_s26092004_f0_logging.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"1": {"lr": [2e-05, 0.0005], "train_loss": 0.020961720496416092, "total": 0.020961720960775924, "span_loss": 0.020961720960775924}, "2": {"lr": [1.988303923565381e-05, 0.0004969282409784868], "train_loss": 0.014191273599863052, "total": 0.014191274072552208, "span_loss": 0.014191274072552208}, "3": {"lr": [1.9535036904803962e-05, 0.0004877886008156408], "train_loss": 0.013201650232076645, "total": 0.01320165012587776, "span_loss": 0.01320165012587776}, "4": {"lr": [1.8964561979789496e-05, 0.00047280612778499774], "train_loss": 0.012403259985148907, "total": 0.012403260002328139, "span_loss": 0.012403260002328139}, "5": {"lr": [1.8185661446562005e-05, 0.00045234974009654937], "train_loss": 0.011563217267394066, "total": 0.011563217393375095, "span_loss": 0.011563217393375095}, "6": {"lr": [1.7217514421272206e-05, 0.00042692314190604356], "train_loss": 0.010949498042464256, "total": 0.010949497851930962, "span_loss": 0.010949497851930962}, "7": {"lr": [1.60839598967785e-05, 0.00039715242044697206], "train_loss": 0.00987175852060318, "total": 0.009871758449803923, "span_loss": 0.009871758449803923}, "8": {"lr": [1.4812909747525698e-05, 0.00036377062968501693], "train_loss": 0.009031984023749828, "total": 0.009031984511535883, "span_loss": 0.009031984511535883, "val_score": 0.7134464324282884, "best_score": 0.7134464324282884, "new_best_model": true, "precision": 0.7005837180317529, "recall": 0.7295585606497342, "f1": 0.7134464324282884}, "9": {"lr": [1.3435661446562005e-05, 0.0003275997400965494], "train_loss": 0.008218602277338505, "total": 0.008218602670378496, "span_loss": 0.008218602670378496, "val_score": 0.7146105123135245, "best_score": 0.7146105123135245, "new_best_model": true, "precision": 0.7020190146816602, "recall": 0.7304271346245945, "f1": 0.7146105123135245}, "10": {"lr": [1.1986127417882198e-05, 0.00028953039902753766], "train_loss": 0.007431660778820515, "total": 0.007431660903239797, "span_loss": 0.007431660903239797, "val_score": 0.7134536364473689, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7026598725759119, "recall": 0.7273251164341132, "f1": 0.7134536364473689}, "11": {"lr": [1.0500000000000003e-05, 0.0002505], "train_loss": 0.00675791222602129, "total": 0.006757912121384153, "span_loss": 0.006757912121384153, "val_score": 0.7136868938582748, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7043648009312882, "recall": 0.7259899522589253, "f1": 0.7136868938582748}, "12": {"lr": [9.013872582117811e-06, 0.00021146960097246246], "train_loss": 0.00601030420511961, "total": 0.006010304488837219, "span_loss": 0.006010304488837219, "val_score": 0.7120223929827854, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7032033689425254, "recall": 0.7237277542155913, "f1": 0.7120223929827854}, "13": {"lr": [7.564338553438001e-06, 0.00017340025990345064], "train_loss": 0.005376620218157768, "total": 0.005376620156729002, "span_loss": 0.005376620156729002, "val_score": 0.710441003909232, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7029803410947579, "recall": 0.7206067540140515, "f1": 0.710441003909232}, "14": {"lr": [6.1870902524743065e-06, 0.00013722937031498307], "train_loss": 0.004949146416038275, "total": 0.004949146439204208, "span_loss": 0.004949146439204208, "val_score": 0.7094792682655269, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7041239298442693, "recall": 0.7174488391184694, "f1": 0.7094792682655269}, "15": {"lr": [4.916040103221507e-06, 0.00010384757955302797], "train_loss": 0.004475330002605915, "total": 0.004475330226977089, "span_loss": 0.004475330226977089, "val_score": 0.708377095183791, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7052154919777592, "recall": 0.7141250286032995, "f1": 0.708377095183791}, "16": {"lr": [3.7824855787278e-06, 7.40768580939564e-05], "train_loss": 0.004132495261728764, "total": 0.004132495504840917, "span_loss": 0.004132495504840917, "val_score": 0.7086034397758405, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.707740108993689, "recall": 0.7119498625745739, "f1": 0.7086034397758405}, "17": {"lr": [2.814338553438001e-06, 4.865025990345063e-05], "train_loss": 0.0037781288847327232, "total": 0.0037781289997815153, "span_loss": 0.0037781289997815153, "val_score": 0.7088597749522912, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7089025722431348, "recall": 0.7112362509726536, "f1": 0.7088597749522912}, "18": {"lr": [2.0354380202105066e-06, 2.8193872215002235e-05], "train_loss": 0.0036237267777323723, "total": 0.003623726782417617, "span_loss": 0.003623726782417617, "val_score": 0.7089386166436004, "best_score": 0.7146105123135245, "new_best_model": false, "precision": 0.7110026936604456, "recall": 0.70934741329177, "f1": 0.7089386166436004}}
|
0_ent_175_negs_hr_05_wr25_1/r1s/0_ent_175_negs_hr_05_wr25_1_s26092004_f0_r1_vs0.71461_ema.pth
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:43ae11e0af5c6ef88e49577c28d6725328c626df2a0eade319cf2a5075c1af61
|
| 3 |
+
size 558998011
|
0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_error_analyze_result.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_pred_test.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_test.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Best model": {
|
| 3 |
+
"Ent-I": {
|
| 4 |
+
"precision": 0.6704268292677816,
|
| 5 |
+
"recall": 0.8175480992649711,
|
| 6 |
+
"f1": 0.7367142628149196
|
| 7 |
+
},
|
| 8 |
+
"Ent-C": {
|
| 9 |
+
"precision": 0.5961890243897895,
|
| 10 |
+
"recall": 0.7263441359450957,
|
| 11 |
+
"f1": 0.6548620654568527
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"Last model": {
|
| 15 |
+
"Ent-I": {
|
| 16 |
+
"precision": 0.6891697328421938,
|
| 17 |
+
"recall": 0.8008179198802855,
|
| 18 |
+
"f1": 0.7408107942192176
|
| 19 |
+
},
|
| 20 |
+
"Ent-C": {
|
| 21 |
+
"precision": 0.6063829787229192,
|
| 22 |
+
"recall": 0.7039650849654526,
|
| 23 |
+
"f1": 0.6515405390519211
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
}
|
0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_test_df.xlsx
ADDED
|
Binary file (5.29 kB). View file
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/0_ent_175_negs_hr_05_wr25_1_test_df_best.xlsx
ADDED
|
Binary file (5.29 kB). View file
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_0.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_1.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_10.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_11.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_12.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_13.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_14.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_15.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_16.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_17.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_18.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_19.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_2.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_20.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_21.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_22.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_23.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_24.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_25.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_26.json
ADDED
|
@@ -0,0 +1,1770 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"text": "Kính gửi Bộ Tư pháp và Bộ Tài chính! Công ty chúng tôi là một doanh nghiệp đấu giá tài sản. Chúng tôi vừa hoàn thành việc đấu giá thành công một lô tài sản lớn. Người mua thành công có yêu cầu công ty chúng tôi cung cấp dịch vụ hỗ trợ làm thủ tục chuyển quyền sở hữu tài sản tại các cơ quan nhà nước có thẩm quyền. Hai bên đã thương lượng và thống nhất mức chi phí cho dịch vụ này. Theo quy định tại Điều 67 Luật Đấu giá tài sản, chi phí dịch vụ này được thực hiện theo thỏa thuận giữa các bên. Tuy nhiên, tại điểm đ khoản 2 Điều 78 Luật này quy định Bộ Tài chính có trách nhiệm \"Quy định khung thù lao dịch vụ đấu giá\". Xin hỏi: Đối với khoản chi phí dịch vụ làm thủ tục chuyển quyền sở hữu mà người mua yêu cầu và chúng tôi cung cấp theo Điều 67, giá trị hợp đồng dịch vụ giữa hai bên có bắt buộc phải nằm trong khung thù lao dịch vụ đấu giá do Bộ Tài chính quy định hay không? Nếu vượt khung thì có được coi là vi phạm pháp luật về đấu giá không? Rất mong nhận được sự hướng dẫn của các Bộ. Trân trọng cảm ơn!",
|
| 4 |
+
"entities": [
|
| 5 |
+
[
|
| 6 |
+
"Bộ Tư pháp và Bộ Tài chính",
|
| 7 |
+
"CO_QUAN_THAM_QUYEN"
|
| 8 |
+
],
|
| 9 |
+
[
|
| 10 |
+
"Công ty chúng tôi",
|
| 11 |
+
"TO_CHUC"
|
| 12 |
+
],
|
| 13 |
+
[
|
| 14 |
+
"doanh nghiệp đấu giá tài sản",
|
| 15 |
+
"CHUC_DANH"
|
| 16 |
+
],
|
| 17 |
+
[
|
| 18 |
+
"Người mua thành công",
|
| 19 |
+
"BEN_THU_BA"
|
| 20 |
+
],
|
| 21 |
+
[
|
| 22 |
+
"Bộ Tài chính",
|
| 23 |
+
"CO_QUAN_THAM_QUYEN"
|
| 24 |
+
],
|
| 25 |
+
[
|
| 26 |
+
"người mua",
|
| 27 |
+
"BEN_THU_BA"
|
| 28 |
+
],
|
| 29 |
+
[
|
| 30 |
+
"Bộ Tài chính",
|
| 31 |
+
"CO_QUAN_THAM_QUYEN"
|
| 32 |
+
]
|
| 33 |
+
]
|
| 34 |
+
},
|
| 35 |
+
{
|
| 36 |
+
"text": "Kính gửi Bộ Tài nguyên và Môi trường! Công ty chúng tôi đang có nhu cầu khai thác khoáng sản (cát xây dựng) tại một khu vực. Trong quá trình chuẩn bị hồ sơ, chúng tôi được biết Nhà nước đã có kết quả điều tra, đánh giá tiềm năng và thăm dò khoáng sản tại khu vực này từ trước. Tuy nhiên, để đảm bảo độ chính xác và phù hợp với quy mô dự kiến, công ty chúng tôi đã tự bỏ kinh phí để thực hiện lại công tác khảo sát, đánh giá chi tiết và lập hồ sơ đề nghị cấp giấy phép khai thác dựa trên kết quả khảo sát của mình, không sử dụng số liệu từ báo cáo điều tra của Nhà nước. Xin hỏi: Trong trường hợp này, khi được cấp phép khai thác, công ty chúng tôi có bắt buộc phải hoàn trả chi phí đánh giá tiềm năng, thăm dò khoáng sản mà Nhà nước đã đầu tư trước đó cho khu vực đó hay không? Nếu phải hoàn trả, căn cứ pháp lý cụ thể là gì?",
|
| 37 |
+
"entities": [
|
| 38 |
+
[
|
| 39 |
+
"Bộ Tài nguyên và Môi trường",
|
| 40 |
+
"CO_QUAN_THAM_QUYEN"
|
| 41 |
+
],
|
| 42 |
+
[
|
| 43 |
+
"Công ty chúng tôi",
|
| 44 |
+
"TO_CHUC"
|
| 45 |
+
],
|
| 46 |
+
[
|
| 47 |
+
"Nhà nước",
|
| 48 |
+
"BEN_THU_BA"
|
| 49 |
+
],
|
| 50 |
+
[
|
| 51 |
+
"Nhà nước",
|
| 52 |
+
"BEN_THU_BA"
|
| 53 |
+
]
|
| 54 |
+
]
|
| 55 |
+
},
|
| 56 |
+
{
|
| 57 |
+
"text": "Kính gửi Bộ Nội vụ, tôi là một thanh niên 25 tuổi. Hiện tại, tôi đang có nhu cầu vay vốn để khởi nghiệp theo chính sách tại Điều 18 Luật Thanh niên. Đồng thời, tôi cũng đang có ý định tham gia nghĩa vụ quân sự để sau khi hoàn thành sẽ được hưởng các chính sách hỗ trợ đào tạo nghề theo Điều 21. Tôi xin hỏi: 1. Liệu tôi có thể cùng một lúc đăng ký vay vốn khởi nghiệp (Điều 18) và đăng ký tham gia nghĩa vụ quân sự (Điều 21) được không? Hay tôi phải hoàn thành nghĩa vụ quân sự trước rồi mới được xét vay vốn khởi nghiệp? 2. Trong trường hợp tôi tham gia nghĩa vụ quân sự và được hưởng chính sách hỗ trợ đào tạo nghề sau đó, tôi có tiếp tục được hưởng các ưu đãi, hỗ trợ về khởi nghiệp (như hỗ trợ pháp lý, khoa học công nghệ) hay không? 3. Nếu tôi vay vốn khởi nghiệp và sau đó tham gia nghĩa vụ quân sự, việc trả nợ vay vốn trong thời gian tại ngũ sẽ được xử lý như thế nào? Rất mong nhận được phản hồi từ Bộ để tôi có thể lên kế hoạch phù hợp cho bản thân.",
|
| 58 |
+
"entities": [
|
| 59 |
+
[
|
| 60 |
+
"Bộ Nội vụ",
|
| 61 |
+
"CO_QUAN_THAM_QUYEN"
|
| 62 |
+
],
|
| 63 |
+
[
|
| 64 |
+
"tôi",
|
| 65 |
+
"NGUOI"
|
| 66 |
+
]
|
| 67 |
+
]
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"text": "Kính gửi Bộ Công an! Tôi là Trưởng phòng Công nghệ Thông tin của một cơ quan nhà nước. Chúng tôi có một hệ thống thông tin đã được xác định là quan trọng về an ninh quốc gia. Khi triển khai hoạt động bảo vệ an ninh mạng cho cơ quan mình, chúng tôi có thắc mắc sau: Theo Điều 14 Luật An ninh mạng, hệ thống thông tin quan trọng về an ninh quốc gia sẽ được giám sát bởi lực lượng chuyên trách bảo vệ an ninh mạng (khoản 3). Trong khi đó, theo điểm e khoản 1 Điều 23 Luật An ninh mạng và Nghị định hướng dẫn, người đứng đầu cơ quan nhà nước có trách nhiệm tổ chức kiểm tra an ninh mạng đối với hệ thống thông tin của cơ quan mình. Xin hỏi: Đối với hệ thống thông tin quan trọng về an ninh quốc gia mà đã nằm trong phạm vi giám sát thường xuyên của lực lượng chuyên trách (theo Điều 14), thì người đứng đầu cơ quan chúng tôi (chủ quản hệ thống) có bắt buộc phải tự tổ chức thêm các cuộc kiểm tra an ninh mạng định kỳ hay đột xuất cho hệ thống đó theo quy định tại Điều 23 nữa không? Hay hoạt động giám sát của lực lượng chuyên trách được coi là đã đáp ứng yêu cầu kiểm tra của Điều 23? Trân trọng cảm ơn!",
|
| 71 |
+
"entities": [
|
| 72 |
+
[
|
| 73 |
+
"Bộ Công an",
|
| 74 |
+
"CO_QUAN_THAM_QUYEN"
|
| 75 |
+
],
|
| 76 |
+
[
|
| 77 |
+
"Tôi",
|
| 78 |
+
"NGUOI"
|
| 79 |
+
],
|
| 80 |
+
[
|
| 81 |
+
"Trưởng phòng Công nghệ Thông tin",
|
| 82 |
+
"CHUC_DANH"
|
| 83 |
+
],
|
| 84 |
+
[
|
| 85 |
+
"một cơ quan nhà nước",
|
| 86 |
+
"TO_CHUC"
|
| 87 |
+
],
|
| 88 |
+
[
|
| 89 |
+
"Chúng tôi",
|
| 90 |
+
"NHOM_NGUOI"
|
| 91 |
+
],
|
| 92 |
+
[
|
| 93 |
+
"lực lượng chuyên trách bảo vệ an ninh mạng",
|
| 94 |
+
"NHOM_NGUOI"
|
| 95 |
+
],
|
| 96 |
+
[
|
| 97 |
+
"người đứng đầu cơ quan nhà nước",
|
| 98 |
+
"CHUC_DANH"
|
| 99 |
+
],
|
| 100 |
+
[
|
| 101 |
+
"lực lượng chuyên trách",
|
| 102 |
+
"CO_QUAN_THAM_QUYEN"
|
| 103 |
+
],
|
| 104 |
+
[
|
| 105 |
+
"người đứng đầu cơ quan chúng tôi",
|
| 106 |
+
"CHUC_DANH"
|
| 107 |
+
],
|
| 108 |
+
[
|
| 109 |
+
"chủ quản hệ thống",
|
| 110 |
+
"CHUC_DANH"
|
| 111 |
+
],
|
| 112 |
+
[
|
| 113 |
+
"lực lượng chuyên trách",
|
| 114 |
+
"CO_QUAN_THAM_QUYEN"
|
| 115 |
+
]
|
| 116 |
+
]
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"text": "Kính gửi Bộ Tư pháp, tôi hiện là một công dân muốn thực hiện quyền tiếp cận thông tin. Tôi có một thắc mắc cần được giải đáp như sau: Trong một dự án đầu tư của địa phương, tôi yêu cầu được cung cấp toàn bộ hồ sơ dự án, bao gồm báo cáo đánh giá tác động môi trường và các tài liệu kỹ thuật chi tiết của dự án. Tuy nhiên, cơ quan chức năng từ chối cung cấp với lý do đây là \"thông tin nội bộ\" và có liên quan đến \"bí mật công tác\" theo Điều 6 Luật Tiếp cận thông tin. Xin hỏi: Nếu các thông tin trên đã được giải mật sau một thời gian nhất định, liệu tôi có quyền được tiếp cận chúng hay không? Và nếu được, thủ tục yêu cầu cung cấp thông tin trong trường hợp này như thế nào? Tôi xin chân thành cảm ơn.",
|
| 120 |
+
"entities": [
|
| 121 |
+
[
|
| 122 |
+
"Bộ Tư pháp",
|
| 123 |
+
"CO_QUAN_THAM_QUYEN"
|
| 124 |
+
],
|
| 125 |
+
[
|
| 126 |
+
"tôi",
|
| 127 |
+
"NGUOI"
|
| 128 |
+
],
|
| 129 |
+
[
|
| 130 |
+
"công dân",
|
| 131 |
+
"CHUC_DANH"
|
| 132 |
+
],
|
| 133 |
+
[
|
| 134 |
+
"Tôi",
|
| 135 |
+
"NGUOI"
|
| 136 |
+
],
|
| 137 |
+
[
|
| 138 |
+
"cơ quan chức năng",
|
| 139 |
+
"BEN_THU_BA"
|
| 140 |
+
]
|
| 141 |
+
]
|
| 142 |
+
},
|
| 143 |
+
{
|
| 144 |
+
"text": "Kính gửi Ban Pháp chế, Liên đoàn Lao động Thành phố Hồ Chí Minh! Tôi là một người lao động làm việc tại một doanh nghiệp tư nhân. Tại nơi tôi làm việc, ban chấp hành công đoàn cơ sở chưa được thành lập. Một số anh chị em trong công ty chúng tôi đã tự nguyện thành lập một nhóm đại diện người lao động để trao đổi với ban lãnh đạo công ty về các vấn đề như tăng lương, cải thiện điều kiện làm việc. Khi nhóm chúng tôi đề nghị thương lượng tập thể, công ty từ chối với lý do chỉ có tổ chức công đoàn mới có quyền đại diện để thương lượng tập thể. Xin hỏi: Trong trường hợp chưa có tổ chức công đoàn cơ sở, một nhóm đại diện người lao động do tập thể bầu ra có được tiến hành thương lượng tập thể và ký kết thỏa ước lao động tập thể với người sử dụng lao động hay không? Nếu được, căn cứ pháp lý ở đâu?",
|
| 145 |
+
"entities": [
|
| 146 |
+
[
|
| 147 |
+
"Ban Pháp chế, Liên đoàn Lao động Thành phố Hồ Chí Minh",
|
| 148 |
+
"CO_QUAN_THAM_QUYEN"
|
| 149 |
+
],
|
| 150 |
+
[
|
| 151 |
+
"Tôi",
|
| 152 |
+
"NGUOI"
|
| 153 |
+
],
|
| 154 |
+
[
|
| 155 |
+
"người lao động",
|
| 156 |
+
"CHUC_DANH"
|
| 157 |
+
],
|
| 158 |
+
[
|
| 159 |
+
"một doanh nghiệp tư nhân",
|
| 160 |
+
"TO_CHUC"
|
| 161 |
+
],
|
| 162 |
+
[
|
| 163 |
+
"ban chấp hành công đoàn cơ sở",
|
| 164 |
+
"TO_CHUC"
|
| 165 |
+
],
|
| 166 |
+
[
|
| 167 |
+
"Một số anh chị em trong công ty chúng t��i",
|
| 168 |
+
"NHOM_NGUOI"
|
| 169 |
+
],
|
| 170 |
+
[
|
| 171 |
+
"một nhóm đại diện người lao động",
|
| 172 |
+
"NHOM_NGUOI"
|
| 173 |
+
],
|
| 174 |
+
[
|
| 175 |
+
"ban lãnh đạo công ty",
|
| 176 |
+
"TO_CHUC"
|
| 177 |
+
],
|
| 178 |
+
[
|
| 179 |
+
"tổ chức công đoàn",
|
| 180 |
+
"TO_CHUC"
|
| 181 |
+
],
|
| 182 |
+
[
|
| 183 |
+
"người sử dụng lao động",
|
| 184 |
+
"BEN_THU_BA"
|
| 185 |
+
]
|
| 186 |
+
]
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"text": "Kính gửi Cục Hàng không Việt Nam! Công ty chúng tôi là doanh nghiệp vận tải hàng không. Ngày 10/02/2025, chúng tôi thực hiện chuyến bay charter vận chuyển hàng hóa theo hợp đồng thuê chuyến từ sân bay Nội Bài (Hà Nội) đến sân bay Tân Sơn Nhất (TP.HCM). Trên chuyến bay có một lô hành lý ký gửi (không phải hàng hóa thương mại) nhưng khi đến nơi, không có người đến nhận. Chúng tôi đã thông báo cho bên thuê chuyến nhưng họ không phản hồi. Theo quy định tại Điều 150 Luật Hàng không dân dụng, hành lý được thanh lý nếu không có người nhận trong 30 ngày kể từ ngày đến địa điểm đến. Tuy nhiên, đây là hành lý vận chuyển theo hợp đồng thuê chuyến, không phải vận chuyển theo chuyến bay thông thường bán vé cho từng hành khách. Xin hỏi: Đối với hành lý trong vận chuyển hàng không theo hợp đồng thuê chuyến (charter) như trường hợp của chúng tôi, thời hạn 30 ngày để thanh lý được tính từ thời điểm nào? Có áp dụng tương tự như quy định tại Điều 150 hay không? Rất mong nhận được sự hướng dẫn của Cục. Trân trọng cảm ơn!",
|
| 190 |
+
"entities": [
|
| 191 |
+
[
|
| 192 |
+
"Cục Hàng không Việt Nam",
|
| 193 |
+
"CO_QUAN_THAM_QUYEN"
|
| 194 |
+
],
|
| 195 |
+
[
|
| 196 |
+
"Công ty chúng tôi",
|
| 197 |
+
"TO_CHUC"
|
| 198 |
+
],
|
| 199 |
+
[
|
| 200 |
+
"doanh nghiệp vận tải hàng không",
|
| 201 |
+
"CHUC_DANH"
|
| 202 |
+
],
|
| 203 |
+
[
|
| 204 |
+
"chúng tôi",
|
| 205 |
+
"TO_CHUC"
|
| 206 |
+
],
|
| 207 |
+
[
|
| 208 |
+
"bên thuê chuyến",
|
| 209 |
+
"BEN_THU_BA"
|
| 210 |
+
]
|
| 211 |
+
]
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"text": "Kính gửi Cơ quan chức năng, công ty chúng tôi là doanh nghiệp tư nhân thường xuyên có các giao dịch điện tử với cơ quan thuế và hải quan. Trong nội bộ công ty, chúng tôi đang sử dụng một hệ thống phần mềm quản lý riêng để ký duyệt và phê duyệt các văn bản, hợp đồng nội bộ và tạo ra chữ ký điện tử chuyên dùng đáp ứng đầy đủ các yêu cầu tại khoản 2 Điều 22 Luật Giao dịch điện tử. Tuy nhiên, khi gửi tờ khai thuế điện tử, báo cáo tài chính điện tử hoặc thực hiện các thủ tục hải quan điện tử, các cơ quan này yêu cầu phải sử dụng chữ ký số công cộng do các tổ chức cung cấp dịch vụ chứng thực chữ ký số cấp. Xin hỏi: Trong trường hợp này, chữ ký điện tử chuyên dùng do công ty chúng tôi tự tạo lập và quản lý có được công nhận giá trị pháp lý tương đương với chữ ký số công cộng để thực hiện các giao dịch điện tử với cơ quan nhà nước nói trên hay không? Nếu không được, căn cứ pháp lý cụ thể nào quy định về việc này?",
|
| 215 |
+
"entities": [
|
| 216 |
+
[
|
| 217 |
+
"Cơ quan chức năng",
|
| 218 |
+
"CO_QUAN_THAM_QUYEN"
|
| 219 |
+
],
|
| 220 |
+
[
|
| 221 |
+
"công ty chúng tôi",
|
| 222 |
+
"TO_CHUC"
|
| 223 |
+
],
|
| 224 |
+
[
|
| 225 |
+
"doanh nghiệp tư nhân",
|
| 226 |
+
"CHUC_DANH"
|
| 227 |
+
],
|
| 228 |
+
[
|
| 229 |
+
"cơ quan thuế và hải quan",
|
| 230 |
+
"BEN_THU_BA"
|
| 231 |
+
],
|
| 232 |
+
[
|
| 233 |
+
"các cơ quan này",
|
| 234 |
+
"BEN_THU_BA"
|
| 235 |
+
],
|
| 236 |
+
[
|
| 237 |
+
"các tổ chức cung cấp dịch vụ chứng thực chữ ký số",
|
| 238 |
+
"TO_CHUC"
|
| 239 |
+
]
|
| 240 |
+
]
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"text": "Thưa cơ quan có thẩm quyền, tôi có thắc mắc về trách nhiệm của chính quyền địa phương liên quan đến việc bảo vệ Cơ sở dữ liệu quốc gia về dân cư. Theo Luật Căn cước công dân 2014, Ủy ban nhân dân tỉnh có nhiệm vụ triển khai và tổ chức thực hiện các văn bản liên quan đến Cơ sở dữ liệu này tại địa phương. Tuy nhiên, tôi không thấy điều luật nào quy định cụ thể về trách nhiệm bảo đảm an toàn, chống rò rỉ, lộ lọt thông tin dân cư khi địa phương tiếp cận và sử dụng cơ sở dữ liệu này. Vậy xin hỏi: Khi Cơ sở dữ liệu quốc gia về dân cư được kết nối, chia sẻ đến các sở, ngành tại địa phương để phục vụ công tác quản lý, thì Ủy ban nhân dân tỉnh có trách nhiệm gì trong việc bảo đảm an ninh, an toàn thông tin, phòng chống hành vi truy cập, sử dụng trái phép hoặc làm thất thoát dữ liệu? Có văn bản pháp luật nào quy định chi tiết trách nhiệm này không?",
|
| 244 |
+
"entities": [
|
| 245 |
+
[
|
| 246 |
+
"cơ quan có thẩm quyền",
|
| 247 |
+
"CO_QUAN_THAM_QUYEN"
|
| 248 |
+
],
|
| 249 |
+
[
|
| 250 |
+
"tôi",
|
| 251 |
+
"NGUOI"
|
| 252 |
+
],
|
| 253 |
+
[
|
| 254 |
+
"chính quyền địa phương",
|
| 255 |
+
"TO_CHUC"
|
| 256 |
+
],
|
| 257 |
+
[
|
| 258 |
+
"Ủy ban nhân dân tỉnh",
|
| 259 |
+
"CO_QUAN_THAM_QUYEN"
|
| 260 |
+
],
|
| 261 |
+
[
|
| 262 |
+
"địa phương",
|
| 263 |
+
"BEN_THU_BA"
|
| 264 |
+
],
|
| 265 |
+
[
|
| 266 |
+
"các sở, ngành tại địa phương",
|
| 267 |
+
"BEN_THU_BA"
|
| 268 |
+
],
|
| 269 |
+
[
|
| 270 |
+
"Ủy ban nhân dân tỉnh",
|
| 271 |
+
"CO_QUAN_THAM_QUYEN"
|
| 272 |
+
]
|
| 273 |
+
]
|
| 274 |
+
},
|
| 275 |
+
{
|
| 276 |
+
"text": "Kính gửi Bộ Tài chính, Công ty chúng tôi là doanh nghiệp do Nhà nước nắm giữ 100% vốn điều lệ, chịu sự quản lý của Bộ Tài chính với tư cách là cơ quan đại diện chủ sở hữu. Hội đồng thành viên của công ty đang xem xét đề án về tiền lương, tiền thưởng và các quyền lợi khác cho Tổng Giám đốc trong năm tài chính tới. Chúng tôi có thắc mắc về trình tự, thủ tục cần tuân thủ như sau: Căn cứ vào Điều 32 và Điều 44 Luật Quản lý, sử dụng vốn Nhà nước đầu tư vào sản xuất, kinh doanh tại doanh nghiệp, đối với Tổng Giám đốc, việc quyết định tiền lương, thù lao, tiền thưởng và các quyền lợi khác thuộc thẩm quyền của Hội đồng thành viên. Tuy nhiên, tại khoản 2 Điều 44 cũng quy định một số nội dung Hội đồng thành viên phải quyết định sau khi cơ quan đại diện chủ sở hữu phê duyệt. Vậy xin hỏi: Khi Hội đồng thành viên quyết định về các khoản tiền thưởng và quyền lợi cho Tổng Giám đốc theo quy định tại điểm b khoản 3 Điều 44, có nhất thiết phải trình toàn bộ đề án này lên Bộ Tài chính (cơ quan đại diện chủ sở hữu) để xin phê duyệt trước như đối với việc \"bổ nhiệm, bổ nhiệm lại, miễn nhiệm, khen thưởng, kỷ luật đối với Tổng giám đốc\" (quy định tại điểm b khoản 2) hay không? Hay Hội đồng thành viên có thể tự ban hành quy chế và quyết định trực tiếp mà không cần sự phê duyệt trước của Bộ? Chúng tôi kính mong nhận được hướng dẫn cụ thể.",
|
| 277 |
+
"entities": [
|
| 278 |
+
[
|
| 279 |
+
"Bộ Tài chính",
|
| 280 |
+
"CO_QUAN_THAM_QUYEN"
|
| 281 |
+
],
|
| 282 |
+
[
|
| 283 |
+
"Công ty chúng tôi",
|
| 284 |
+
"TO_CHUC"
|
| 285 |
+
],
|
| 286 |
+
[
|
| 287 |
+
"doanh nghiệp do Nhà nước nắm giữ 100 % vốn điều lệ",
|
| 288 |
+
"CHUC_DANH"
|
| 289 |
+
],
|
| 290 |
+
[
|
| 291 |
+
"cơ quan đại diện chủ sở hữu",
|
| 292 |
+
"CHUC_DANH"
|
| 293 |
+
],
|
| 294 |
+
[
|
| 295 |
+
"Hội đồng thành viên của công ty",
|
| 296 |
+
"NHOM_NGUOI"
|
| 297 |
+
],
|
| 298 |
+
[
|
| 299 |
+
"Tổng Giám đốc",
|
| 300 |
+
"CHUC_DANH"
|
| 301 |
+
],
|
| 302 |
+
[
|
| 303 |
+
"Tổng Giám đốc",
|
| 304 |
+
"CHUC_DANH"
|
| 305 |
+
],
|
| 306 |
+
[
|
| 307 |
+
"cơ quan đại diện chủ sở hữu",
|
| 308 |
+
"BEN_THU_BA"
|
| 309 |
+
],
|
| 310 |
+
[
|
| 311 |
+
"Tổng Giám đốc",
|
| 312 |
+
"CHUC_DANH"
|
| 313 |
+
],
|
| 314 |
+
[
|
| 315 |
+
"Bộ Tài chính",
|
| 316 |
+
"CO_QUAN_THAM_QUYEN"
|
| 317 |
+
]
|
| 318 |
+
]
|
| 319 |
+
},
|
| 320 |
+
{
|
| 321 |
+
"text": "Kính gửi Cục Quản lý cạnh tranh (Bộ Công Thương), Công ty tôi kinh doanh đồ chơi trực tuyến. Trong đợt kiểm tra gần đây, công ty bị phát hiện vi phạm quy định về thông tin sản phẩm, gây hiểu lầm cho người tiêu dùng và đã bị xử phạt vi phạm hành chính. Công ty đã chấp hành xong quyết định xử phạt. Hiện tại, công ty tôi đang xây dựng lại quy trình nội bộ. Xin được hỏi: 1. Trong trường hợp công ty đã bị xử lý vi phạm theo Luật Bảo vệ quyền lợi người tiêu dùng (có thể bị công khai thông tin cảnh báo theo Điều 40), thì có còn phải thực hiện trách nhiệm công khai quy trình tiếp nhận, giải quyết khiếu nại của người tiêu dùng tại địa điểm kinh doanh và trên trang web theo quy định tại khoản 3 Điều 31 Luật Bảo vệ quyền lợi người tiêu dùng nữa không? 2. Việc công khai quy trình nêu trên và việc công khai thông tin cảnh báo (nếu có) theo Điều 40 là hai trách nhiệm độc lập hay có sự thay thế, loại trừ lẫn nhau? Kính mong Cục giải đáp giúp để công ty tôi tuân thủ đúng quy định pháp luật. Trân trọng cảm ơn!",
|
| 322 |
+
"entities": [
|
| 323 |
+
[
|
| 324 |
+
"Cục Quản lý cạnh tranh ( Bộ Công Thương )",
|
| 325 |
+
"CO_QUAN_THAM_QUYEN"
|
| 326 |
+
],
|
| 327 |
+
[
|
| 328 |
+
"Công ty tôi",
|
| 329 |
+
"TO_CHUC"
|
| 330 |
+
],
|
| 331 |
+
[
|
| 332 |
+
"người tiêu dùng",
|
| 333 |
+
"NHOM_NGUOI"
|
| 334 |
+
],
|
| 335 |
+
[
|
| 336 |
+
"công ty tôi",
|
| 337 |
+
"TO_CHUC"
|
| 338 |
+
]
|
| 339 |
+
]
|
| 340 |
+
},
|
| 341 |
+
{
|
| 342 |
+
"text": "Kính gửi Bộ Nội vụ. Tôi là viên chức đang làm việc tại một đơn vị sự nghiệp công lập, thuộc lĩnh vực giáo dục đào tạo. D��� kiến ngày 01/01/2025, tôi sẽ nghỉ hưu theo quy định. Tuy nhiên, đến thời điểm cuối năm 2024, tôi vẫn còn 12 ngày phép năm chưa sử dụng. Xin hỏi quý Bộ: Trường hợp của tôi, nếu sử dụng hết số ngày phép còn lại này ngay trước thời điểm nghỉ hưu thì có được thanh toán tiền cho những ngày không nghỉ hay không? Và việc sử dụng ngày phép này có ảnh hưởng gì đến thời điểm nghỉ hưu chính thức và các chế độ hưu trí của tôi không? Trân trọng cảm ơn!",
|
| 343 |
+
"entities": [
|
| 344 |
+
[
|
| 345 |
+
"Bộ Nội vụ",
|
| 346 |
+
"CO_QUAN_THAM_QUYEN"
|
| 347 |
+
],
|
| 348 |
+
[
|
| 349 |
+
"Tôi",
|
| 350 |
+
"NGUOI"
|
| 351 |
+
],
|
| 352 |
+
[
|
| 353 |
+
"viên chức",
|
| 354 |
+
"CHUC_DANH"
|
| 355 |
+
],
|
| 356 |
+
[
|
| 357 |
+
"một đơn vị sự nghiệp công lập",
|
| 358 |
+
"TO_CHUC"
|
| 359 |
+
]
|
| 360 |
+
]
|
| 361 |
+
},
|
| 362 |
+
{
|
| 363 |
+
"text": "Kính gửi Bộ Thông tin và Truyền thông! Tôi là người đại diện theo pháp luật của một tổ chức đoàn thể. Trong quá trình tổ chức hoạt động, chúng tôi nhận thấy có nhiều cuộc gọi quấy rối, đe dọa từ một số số điện thoại gây ảnh hưởng đến an ninh trật tự nội bộ. Chúng tôi muốn yêu cầu cơ quan có thẩm quyền cung cấp thông tin về chủ sở hữu các số điện thoại nghi vấn này (gồm tên doanh nghiệp viễn thông đã phân bổ số và thông tin của thuê bao sử dụng) để có biện pháp xử lý, bảo vệ quyền lợi của tổ chức. Với tư cách là một tổ chức đoàn thể, việc chúng tôi yêu cầu cung cấp thông tin dựa trên các quy định tại Luật Tiếp cận thông tin (cho phép công dân yêu cầu thông qua tổ chức, đoàn thể) và liên quan đến việc quản lý, sử dụng mã số viễn thông, có được chấp nhận không? Trân trọng cảm ơn!",
|
| 364 |
+
"entities": [
|
| 365 |
+
[
|
| 366 |
+
"Bộ Thông tin và Truyền thông",
|
| 367 |
+
"CO_QUAN_THAM_QUYEN"
|
| 368 |
+
],
|
| 369 |
+
[
|
| 370 |
+
"Tôi",
|
| 371 |
+
"NGUOI"
|
| 372 |
+
],
|
| 373 |
+
[
|
| 374 |
+
"người đại diện theo pháp luật",
|
| 375 |
+
"CHUC_DANH"
|
| 376 |
+
],
|
| 377 |
+
[
|
| 378 |
+
"một tổ chức đoàn thể",
|
| 379 |
+
"TO_CHUC"
|
| 380 |
+
],
|
| 381 |
+
[
|
| 382 |
+
"chúng tôi",
|
| 383 |
+
"NHOM_NGUOI"
|
| 384 |
+
],
|
| 385 |
+
[
|
| 386 |
+
"một số số điện thoại",
|
| 387 |
+
"BEN_THU_BA"
|
| 388 |
+
],
|
| 389 |
+
[
|
| 390 |
+
"cơ quan có thẩm quyền",
|
| 391 |
+
"CO_QUAN_THAM_QUYEN"
|
| 392 |
+
],
|
| 393 |
+
[
|
| 394 |
+
"doanh nghiệp viễn thông đã phân bổ số",
|
| 395 |
+
"BEN_THU_BA"
|
| 396 |
+
],
|
| 397 |
+
[
|
| 398 |
+
"thuê bao sử dụng",
|
| 399 |
+
"BEN_THU_BA"
|
| 400 |
+
],
|
| 401 |
+
[
|
| 402 |
+
"một tổ chức đoàn thể",
|
| 403 |
+
"TO_CHUC"
|
| 404 |
+
]
|
| 405 |
+
]
|
| 406 |
+
},
|
| 407 |
+
{
|
| 408 |
+
"text": "Kính gửi Cơ quan quản lý Căn cước! Tôi là công dân Việt Nam, đã có thẻ căn cước mới được tích hợp thông tin bảo hiểm y tế theo quy định. Tôi xin hỏi: Khi tôi đến bệnh viện để khám chữa bệnh theo chế độ bảo hiểm y tế, nếu tôi không mang theo thẻ bảo hiểm y tế bằng giấy (bản gốc) mà chỉ xuất trình thẻ căn cước có tích hợp thông tin bảo hiểm y tế, thì bệnh viện có được chấp nhận để thực hiện thủ tục khám chữa bệnh và thanh toán bảo hiểm y tế cho tôi hay không?",
|
| 409 |
+
"entities": [
|
| 410 |
+
[
|
| 411 |
+
"Cơ quan quản lý Căn cước",
|
| 412 |
+
"CO_QUAN_THAM_QUYEN"
|
| 413 |
+
],
|
| 414 |
+
[
|
| 415 |
+
"Tôi",
|
| 416 |
+
"NGUOI"
|
| 417 |
+
],
|
| 418 |
+
[
|
| 419 |
+
"công dân Việt Nam",
|
| 420 |
+
"CHUC_DANH"
|
| 421 |
+
],
|
| 422 |
+
[
|
| 423 |
+
"Tôi",
|
| 424 |
+
"NGUOI"
|
| 425 |
+
],
|
| 426 |
+
[
|
| 427 |
+
"bệnh viện",
|
| 428 |
+
"TO_CHUC"
|
| 429 |
+
]
|
| 430 |
+
]
|
| 431 |
+
},
|
| 432 |
+
{
|
| 433 |
+
"text": "Kính gửi Bộ Thông tin và Truyền thông! Công ty chúng tôi là doanh nghiệp viễn thông, trong quá trình vận hành mạng lưới đã tự nghiên cứu và phát triển một hệ thống phần mềm giám sát an ninh mạng. Phần mềm này được triển khai trên chính hạ tầng mạng viễn thông công cộng của chúng tôi và chỉ thu thập, phân tích lưu lượng mạng nội bộ nhằm mục đích tự giám sát, phát hiện sớm nguy cơ đe dọa, điểm yếu, lỗ hổng bảo mật để chủ động cảnh báo và khắc phục, đảm bảo an ninh cho hệ thống của mình. Chúng tôi không cung cấp phần mềm này như một dịch vụ cho bên thứ ba hay thu phí từ việc này. Xin hỏi: Hoạt động tự nghiên cứu, phát triển và sử dụng phần mềm giám sát an ninh mạng cho mục đích nội bộ như trên có được xem là hành vi \"sử dụng cơ sở hạ tầng viễn thông của doanh nghiệp viễn thông để kinh doanh dịch vụ viễn thông\" trái phép theo quy định tại điểm d khoản 2 Điều 15 Luật Viễn thông hay không? Việc này có cần đăng ký, xin phép cơ quan nhà nước có thẩm quyền về an ninh mạng không?",
|
| 434 |
+
"entities": [
|
| 435 |
+
[
|
| 436 |
+
"Bộ Thông tin và Truyền thông",
|
| 437 |
+
"CO_QUAN_THAM_QUYEN"
|
| 438 |
+
],
|
| 439 |
+
[
|
| 440 |
+
"Công ty chúng tôi",
|
| 441 |
+
"TO_CHUC"
|
| 442 |
+
],
|
| 443 |
+
[
|
| 444 |
+
"doanh nghiệp viễn thông",
|
| 445 |
+
"CHUC_DANH"
|
| 446 |
+
],
|
| 447 |
+
[
|
| 448 |
+
"chúng tôi",
|
| 449 |
+
"TO_CHUC"
|
| 450 |
+
],
|
| 451 |
+
[
|
| 452 |
+
"doanh nghiệp viễn thông",
|
| 453 |
+
"TO_CHUC"
|
| 454 |
+
],
|
| 455 |
+
[
|
| 456 |
+
"cơ quan nhà nước có thẩm quyền về an ninh mạng",
|
| 457 |
+
"CO_QUAN_THAM_QUYEN"
|
| 458 |
+
]
|
| 459 |
+
]
|
| 460 |
+
},
|
| 461 |
+
{
|
| 462 |
+
"text": "Kính gửi cơ quan có thẩm quyền! Tôi đã tham gia một hội dân sự được thành lập hợp pháp cách đây vài năm. Gần đây, hội bị giải tán do vi phạm quy định của Luật Quy định quyền lập hội. Tôi chỉ là một thành viên thông thường, không thuộc ban sáng lập, ban chấp hành hay giữ bất kỳ vị trí quản lý nào trong hội. Sau khi hội bị giải tán, tôi vẫn tiếp tục tham gia vào các buổi gặp mặt, sinh hoạt do một số người trong nhóm tự phát tổ chức. Tôi xin hỏi: Trong trường hợp này, nếu việc sinh hoạt nhóm bị xác định là hoạt động tiếp tục của hội đã giải tán, tôi có bị truy cứu trách nhiệm hình sự hoặc xử phạt vi phạm hành chính theo Điều 6 Luật Quy định quyền lập hội không?",
|
| 463 |
+
"entities": [
|
| 464 |
+
[
|
| 465 |
+
"cơ quan có thẩm quyền",
|
| 466 |
+
"CO_QUAN_THAM_QUYEN"
|
| 467 |
+
],
|
| 468 |
+
[
|
| 469 |
+
"Tôi",
|
| 470 |
+
"NGUOI"
|
| 471 |
+
],
|
| 472 |
+
[
|
| 473 |
+
"một hội dân sự",
|
| 474 |
+
"TO_CHUC"
|
| 475 |
+
],
|
| 476 |
+
[
|
| 477 |
+
"một số người trong nhóm",
|
| 478 |
+
"NHOM_NGUOI"
|
| 479 |
+
],
|
| 480 |
+
[
|
| 481 |
+
"hội đã giải tán",
|
| 482 |
+
"TO_CHUC"
|
| 483 |
+
]
|
| 484 |
+
]
|
| 485 |
+
},
|
| 486 |
+
{
|
| 487 |
+
"text": "Tôi xin trình bày tình huống của tôi như sau: Tôi và người vợ cũ đã ly hôn vào năm 2020, có một con chung hiện 7 tuổi. Trong quá trình ly hôn, do mâu thuẫn, người cha (chồng cũ của tôi) từ chối công nhận và không thực hiện bất kỳ nghĩa vụ cấp dưỡng nào cho con. Tôi muốn thực hiện thủ tục xác định cha cho con để đảm bảo quyền lợi của cháu, nhưng người cha không hợp tác và phủ nhận quan hệ này. Tôi có thể yêu cầu Tòa án xác định cha cho con trong trường hợp này không? Và nếu được, tôi cần chuẩn bị những giấy tờ gì và thủ tục sẽ diễn ra như thế nào?",
|
| 488 |
+
"entities": [
|
| 489 |
+
[
|
| 490 |
+
"Tôi",
|
| 491 |
+
"NGUOI"
|
| 492 |
+
],
|
| 493 |
+
[
|
| 494 |
+
"người vợ cũ",
|
| 495 |
+
"BEN_THU_BA"
|
| 496 |
+
],
|
| 497 |
+
[
|
| 498 |
+
"người cha ( chồng cũ của tôi )",
|
| 499 |
+
"NGUOI"
|
| 500 |
+
],
|
| 501 |
+
[
|
| 502 |
+
"người cha",
|
| 503 |
+
"BEN_THU_BA"
|
| 504 |
+
],
|
| 505 |
+
[
|
| 506 |
+
"Tòa án",
|
| 507 |
+
"CO_QUAN_THAM_QUYEN"
|
| 508 |
+
]
|
| 509 |
+
]
|
| 510 |
+
},
|
| 511 |
+
{
|
| 512 |
+
"text": "Kính gửi Cơ quan có thẩm quyền giải thích pháp luật (Ví dụ: Bộ Tư pháp, Bộ Công an), Tôi có thắc mắc liên quan đến nội dung sửa đổi, bổ sung Luật Xử lý vi phạm hành chính (được trích dẫn là Luật sửa đổi, bổ sung một số điều của Luật XLVPHC). Cụ thể, tại điểm 18 Điều 1 của dự thảo luật sửa đổi (tương ứng với việc sửa đổi, bổ sung khoản 1 Điều 122 Luật XLVPHC số 15/2012/QH13), có bổ sung một trong các trường hợp được tạm giữ người theo thủ tục hành chính là: \"Để xác định tình trạng nghiện ma túy\". Trong khi đó, pháp luật hiện hành về phòng, chống ma túy đã có các quy định cụ thể về việc xét nghiệm chất ma túy, quản lý người nghiện, cai nghiện. Việc bổ sung căn cứ \"để xác định tình trạng nghiện ma túy\" vào các trường hợp được tạm giữ người theo thủ tục hành chính có vẻ rất rộng, vì \"nghi ngờ\" một người có thể nghiện ma túy là điều dễ xảy ra. Xin hỏi: 1. Việc bổ sung trường hợp này có phù hợp với nguyên tắc pháp chế, có đảm bảo tính minh bạch và hạn chế tùy tiện trong áp dụng biện pháp tạm giữ người hay không? Liệu nó có mâu thuẫn với các quy định về bảo vệ quyền con người, quyền công dân được Hiến pháp ghi nhận? 2. Trong thực tiễn, tiêu chí để \"nghi ngờ\" một người cần được tạm giữ để xác định tình trạng nghiện ma túy sẽ được áp dụng như thế nào để tránh lạm dụng? Có cần văn bản hướng dẫn cụ thể về điều kiện, trình tự, thủ tục cho trường hợp này không? Rất mong nhận được sự giải đáp của Quý cơ quan. Trân trọng cảm ơn!",
|
| 513 |
+
"entities": [
|
| 514 |
+
[
|
| 515 |
+
"Bộ Tư pháp",
|
| 516 |
+
"CO_QUAN_THAM_QUYEN"
|
| 517 |
+
],
|
| 518 |
+
[
|
| 519 |
+
"Bộ Công an",
|
| 520 |
+
"CO_QUAN_THAM_QUYEN"
|
| 521 |
+
],
|
| 522 |
+
[
|
| 523 |
+
"Tôi",
|
| 524 |
+
"NGUOI"
|
| 525 |
+
]
|
| 526 |
+
]
|
| 527 |
+
},
|
| 528 |
+
{
|
| 529 |
+
"text": "Kính gửi Bộ Giao thông vận tải! Doanh nghiệp chúng tôi đang vận chuyển hàng viện trợ nhân đạo khẩn cấp (thuốc men, lương thực) cho vùng bị ảnh hưởng bởi bão lụt. Để rút ngắn thời gian, đoàn xe của chúng tôi bắt buộc phải đi qua một tuyến đường cao tốc do công ty tư nhân A đầu tư, xây dựng và đang khai thác theo hình thức BOT. Chúng tôi được biết theo quy định tại Điều 46 Luật Đường bộ, Nhà nước khuyến khích tư nhân tham gia đầu tư đường cao tốc. Tuy nhiên, chúng tôi không rõ đối với các trường hợp vận chuyển nhân đạo khẩn cấp như của chúng tôi, việc thu phí sử dụng đường có được xem xét miễn giảm hay không? Nếu được, cơ quan nào (Bộ Giao thông vận tải, UBND tỉnh hay chủ đầu tư tư nhân) có thẩm quyền quyết định việc miễn giảm phí này? Rất mong Bộ giải đáp để chúng tôi có căn cứ thực hiện.",
|
| 530 |
+
"entities": [
|
| 531 |
+
[
|
| 532 |
+
"Bộ Giao thông vận tải",
|
| 533 |
+
"CO_QUAN_THAM_QUYEN"
|
| 534 |
+
],
|
| 535 |
+
[
|
| 536 |
+
"Doanh nghiệp chúng tôi",
|
| 537 |
+
"TO_CHUC"
|
| 538 |
+
],
|
| 539 |
+
[
|
| 540 |
+
"công ty tư nhân A",
|
| 541 |
+
"TO_CHUC"
|
| 542 |
+
],
|
| 543 |
+
[
|
| 544 |
+
"Bộ Giao thông vận tải",
|
| 545 |
+
"CO_QUAN_THAM_QUYEN"
|
| 546 |
+
],
|
| 547 |
+
[
|
| 548 |
+
"UBND tỉnh",
|
| 549 |
+
"CO_QUAN_THAM_QUYEN"
|
| 550 |
+
],
|
| 551 |
+
[
|
| 552 |
+
"chủ đầu tư tư nhân",
|
| 553 |
+
"BEN_THU_BA"
|
| 554 |
+
]
|
| 555 |
+
]
|
| 556 |
+
},
|
| 557 |
+
{
|
| 558 |
+
"text": "Kính gửi Bộ Nội vụ! Tôi đã tốt nghiệp Cao đẳng chuyên ngành Lưu trữ học. Hiện nay, tôi có nguyện vọng được hành nghề lưu trữ và muốn làm thủ tục xin cấp Chứng chỉ hành nghề lưu trữ theo quy định tại Luật Lưu trữ 2024. Tôi xin được hỏi: Với bằng tốt nghiệp Cao đẳng ngành lưu trữ, tôi có cần phải tham gia và đạt yêu cầu kỳ kiểm tra nghiệp vụ do Bộ Nội vụ tổ chức để được cấp chứng chỉ hành nghề hay không? Xin chân thành cảm ơn!",
|
| 559 |
+
"entities": [
|
| 560 |
+
[
|
| 561 |
+
"Bộ Nội vụ",
|
| 562 |
+
"CO_QUAN_THAM_QUYEN"
|
| 563 |
+
],
|
| 564 |
+
[
|
| 565 |
+
"Tôi",
|
| 566 |
+
"NGUOI"
|
| 567 |
+
],
|
| 568 |
+
[
|
| 569 |
+
"Cao đẳng chuyên ngành Lưu trữ học",
|
| 570 |
+
"CHUC_DANH"
|
| 571 |
+
],
|
| 572 |
+
[
|
| 573 |
+
"Tôi",
|
| 574 |
+
"NGUOI"
|
| 575 |
+
],
|
| 576 |
+
[
|
| 577 |
+
"Bộ Nội vụ",
|
| 578 |
+
"CO_QUAN_THAM_QUYEN"
|
| 579 |
+
]
|
| 580 |
+
]
|
| 581 |
+
},
|
| 582 |
+
{
|
| 583 |
+
"text": "Kính gửi Cục Đường thủy nội địa Việt Nam, tôi là thuyền trưởng một tàu hàng trên sông. Tình huống cụ thể như sau: Do bão lũ, cơ quan quản lý đã có thông báo hạn chế giao thông đường thủy trên một đoạn sông, yêu cầu các phương tiện phải neo đậu tại bến quy định để tránh trú. Trong thời gian này, con tàu của tôi đang neo đậu theo lệnh thì bất ngờ bị đứt dây neo và mất chủ động, trôi dạt trên luồng vào ban ngày. Xin hỏi: Trong hoàn cảnh đang có lệnh hạn chế giao thông vì thiên tai, và phương tiện của tôi bị mất chủ động, tôi phải tuân thủ quy định báo hiệu nào: 1. Theo Điều 55 Luật Giao thông đường thủy nội địa (treo hai hình thoi đen ở vị trí cao nhất khi mất chủ động ban ngày), hay 2. Có cần tuân thủ thêm các biện pháp báo hiệu đặc biệt nào khác do lệnh hạn chế giao thông quy định không? Rất mong nhận được hướng dẫn cụ thể để đảm bảo an toàn và tuân thủ pháp luật.",
|
| 584 |
+
"entities": [
|
| 585 |
+
[
|
| 586 |
+
"Cục Đường thủy nội địa Việt Nam",
|
| 587 |
+
"CO_QUAN_THAM_QUYEN"
|
| 588 |
+
],
|
| 589 |
+
[
|
| 590 |
+
"tôi",
|
| 591 |
+
"NGUOI"
|
| 592 |
+
],
|
| 593 |
+
[
|
| 594 |
+
"thuyền trưởng",
|
| 595 |
+
"CHUC_DANH"
|
| 596 |
+
],
|
| 597 |
+
[
|
| 598 |
+
"thuyền trưởng một tàu hàng trên sông",
|
| 599 |
+
"CHUC_DANH"
|
| 600 |
+
],
|
| 601 |
+
[
|
| 602 |
+
"cơ quan quản lý",
|
| 603 |
+
"BEN_THU_BA"
|
| 604 |
+
]
|
| 605 |
+
]
|
| 606 |
+
},
|
| 607 |
+
{
|
| 608 |
+
"text": "Kính gửi Viện kiểm sát nhân dân tối cao! Tôi đang có một khiếu nại liên quan đến việc giải quyết tố tụng hình sự tại Tòa án nhân dân cấp huyện. Theo quy định tại Điều 30 Luật Tổ chức Viện kiểm sát nhân dân, Viện kiểm sát có thẩm quyền yêu cầu cơ quan có thẩm quyền giải quyết và ban hành kết luận kiểm sát. Vậy tôi xin hỏi: Trong trường hợp Viện kiểm sát đã yêu cầu Tòa án cấp huyện giải quyết khiếu nại nhưng Tòa án không giải quyết hoặc giải quyết không thỏa đáng, liệu Viện kiểm sát có được ban hành kết luận kiểm sát về việc giải quyết khiếu nại đó không, hay chỉ có thể kiến nghị, kháng nghị? Thủ tục và căn cứ để Viện kiểm sát ban hành kết luận kiểm sát trong trường hợp này được quy định như thế nào?",
|
| 609 |
+
"entities": [
|
| 610 |
+
[
|
| 611 |
+
"Viện kiểm sát nhân dân tối cao",
|
| 612 |
+
"CO_QUAN_THAM_QUYEN"
|
| 613 |
+
],
|
| 614 |
+
[
|
| 615 |
+
"Tôi",
|
| 616 |
+
"NGUOI"
|
| 617 |
+
],
|
| 618 |
+
[
|
| 619 |
+
"Tòa án nhân dân cấp huyện",
|
| 620 |
+
"CO_QUAN_THAM_QUYEN"
|
| 621 |
+
],
|
| 622 |
+
[
|
| 623 |
+
"cơ quan có thẩm quyền",
|
| 624 |
+
"CO_QUAN_THAM_QUYEN"
|
| 625 |
+
],
|
| 626 |
+
[
|
| 627 |
+
"tôi",
|
| 628 |
+
"NGUOI"
|
| 629 |
+
],
|
| 630 |
+
[
|
| 631 |
+
"Tòa án cấp huyện",
|
| 632 |
+
"CO_QUAN_THAM_QUYEN"
|
| 633 |
+
],
|
| 634 |
+
[
|
| 635 |
+
"Viện kiểm sát",
|
| 636 |
+
"CO_QUAN_THAM_QUYEN"
|
| 637 |
+
]
|
| 638 |
+
]
|
| 639 |
+
},
|
| 640 |
+
{
|
| 641 |
+
"text": "Kính gửi Tòa án nhân dân tối cao! Tôi có một vụ tranh chấp hợp đồng dân sự đang được thụ lý để hòa giải tại Tòa án theo quy định của Luật Hòa giải, đối thoại tại Tòa án. Quá trình hòa giải đã thành công, các bên đã đạt được thỏa thuận. Hòa giải viên đã ấn định thời gian tổ chức phiên họp ghi nhận kết quả hòa giải tại trụ sở Tòa án theo quy định tại Điều 27. Tuy nhiên, đến ngày diễn ra phiên họp, một trong các bên đương sự (bên A) không thể có mặt trực tiếp vì lý do công tác đột xuất ở tỉnh khác. Thay vào đó, bên A đã làm văn bản ủy quyền hợp lệ cho một luật sư đại diện tham dự phiên họp, với đầy đủ quyền ký kết biên bản ghi nhận kết quả hòa giải thay cho mình. Trong trường hợp này, xin Tòa án giải đáp giúp: 1. Phiên họp ghi nhận kết quả hòa giải có được tiến hành khi một bên không có mặt trực tiếp nhưng có người đại diện hợp pháp tham dự thay thế không? Hay đây được coi là trường hợp \"vắng mặt\" theo quy định tại điểm a khoản 1 Điều 29, buộc phải hoãn phiên họp? 2. Nếu phiên họp vẫn được tiến hành và người đại diện hợp pháp ký vào biên bản, thì kết quả hòa giải đó có được Tòa án công nhận và có giá trị pháp lý như trường hợp các bên có mặt trực tiếp hay không? Rất mong nhận được hướng dẫn của Tòa án để quá trình giải quyết vụ việc được đúng trình tự, bảo đảm quyền lợi của các bên.",
|
| 642 |
+
"entities": [
|
| 643 |
+
[
|
| 644 |
+
"Tòa án nhân dân tối cao",
|
| 645 |
+
"CO_QUAN_THAM_QUYEN"
|
| 646 |
+
],
|
| 647 |
+
[
|
| 648 |
+
"Tôi",
|
| 649 |
+
"NGUOI"
|
| 650 |
+
],
|
| 651 |
+
[
|
| 652 |
+
"Hòa giải viên",
|
| 653 |
+
"CHUC_DANH"
|
| 654 |
+
],
|
| 655 |
+
[
|
| 656 |
+
"một trong các bên đương sự ( bên A )",
|
| 657 |
+
"BEN_THU_BA"
|
| 658 |
+
],
|
| 659 |
+
[
|
| 660 |
+
"bên A",
|
| 661 |
+
"BEN_THU_BA"
|
| 662 |
+
],
|
| 663 |
+
[
|
| 664 |
+
"người đại diện hợp pháp",
|
| 665 |
+
"CHUC_DANH"
|
| 666 |
+
],
|
| 667 |
+
[
|
| 668 |
+
"người đại diện hợp pháp",
|
| 669 |
+
"CHUC_DANH"
|
| 670 |
+
]
|
| 671 |
+
]
|
| 672 |
+
},
|
| 673 |
+
{
|
| 674 |
+
"text": "Kính gửi Tòa án nhân dân tối cao, tôi là một Hòa giải viên đang công tác tại Tòa án nhân dân quận. Tôi đã kết thúc nhiệm kỳ 5 năm và đang làm thủ tục để được xem xét bổ nhiệm lại. Trong quá trình công tác, tôi luôn hoàn thành tốt nhiệm vụ được giao, số vụ việc hòa giải thành công cao và không thuộc nhóm 10% có mức độ hoàn thành nhiệm vụ thấp nhất. Tuy nhiên, gần đây tôi phát hiện mình mắc một bệnh mãn tính (tiểu đường type 2) cần điều trị lâu dài, nhưng bệnh này không ảnh hưởng đến khả năng làm việc và tư duy của tôi. Khi khám sức khỏe để làm hồ sơ, bác sĩ kết luận tôi \"đủ sức khỏe làm việc\" nhưng có ghi chú về bệnh nền. Tôi xin hỏi: Trong trường hợp của tôi, dù có bệnh nền nhưng vẫn được cấp giấy chứng nhận đủ sức khỏe làm việc và hoàn thành tốt nhiệm vụ, tôi có đủ điều kiện để được bổ nhiệm lại làm Hòa giải viên không? Rất mong nhận được hướng dẫn của Tòa án. Trân trọng cảm ơn!",
|
| 675 |
+
"entities": [
|
| 676 |
+
[
|
| 677 |
+
"Tòa án nhân dân tối cao",
|
| 678 |
+
"CO_QUAN_THAM_QUYEN"
|
| 679 |
+
],
|
| 680 |
+
[
|
| 681 |
+
"tôi",
|
| 682 |
+
"NGUOI"
|
| 683 |
+
],
|
| 684 |
+
[
|
| 685 |
+
"Hòa giải viên",
|
| 686 |
+
"CHUC_DANH"
|
| 687 |
+
],
|
| 688 |
+
[
|
| 689 |
+
"Tòa án nhân dân quận",
|
| 690 |
+
"TO_CHUC"
|
| 691 |
+
],
|
| 692 |
+
[
|
| 693 |
+
"bác sĩ",
|
| 694 |
+
"BEN_THU_BA"
|
| 695 |
+
],
|
| 696 |
+
[
|
| 697 |
+
"Hòa giải viên",
|
| 698 |
+
"CHUC_DANH"
|
| 699 |
+
]
|
| 700 |
+
]
|
| 701 |
+
},
|
| 702 |
+
{
|
| 703 |
+
"text": "Kính gửi Bộ Nội vụ! Cơ quan chúng tôi hiện đang thực hiện việc số hóa tài liệu để nộp vào Lưu trữ lịch sử theo quy định. Trong quá trình này, chúng tôi có một thắc mắc cần được Bộ hướng dẫn cụ thể. Một số hồ sơ công việc quan trọng của cơ quan đã được tạo lập và lưu trữ song song cả dưới dạng văn bản giấy (bản gốc) và tệp tin điện tử (bản điện tử) ngay từ thời điểm giải quyết công việc. Bây giờ đến thời hạn nộp vào Lưu trữ lịch sử, theo quy định tại khoản 7 Điều 18 và khoản 1 Điều 4 của Luật Lưu trữ năm 2024, thì chúng tôi cần thu nộp tất cả các loại tài liệu này. Tuy nhiên, chúng tôi muốn được làm rõ: Trong trường hợp hồ sơ đã có bản điện tử đầy đủ, đáp ứng mọi yêu cầu về tính toàn vẹn, xác thực và có thể thay thế cho bản giấy để tra cứu, sử dụng lâu dài, thì chúng tôi có bắt buộc phải nộp cả bản gốc bằng giấy vào Lưu trữ lịch sử hay không? Hay chúng tôi chỉ cần nộp bản điện tử và được phép lưu giữ, hủy bản giấy theo quy định về hủy tài liệu trùng lặp? Rất mong nhận được hướng dẫn của Bộ để cơ quan chúng tôi thực hiện đúng quy định pháp luật.",
|
| 704 |
+
"entities": [
|
| 705 |
+
[
|
| 706 |
+
"Bộ Nội vụ",
|
| 707 |
+
"CO_QUAN_THAM_QUYEN"
|
| 708 |
+
],
|
| 709 |
+
[
|
| 710 |
+
"Cơ quan chúng tôi",
|
| 711 |
+
"TO_CHUC"
|
| 712 |
+
]
|
| 713 |
+
]
|
| 714 |
+
},
|
| 715 |
+
{
|
| 716 |
+
"text": "Tôi là người dân xã B. Ông Nguyễn Văn A là tổ trưởng tổ hòa giải của xã. Trong một vụ việc hòa giải tranh chấp đất đai giữa hai hộ gia đình tại địa phương, ông A đã có lời nói và hành vi thiên vị, không khách quan theo đúng như phản ánh của một bên. Điều này được xác định là vi phạm nguyên tắc hòa giải ở cơ sở. Tôi xin hỏi: Trong tình huống này, việc ông A vi phạm nguyên tắc khi đang tiến hành hòa giải có dẫn đến việc ông ấy phải thôi làm hòa giải viên theo quy định tại Điều 11 Luật Hòa giải ở cơ sở, hay chỉ cần áp dụng Điều 18 để phân công hòa giải viên khác thực hiện vụ việc này và ông A vẫn tiếp tục giữ chức vụ tổ trưởng tổ hòa giải?",
|
| 717 |
+
"entities": [
|
| 718 |
+
[
|
| 719 |
+
"Tôi",
|
| 720 |
+
"NGUOI"
|
| 721 |
+
],
|
| 722 |
+
[
|
| 723 |
+
"người dân xã B",
|
| 724 |
+
"NHOM_NGUOI"
|
| 725 |
+
],
|
| 726 |
+
[
|
| 727 |
+
"Ông Nguyễn Văn A",
|
| 728 |
+
"NGUOI"
|
| 729 |
+
],
|
| 730 |
+
[
|
| 731 |
+
"tổ trưởng tổ hòa giải của xã",
|
| 732 |
+
"CHUC_DANH"
|
| 733 |
+
],
|
| 734 |
+
[
|
| 735 |
+
"hai hộ gia đình",
|
| 736 |
+
"NHOM_NGUOI"
|
| 737 |
+
],
|
| 738 |
+
[
|
| 739 |
+
"ông A",
|
| 740 |
+
"NGUOI"
|
| 741 |
+
],
|
| 742 |
+
[
|
| 743 |
+
"một bên",
|
| 744 |
+
"BEN_THU_BA"
|
| 745 |
+
],
|
| 746 |
+
[
|
| 747 |
+
"hòa giải viên",
|
| 748 |
+
"CHUC_DANH"
|
| 749 |
+
]
|
| 750 |
+
]
|
| 751 |
+
},
|
| 752 |
+
{
|
| 753 |
+
"text": "Tôi là chủ một đại lý dịch vụ viễn thông của Công ty A. Gần đây, Công ty B (một doanh nghiệp viễn thông độc lập) có gửi công văn yêu cầu tôi cung cấp thông tin về cơ sở khách hàng, số thuê bao và tình hình cung cấp dịch vụ tại địa bàn do tôi phụ trách để phục vụ cho việc nghiên cứu thị trường và lập kế hoạch kết nối mạng. Theo quy định tại Điều 14 Luật Viễn thông, tôi có nghĩa vụ cung cấp thông tin theo hợp đồng đại lý với Công ty A. Tuy nhiên, theo quy định về kết nối viễn thông tại Điều 44, doanh nghiệp viễn thông có quyền yêu cầu kết nối. Vậy, với tư cách là một đại lý độc lập, tôi có trách nhiệm phải cung cấp các thông tin nêu trên cho Công ty B hay không? Nếu có, thời hạn cung cấp được áp dụng theo quy định nào: theo Luật Viễn thông, Luật Tiếp cận thông tin hay các văn bản hướng dẫn khác?",
|
| 754 |
+
"entities": [
|
| 755 |
+
[
|
| 756 |
+
"Tôi",
|
| 757 |
+
"NGUOI"
|
| 758 |
+
],
|
| 759 |
+
[
|
| 760 |
+
"chủ một đại lý dịch vụ viễn thông",
|
| 761 |
+
"CHUC_DANH"
|
| 762 |
+
],
|
| 763 |
+
[
|
| 764 |
+
"Công ty A",
|
| 765 |
+
"TO_CHUC"
|
| 766 |
+
],
|
| 767 |
+
[
|
| 768 |
+
"Công ty B",
|
| 769 |
+
"TO_CHUC"
|
| 770 |
+
],
|
| 771 |
+
[
|
| 772 |
+
"Công ty B ( một doanh nghiệp viễn thông độc lập )",
|
| 773 |
+
"TO_CHUC"
|
| 774 |
+
],
|
| 775 |
+
[
|
| 776 |
+
"Công ty A",
|
| 777 |
+
"TO_CHUC"
|
| 778 |
+
],
|
| 779 |
+
[
|
| 780 |
+
"doanh nghiệp viễn thông",
|
| 781 |
+
"BEN_THU_BA"
|
| 782 |
+
]
|
| 783 |
+
]
|
| 784 |
+
},
|
| 785 |
+
{
|
| 786 |
+
"text": "Kính gửi Tòa án nhân dân tỉnh. Chúng tôi là một hộ gia đình, có mâu thuẫn đất đai với hàng xóm liền kề. Chúng tôi đã được Hòa giải viên của tổ dân phố tiến hành hòa giải và đã đạt được thỏa thuận, lập văn bản hòa giải thành có chữ ký của hai bên và hòa giải viên. Theo thỏa thuận, bên kia phải trả lại một phần diện tích đất đã lấn chiếm và đền bù thiệt hại cho chúng tôi trong thời hạn 30 ngày kể từ ngày ký văn bản. Tuy nhiên, sau hơn 60 ngày, phía bên kia vẫn không chịu thực hiện bất kỳ nghĩa vụ nào trong thỏa thuận đã ký kết. Xin hỏi: 1. Trong trường hợp này, chúng tôi có quyền khởi kiện vụ án dân sự ra Tòa án để yêu cầu bên kia thực hiện thỏa thuận hòa giải thành hay không? 2. Văn bản hòa giải thành đã lập có giá trị pháp lý như thế nào và có được Tòa án thừa nhận là chứng cứ trong quá trình giải quyết vụ án không? Xin chân thành cảm ơn.",
|
| 787 |
+
"entities": [
|
| 788 |
+
[
|
| 789 |
+
"Tòa án nhân dân tỉnh",
|
| 790 |
+
"CO_QUAN_THAM_QUYEN"
|
| 791 |
+
],
|
| 792 |
+
[
|
| 793 |
+
"Chúng tôi",
|
| 794 |
+
"NHOM_NGUOI"
|
| 795 |
+
],
|
| 796 |
+
[
|
| 797 |
+
"hàng xóm liền kề",
|
| 798 |
+
"BEN_THU_BA"
|
| 799 |
+
],
|
| 800 |
+
[
|
| 801 |
+
"Hòa giải viên của tổ dân phố",
|
| 802 |
+
"BEN_THU_BA"
|
| 803 |
+
],
|
| 804 |
+
[
|
| 805 |
+
"hòa giải viên",
|
| 806 |
+
"CHUC_DANH"
|
| 807 |
+
],
|
| 808 |
+
[
|
| 809 |
+
"bên kia",
|
| 810 |
+
"BEN_THU_BA"
|
| 811 |
+
],
|
| 812 |
+
[
|
| 813 |
+
"Tòa án",
|
| 814 |
+
"CO_QUAN_THAM_QUYEN"
|
| 815 |
+
],
|
| 816 |
+
[
|
| 817 |
+
"bên kia",
|
| 818 |
+
"BEN_THU_BA"
|
| 819 |
+
]
|
| 820 |
+
]
|
| 821 |
+
},
|
| 822 |
+
{
|
| 823 |
+
"text": "Chị A và chị B có mâu thuẫn do lời qua tiếng lại, dẫn đến xô xát khiến chị B bị thương nhẹ. Chị A sau đó đã tự nguyện bồi thường cho chị B số tiền 5 triệu đồng và hai bên không có bất kỳ thỏa thuận hay giấy tờ gì về việc này. Tuy nhiên, một thời gian sau, chị B vẫn cảm thấy bức xúc nên đã đề nghị Tổ hòa giải ở cơ sở tiến hành hòa giải vụ việc này. Xin hỏi: Trong tình huống chị A đã tự bồi thường trước, Tổ hòa giải có thể tiến hành hòa giải vụ việc trên không?",
|
| 824 |
+
"entities": [
|
| 825 |
+
[
|
| 826 |
+
"Chị A",
|
| 827 |
+
"NGUOI"
|
| 828 |
+
],
|
| 829 |
+
[
|
| 830 |
+
"chị B",
|
| 831 |
+
"NGUOI"
|
| 832 |
+
],
|
| 833 |
+
[
|
| 834 |
+
"Tổ hòa giải ở cơ sở",
|
| 835 |
+
"BEN_THU_BA"
|
| 836 |
+
]
|
| 837 |
+
]
|
| 838 |
+
},
|
| 839 |
+
{
|
| 840 |
+
"text": "Kính gửi Viện kiểm sát nhân dân! Trong đợt niêm yết danh sách cử tri vừa rồi, tôi phát hiện tên tôi bị ghi sai ngày sinh. Tuy nhiên, do công tác xa nên tôi không kịp làm đơn khiếu nại trong thời hạn 10 ngày theo quy định tại Điều 28 Luật Trưng cầu ý dân. Vừa qua, tôi đã trở về và có làm đơn gửi đến cơ quan lập danh sách cử tri nhưng họ từ chối tiếp nhận với lý do đã hết thời hạn khiếu nại. Trong tình huống này, khi tôi đã bỏ lỡ thời hạn khiếu nại về danh sách cử tri, tôi có còn quyền khởi kiện vụ việc này ra Tòa án nhân dân để yêu cầu sửa sai hay không? Rất mong nhận được hướng dẫn từ Quý cơ quan. Xin chân thành cảm ơn!",
|
| 841 |
+
"entities": [
|
| 842 |
+
[
|
| 843 |
+
"Viện kiểm sát nhân dân",
|
| 844 |
+
"CO_QUAN_THAM_QUYEN"
|
| 845 |
+
],
|
| 846 |
+
[
|
| 847 |
+
"cơ quan lập danh sách cử tri",
|
| 848 |
+
"BEN_THU_BA"
|
| 849 |
+
],
|
| 850 |
+
[
|
| 851 |
+
"Tòa án nhân dân",
|
| 852 |
+
"CO_QUAN_THAM_QUYEN"
|
| 853 |
+
]
|
| 854 |
+
]
|
| 855 |
+
},
|
| 856 |
+
{
|
| 857 |
+
"text": "Kính gửi Tổng Liên đoàn Lao động Việt Nam! Hiện nay, một số liên đoàn lao động tỉnh, thành phố trực thuộc trung ương muốn đề xuất điều chỉnh mức lương tối thiểu vùng để phù hợp với điều kiện kinh tế - xã hội tại địa phương. Trong hệ thống công đoàn Việt Nam, có nhiều cấp công đoàn (cấp trung ương, cấp tỉnh, cấp cơ sở). Căn cứ vào quy định tại Luật Công đoàn 2024, xin hỏi: 1. Liên đoàn lao động cấp tỉnh có thẩm quyền trình dự án luật (như dự án luật sửa đổi quy định về lương tối thiểu) trước Quốc hội hay không, hay chỉ Tổng Liên đoàn Lao động Việt Nam mới có thẩm quyền này? 2. Nếu liên đoàn lao động cấp tỉnh không có thẩm quyền trình trực tiếp, thì cơ chế nào để kiến nghị của cấp tỉnh được chuyển lên Tổng Liên đoàn Lao động Việt Nam để xem xét trình Quốc hội? Xin chân thành cảm ơn!",
|
| 858 |
+
"entities": [
|
| 859 |
+
[
|
| 860 |
+
"Tổng Liên đoàn Lao động Việt Nam",
|
| 861 |
+
"CO_QUAN_THAM_QUYEN"
|
| 862 |
+
],
|
| 863 |
+
[
|
| 864 |
+
"một số liên đoàn lao động tỉnh, thành phố trực thuộc trung ương",
|
| 865 |
+
"TO_CHUC"
|
| 866 |
+
],
|
| 867 |
+
[
|
| 868 |
+
"công đoàn Việt Nam",
|
| 869 |
+
"TO_CHUC"
|
| 870 |
+
],
|
| 871 |
+
[
|
| 872 |
+
"Liên đoàn lao động cấp tỉnh",
|
| 873 |
+
"TO_CHUC"
|
| 874 |
+
],
|
| 875 |
+
[
|
| 876 |
+
"Tổng Liên đoàn Lao động Việt Nam",
|
| 877 |
+
"TO_CHUC"
|
| 878 |
+
],
|
| 879 |
+
[
|
| 880 |
+
"liên đoàn lao động cấp tỉnh",
|
| 881 |
+
"TO_CHUC"
|
| 882 |
+
],
|
| 883 |
+
[
|
| 884 |
+
"Tổng Liên đoàn Lao động Việt Nam",
|
| 885 |
+
"TO_CHUC"
|
| 886 |
+
]
|
| 887 |
+
]
|
| 888 |
+
},
|
| 889 |
+
{
|
| 890 |
+
"text": "Kính gửi Ban Cơ yếu Chính phủ, tôi là công dân có nhu cầu tìm hiểu và nghiên cứu về chính sách đầu tư phát triển hạ tầng mật mã quốc gia (theo quy định tại điểm 2 Điều 4 Luật Cơ yếu 2011). Tôi được biết thông tin này có thể được công khai theo quy định của pháp luật về tiếp cận thông tin. Tôi xin hỏi: 1. Khi có nhu cầu tiếp cận thông tin liên quan đến chính sách đầu tư hạ tầng mật mã do Ban Cơ yếu Chính phủ nắm giữ, tôi cần làm thủ tục yêu cầu cung cấp thông tin như thế nào? 2. Việc cung cấp thông tin này có thuộc trường hợp phải trả phí, lệ phí theo quy định tại Điều 12 Luật Tiếp cận thông tin hay không? Tôi kính mong nhận được sự hướng dẫn cụ thể để thực hiện đúng quy định pháp luật.",
|
| 891 |
+
"entities": [
|
| 892 |
+
[
|
| 893 |
+
"Ban Cơ yếu Chính phủ",
|
| 894 |
+
"CO_QUAN_THAM_QUYEN"
|
| 895 |
+
],
|
| 896 |
+
[
|
| 897 |
+
"tôi",
|
| 898 |
+
"NGUOI"
|
| 899 |
+
],
|
| 900 |
+
[
|
| 901 |
+
"công dân",
|
| 902 |
+
"CHUC_DANH"
|
| 903 |
+
],
|
| 904 |
+
[
|
| 905 |
+
"Ban Cơ yếu Chính phủ",
|
| 906 |
+
"TO_CHUC"
|
| 907 |
+
]
|
| 908 |
+
]
|
| 909 |
+
},
|
| 910 |
+
{
|
| 911 |
+
"text": "Kính gửi Bộ Công an, Bộ Quốc phòng! Tôi là chủ một doanh nghiệp tư nhân lớn chuyên về công nghệ thông tin, có vận hành hệ thống thông tin nội bộ và các sản phẩm, dịch vụ trực tuyến quan trọng. Trước tình hình mất an toàn thông tin và các cuộc tấn công mạng phức tạp hiện nay, doanh nghiệp tôi có nhu cầu xây dựng một đội ngũ chuyên môn, bài bản để chủ động bảo vệ hệ thống và thông tin của mình. Qua nghiên cứu Luật An ninh mạng, tôi hiểu được việc tuyển chọn, phát triển lực lượng bảo vệ an ninh mạng là rất cần thiết. Tuy nhiên, tôi có một số thắc mắc như sau: Theo Điều 32 của Luật, công dân có đủ tiêu chuẩn có thể được tuyển chọn vào lực lượng bảo vệ an ninh mạng, nhưng không rõ các tổ chức, doanh nghiệp thuộc khu vực tư nhân như công ty tôi có được tự mình thành lập và tổ chức một lực lượng bảo vệ an ninh mạng riêng để bảo vệ hệ thống thông tin của mình không? Nếu được, lực lượng này có cần đăng ký, thông báo với cơ quan chức năng nào (ví dụ: Bộ Công an, Bộ Quốc phòng) hay không? Và liệu họ có thể phối hợp, cung cấp hỗ trợ kỹ thuật cho lực lượng chuyên trách của Bộ Công an trong các vấn đề an ninh mạng theo quy định tại khoản 2c Điều 17 hay không? Xin cảm ơn.",
|
| 912 |
+
"entities": [
|
| 913 |
+
[
|
| 914 |
+
"Bộ Công an, Bộ Quốc phòng",
|
| 915 |
+
"CO_QUAN_THAM_QUYEN"
|
| 916 |
+
],
|
| 917 |
+
[
|
| 918 |
+
"Tôi",
|
| 919 |
+
"NGUOI"
|
| 920 |
+
],
|
| 921 |
+
[
|
| 922 |
+
"chủ một doanh nghiệp tư nhân lớn chuyên về công nghệ thông tin",
|
| 923 |
+
"CHUC_DANH"
|
| 924 |
+
],
|
| 925 |
+
[
|
| 926 |
+
"doanh nghiệp tôi",
|
| 927 |
+
"TO_CHUC"
|
| 928 |
+
],
|
| 929 |
+
[
|
| 930 |
+
"một đội ngũ chuyên môn, bài bản",
|
| 931 |
+
"NHOM_NGUOI"
|
| 932 |
+
],
|
| 933 |
+
[
|
| 934 |
+
"công dân có đủ tiêu chuẩn",
|
| 935 |
+
"NHOM_NGUOI"
|
| 936 |
+
],
|
| 937 |
+
[
|
| 938 |
+
"lực lượng bảo vệ an ninh mạng",
|
| 939 |
+
"CHUC_DANH"
|
| 940 |
+
],
|
| 941 |
+
[
|
| 942 |
+
"các tổ chức, doanh nghiệp thuộc khu vực tư nhân",
|
| 943 |
+
"TO_CHUC"
|
| 944 |
+
],
|
| 945 |
+
[
|
| 946 |
+
"Bộ Công an",
|
| 947 |
+
"CO_QUAN_THAM_QUYEN"
|
| 948 |
+
],
|
| 949 |
+
[
|
| 950 |
+
"Bộ Quốc phòng",
|
| 951 |
+
"CO_QUAN_THAM_QUYEN"
|
| 952 |
+
],
|
| 953 |
+
[
|
| 954 |
+
"lực lượng chuyên trách của Bộ Công an",
|
| 955 |
+
"BEN_THU_BA"
|
| 956 |
+
]
|
| 957 |
+
]
|
| 958 |
+
},
|
| 959 |
+
{
|
| 960 |
+
"text": "Kính gửi Tòa án nhân dân tối cao! Trường THPT A có một học sinh 16 tuổi (Nguyễn Văn B) thường xuyên vi phạm nội quy, có hành vi bạo lực học đường và có dấu hiệu liên quan đến tệ nạn xã hội bên ngoài nhà trường. Nhà trường đã nhiều lần nhắc nhở, kỷ luật nhưng học sinh này vẫn tái phạm. Căn cứ vào Luật Tư pháp người chưa thành niên, nhà trường đề nghị cơ quan có thẩm quyền xem xét áp dụng biện pháp \"hạn chế khung giờ đi lại\" (theo Điều 45) đối với học sinh này để hạn chế em ra ngoài vào ban đêm, từ đó giúp quản lý và giáo dục hiệu quả hơn. Xin hỏi: Trong trường hợp này, với tư cách là tổ chức nơi người chưa thành niên học tập, nhà trường có quyền đề nghị áp dụng biện pháp \"hạn chế khung giờ đi lại\" không? Nếu có, thủ tục đề nghị như thế nào? Trân trọng cảm ơn!",
|
| 961 |
+
"entities": [
|
| 962 |
+
[
|
| 963 |
+
"Tòa án nhân dân tối cao",
|
| 964 |
+
"CO_QUAN_THAM_QUYEN"
|
| 965 |
+
],
|
| 966 |
+
[
|
| 967 |
+
"Trường THPT A",
|
| 968 |
+
"TO_CHUC"
|
| 969 |
+
],
|
| 970 |
+
[
|
| 971 |
+
"Nguyễn Văn B",
|
| 972 |
+
"NGUOI"
|
| 973 |
+
],
|
| 974 |
+
[
|
| 975 |
+
"Nhà trường",
|
| 976 |
+
"TO_CHUC"
|
| 977 |
+
],
|
| 978 |
+
[
|
| 979 |
+
"nhà trường",
|
| 980 |
+
"TO_CHUC"
|
| 981 |
+
],
|
| 982 |
+
[
|
| 983 |
+
"cơ quan có thẩm quyền",
|
| 984 |
+
"CO_QUAN_THAM_QUYEN"
|
| 985 |
+
],
|
| 986 |
+
[
|
| 987 |
+
"tổ chức nơi ng��ời chưa thành niên học tập",
|
| 988 |
+
"TO_CHUC"
|
| 989 |
+
],
|
| 990 |
+
[
|
| 991 |
+
"nhà trường",
|
| 992 |
+
"TO_CHUC"
|
| 993 |
+
]
|
| 994 |
+
]
|
| 995 |
+
},
|
| 996 |
+
{
|
| 997 |
+
"text": "Kính gửi Bộ Công Thương và Bộ Xây dựng! Công ty chúng tôi là doanh nghiệp sản xuất hóa chất đã được cấp Giấy phép sản xuất, kinh doanh hóa chất thuộc danh mục hạn chế. Do mở rộng sản xuất, Công ty nhận góp vốn từ một cá nhân bằng một ngôi nhà ở riêng lẻ (biệt thự) nằm trong khu dân cư. Ngôi nhà này chúng tôi dự định sử dụng làm kho chứa nguyên liệu hóa chất nguy hiểm (có trong danh mục hạn chế) phục vụ sản xuất. Chúng tôi xin hỏi: Với tư cách là đơn vị đã có giấy phép sản xuất, kinh doanh hóa chất hạn chế, việc chúng tôi sử dụng nhà ở đã được góp vốn hợp pháp (theo Luật Nhà ở) để làm kho cất giữ hóa chất nguy hiểm có được phép không? Nếu được, chúng tôi có phải đáp ứng các điều kiện về khoảng cách an toàn, cảnh báo và trang thiết bị ứng cứu theo Luật Hóa chất ngay tại địa điểm là nhà ở đó không, hay chỉ cần đáp ứng tại cơ sở sản xuất chính? Xin cảm ơn!",
|
| 998 |
+
"entities": [
|
| 999 |
+
[
|
| 1000 |
+
"Bộ Công Thương",
|
| 1001 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1002 |
+
],
|
| 1003 |
+
[
|
| 1004 |
+
"Bộ Công Thương và Bộ Xây dựng",
|
| 1005 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1006 |
+
],
|
| 1007 |
+
[
|
| 1008 |
+
"Bộ Xây dựng",
|
| 1009 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1010 |
+
],
|
| 1011 |
+
[
|
| 1012 |
+
"Công ty chúng tôi",
|
| 1013 |
+
"TO_CHUC"
|
| 1014 |
+
],
|
| 1015 |
+
[
|
| 1016 |
+
"doanh nghiệp sản xuất hóa chất",
|
| 1017 |
+
"CHUC_DANH"
|
| 1018 |
+
],
|
| 1019 |
+
[
|
| 1020 |
+
"một cá nhân",
|
| 1021 |
+
"NGUOI"
|
| 1022 |
+
]
|
| 1023 |
+
]
|
| 1024 |
+
},
|
| 1025 |
+
{
|
| 1026 |
+
"text": "Kính gửi Hội Bảo vệ quyền lợi người tiêu dùng tỉnh! Tôi là một người tiêu dùng. Gần đây, tôi đã mua một chiếc điện thoại di động thông qua trang web thương mại điện tử (giao dịch từ xa). Sau khi nhận hàng, tôi phát hiện ra rằng thông số kỹ thuật về dung lượng pin trên website bán hàng khác so với thực tế sản phẩm (thông tin không chính xác). Tôi đã sử dụng quyền của mình theo khoản 3 Điều 38 Luật Bảo vệ quyền lợi người tiêu dùng để đơn phương chấm dứt hợp đồng và yêu cầu hoàn tiền. Tuy nhiên, trong quá trình sử dụng ngắn trước khi trả hàng, tôi phát hiện thêm một lỗi phần cứng (khuyết tật) không liên quan đến thông tin sai về pin. Xin hỏi Hội: 1. Trong trường hợp này, ngoài việc được hoàn tiền theo quy định về giao dịch từ xa, tôi có quyền yêu cầu doanh nghiệp bán hàng bồi thường thiệt hại do hàng hóa có khuyết tật gây ra hay không? 2. Nếu có, tôi cần thực hiện thủ tục khiếu nại, yêu cầu bồi thường như thế nào, có cần phải thông qua Hội Bảo vệ quyền lợi người tiêu dùng hay không? Tôi xin chân thành cảm ơn.",
|
| 1027 |
+
"entities": [
|
| 1028 |
+
[
|
| 1029 |
+
"Hội Bảo vệ quyền lợi người tiêu dùng tỉnh",
|
| 1030 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1031 |
+
],
|
| 1032 |
+
[
|
| 1033 |
+
"Tôi",
|
| 1034 |
+
"NGUOI"
|
| 1035 |
+
],
|
| 1036 |
+
[
|
| 1037 |
+
"một người tiêu dùng",
|
| 1038 |
+
"CHUC_DANH"
|
| 1039 |
+
],
|
| 1040 |
+
[
|
| 1041 |
+
"website bán hàng",
|
| 1042 |
+
"BEN_THU_BA"
|
| 1043 |
+
],
|
| 1044 |
+
[
|
| 1045 |
+
"doanh nghiệp bán hàng",
|
| 1046 |
+
"TO_CHUC"
|
| 1047 |
+
],
|
| 1048 |
+
[
|
| 1049 |
+
"Hội Bảo vệ quyền lợi người tiêu dùng",
|
| 1050 |
+
"TO_CHUC"
|
| 1051 |
+
]
|
| 1052 |
+
]
|
| 1053 |
+
},
|
| 1054 |
+
{
|
| 1055 |
+
"text": "Kính gửi Tòa án nhân dân tối cao! Tôi có tình huống sau cần được giải đáp: - Ông A tặng cho ông B một chiếc máy cày đã qua sử dụng. Khi tặng, ông A biết máy có khuyết tật (hỏng hệ thống phanh) nhưng không thông báo cho ông B. - Sau khi nhận máy, ông B thuê anh C (thợ sửa máy nông nghiệp) đến sửa chữa. Trong quá trình sửa chữa, do sơ suất, anh C làm hỏng thêm động cơ máy, gây thiệt hại 50 triệu đồng. Xin hỏi: Trong trường hợp này, ông A (người tặng cho), ông B (chủ sở hữu máy) hay anh C (người làm công) có nghĩa vụ bồi thường thiệt hại 50 triệu đồng? Nếu nhiều người cùng phải bồi thường, trách nhiệm được phân chia thế nào?",
|
| 1056 |
+
"entities": [
|
| 1057 |
+
[
|
| 1058 |
+
"Tòa án nhân dân tối cao",
|
| 1059 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1060 |
+
],
|
| 1061 |
+
[
|
| 1062 |
+
"Tôi",
|
| 1063 |
+
"NGUOI"
|
| 1064 |
+
],
|
| 1065 |
+
[
|
| 1066 |
+
"Ông A tặng",
|
| 1067 |
+
"NGUOI"
|
| 1068 |
+
],
|
| 1069 |
+
[
|
| 1070 |
+
"ông B",
|
| 1071 |
+
"NGUOI"
|
| 1072 |
+
],
|
| 1073 |
+
[
|
| 1074 |
+
"anh C",
|
| 1075 |
+
"NGUOI"
|
| 1076 |
+
],
|
| 1077 |
+
[
|
| 1078 |
+
"anh C ( thợ sửa máy nông nghiệp )",
|
| 1079 |
+
"NGUOI"
|
| 1080 |
+
],
|
| 1081 |
+
[
|
| 1082 |
+
"thợ sửa máy nông nghiệp",
|
| 1083 |
+
"CHUC_DANH"
|
| 1084 |
+
],
|
| 1085 |
+
[
|
| 1086 |
+
"anh C",
|
| 1087 |
+
"NGUOI"
|
| 1088 |
+
],
|
| 1089 |
+
[
|
| 1090 |
+
"ông A",
|
| 1091 |
+
"NGUOI"
|
| 1092 |
+
],
|
| 1093 |
+
[
|
| 1094 |
+
"ông B",
|
| 1095 |
+
"NGUOI"
|
| 1096 |
+
],
|
| 1097 |
+
[
|
| 1098 |
+
"chủ sở hữu máy",
|
| 1099 |
+
"CHUC_DANH"
|
| 1100 |
+
],
|
| 1101 |
+
[
|
| 1102 |
+
"anh C",
|
| 1103 |
+
"NGUOI"
|
| 1104 |
+
],
|
| 1105 |
+
[
|
| 1106 |
+
"anh C ( người làm công )",
|
| 1107 |
+
"NGUOI"
|
| 1108 |
+
],
|
| 1109 |
+
[
|
| 1110 |
+
"người làm công",
|
| 1111 |
+
"CHUC_DANH"
|
| 1112 |
+
]
|
| 1113 |
+
]
|
| 1114 |
+
},
|
| 1115 |
+
{
|
| 1116 |
+
"text": "Kính gửi Tòa án nhân dân tối cao! Công ty chúng tôi là một doanh nghiệp có vốn đầu tư nước ngoài tại Việt Nam, có tranh chấp hợp đồng với một đối tác nước ngoài. Các bên đã thỏa thuận giải quyết tranh chấp bằng Trọng tài vụ việc tại Việt Nam và chọn tiếng Anh làm ngôn ngữ tố tụng theo quy định tại Điều 10 Luật Trọng tài thương mại. Hội đồng trọng tài đã ra phán quyết hoàn toàn bằng tiếng Anh. Xin hỏi: Khi chúng tôi nộp đơn yêu cầu đăng ký phán quyết này tại Tòa án theo Điều 62 Luật Trọng tài thương mại, Tòa án có chấp nhận hồ sơ chỉ bao gồm bản phán quyết bằng tiếng Anh (không kèm bản dịch tiếng Việt công chứng) hay không? Nếu cần bản dịch, văn bản pháp luật nào quy định cụ thể về yêu cầu này? Chúng tôi xin chân thành cảm ơn!",
|
| 1117 |
+
"entities": [
|
| 1118 |
+
[
|
| 1119 |
+
"Tòa án nhân dân tối cao",
|
| 1120 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1121 |
+
],
|
| 1122 |
+
[
|
| 1123 |
+
"Công ty chúng tôi",
|
| 1124 |
+
"TO_CHUC"
|
| 1125 |
+
],
|
| 1126 |
+
[
|
| 1127 |
+
"một đối tác nước ngoài",
|
| 1128 |
+
"BEN_THU_BA"
|
| 1129 |
+
],
|
| 1130 |
+
[
|
| 1131 |
+
"Hội đồng trọng tài",
|
| 1132 |
+
"BEN_THU_BA"
|
| 1133 |
+
],
|
| 1134 |
+
[
|
| 1135 |
+
"Tòa án",
|
| 1136 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1137 |
+
]
|
| 1138 |
+
]
|
| 1139 |
+
},
|
| 1140 |
+
{
|
| 1141 |
+
"text": "Kính gửi Bộ Công an! Tôi đang tư vấn cho một trường hợp: Ông A (70 tuổi, có nơi thường trú tại tỉnh Hải Dương) là người giám hộ cho cháu B (15 tuổi, bố mẹ đã mất). Hai người đang sống cùng nhau tại Hà Nội. Nay ông A qua đời. Cháu B muốn tiếp tục sinh sống, học tập tại Hà Nội và cần đăng ký tạm trú, thường trú tại đây. Theo quy định tại Điều 13 Luật Cư trú, nơi cư trú của người được giám hộ là nơi cư trú của người giám hộ hoặc có thể khác nếu được người giám hộ đồng ý. Tuy nhiên, trong trường hợp người giám hộ (ông A) đã chết, cháu B chưa có người giám hộ mới. Vậy: 1. Hiện nay, nơi cư trú của cháu B được xác định như thế nào? 2. Trên cơ sở đó, cháu B có thể làm thủ tục đăng ký tạm trú, thường trú tại Hà Nội không, hay phải trở về nơi thường trú trước đây của ông A (tỉnh Hải Dương)? Rất mong nhận được hướng dẫn cụ thể của Bộ.",
|
| 1142 |
+
"entities": [
|
| 1143 |
+
[
|
| 1144 |
+
"Bộ Công an",
|
| 1145 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1146 |
+
],
|
| 1147 |
+
[
|
| 1148 |
+
"Tôi",
|
| 1149 |
+
"NGUOI"
|
| 1150 |
+
],
|
| 1151 |
+
[
|
| 1152 |
+
"Ông A",
|
| 1153 |
+
"NGUOI"
|
| 1154 |
+
],
|
| 1155 |
+
[
|
| 1156 |
+
"người giám hộ",
|
| 1157 |
+
"CHUC_DANH"
|
| 1158 |
+
],
|
| 1159 |
+
[
|
| 1160 |
+
"cháu B",
|
| 1161 |
+
"NGUOI"
|
| 1162 |
+
],
|
| 1163 |
+
[
|
| 1164 |
+
"cháu B ( 15 tuổi, bố mẹ đã mất )",
|
| 1165 |
+
"NGUOI"
|
| 1166 |
+
],
|
| 1167 |
+
[
|
| 1168 |
+
"người được giám hộ",
|
| 1169 |
+
"NGUOI"
|
| 1170 |
+
],
|
| 1171 |
+
[
|
| 1172 |
+
"người giám hộ",
|
| 1173 |
+
"NGUOI"
|
| 1174 |
+
],
|
| 1175 |
+
[
|
| 1176 |
+
"ông A",
|
| 1177 |
+
"NGUOI"
|
| 1178 |
+
]
|
| 1179 |
+
]
|
| 1180 |
+
},
|
| 1181 |
+
{
|
| 1182 |
+
"text": "Kính gửi Ban Cơ yếu Chính phủ, tôi là nhân viên làm công tác cơ yếu (không thuộc lực lượng quân đội, công an) đã đóng bảo hiểm xã hủ bắt buộc liên tục. Trong quá trình công tác, do sức khỏe giảm sút, tôi không còn đáp ứng đủ tiêu chuẩn về sức khỏe như quy định tại điểm c khoản 1 Điều 26 Luật Cơ yếu. Tôi đã công tác trong tổ chức cơ yếu được 22 năm (đủ 20 năm theo quy định cho nữ), trong đó có 10 năm trực tiếp làm công tác cơ yếu. Cơ quan hiện không còn nhu cầu bố trí công việc phù hợp cho tôi trong tổ chức cơ yếu. Xin hỏi: Trường hợp của tôi (không đáp ứng tiêu chuẩn do sức khỏe) có được xem xét cho nghỉ hưu trước tuổi theo quy định tại khoản 2 Điều 27 Luật Cơ yếu hay không? Nếu được, thủ tục thực hiện như thế nào? Trân trọng cảm ơn!",
|
| 1183 |
+
"entities": [
|
| 1184 |
+
[
|
| 1185 |
+
"Ban Cơ yếu Chính phủ",
|
| 1186 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1187 |
+
],
|
| 1188 |
+
[
|
| 1189 |
+
"tôi",
|
| 1190 |
+
"NGUOI"
|
| 1191 |
+
],
|
| 1192 |
+
[
|
| 1193 |
+
"nhân viên làm công tác cơ yếu",
|
| 1194 |
+
"CHUC_DANH"
|
| 1195 |
+
],
|
| 1196 |
+
[
|
| 1197 |
+
"tổ chức cơ yếu",
|
| 1198 |
+
"TO_CHUC"
|
| 1199 |
+
],
|
| 1200 |
+
[
|
| 1201 |
+
"tổ chức cơ yếu",
|
| 1202 |
+
"TO_CHUC"
|
| 1203 |
+
]
|
| 1204 |
+
]
|
| 1205 |
+
},
|
| 1206 |
+
{
|
| 1207 |
+
"text": "Kính gửi Thường trực Hội đồng nhân dân tỉnh X, Đoàn giám sát chuyên đề của Hội đồng nhân dân tỉnh chúng tôi vừa tiến hành giám sát việc thực hiện một dự án đầu tư công trên địa bàn và đã có báo cáo kết quả giám sát gửi đến Thường trực Hội đồng nhân dân. Trong quá trình xem xét báo cáo tại phiên họp, Đoàn giám sát đã đưa ra một kết luận và kiến nghị nhất định. Tuy nhiên, khi Thường trực Hội đồng nhân dân thảo luận, có ý kiến khác với kết luận của Đoàn giám sát về cùng một vấn đề. Chúng tôi xin hỏi: 1. Trong tình huống này, trách nhiệm và thẩm quyền quyết định cuối cùng về nội dung kết luận, kiến nghị thuộc về Đoàn giám sát hay Thường trực Hội đồng nhân dân? 2. Trình tự, thủ tục để giải quyết sự khác biệt này được quy định cụ thể như thế nào để đảm bảo tính khách quan và hiệu lực của hoạt động giám sát? 3. Nếu Thường trực Hội đồng nhân dân có ý kiến khác, Đoàn giám sát có trách nhiệm phải điều chỉnh báo cáo của mình theo ý kiến đó hay không? Hay có cơ chế nào khác để trình bày và bảo vệ quan điểm của Đoàn giám sát? Kính mong Quý cơ quan giải đáp để công tác giám sát được thực hiện đúng quy định. Trân trọng cảm ơn!",
|
| 1208 |
+
"entities": [
|
| 1209 |
+
[
|
| 1210 |
+
"Thường trực Hội đồng nhân dân tỉnh X",
|
| 1211 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1212 |
+
],
|
| 1213 |
+
[
|
| 1214 |
+
"Đoàn giám sát chuyên đề của Hội đồng nhân dân tỉnh chúng tôi",
|
| 1215 |
+
"NHOM_NGUOI"
|
| 1216 |
+
],
|
| 1217 |
+
[
|
| 1218 |
+
"Đoàn giám sát",
|
| 1219 |
+
"TO_CHUC"
|
| 1220 |
+
],
|
| 1221 |
+
[
|
| 1222 |
+
"Đoàn giám sát",
|
| 1223 |
+
"TO_CHUC"
|
| 1224 |
+
],
|
| 1225 |
+
[
|
| 1226 |
+
"Thường trực Hội đồng nhân dân",
|
| 1227 |
+
"TO_CHUC"
|
| 1228 |
+
],
|
| 1229 |
+
[
|
| 1230 |
+
"Đoàn giám sát",
|
| 1231 |
+
"TO_CHUC"
|
| 1232 |
+
]
|
| 1233 |
+
]
|
| 1234 |
+
},
|
| 1235 |
+
{
|
| 1236 |
+
"text": "Kính gửi Bộ Xây dựng, Công ty chúng tôi đang chuẩn bị đầu tư Dự án khu đô thị mới tại tỉnh Đồng Nai. Dự án có quy mô khoảng 20 ha, bao gồm các hạng mục: khu nhà ở liền kề, chung cư cao tầng, trung tâm thương mại, trường học, công viên và bệnh viện. Trong quá trình lập và trình duyệt hồ sơ, chúng tôi có vướng mắc về cơ sở pháp lý như sau: Theo quy định tại Điều 17 Luật Nhà ở (đã được sửa đổi bởi Luật Xây dựng số 62/2020/QH14), dự án đầu tư xây dựng khu đô thị (điểm b khoản 1) và dự án sử dụng đất hỗn hợp, công trình sử dụng hỗn hợp (điểm c, d khoản 2) đều được xác định là dự án đầu tư xây dựng nhà ở. Xin hỏi: Đối với dự án hỗn hợp (có cả nhà ở và các công trình phi nhà ở như bệnh viện, trường học, thương mại) như của chúng tôi, việc đầu tư xây dựng có nhất thiết chỉ phải tuân thủ các quy định của Luật Nhà ở và pháp luật có liên quan (theo khoản 3) hay không? Hay chúng tôi còn phải đáp ứng đầy đủ các quy định về đầu tư xây dựng công trình theo Luật Xây dựng và các quy chuẩn, tiêu chuẩn kỹ thuật chuyên ngành đối với từng loại công trình cụ thể (ví dụ: quy chuẩn về bệnh viện, trường học)? Trân trọng cảm ơn!",
|
| 1237 |
+
"entities": [
|
| 1238 |
+
[
|
| 1239 |
+
"Bộ Xây dựng",
|
| 1240 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1241 |
+
],
|
| 1242 |
+
[
|
| 1243 |
+
"Công ty chúng tôi",
|
| 1244 |
+
"TO_CHUC"
|
| 1245 |
+
],
|
| 1246 |
+
[
|
| 1247 |
+
"chúng tôi",
|
| 1248 |
+
"TO_CHUC"
|
| 1249 |
+
],
|
| 1250 |
+
[
|
| 1251 |
+
"chúng tôi",
|
| 1252 |
+
"TO_CHUC"
|
| 1253 |
+
]
|
| 1254 |
+
]
|
| 1255 |
+
},
|
| 1256 |
+
{
|
| 1257 |
+
"text": "Kính gửi Bộ Tài nguyên và Môi trường! Tôi là đại diện của cộng đồng dân cư sinh sống gần một nhà máy sản xuất giấy mới được xây dựng. Chúng tôi rất lo ngại về các tác động môi trường tiềm ẩn từ hoạt động của nhà máy. Để giám sát và có ý kiến, chúng tôi có quyền được biết thông tin về môi trường theo Luật Bảo vệ môi trường. Vậy, xin hỏi: 1. Khi chúng tôi yêu cầu chủ dự án nhà máy cung cấp thông tin về bảo vệ môi trường, những loại thông tin cụ thể nào chúng tôi có quyền được tiếp cận? 2. Một phần nội dung trong Báo cáo đánh giá tác động môi trường (ĐTM) của dự án đề cập đến công nghệ xử lý nước thải được mô tả là \"công nghệ độc quyền\". Chủ dự án có thể từ chối công bố phần nội dung này với lý do \"bí mật kinh doanh\" theo quy định tại điểm c khoản 1 Điều 114 Luật Bảo vệ môi trường được không? Việc từ chối này có làm mất đi quyền được biết về hiệu quả xử lý môi trường của chúng tôi không? Kính mong Bộ sớm có văn b��n hướng dẫn hoặc giải đáp cụ thể để người dân chúng tôi có thể thực hiện đúng quyền và nghĩa vụ của mình trong việc tham gia bảo vệ môi trường.",
|
| 1258 |
+
"entities": [
|
| 1259 |
+
[
|
| 1260 |
+
"Bộ Tài nguyên và Môi trường",
|
| 1261 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1262 |
+
],
|
| 1263 |
+
[
|
| 1264 |
+
"Tôi",
|
| 1265 |
+
"NGUOI"
|
| 1266 |
+
],
|
| 1267 |
+
[
|
| 1268 |
+
"đại diện của cộng đồng dân cư",
|
| 1269 |
+
"CHUC_DANH"
|
| 1270 |
+
],
|
| 1271 |
+
[
|
| 1272 |
+
"cộng đồng dân cư",
|
| 1273 |
+
"NHOM_NGUOI"
|
| 1274 |
+
],
|
| 1275 |
+
[
|
| 1276 |
+
"một nhà máy sản xuất giấy",
|
| 1277 |
+
"TO_CHUC"
|
| 1278 |
+
],
|
| 1279 |
+
[
|
| 1280 |
+
"chủ dự án nhà máy",
|
| 1281 |
+
"TO_CHUC"
|
| 1282 |
+
],
|
| 1283 |
+
[
|
| 1284 |
+
"Chủ dự án",
|
| 1285 |
+
"BEN_THU_BA"
|
| 1286 |
+
],
|
| 1287 |
+
[
|
| 1288 |
+
"chúng tôi",
|
| 1289 |
+
"NHOM_NGUOI"
|
| 1290 |
+
],
|
| 1291 |
+
[
|
| 1292 |
+
"người dân chúng tôi",
|
| 1293 |
+
"NHOM_NGUOI"
|
| 1294 |
+
]
|
| 1295 |
+
]
|
| 1296 |
+
},
|
| 1297 |
+
{
|
| 1298 |
+
"text": "Kính gửi Bộ Tài chính! Tôi đã hoàn thành chương trình đào tạo và được cấp Thẻ thẩm định viên về giá vào tháng 6/2025. Hiện tôi đang làm việc chính thức tại một doanh nghiệp thẩm định giá kể từ sau khi nhận thẻ. Theo tôi tìm hiểu tại Điều 45 Luật Giá, điều kiện đăng ký hành nghề thẩm định giá yêu cầu tổng thời gian thực tế làm việc tại doanh nghiệp thẩm định giá phải từ đủ 36 tháng. Đến thời điểm hiện tại (tháng 11/2025), tôi mới tích lũy được khoảng 5 tháng làm việc tại đây. Vậy xin hỏi Bộ Tài chính: Với trường hợp của tôi, đã có thẻ nhưng chưa đủ thời gian làm việc thực tế theo quy định, tôi có thể tiến hành đăng ký hành nghề thẩm định giá được không? Hay tôi bắt buộc phải chờ đủ 36 tháng thực tế làm việc mới được đăng ký? Rất mong nhận được hướng dẫn của Bộ Tài chính. Xin trân trọng cảm ơn!",
|
| 1299 |
+
"entities": [
|
| 1300 |
+
[
|
| 1301 |
+
"Bộ Tài chính",
|
| 1302 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1303 |
+
],
|
| 1304 |
+
[
|
| 1305 |
+
"một doanh nghiệp thẩm định giá",
|
| 1306 |
+
"TO_CHUC"
|
| 1307 |
+
],
|
| 1308 |
+
[
|
| 1309 |
+
"doanh nghiệp thẩm định giá",
|
| 1310 |
+
"TO_CHUC"
|
| 1311 |
+
]
|
| 1312 |
+
]
|
| 1313 |
+
},
|
| 1314 |
+
{
|
| 1315 |
+
"text": "Kính gửi Công an thành phố Hà Nội. Tôi tham gia giao thông bằng xe máy trong nội thành. Hôm qua, khi đang di chuyển trên đường, tôi nhận cuộc gọi điện thoại di động khẩn cấp từ gia đình, nên đã tấp vào lề đường để nghe điện thoại (không dùng ô, không buông tay lái khi đang chạy). Ngay lúc đó, một cảnh sát giao thông yêu cầu tôi dừng xe để kiểm tra giấy tờ, mặc dù không có biển báo dừng xe hoặc tín hiệu tuần tra đặc biệt. Xin hỏi: 1. Cảnh sát giao thông có được quyền dừng xe máy để kiểm tra giấy tờ tùy ý mà không có biển báo hoặc tín hiệu cụ thể, chỉ dựa trên nhiệm vụ tuần tra theo Luật Giao thông đường bộ không? 2. Trong trường hợp tôi dừng xe để nghe điện thoại khẩn cấp (đã tấp vào lề đường an toàn, tắt máy, và không sử dụng điện thoại khi đang điều khiển xe), tôi có bị xử phạt vì hành vi này theo quy định tại điểm d khoản 3 Điều 28 Luật Giao thông đường bộ không? Tôi xin chân thành cảm ơn.",
|
| 1316 |
+
"entities": [
|
| 1317 |
+
[
|
| 1318 |
+
"Công an thành phố Hà Nội",
|
| 1319 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1320 |
+
],
|
| 1321 |
+
[
|
| 1322 |
+
"Tôi",
|
| 1323 |
+
"NGUOI"
|
| 1324 |
+
],
|
| 1325 |
+
[
|
| 1326 |
+
"gia đình",
|
| 1327 |
+
"BEN_THU_BA"
|
| 1328 |
+
],
|
| 1329 |
+
[
|
| 1330 |
+
"một cảnh sát giao thông",
|
| 1331 |
+
"BEN_THU_BA"
|
| 1332 |
+
],
|
| 1333 |
+
[
|
| 1334 |
+
"Cảnh sát giao thông",
|
| 1335 |
+
"NHOM_NGUOI"
|
| 1336 |
+
]
|
| 1337 |
+
]
|
| 1338 |
+
},
|
| 1339 |
+
{
|
| 1340 |
+
"text": "Kính gửi Bộ Thông tin và Truyền thông! Công ty chúng tôi là doanh nghiệp cung cấp dịch vụ viễn thông. Chúng tôi đang muốn triển khai hình thức giao kết hợp đồng cung cấp và sử dụng mã số (ví dụ: số điện thoại cố định, đầu số 1800, 1900) với khách hàng doanh nghiệp thông qua phương thức điện tử, sử dụng chữ ký số. Chúng tôi có căn cứ vào quy định tại Điều 9 Luật Giao dịch điện tử về giá trị pháp lý của thông điệp dữ liệu. Tuy nhiên, việc phân bổ, cấp mã số viễn thông được quản lý chặt chẽ theo quy định của Luật Viễn thông. Xin hỏi: Trong trường hợp này, hợp đồng dịch vụ giữa công ty chúng tôi và khách hàng về việc cung cấp, sử dụng mã số viễn thông được ký kết bằng hình thức điện tử (thông điệp dữ liệu có chữ ký số) có được coi là hợp lệ, đáp ứng yêu cầu về hình thức văn bản theo quy định của pháp luật về viễn thông hay không?",
|
| 1341 |
+
"entities": [
|
| 1342 |
+
[
|
| 1343 |
+
"Bộ Thông tin và Truyền thông",
|
| 1344 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1345 |
+
],
|
| 1346 |
+
[
|
| 1347 |
+
"Công ty chúng tôi",
|
| 1348 |
+
"TO_CHUC"
|
| 1349 |
+
],
|
| 1350 |
+
[
|
| 1351 |
+
"doanh nghiệp cung cấp dịch vụ viễn thông",
|
| 1352 |
+
"CHUC_DANH"
|
| 1353 |
+
],
|
| 1354 |
+
[
|
| 1355 |
+
"Chúng tôi",
|
| 1356 |
+
"TO_CHUC"
|
| 1357 |
+
],
|
| 1358 |
+
[
|
| 1359 |
+
"khách hàng doanh nghiệp",
|
| 1360 |
+
"BEN_THU_BA"
|
| 1361 |
+
],
|
| 1362 |
+
[
|
| 1363 |
+
"công ty chúng tôi",
|
| 1364 |
+
"TO_CHUC"
|
| 1365 |
+
],
|
| 1366 |
+
[
|
| 1367 |
+
"khách hàng",
|
| 1368 |
+
"BEN_THU_BA"
|
| 1369 |
+
]
|
| 1370 |
+
]
|
| 1371 |
+
},
|
| 1372 |
+
{
|
| 1373 |
+
"text": "Kính gửi Bộ Nội vụ và Bộ Tư pháp! Tôi là một công dân. Trong quá trình nghiên cứu, tôi phát hiện một cơ quan nhà nước địa phương có dấu hiệu vi phạm pháp luật về lưu trữ: không thực hiện việc bảo quản, phân loại theo quy định, dẫn đến một số tài liệu lưu trữ của Phông lưu trữ Nhà nước (thuộc diện phải được bảo vệ theo Luật Lưu trữ 2024) bị hư hỏng, thất lạc. Tôi đã gửi thông tin này cho một cơ quan báo chí. Cơ quan báo chí tiếp nhận thông tin tố cáo của tôi và đồng ý chuyển tố cáo đến cơ quan có thẩm quyền để giải quyết. Căn cứ vào Điều 6, Điều 9, Điều 10 Luật Lưu trữ 2024, tài liệu này thuộc Phông lưu trữ Nhà nước, và Bộ Nội vụ là cơ quan quản lý nhà nước về lưu trữ. Tuy nhiên, theo Điều 14 và Điều 26 Luật Tố cáo 2018, việc giải quyết tố cáo hành vi vi phạm pháp luật trong việc thực hiện nhiệm vụ, công vụ lại thuộc thẩm quyền của người đứng đầu cơ quan quản lý trực tiếp người bị tố cáo, hoặc cơ quan thanh tra, kiểm tra theo ngành dọc. Vụ việc này xảy ra tại một cơ quan nhà nước ở địa phương. Xin được hỏi: Trong trường hợp này, cơ quan báo chí nên chuyển tố cáo của tôi đến đâu là đúng thẩm quyền và trình tự theo quy định của pháp luật? Cụ thể là chuyển đến: 1. Bộ Nội vụ (vì là cơ quan quản lý nhà nước về lưu trữ theo Luật Lưu trữ)? 2. Chánh án Tòa án nhân dân hoặc Viện trưởng Viện kiểm sát nhân dân cấp có thẩm quyền (nếu liên quan đến công chức Tòa án, Kiểm sát theo Điều 14 Luật Tố cáo)? 3. Người đứng đầu cơ quan nhà nước nơi phát sinh hành vi vi phạm, hoặc cơ quan thanh tra cấp trên trực tiếp của cơ quan đó? 4. Thanh tra Bộ Nội vụ hoặc Thanh tra Chính phủ? Tôi rất mong nhận được hướng dẫn cụ thể để cơ quan báo chí có căn cứ thực hiện việc chuyển tố cáo đúng quy định, bảo đảm vụ việc được giải quyết kịp thời và hiệu quả. Trân trọng cảm ơn!",
|
| 1374 |
+
"entities": [
|
| 1375 |
+
[
|
| 1376 |
+
"Bộ Nội vụ và Bộ Tư pháp",
|
| 1377 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1378 |
+
],
|
| 1379 |
+
[
|
| 1380 |
+
"Tôi",
|
| 1381 |
+
"NGUOI"
|
| 1382 |
+
],
|
| 1383 |
+
[
|
| 1384 |
+
"công dân",
|
| 1385 |
+
"CHUC_DANH"
|
| 1386 |
+
],
|
| 1387 |
+
[
|
| 1388 |
+
"một cơ quan nhà nước địa phương",
|
| 1389 |
+
"TO_CHUC"
|
| 1390 |
+
],
|
| 1391 |
+
[
|
| 1392 |
+
"Phông lưu trữ Nhà nước",
|
| 1393 |
+
"TO_CHUC"
|
| 1394 |
+
],
|
| 1395 |
+
[
|
| 1396 |
+
"một cơ quan báo chí",
|
| 1397 |
+
"BEN_THU_BA"
|
| 1398 |
+
],
|
| 1399 |
+
[
|
| 1400 |
+
"Phông lưu trữ Nhà nước",
|
| 1401 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1402 |
+
],
|
| 1403 |
+
[
|
| 1404 |
+
"Bộ Nội vụ",
|
| 1405 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1406 |
+
],
|
| 1407 |
+
[
|
| 1408 |
+
"người đứng đầu cơ quan quản lý trực tiếp người bị tố cáo",
|
| 1409 |
+
"BEN_THU_BA"
|
| 1410 |
+
],
|
| 1411 |
+
[
|
| 1412 |
+
"cơ quan thanh tra, kiểm tra theo ngành dọc",
|
| 1413 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1414 |
+
],
|
| 1415 |
+
[
|
| 1416 |
+
"một cơ quan nhà nước ở địa phương",
|
| 1417 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1418 |
+
],
|
| 1419 |
+
[
|
| 1420 |
+
"cơ quan báo chí",
|
| 1421 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1422 |
+
],
|
| 1423 |
+
[
|
| 1424 |
+
"Bộ Nội vụ",
|
| 1425 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1426 |
+
],
|
| 1427 |
+
[
|
| 1428 |
+
"Chánh án Tòa án nhân dân",
|
| 1429 |
+
"CHUC_DANH"
|
| 1430 |
+
],
|
| 1431 |
+
[
|
| 1432 |
+
"cơ quan thanh tra cấp trên trực tiếp của cơ quan đó",
|
| 1433 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1434 |
+
],
|
| 1435 |
+
[
|
| 1436 |
+
"Thanh tra Chính phủ",
|
| 1437 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1438 |
+
]
|
| 1439 |
+
]
|
| 1440 |
+
},
|
| 1441 |
+
{
|
| 1442 |
+
"text": "Kính gửi Cục Cảnh sát Giao thông, Tôi được giao phụ trách an ninh giao thông cho một sự kiện thể thao đường phố (cuộc đua xe đạp không chuyên nghiên cứu trường) sẽ diễn ra trên một đoạn đường liên xã được phép tạm thời đóng đường. Trong số các phương tiện tham gia cổ vũ và phục vụ sự kiện, có một số xe gắn máy do ban tổ chức mượn từ các cá nhân để chở dụng cụ, nhưng những xe này chưa rõ nguồn gốc xuất xứ (không có giấy tờ mua bán), chưa đăng ký và không có biển số. Việc sử dụng những phương tiện này chỉ diễn ra trong phạm vi khu vực đường tạm thời bị cấm các phương tiện khác và dưới sự giám sát của lực lượng chức năng. Xin hỏi: 1. Việc cho phép những phương tiện chưa đăng ký, không rõ nguồn gốc tham gia hoạt động phục vụ sự kiện trên đường bộ (dù đã được phân luồng, cấm đường) có vi phạm quy định tại Điều 54 Luật Giao thông đường bộ về điều kiện cấp đăng ký, biển số hay không? 2. Trong trường hợp được phép sử dụng, nếu xảy ra tai nạn giao thông liên quan đến những phương tiện này (ví dụ: va chạm với người tham gia cổ vũ hoặc hỏng hóc gây ùn tắc), trách nhiệm pháp lý sẽ thuộc về chủ sở hữu xe, người điều khiển hay ban tổ chức sự kiện đã cho phép và sử dụng xe? 3. Nếu vi phạm, cơ quan nào (Cảnh sát giao thông, chính quyền địa phương đã cấp phép sự kiện, hay cơ quan quản lý đường bộ) có thẩm quyền xử lý và hình thức xử lý có thể là gì? Rất mong nhận được hướng dẫn cụ thể để công tác tổ chức đảm bảo an toàn và tuân thủ pháp luật. Xin chân thành cảm ơn!",
|
| 1443 |
+
"entities": [
|
| 1444 |
+
[
|
| 1445 |
+
"Cục Cảnh sát Giao thông",
|
| 1446 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1447 |
+
],
|
| 1448 |
+
[
|
| 1449 |
+
"Tôi",
|
| 1450 |
+
"NGUOI"
|
| 1451 |
+
],
|
| 1452 |
+
[
|
| 1453 |
+
"phụ trách an ninh giao thông",
|
| 1454 |
+
"CHUC_DANH"
|
| 1455 |
+
],
|
| 1456 |
+
[
|
| 1457 |
+
"ban tổ chức",
|
| 1458 |
+
"TO_CHUC"
|
| 1459 |
+
],
|
| 1460 |
+
[
|
| 1461 |
+
"các cá nhân",
|
| 1462 |
+
"NHOM_NGUOI"
|
| 1463 |
+
],
|
| 1464 |
+
[
|
| 1465 |
+
"lực lượng chức năng",
|
| 1466 |
+
"BEN_THU_BA"
|
| 1467 |
+
],
|
| 1468 |
+
[
|
| 1469 |
+
"người tham gia cổ vũ",
|
| 1470 |
+
"NHOM_NGUOI"
|
| 1471 |
+
],
|
| 1472 |
+
[
|
| 1473 |
+
"chủ sở hữu xe",
|
| 1474 |
+
"BEN_THU_BA"
|
| 1475 |
+
],
|
| 1476 |
+
[
|
| 1477 |
+
"người điều khiển",
|
| 1478 |
+
"BEN_THU_BA"
|
| 1479 |
+
],
|
| 1480 |
+
[
|
| 1481 |
+
"Cảnh sát giao thông",
|
| 1482 |
+
"BEN_THU_BA"
|
| 1483 |
+
],
|
| 1484 |
+
[
|
| 1485 |
+
"chính quyền địa phương đã cấp phép sự kiện",
|
| 1486 |
+
"BEN_THU_BA"
|
| 1487 |
+
],
|
| 1488 |
+
[
|
| 1489 |
+
"cơ quan quản lý đường bộ",
|
| 1490 |
+
"BEN_THU_BA"
|
| 1491 |
+
]
|
| 1492 |
+
]
|
| 1493 |
+
},
|
| 1494 |
+
{
|
| 1495 |
+
"text": "Kính gửi Bộ Tư pháp! Luật Nhà ở số 27/2023/QH15 được Quốc hội thông qua ngày 27/11/2023, quy định tại Điều 197 về hiệu lực thi hành như sau: \"1. Luật này có hiệu lực thi hành từ ngày 01 tháng 01 năm 2025. 2. Chính phủ quy định chi tiết các điều, khoản được giao trong Luật.\". Tương tự, Luật Kinh doanh bất động sản số 29/2023/QH15 cũng được thông qua cùng thời điểm, quy định tại khoản 1 Điều 82: \"Luật này có hiệu lực thi hành từ ngày 01 tháng 01 năm 2025.\". Gần đây, Quốc hội ban hành Luật số 43/2024/QH15 sửa đổi, bổ sung một số điều của 4 Luật nói trên, trong đó tại Điều 2 và Điều 3 sửa đổi lần lượt khoản 1 Điều 197 Luật Nhà ở và khoản 1 Điều 82 Luật Kinh doanh bất động sản, thay thế ngày có hiệu lực từ 01/01/2025 thành 01/08/2024. Vậy xin hỏi: Việc điều chỉnh này có làm thay đổi thời điểm áp dụng các quy định chuyển tiếp cụ thể đã được quy định trong các Điều khoản chuyển tiếp của Luật Nhà ở 2023 (Ví dụ: Điều 194 về hiệu lực đối với hợp đồng, giao dịch đã ký kết trước ngày Luật có hiệu lực) và Luật Kinh doanh bất động sản 2023 hay không? Hay các quy định chuyển tiếp đó vẫn được áp dụng kể từ ngày 01/01/2025 như quy định ban đầu, chỉ có các quy định chung mới được áp dụng từ 01/08/2024?",
|
| 1496 |
+
"entities": [
|
| 1497 |
+
[
|
| 1498 |
+
"Bộ Tư pháp",
|
| 1499 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1500 |
+
],
|
| 1501 |
+
[
|
| 1502 |
+
"Quốc hội",
|
| 1503 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1504 |
+
],
|
| 1505 |
+
[
|
| 1506 |
+
"Quốc hội",
|
| 1507 |
+
"TO_CHUC"
|
| 1508 |
+
]
|
| 1509 |
+
]
|
| 1510 |
+
},
|
| 1511 |
+
{
|
| 1512 |
+
"text": "Kính gửi Sở Giao thông Vận tải tỉnh Tuyên Quang. Hộ gia đình tôi có một mảnh đất ở tại xã Hợp Thành, huyện Sơn Dương, tỉnh Tuyên Quang. Mảnh đất này có Giấy chứng nhận quyền sử dụng đất, quyền sở hữu nhà ở và tài sản khác gắn liền với đất do UBND huyện Sơn Dương cấp năm 2020. Đất ở hiện tại có hiện trạng là đất trống, chưa có nhà. Chủ trương của gia đình tôi là sẽ xây dựng một ngôi nhà ở trên mảnh đất này. Tuy nhiên, qua xác minh của địa phương, thì mảnh đất này có một phần diện tích nằm trong phạm vi hành lang an toàn đường bộ thuộc tuyến đường tỉnh lộ 226 (tính từ mép ngoài nền đường mở rộng ra mỗi bên theo quy định). Xin hỏi Sở Giao thông Vận tải tỉnh Tuyên Quang giúp tôi: Trong trường hợp này, gia đình tôi có được phép xây dựng nhà ở trên phần đất đã có sổ đỏ nhưng nằm trong hành lang an toàn đường bộ hay không? Nếu được phép thì cần làm những thủ tục gì và phải đáp ứng những điều kiện cụ thể nào?",
|
| 1513 |
+
"entities": [
|
| 1514 |
+
[
|
| 1515 |
+
"Sở Giao thông Vận tải tỉnh Tuyên Quang",
|
| 1516 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1517 |
+
],
|
| 1518 |
+
[
|
| 1519 |
+
"Hộ gia đình tôi",
|
| 1520 |
+
"NHOM_NGUOI"
|
| 1521 |
+
],
|
| 1522 |
+
[
|
| 1523 |
+
"UBND huyện Sơn Dương",
|
| 1524 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1525 |
+
],
|
| 1526 |
+
[
|
| 1527 |
+
"địa phương",
|
| 1528 |
+
"BEN_THU_BA"
|
| 1529 |
+
],
|
| 1530 |
+
[
|
| 1531 |
+
"Sở Giao thông Vận tải tỉnh Tuyên Quang",
|
| 1532 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1533 |
+
],
|
| 1534 |
+
[
|
| 1535 |
+
"gia đình tôi",
|
| 1536 |
+
"NHOM_NGUOI"
|
| 1537 |
+
]
|
| 1538 |
+
]
|
| 1539 |
+
},
|
| 1540 |
+
{
|
| 1541 |
+
"text": "Kính gửi Bộ Công Thương, Công ty chúng tôi là một doanh nghiệp tư nhân chuyên sản xuất linh kiện điện tử, một sản phẩm thuộc nhóm công nghiệp trọng điểm được đề cập trong dự thảo Luật. Hiện nay, công ty đang có kế hoạch đầu tư đổi mới công nghệ, nhập khẩu dây chuyền sản xuất hiện đại để nâng cao chất lượng sản phẩm và sức cạnh tranh. Từ việc nghiên cứu dự thảo Luật Công nghiệp trọng điểm, chúng tôi nhận thấy có quy định về \"Chương trình quốc gia về Phát triển công nghiệp\" và các hỗ trợ cho hoạt động \"Ứng dụng, chuyển giao công nghệ\" để sản xuất sản phẩm công nghiệp chủ lực. Vì vậy, tôi xin được hỏi: 1. Khi Dự thảo Luật này được thông qua và có hiệu lực, công ty tư nhân như chúng tôi có được phép tham gia, đề xuất hoặc hưởng lợi từ \"Chương trình quốc gia về Phát triển công nghiệp\" hay không? 2. Để nhận được các hỗ trợ về kinh phí đổi mới công nghệ (theo Điều 35), công ty chúng tôi cần đáp ứng những điều kiện, tiêu chí cụ thể nào và thủ tục đăng ký ra sao? Chúng tôi rất mong nhận được sự hướng dẫn từ Bộ để chủ động chuẩn bị kế hoạch phát triển phù hợp với chính sách mới. Trân trọng cảm ơn!",
|
| 1542 |
+
"entities": [
|
| 1543 |
+
[
|
| 1544 |
+
"Bộ Công Thương",
|
| 1545 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1546 |
+
],
|
| 1547 |
+
[
|
| 1548 |
+
"Công ty chúng tôi",
|
| 1549 |
+
"TO_CHUC"
|
| 1550 |
+
],
|
| 1551 |
+
[
|
| 1552 |
+
"doanh nghiệp tư nhân chuyên sản xuất linh kiện điện tử",
|
| 1553 |
+
"CHUC_DANH"
|
| 1554 |
+
]
|
| 1555 |
+
]
|
| 1556 |
+
},
|
| 1557 |
+
{
|
| 1558 |
+
"text": "Kính gửi Bộ Tư pháp! Tôi là một trọng tài viên đang giải quyết một vụ tranh chấp hợp đồng xây dựng về chất lượng công trình. Trong quá trình tố tụng, Tòa án đã trưng cầu một tổ chức giám định tư pháp về xây dựng để đánh giá hiện trạng và nguyên nhân hư hỏng của công trình. Kết luận giám định có đề cập đến các dấu hiệu quan sát được tại hiện trường (ví dụ: vết nứt, độ lún...). Tuy nhiên, khi tôi yêu cầu cung cấp hồ sơ giám định để kiểm tra tính khách quan và đầy đủ, tổ chức giám định chỉ cung cấp bản kết luận, biên bản giao nhận và các tài liệu có sẵn. Họ cho rằng các quan sát tại hiện trường đã được mô tả trong văn bản ghi nhận quá trình thực hiện giám định và không nhất thiết phải có ảnh chụp hiện trạng làm bằng chứng trực quan trong hồ sơ. Xin hỏi: Theo quy định của Luật Giám định tư pháp, đối với trường hợp giám định đòi hỏi quan sát thực tế hiện trường, hồ sơ giám định có bắt buộc phải có ảnh tư liệu (ảnh chụp, video) ghi nhận hiện trạng tại thời điểm giám định hay không? Nếu không có ảnh thì hồ sơ có bị coi là thiếu sót, ảnh hưởng đến giá trị pháp lý của kết luận giám định không?",
|
| 1559 |
+
"entities": [
|
| 1560 |
+
[
|
| 1561 |
+
"Bộ Tư pháp",
|
| 1562 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1563 |
+
],
|
| 1564 |
+
[
|
| 1565 |
+
"Tôi",
|
| 1566 |
+
"NGUOI"
|
| 1567 |
+
],
|
| 1568 |
+
[
|
| 1569 |
+
"trọng tài viên",
|
| 1570 |
+
"CHUC_DANH"
|
| 1571 |
+
],
|
| 1572 |
+
[
|
| 1573 |
+
"một tổ chức giám định tư pháp về xây dựng",
|
| 1574 |
+
"TO_CHUC"
|
| 1575 |
+
],
|
| 1576 |
+
[
|
| 1577 |
+
"tổ chức giám định",
|
| 1578 |
+
"TO_CHUC"
|
| 1579 |
+
],
|
| 1580 |
+
[
|
| 1581 |
+
"các quan sát tại hiện trường",
|
| 1582 |
+
"BEN_THU_BA"
|
| 1583 |
+
]
|
| 1584 |
+
]
|
| 1585 |
+
},
|
| 1586 |
+
{
|
| 1587 |
+
"text": "Kính gửi Bộ Công an. Tôi đã được cấp Căn cước công dân gắn chip và đăng ký sử dụng căn cước điện tử. Gần đây, tôi nhận được tin nhắn thông báo căn cước điện tử của tôi đã bị khóa do \"vi phạm thỏa thuận sử dụng ứng dụng định danh quốc gia\" theo quy định tại điểm b khoản 1 Điều 34 Luật Căn cước. Tuy nhiên, thông báo này không nêu rõ tôi đã vi phạm điều khoản cụ thể nào, cũng như các bước cần thực hiện để khắc phục vi phạm. Tôi đã thử liên hệ với cơ quan Công an nơi cấp thẻ nhưng chưa nhận được hướng dẫn chi tiết. Trong khi đó, việc căn cước điện tử bị khóa đã ảnh hưởng đến nhiều giao dịch điện tử và thủ tục hành chính trực tuyến của tôi. Vậy, tôi xin hỏi: 1. Cơ quan quản lý căn cước có trách nhiệm thông báo chi tiết về lý do vi phạm và hướng dẫn cụ thể các bước khắc phục cho người dân khi khóa căn cước điện tử theo điểm b khoản 1 Điều 34 hay không? 2. Nếu có, quy trình và thời hạn để tôi có thể khắc phục vi phạm và đề nghị mở khóa căn cước điện tử là như thế nào? Tôi kính mong Bộ Công an giải đáp để tôi có thể sớm khắc phục và tiếp tục sử dụng thuận tiện căn cước điện tử.",
|
| 1588 |
+
"entities": [
|
| 1589 |
+
[
|
| 1590 |
+
"Bộ Công an",
|
| 1591 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1592 |
+
],
|
| 1593 |
+
[
|
| 1594 |
+
"Tôi",
|
| 1595 |
+
"NGUOI"
|
| 1596 |
+
],
|
| 1597 |
+
[
|
| 1598 |
+
"cơ quan Công an nơi cấp thẻ",
|
| 1599 |
+
"BEN_THU_BA"
|
| 1600 |
+
],
|
| 1601 |
+
[
|
| 1602 |
+
"Cơ quan quản lý căn cước",
|
| 1603 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1604 |
+
],
|
| 1605 |
+
[
|
| 1606 |
+
"người dân",
|
| 1607 |
+
"NHOM_NGUOI"
|
| 1608 |
+
]
|
| 1609 |
+
]
|
| 1610 |
+
},
|
| 1611 |
+
{
|
| 1612 |
+
"text": "Kính gửi Bộ Tư pháp! Ông Nguyễn Văn A là công chứng viên, đã được Sở Tư pháp thành phố Hà Nội cấp thẻ công chứng viên để hành nghề tại Phòng công chứng X. Hiện ông A chấm dứt hợp đồng lao động và chuyển sang làm việc tại Văn phòng công chứng Y. Khi đó, thẻ công chứng viên đã cấp cho ông A tại Phòng công chứng X bị thu hồi theo quy định tại khoản 4 Điều 38 Luật Công chứng 2024. Tại Văn phòng công chứng Y, ông A chưa được cấp thẻ công chứng viên mới. Vậy, trong thời gian chờ cấp thẻ mới, nếu có khách hàng yêu cầu công chứng các loại văn bản như hợp đồng thế chấp bất động sản, di chúc, văn bản phân chia di sản (theo quy định tại Điều 55 và Điều 59 Luật Công chứng 2024), ông Nguyễn Văn A có được thực hiện thủ tục công chứng cho các văn bản này hay không? Nếu không được, văn bản công chứng đã thực hiện trong thời gian đó có giá trị pháp lý không? Xin cảm ơn.",
|
| 1613 |
+
"entities": [
|
| 1614 |
+
[
|
| 1615 |
+
"Bộ Tư pháp",
|
| 1616 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1617 |
+
],
|
| 1618 |
+
[
|
| 1619 |
+
"Ông Nguyễn Văn A",
|
| 1620 |
+
"NGUOI"
|
| 1621 |
+
],
|
| 1622 |
+
[
|
| 1623 |
+
"công chứng viên",
|
| 1624 |
+
"CHUC_DANH"
|
| 1625 |
+
],
|
| 1626 |
+
[
|
| 1627 |
+
"Sở Tư pháp thành phố Hà Nội",
|
| 1628 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1629 |
+
],
|
| 1630 |
+
[
|
| 1631 |
+
"Phòng công chứng X",
|
| 1632 |
+
"TO_CHUC"
|
| 1633 |
+
],
|
| 1634 |
+
[
|
| 1635 |
+
"Văn phòng công chứng Y",
|
| 1636 |
+
"TO_CHUC"
|
| 1637 |
+
],
|
| 1638 |
+
[
|
| 1639 |
+
"công chứng viên",
|
| 1640 |
+
"CHUC_DANH"
|
| 1641 |
+
],
|
| 1642 |
+
[
|
| 1643 |
+
"Phòng công chứng X",
|
| 1644 |
+
"TO_CHUC"
|
| 1645 |
+
],
|
| 1646 |
+
[
|
| 1647 |
+
"Văn phòng công chứng Y",
|
| 1648 |
+
"TO_CHUC"
|
| 1649 |
+
],
|
| 1650 |
+
[
|
| 1651 |
+
"khách hàng",
|
| 1652 |
+
"BEN_THU_BA"
|
| 1653 |
+
]
|
| 1654 |
+
]
|
| 1655 |
+
},
|
| 1656 |
+
{
|
| 1657 |
+
"text": "Kính gửi Viện trưởng Viện kiểm sát nhân dân tối cao, Tôi có tình huống cần được giải đáp liên quan đến thủ tục xem xét miễn nhiệm, cách chức Kiểm sát viên Viện kiểm sát nhân dân tối cao theo quy định tại Điều 86 Luật Tổ chức Viện kiểm sát nhân dân. Giả sử trong cùng một đợt làm việc, Ủy ban kiểm sát Viện kiểm sát nhân dân tối cao đề nghị xem xét miễn nhiệm đối với 02 Kiểm sát viên (ông A và ông B) và cách chức đối với 01 Kiểm sát viên (ông C). Hội đồng tuyển chọn Kiểm sát viên Viện kiểm sát nhân dân tối cao đã họp và xem xét, quyết định thông qua cả 03 trường hợp này. Xin hỏi: Trong tình huống trên, việc \"Viện trưởng Viện kiểm sát nhân dân tối cao trình Chủ tịch nước\" miễn nhiệm đối với ông A, ông B và cách chức đối với ông C được thực hiện như thế nào? Có phải Viện trưởng sẽ phải làm 03 văn bản trình riêng biệt (01 văn bản cho ông A, 01 văn bản cho ông B, 01 văn bản cho ông C) hay có thể gộp chung vào một văn bản trình duy nhất để trình Chủ tịch nước xem xét, quyết định? Trân trọng cảm ơn.",
|
| 1658 |
+
"entities": [
|
| 1659 |
+
[
|
| 1660 |
+
"Viện trưởng Viện kiểm sát nhân dân tối cao",
|
| 1661 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1662 |
+
],
|
| 1663 |
+
[
|
| 1664 |
+
"Tôi",
|
| 1665 |
+
"NGUOI"
|
| 1666 |
+
],
|
| 1667 |
+
[
|
| 1668 |
+
"Kiểm sát viên Viện kiểm sát nhân dân tối cao",
|
| 1669 |
+
"CHUC_DANH"
|
| 1670 |
+
],
|
| 1671 |
+
[
|
| 1672 |
+
"Ủy ban kiểm sát Viện kiểm sát nhân dân tối cao",
|
| 1673 |
+
"TO_CHUC"
|
| 1674 |
+
],
|
| 1675 |
+
[
|
| 1676 |
+
"Kiểm sát viên",
|
| 1677 |
+
"CHUC_DANH"
|
| 1678 |
+
],
|
| 1679 |
+
[
|
| 1680 |
+
"ông A",
|
| 1681 |
+
"NGUOI"
|
| 1682 |
+
],
|
| 1683 |
+
[
|
| 1684 |
+
"ông B",
|
| 1685 |
+
"NGUOI"
|
| 1686 |
+
],
|
| 1687 |
+
[
|
| 1688 |
+
"ông C",
|
| 1689 |
+
"NGUOI"
|
| 1690 |
+
],
|
| 1691 |
+
[
|
| 1692 |
+
"Hội đồng tuyển chọn Kiểm sát viên Viện kiểm sát nhân dân tối cao",
|
| 1693 |
+
"TO_CHUC"
|
| 1694 |
+
],
|
| 1695 |
+
[
|
| 1696 |
+
"Viện trưởng Viện kiểm sát nhân dân tối cao",
|
| 1697 |
+
"CHUC_DANH"
|
| 1698 |
+
],
|
| 1699 |
+
[
|
| 1700 |
+
"Chủ tịch nước",
|
| 1701 |
+
"CHUC_DANH"
|
| 1702 |
+
],
|
| 1703 |
+
[
|
| 1704 |
+
"ông A",
|
| 1705 |
+
"NGUOI"
|
| 1706 |
+
],
|
| 1707 |
+
[
|
| 1708 |
+
"ông B",
|
| 1709 |
+
"NGUOI"
|
| 1710 |
+
],
|
| 1711 |
+
[
|
| 1712 |
+
"ông C",
|
| 1713 |
+
"NGUOI"
|
| 1714 |
+
],
|
| 1715 |
+
[
|
| 1716 |
+
"ông A",
|
| 1717 |
+
"NGUOI"
|
| 1718 |
+
],
|
| 1719 |
+
[
|
| 1720 |
+
"ông B",
|
| 1721 |
+
"NGUOI"
|
| 1722 |
+
],
|
| 1723 |
+
[
|
| 1724 |
+
"ông C",
|
| 1725 |
+
"NGUOI"
|
| 1726 |
+
],
|
| 1727 |
+
[
|
| 1728 |
+
"Chủ tịch nước",
|
| 1729 |
+
"CHUC_DANH"
|
| 1730 |
+
]
|
| 1731 |
+
]
|
| 1732 |
+
},
|
| 1733 |
+
{
|
| 1734 |
+
"text": "Kính gửi Bộ Tư pháp! Trong quá trình thi hành công vụ, ông A (là cán bộ công chức tại Sở Tài nguyên và Môi trường tỉnh X) đã có quyết định hành chính trái pháp luật, gây thiệt hại cho hộ gia đình ông B. Theo quyết định của cơ quan có thẩm quyền, ông A phải hoàn trả một phần tiền bồi thường cho Nhà nước. Tuy nhiên, tại thời điểm có quyết định hoàn trả, ông A đã nghỉ hưu và không còn thuộc biên chế, quản lý của Sở Tài nguyên và Môi trường nữa. Hiện ông A nhận lương hưu từ Bảo hiểm xã hội tỉnh X. Vậy xin hỏi, trong trường hợp này, cơ quan nào có trách nhiệm tổ chức việc thu tiền hoàn trả của ông A theo quy định của Luật Trách nhiệm bồi thường của Nhà nước? Trân trọng cảm ơn!",
|
| 1735 |
+
"entities": [
|
| 1736 |
+
[
|
| 1737 |
+
"Bộ Tư pháp",
|
| 1738 |
+
"CO_QUAN_THAM_QUYEN"
|
| 1739 |
+
],
|
| 1740 |
+
[
|
| 1741 |
+
"ông A",
|
| 1742 |
+
"NGUOI"
|
| 1743 |
+
],
|
| 1744 |
+
[
|
| 1745 |
+
"cán bộ công chức",
|
| 1746 |
+
"CHUC_DANH"
|
| 1747 |
+
],
|
| 1748 |
+
[
|
| 1749 |
+
"Sở Tài nguyên và Môi trường tỉnh X",
|
| 1750 |
+
"TO_CHUC"
|
| 1751 |
+
],
|
| 1752 |
+
[
|
| 1753 |
+
"hộ gia đình ông B",
|
| 1754 |
+
"NHOM_NGUOI"
|
| 1755 |
+
],
|
| 1756 |
+
[
|
| 1757 |
+
"ông B",
|
| 1758 |
+
"NGUOI"
|
| 1759 |
+
],
|
| 1760 |
+
[
|
| 1761 |
+
"Sở Tài nguyên và Môi trường",
|
| 1762 |
+
"TO_CHUC"
|
| 1763 |
+
],
|
| 1764 |
+
[
|
| 1765 |
+
"Bảo hiểm xã hội tỉnh X",
|
| 1766 |
+
"TO_CHUC"
|
| 1767 |
+
]
|
| 1768 |
+
]
|
| 1769 |
+
}
|
| 1770 |
+
]
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_3.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_4.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_5.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_6.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_7.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_8.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
0_ent_175_negs_hr_05_wr25_1/results/all_splits/0_ent_175_negs_hr_05_wr25_1_predict_result_split_9.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|