H好菇凉666用万字长文聊一聊 Embedding 技术( 六 )

许多重要的下游任务譬如QA、NLI需要语言模型理解两个句子之间的关系 , 而传统的语言模型在训练的过程没有考虑句对关系的学习 。 BERT采用NSP任务来增强模型对句子关系的理解 , 即给出两个句子A、B , 模型预测B是否是A的下一句 , 如下图所示:
H好菇凉666用万字长文聊一聊 Embedding 技术
本文插图
训练数据集构造上 , 从平行语料中随机抽取连续的两句话:50%保留抽取的两句话(label=IsNext);50%的第二句话随机从语料中抽取(label=NotNext)
在https://github.com/google-research/bert.git中有N多种预训练模型 , 大家可以根据需要下载对应的模型 , 下面主要给出两个常用的模型:

  • BERT-Base_L-12_H-768_A-12 , 总参数为110M
  • BERT-Large_L-24_H-1024_A-16 , 总参数为340M
其中 , L表示网络层数(Transformer blocks数量) , A表示Multi-Head Attention中self-Attention数 , filter的尺寸是4H
BERT提供了4中不同的下游任务的微调方案 , 大家根据自己的语料在预训练好的模型上采用这些任务来微调模型:
  • 句对关系判断:第一个起始符号经过编码后 , 增加Softmax层 , 即可用于分类;
  • 单句分类任务:实现同“句对关系判断”;
  • 问答类任务:问答系统输入文本序列的question和包含answer的段落 , 并在序列中标记answer , 让BERT模型学习标记answer开始和结束的向量来训练模型;
  • 序列标准任务:识别系统输入标记好实体类别(人、组织、位置、其他无名实体)文本序列进行微调训练 , 识别实体类别时 , 将序列的每个Token向量送到预测NER标签的分类层进行识别 。
BERT是截止至2018年10月的最新的的SOTA模型 , 通过预训练和精调可以解决11项NLP的任务 。 采用Transformer作为算法的主框架 , 能更好地捕捉更长距离的依赖和语句中的双向关系 。 与之前的预训练模型相比 , BERT能捕捉到正意义上的bidirectional context信息 。 采用MLP+NSP多任务方法使模型具有更强的泛化能力 。 最后 , 强大的计算资源+更大的数据造就了更强更复杂的模型 。
基于内容的Embedding方法(如word2vec、BERT等)都是针对“序列”样本(如句子、用户行为序列)设计的 , 但在互联网场景下 , 数据对象之间更多呈现出图结构 , 如1)有用户行为数据生成的物品关系图;2)有属性和实体组成的只是图谱 。
H好菇凉666用万字长文聊一聊 Embedding 技术
本文插图
对于图结构数据 , 基于内容的embedding方法不太好直接处理了 。 因此 , 为了解决土结构数据的问题 , Graph Embedding开始得到大家的重视 , 并在推荐系统领域流行起来 。
Graph Embedding是一种将图结构数据映射为低微稠密向量的过程 , 从而捕捉到图的拓扑结构、顶点与顶点的关系、以及其他的信息 。 目前 , Graph Embedding方法大致可以分为两大类:1)浅层图模型;2)深度图模型 。
1、浅层图模型 浅层图模型主要是采用random-walk + skip-gram模式的embedding方法 。 主要是通过在图中采用随机游走策略来生成多条节点列表 , 然后将每个列表相当于含有多个单词(图中的节点)的句子 , 再用skip-gram模型来训练每个节点的向量 。 这些方法主要包括DeepWalk、Node2vec、Metapath2vec等 。
A) DeepWalk DeepWalk是第一个将NLP中的思想用在Graph Embedding上的算法 , 输入是一张图 , 输出是网络中节点的向量表示 , 使得图中两个点共有的邻居节点(或者高阶邻近点)越多 , 则对应的两个向量之间的距离就越近 。
H好菇凉666用万字长文聊一聊 Embedding 技术