网站首页 > 技术文章 正文
1 DSSM
1 简介
深度语义匹配模型,是微软发表的一篇应用于NLP领域中计算语义相似度任务的文章。
DSSM原理很简单:获取用户搜索query和doc的曝光和点击日志数据,训练阶段分别用深度学习网络构建query侧和doc侧特征的 embedding,线上预测时通过计算query和doc两个语义向量的cos距离来表示相似度。
2 模型结构
term vector
输入词向量的维度取决于doc集合大小
Word Hashing
主要作用是减少输入向量的维度,基于字母n-gram方法
中文输入层和英文有很大差别,首先要考虑分词问题。如果要分词推荐jieba或者北大pkuseg,也可以不进行分词,直接使用单字作为最小粒度
全连接层
最下面的Term Vector到Word Hashing将词映射到3W维的向量空间中。然后分别经过两层300维度的隐藏层,最后统一输出128维度的向量。
相似度计算
query和doc统一转换成了两个128维的语义向量,然后通过cos函数计算这两个向量的余弦相似度
相似度概率
相关性带入softmax计算后验概率:
其中,γ是平滑因子,需要根据经验性设置
2 推荐领域中的双塔
分为user塔和item塔,是独立的两个子网络。将两个塔各自缓存,线上预测的时候只需要在内存中进行相似度运算即可。朴素的DSSM双塔模型结构:
3 Google双塔模型
1 主要创新点
- 为解决全库数据量巨大难以高效快速训练的问题,文章采用采样的方式来处理实时流数据,同时提出一种新的采样概率算法,这个概率用于对损失函数进行优化
- 为降低采样偏差带来的影响,文章对batch softmax的损失函数进行了修正
2 模型结构
- 训练标签:点击并进行了完整观看的为1,只点击或者观看很少的认为是0
- Video特征:视频ID、频道ID,转化为Embedding,对于一些多值特征(视频主题)采用Embedding加权平均
- User特征:历史观看视频ID的平均Embedding(过去的一段时间)
- 对于同一个ID的embedding在双塔模型的左侧和右侧是共享的
3 采样概率计算
该方法用于估计在流数据中,每个batch下item出现的概率,核心思想是假设某item连续两次被采样的平均间隔为B,那么该item的采样概率即为1/B,例如:一个item每50步出现一次,那么该item出现的概率p=1/50=0.02
- A[h(y)]表示item y上次被采样到的时刻
- B[h(y)]表示每多少步item y可以被采样一次
当第t步y被采样到时,利用迭代可更新A,B:
α可以看作学习率。通过上式更新后,则在每个batch中item y出现的概率为1/B[h(y)]
4 损失函数
整个召回系统采用双塔结构,分别构建user侧和item侧的embedding,两个塔的输出就为各自的embedding向量,然后计算两个embedding内积后的结果,即
s(x,y)=<u(x,θ),v(y,θ)>
由于是多分类问题,将模型的输出经过一个softmax函数之后得到具体对应的label概率,softmax函数如下
在计算损失函数时引入用户偏好权重ri(用户观看某视频的时长)
当M数量很大时通常采用采样方式,因为本文针对实时流数据,所以对实时流中的数据采样出一个batch,训练的负样本即这个batch中的负样本,但是这样就会引入偏差,即热门视频有更大的可能成为负样本(过度惩罚),所以对上文中两个embedding向量计算得到的内积进行了修正,即
s^c(x_i,y_i)=s(x_i,y_i)-log(p_j)
pj表示视频j被随机选中到batch中的采样概率
损失函数
5 其他优化点
- 归一化:经验表明,对embedding归一化效果更好u(x,θ) \leftarrow u(x,θ)/ ||u(x,θ)||_2
- 内积结果除以一个超参数:s(x,y)=<u(x,θ),v(y,θ)>/τ,τ是一个可以调整的超参数,用来优化模型
6 原文
https://dl.acm.org/doi/abs/10.1145/3298689.3346996?download=true
猜你喜欢
- 2024-10-24 窗口快速切换利器 AltTab 3.22.6中文版
- 2024-10-24 这样上班玩游戏老板都只会夸:5个常用组合键你同事都会用!
- 2024-10-24 窗口快速切换利器AltTab for Mac 3.11.0中文版
- 2024-10-24 这些强大的快捷键,学会你就是公司最早下班的仔!
- 2024-10-24 Altium Design 快捷键(altium designer操作快捷键)
- 2024-10-24 同创双子IT小技巧分享:PPT超实用看快捷键分享,赶紧收藏吧
- 2024-10-24 一个方便的 Windows 10 技巧,让多任务处理变得更容易
- 2024-10-24 css3制作网页中常见的小箭头(html5如何弄箭头)
- 2024-10-24 电脑键盘操作技巧——Windows键或CTRL
- 2024-10-24 窗口快速切换利器AltTab 3.17.0 Mac中文版
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)