Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

competition_predict 问题 #14

Closed
ume-technology opened this issue Apr 24, 2021 · 8 comments
Closed

competition_predict 问题 #14

ume-technology opened this issue Apr 24, 2021 · 8 comments

Comments

@ume-technology
Copy link

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

@z814081807
Copy link
Owner

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

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

@ume-technology
Copy link
Author

另外,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)

@ume-technology
Copy link
Author

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

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

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

@ume-technology
Copy link
Author

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

@z814081807
Copy link
Owner

另外,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后自己重写, 这一块后面我会重写 或者删掉 , 最近有点忙 没时间改。

@ume-technology
Copy link
Author

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

@ume-technology
Copy link
Author

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

@z814081807
Copy link
Owner

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants