首页 > 编程知识 正文

教育理论与实践,keras官网

时间:2023-05-06 12:31:30 阅读:161422 作者:473

一.引言dssm (learningdeepstructuredsemanticmodelsforwebsearchusingclickthroughdata )一文利用点击数据挖掘词语的深层语义模型,其构思是Query 因为是利用深度学习进行特征挖掘,最终计算出两个塔的矢量相似度,并结合标签进行反向传播训练,所以DSSM也称为双塔,其应用场景主要以搜索、召回等场景为主,当然让我们看看双塔的结构。

DSSM理论1 .模型介绍

DSSM相关论文可参见《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》,其主要模型结构为:

CSDN-BITDDDQ是Query塔,d是Doc塔。 由于文本特征的one-hot表示多为稀疏向量,DSSM通过多层DNN将高维稀疏文本特征映射到低维语义空间,如图所示,这里原始文本的one-hot维数为500k维,最终由Dense层

第1层W1 Word Hashing除了DNN之外,还可以尝试CNN、LSTM等模型进行特征提取,但中心思想都是压缩原语义空间,将高维映射到低维。 这里DNN的默认激活函数采用Tanh,不是常用的Relu,需要注意。

CSDN-BITDDD在最终的概率计算中使用条件概率SoftMax,在相似度计算中使用余弦相似度。 通过最小化条件概率函数和SGD随机梯度下降来更新迭代模型。

CSDN-BITDDD2 .型号APP

由于DSSM采用双塔结构将高维语义映射到低维空间,DSSM模型也大量应用于特征向量的获取。 模型经过训练给出Query样本和Doc样本,通过Query和Doc塔两个模型获取各自的k维向量作为其特征,利用向量计算文本语义特征等,通过MF、Word2vec、LDA、PCC

三. DSSM实践

在此,通过模拟构筑user-item的数据和user对item的行动,将某个行动设为1,将没有的行动设为0,通过DSSM双塔模型进行训练,得到user-tower和item-tower,从而得到user和item-tower

1 .数据准备# 1.生成用户,商品one-hot特征num _ samples=10000 max _ length=500 # one-hot多维数组defone_hot_sequences,dimmples dimension ) ) for i,sequenceinenumerate ) ) sequences ) ) 33366 sequence ]=1returnresultuser _ feat=NP.random.) size=(num_samples,200 ) ) user_feat=one_hot_sequences ) user_feat,max_length ) item _ feat=one _ one

用户矩阵维数: (10000,500 )产品矩阵维数: (10000,500 )预测标签维数: (10000,500 ) )预测标签实例:[01011101011用户,item的

2 .构建2.DSSM双塔

K=16参照模型概要中最后一层的semantic维度,即映射文本空间的维度,k的值可以根据场景和特征维度进行调节。

由于输入样本格式一致,用户塔和Item塔结构相同,三个Dense层的堆叠、激活函数采用Tanh,在第一层Dense后增加BN层防止特征过薄

疏导致模型梯度消失 or 爆炸。

最后通过 concatLayer 结合双塔并计算相似度,DSSM 其实就是扩展版的多输入模型,多输入模型的使用之前也有提到:多输入模型 Demo,可以参考。

k = 16 # User 塔 user_input = Input(shape=max_length, name="user_input") user_dense1 = Dense(128, activation='tanh')(user_input) bn1 = BatchNormalization(trainable=True)(user_dense1) user_dense2 = Dense(64, activation='tanh')(bn1) user_dense3 = Dense(k, activation='tanh', name='user_output')(user_dense2) # item 塔 item_input = Input(shape=max_length, name="item_input") item_dense1 = Dense(128, activation='tanh')(item_input) bn2 = BatchNormalization(trainable=True)(item_dense1) item_dense2 = Dense(64, activation='tanh')(bn2) item_dense3 = Dense(k, activation='tanh', name="item_output")(item_dense2) concat = concatenate([user_dense3, item_dense3], axis=-1) # 双塔相似度计算 similar = CosineSimilarLayer()(concat) model = Model([user_input, item_input], similar, name="DSSM") model.summary()

模型结构如下图:

3.模型编译与训练

预测标签为0,1值,所以采用二分类交叉熵,也有同学使用 MSE,场景不同使用方式不同。其他超参实际应用中大家也可以多多尝试。

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy']) model.fit([user_feat, item_feat], predict_label, epochs=10, batch_size=128)

由于是 numpy 随机的数据,相关指标就不做参考,只为验证流程是否可用。

4.利用模型构建 User-tower 与 Item-tower

DSSM 训练结束后,分别构建用户塔与商品塔,给定测试样本即可获取 K 维向量表征用户与商品,同时计算 user-item 的相似度。

# 7.构建双塔 - 用户塔 vs 商品塔 user_tower = Model(user_input, user_dense3, name="User-Tower") item_tower = Model(item_input, item_dense3, name="Item-Tower") test_samples = 1 test_user_feat = one_hot_sequences(np.random.randint(0, max_length, size=(test_samples, 200)), max_length) test_item_feat = one_hot_sequences(np.random.randint(0, max_length, size=(test_samples, 200)), max_length) user_vector = user_tower.predict([test_user_feat])[0] print("测试用户向量 K=16") print(user_vector) item_vector = item_tower.predict([test_item_feat])[0] print("测试商品向量 K=16") print(item_vector) # 8.计算匹配程度 similar_score = K.sum(user_vector * item_vector, axis=-1, keepdims=True) print("相似度: ", similar_score.numpy())

User-tower :  

Item-tower : 

user-1 与 item-1 的向量表征与相似度:

四.总结

上述实现了基础版的 DSSM,除此之外 WordHash方法的选取,模型深度与大小,激活函数,向量的相似度计算都可以进行不同的尝试,至于使用场景与使用效果就仁者见仁智者见智了。转载请注明出处~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。