Ricardokevins / Bert-In-Relation-Extraction

使用Bert完成实体之间关系抽取
650 stars 73 forks source link

已star,关于模型训练正确率的问题,望回复 #55

Closed CreateSol closed 5 months ago

CreateSol commented 5 months ago

训练完数据正确率大概在0.4,请问怎么提高训练正确率呢?

Ricardokevins commented 5 months ago

训练完数据正确率大概在0.4,请问怎么提高训练正确率呢?

这和你具体的场景和难度有关,需要你自己思考。下面是我和Deepseek-v2-chat的对话,供你参考

提高关系抽取模型的训练正确率通常需要从多个方面进行优化。以下是一些可能的策略:

  1. 数据质量

数据清洗:确保训练数据的质量,去除噪声和错误标注的数据。 数据增强:通过合成新的训练样本来增加数据多样性,例如使用同义词替换、句子重组等方法。

  1. 模型架构

更复杂的模型:尝试使用更深层次的神经网络或者更复杂的模型结构,如BERT、RoBERTa等预训练语言模型。 注意力机制:引入注意力机制来帮助模型更好地聚焦于关键信息。

  1. 超参数调整

学习率:调整学习率,找到适合当前数据和模型的最佳学习率。 优化器:尝试不同的优化器,如Adam、SGD等,并调整其参数。 批次大小:调整批次大小,以平衡计算效率和模型性能。

  1. 正则化和优化技巧

Dropout:使用Dropout来减少过拟合。 早停法:在验证集上的性能不再提升时停止训练。 权重衰减:应用权重衰减(L2正则化)来限制模型复杂度。

  1. 损失函数和评价指标

损失函数:尝试不同的损失函数,如交叉熵损失、合页损失等。 评价指标:确保评价指标与任务目标一致,并可能调整模型以优化该指标。

  1. 迁移学习

预训练模型:使用在大规模语料库上预训练的模型,并对其进行微调。

  1. 多任务学习

联合训练:将关系抽取任务与其他相关任务(如实体识别)联合训练,以提高泛化能力。

  1. 模型集成

集成方法:通过模型集成(如Bagging、Boosting)来提高模型的稳定性和准确性。

  1. 领域知识

专家知识:引入领域专家知识来指导模型训练,例如通过规则或先验知识。

  1. 持续迭代

迭代优化:持续迭代模型和训练过程,每次迭代后分析错误案例,针对性地进行改进。 在实施上述策略时,建议逐步进行,每次只改变一个变量,以便于分析每个改动对模型性能的影响。同时,确保有足够的计算资源和时间来进行充分的实验。最后,不要忽视模型的解释性,理解模型为何做出某些预测可以帮助你更好地调整模型。

CreateSol commented 5 months ago

啊这,有点抽象

CreateSol commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

Ricardokevins commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

CreateSol commented 5 months ago

demo可以跑 test 跑报错

CreateSol commented 5 months ago

demo跑出来1.0

CreateSol commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

Ricardokevins commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

CreateSol commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

CreateSol commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

logits = outputs[1] 这个只有一个元素

Ricardokevins commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

logits = outputs[1] 这个只有一个元素

那对应修改一下试试

CreateSol commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

logits = outputs[1] 这个只有一个元素

那对应修改一下试试

改成0可以了,如何提高自己的模型准确率呢

Ricardokevins commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

logits = outputs[1] 这个只有一个元素

那对应修改一下试试

改成0可以了,如何提高自己的模型准确率呢

你得自己试着分析一下啊。。。 要么是代码问题,要么就是哪里复现错了。。。你这丢给我这个问题,我怎么帮助你。。。

刚才说了,用我的权重试着测试一下,正确率对不对,如果对,那就是你训练出了问题,你需要先检查训练集,测试集。 检查训练动态,参考上面列举的chatgpt的建议。假如不是训练问题,那就是代码问题,你需要读一读代码

CreateSol commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

logits = outputs[1] 这个只有一个元素

那对应修改一下试试

改成0可以了,如何提高自己的模型准确率呢

你得自己试着分析一下啊。。。 要么是代码问题,要么就是哪里复现错了。。。你这丢给我这个问题,我怎么帮助你。。。

刚才说了,用我的权重试着测试一下,正确率对不对,如果对,那就是你训练出了问题,你需要先检查训练集,测试集。 检查训练动态,参考上面列举的chatgpt的建议。假如不是训练问题,那就是代码问题,你需要读一读代码

您说的权重是什么参数,我刚入门不太理解小白,问的有些问题可能让你困扰了,不好意思

Ricardokevins commented 5 months ago

还是训练的这套数据,您的可以在0.9,我的在0.4

使用提供的checkpoint呢,本地测试能到0.9吗

Traceback (most recent call last): File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 126, in test(model,text_list,ent1,ent2,result) File "D:\Coding\KG\Bert-In-Relation-Extraction\test.py", line 92, in test logits = outputs[1] IndexError: tuple index out of range

这个和transformes版本有关,你可以print出来自己debug一下

transformers 2.5.1 这个版本

logits = outputs[1] 这个只有一个元素

那对应修改一下试试

改成0可以了,如何提高自己的模型准确率呢

你得自己试着分析一下啊。。。 要么是代码问题,要么就是哪里复现错了。。。你这丢给我这个问题,我怎么帮助你。。。 刚才说了,用我的权重试着测试一下,正确率对不对,如果对,那就是你训练出了问题,你需要先检查训练集,测试集。 检查训练动态,参考上面列举的chatgpt的建议。假如不是训练问题,那就是代码问题,你需要读一读代码

您说的权重是什么参数,我刚入门不太理解小白,问的有些问题可能让你困扰了,不好意思

readme里给了一个训练好的权重参数,下载下来,运行测试一下看对不对

CreateSol commented 5 months ago

您说的这个是吧?

CreateSol commented 5 months ago
parser.add_argument('--batch_size',type=int,default=32,help = '每批数据的数量')
parser.add_argument('--nepoch',type=int,default=5,help = '训练的轮次')
parser.add_argument('--lr',type=float,default=0.001,help = '学习率')
parser.add_argument('--gpu',type=bool,default=True,help = '是否使用gpu')
parser.add_argument('--num_workers',type=int,default=2,help='dataloader使用的线程数量')
parser.add_argument('--num_labels',type=int,default=len(id2rel),help='分类类数')
parser.add_argument('--data_path',type=str,default='./data',help='数据路径')
CreateSol commented 5 months ago
parser.add_argument('--batch_size',type=int,default=32,help = '每批数据的数量')
parser.add_argument('--nepoch',type=int,default=5,help = '训练的轮次')
parser.add_argument('--lr',type=float,default=0.001,help = '学习率')
parser.add_argument('--gpu',type=bool,default=True,help = '是否使用gpu')
parser.add_argument('--num_workers',type=int,default=2,help='dataloader使用的线程数量')
parser.add_argument('--num_labels',type=int,default=len(id2rel),help='分类类数')
parser.add_argument('--data_path',type=str,default='./data',help='数据路径')

知道了train(model,train_dataset,32,0.001,30)方法