背景:众所周知,双塔模型分为两侧,各自转变成向量,再进行multiply,再最大化正样本的相似度。在电商搜索,双塔模型分为query侧和商品侧,但是要加入用户的特征得到个性化的搜索结果,则query侧就变成用户侧
在讲双塔模型之前,先讲一下,TensorFlow 用estimator构建模型训练与评估
分为以下四步:
1、搭建模型create_model(feature,label,mode,param)
2、定义input_fn()返回的dataset,这里的dataset就是上面的feature
3、得到评估器
model=tf.estimator.Estimator(
model_fn=create_model,
model_dir=model_dir,
params={
},
config=run_config
)
4、tf.estimator.train_and_evaluate(model,train_spec,eval_spec)(train_spec与eval_spec就是包裹input_fn而来的)
---------------------------------------------主题来了--------------------------------------
用户侧特征:
input_fn()函数得到的dataset为{‘query’:[],
'context':[‘性别’,‘手机型号’,‘地点’,‘偏好’...],(需要进行feature_column处理)
'action':[商品点击列表,商品加车列表,商品购买列表,...](商品可以是goods_nm+sku_cate_nm+attr_nm构成的一个商品)
}
create_model(feature,mode,param)
feature['query'] 通过词向量转化,并且通过dense层变成 batch_size *x的向量
feature['context'] 通过
tf.feature_column.input_layer(features, params['feature_columns'])把数据变成tensor
feature['action']复杂些,1,先通过词向量转化,则商品列表变成词向量列表(每个商品都有自己的词向量),2、
把每个商品的词向量与上述对应的query的词向量点乘,得到相似度,再把相似度和每个商品的词向量相乘再相加3、最后‘action’就变成[goods_click_embeding,goods_cart_embeding,goods_check_embeding],最后concat得到行为的向量特征
最后把‘query’、'context'和‘action’的特征进行concat就得到用户侧的特征
商品侧:一个用户特征,对应两个商品侧的特征,点击为正,曝光为负样本
goods_nm+cate_nm+attr_nm通过词向量转化变成词向量