yangheng95/LCF-ATEPC

The problem of the training on new dataset

liu-21 opened this issue · 8 comments

Hello, I have prepared the data set according to your format, related codes: for example, the path of the data set has been modified, why can't I train it?

Error:Traceback (most recent call last):
File "train.py", line 359, in
apc_test_acc, apc_test_f1, ate_test_f1 = main(config)
File "train.py", line 95, in main
train_examples = processor.get_train_examples(args.data_dir)
File "/home/xiaojia/lcf/utils/data_utils.py", line 109, in get_train_examples
self._read_tsv(os.path.join(data_dir, "car.atepc.train.dat")), "train")
File "/home/xiaojia/lcf/utils/data_utils.py", line 90, in _read_tsv
return readfile(input_file)
File "/home/xiaojia/lcf/utils/data_utils.py", line 65, in readfile
polarity.append(int(splits[-1][:-1]))
ValueError: invalid literal for int() with base 10: ''

My data format:
位 B-ASP 2
置 I-ASP 2
上 O -1
合 O -1
最 O -1
佳 O -1
中 O -1
心 O -1
位 O -1
置 O -1

情感极性转换失败了,请检查数据集里面情感极性没有缺失的情况

做实验验证了不是数据集的问题,请问您跑代码除了对数据集进行格式上的转化,是不是还对数据集做了别的特殊处理?

这个工作将近两年了,细节记不大清了。数据集有没有特殊处理也只涉及后面features的处理,应该是不会影响数据集读取。你可以把出错的部分数据发给我,我帮你看一下

另外,中文数据集的极性是0,2分别代表正负,没有中性的情感(1)。数据在建模前会吧0,2转换成0,1。而-1则是情感标签的填充,不参与极性的学习

根据您的描述,我的数据集中只有积极和消极两种极性,没有中性,感觉这样不会影响数据集的读取吧?而且我看您代码里中文只分成两类,似乎没有中性的极性判断。英文数据集是分成三类的。
我的数据集例:
这 O -1
里 O -1
发 B-ASP 2
展 I-ASP 2
肯 O -1
定 O -1
好 O -1
是 O -1
一 O -1
块 O -1
宝 O -1
地 O -1

这 O -1
么 O -1
高 O -1
的 O -1
房 B-ASP 0
价 I-ASP 0
自 O -1
己 O -1
留 O -1
手 O -1
里 O -1
吧 O -1
永 O -1
远 O -1
也 O -1
别 O -1
想 O -1
卖 O -1
出 O -1
去 O -1

实 B-ASP 0
物 I-ASP 0
图 I-ASP 0
无 O -1
语 O -1
这 O -1
全 O -1
是 O -1
售 O -1
楼 O -1
处 O -1
的 O -1
照 O -1
片 O -1
… O -1
根 O -1
本 O -1
不 O -1
是 O -1
小 O -1
区 O -1
里 O -1
的 O -1
照 O -1
片 O -1
好 O -1
吧 O -1
… O -1

这个数据看起来是没有问题的,我有时间帮你看一下。你可以先尝试一下https://github.com/yangheng95/PyABSA ,这里面的代码鲁棒性更好,不过一些地方与原始的实现不同。

需要注意的是PyABSA是自动根据极性的种类初始化模型的,需要极性从0开始并且连续。例如如果你的极性只有两种,那么就使用0,1标注

好的,谢谢您!