z814081807/DeepNER

competition_predict 问题

ume-technology opened this issue · 8 comments

里面的那个 RAW_DATA_DIR = raw_data_random 。这个 raw_data_random 是什么文件,看代码是 Test 和 Stack 存放的文件夹?
但是这些文件在训练的时候放在 raw_data 里。 这里变成 raw_data_random 是有其他数据?

里面的那个 RAW_DATA_DIR = raw_data_random 。这个 raw_data_random 是什么文件,看代码是 Test 和 Stack 存放的文件夹?
但是这些文件在训练的时候放在 raw_data 里。 这里变成 raw_data_random 是有其他数据?

没有其他数据,之前数据做了点小改动,没什么提升就放弃了,把raw_data_random改成raw_data就可以了

另外,competition predict 实现过程中,我不清楚那些预训练模型的关系。我用的 roberta-wwm 做的 stacking 训练。训练完以后在这里我用 roberta-wwm 走代码会报错,用 uer_large 还会报错(这个报错是维度不对我能理解),因为检查点的模型参数是 roberta-wwm,但是为什么用 roberta-wwm 走还会报错。

另外,competition_predict 模块里这个真心看不明白什么意思,源码用的 VERSION = mixes 所以进入这个方法,但是这个方法调用了 mixed_prepare_info(mixed = ‘span’),这个方法究竟是什么意思呢?
def mixed_predict():
save_dir = os.path.join(SUBMIT_DIR, VERSION)
if not os.path.exists(save_dir):
os.makedirs(save_dir, exist_ok=True)
model_path_list = [x.strip() for x in MIX_DIR_LIST]
print('model_path_list:{}'.format(model_path_list))
all_labels = []
for i, model_path in enumerate(model_path_list):
if i <= 4:
info_dict = mixed_prepare_info(mixed='span')
model = SpanModel(bert_dir=MIX_BERT_DIR, num_tags=len(info_dict['id2ent']) + 1)
print(f'Load model from {model_path}')
model, device = load_model_and_parallel(model, GPU_IDS, model_path)
model.eval()
labels = base_predict(model, device, info_dict, ensemble=False, mixed='span')
else:
info_dict = mixed_prepare_info(mixed='crf')
model = CRFModel(bert_dir=MIX_BERT_DIR, num_tags=len(info_dict['id2ent']))
print(f'Load model from {model_path}')
model, device = load_model_and_parallel(model, GPU_IDS, model_path)
model.eval()
labels = base_predict(model, device, info_dict, ensemble=False, mixed='crf')
all_labels.append(labels)

里面的那个 RAW_DATA_DIR = raw_data_random 。这个 raw_data_random 是什么文件,看代码是 Test 和 Stack 存放的文件夹?
但是这些文件在训练的时候放在 raw_data 里。 这里变成 raw_data_random 是有其他数据?

没有其他数据,之前数据做了点小改动,没什么提升就放弃了,把raw_data_random改成raw_data就可以了

嗯,这个好理解,我看着代码也像是在读取 Test,我能理解~ 但是我实在是看不懂后面的方法,因为我的代码怎么走都会报错。

大佬帮帮我,真心看不懂这里的代码是啥意思

另外,competition predict 实现过程中,我不清楚那些预训练模型的关系。我用的 roberta-wwm 做的 stacking 训练。训练完以后在这里我用 roberta-wwm 走代码会报错,用 uer_large 还会报错(这个报错是维度不对我能理解),因为检查点的模型参数是 roberta-wwm,但是为什么用 roberta-wwm 走还会报错。

另外,competition_predict 模块里这个真心看不明白什么意思,源码用的 VERSION = mixes 所以进入这个方法,但是这个方法调用了 mixed_prepare_info(mixed = ‘span’),这个方法究竟是什么意思呢?
def mixed_predict():
save_dir = os.path.join(SUBMIT_DIR, VERSION)
if not os.path.exists(save_dir):
os.makedirs(save_dir, exist_ok=True)
model_path_list = [x.strip() for x in MIX_DIR_LIST]
print('model_path_list:{}'.format(model_path_list))
all_labels = []
for i, model_path in enumerate(model_path_list):
if i <= 4:
info_dict = mixed_prepare_info(mixed='span')
model = SpanModel(bert_dir=MIX_BERT_DIR, num_tags=len(info_dict['id2ent']) + 1)
print(f'Load model from {model_path}')
model, device = load_model_and_parallel(model, GPU_IDS, model_path)
model.eval()
labels = base_predict(model, device, info_dict, ensemble=False, mixed='span')
else:
info_dict = mixed_prepare_info(mixed='crf')
model = CRFModel(bert_dir=MIX_BERT_DIR, num_tags=len(info_dict['id2ent']))
print(f'Load model from {model_path}')
model, device = load_model_and_parallel(model, GPU_IDS, model_path)
model.eval()
labels = base_predict(model, device, info_dict, ensemble=False, mixed='crf')
all_labels.append(labels)

这一块有点乱,最后融合策略的问题, 有很多种融合方法,建议你先用 single or ensemble 试试 然后debug后自己重写, 这一块后面我会重写 或者删掉 , 最近有点忙 没时间改。

嗯。理解的。我还有个问题想问一下,就是因为 competition predict 走不通,我回头去看文章介绍是通过投票机制选出来选择正确的结果,那么对于 stacking 的实现过程中,二级模型是在哪里呢? 就是我看代码反而把我对 stacking 过程的理解给搞模糊了。您这套代码的二级模型是什么呢? 您能不能再把这个过程稍微再解释一下,我很难过现在。

大哥您方便加个微信可以不,微信不行 QQ 也可以。这套代码我中间因为其他事情耽误了一段时间,现在又回来读代码,真心想给搞清楚,但是理解起来很难过。18336304089 494725864 您可以加的话,微信 QQ 哪个都行。

大哥您方便加个微信可以不,微信不行 QQ 也可以。这套代码我中间因为其他事情耽误了一段时间,现在又回来读代码,真心想给搞清楚,但是理解起来很难过。18336304089 494725864 您可以加的话,微信 QQ 哪个都行。

这块其实不重要, 你先理解投票融合(多个预测实体结果的融合)的代码 和 概率融合(5折的logits进行融合)的代码 , 二级很容易理解。