2021.3.27 dyy
经过两周的时间,实现了3.13交流的两个想法,并对想法作了一些细化。
- value输入模型
- 基于主外键的loss策略
duorat/preproc/utils.py
最大最小value的计算,基于SQL的ORDER BY排序,value加入column_name中
configs/duorat/duorat-bertlarge.jsonnet
model.encoder.initial_encoder.use_segments: True,将此参数设为True, 一个column过一次BERT,避免column过长被掩盖
能跑通,设use_segments为True后,单卡一次实验从2天变到5天,效果能到60+,是否能到70+还不清楚
duorat/types.py
TableToken加入保存主外键,DuoRATDecoderItem加入Enhance_key_join_mask,DuoRATDecoderBatch加入Enhace_key_join_mask
duorat/preproc/tokens.py
TableToken生成的两个地方加入主外键信息
duorat/preproc/target.py
新建类EnhanceKeyJoinMaskBuilder,其中有Enhance_key_join_mask的生成逻辑,检测from生成表作标记,第一个表照搬答案,后续表与前一个表有主外键关系,要么你引用我要么我引用你。
duorat/preproc/duorat.py
预处理主流程中加入EnhanceKeyJoinMaskBuilder,最后把生成的EnhanceKeyJoinMask加到DuoRATDecoderItem和DuoRATDecoderBatch中
duorat/models/duorat.py
在loss计算中根据EnhanceKeyJoinMask计算一份loss,和copy_loss,gen_loss一起堆叠生成overall_loss
能跑通,打印loss在训练过程中正常,但还没实验
duorat/utils/schema_linker.py
上次的bug修复了一下,改动很小,对相似度为None的时候加了一句判断
还没试