由于NL2SQL和知识图谱问答任务的需要,学习了一段时间翻译模型,把经验记载在这篇文章里面。
1、数据越多效果越好?
不一定
语料质量,领域属性都会对效果有影响
基数小提升显著、基数大提升微弱甚至降低
2、如何构建词表:
3、模型选择:
并行计算能力弱,信息抽取能力弱。
gated cnn
position embedding
引入卷积,提高并行化能力
非线性计算减少,降低梯度消失问题
Adaptive softmax提高预测速度
上图为transformer
Positional Encoding
引入self-attention提高并行化能力及信息抽取能力
Positional Encoding
multi-head self attention
Scaled Dot-Product Attention
Position-wise Feed-Forward Networks
三个缺陷:
非图灵完备
缺少条件计算
不能很好的处理超长输入
Universal Transformer
解决了图灵完备及条件计算问题
universal transformer通过递归函数使得层数不再固定
不同token的计算量不再相同,这样就实现条件计算
实践问题:
模型训练慢 (1.3X)
模型提升不明显
XLM
预训练模型 MLM/TLM
无监督/有监督翻译模型
实践问题:
预训练模型Embedding 维度过大爆显存,无法做Fine-tune
减小维度训练结果都不理想
在网上找了一个代码,可以运行:
主要是应用这个技术在NL2SQL的结构预测里面和知识图谱问答的问题类型预测里面,有很好的效果,不过缺点是需要一定的训练数据量。
至于少样本的怎么生成查询图的算法,还在探索中。