数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二十五、DPSR [2020](检索)
近年来,在线购物平台(如
Ebay
、沃尔玛、亚马逊、天猫、淘宝、京东)在人们的日常生活中越来越受欢迎。电商搜索帮助用户从数十亿商品中找到用户需要的东西,因此电商搜索是这些平台的重要组成部分,并且在所有渠道中贡献了最大比例的交易。例如,服务于数亿活跃用户的天猫、淘宝、京东等中国顶级电商平台,Gross Merchandise Volume: GMV
高达数千亿美元。在论文《Towards Personalized and Semantic Retrieval: An End-to-End Solution for E-commerce Search via Embedding Learning》
中,作者将重点关注深度学习最近对电商搜索系统产生的巨大影响。下图给出了京东手机App
上搜索的用户界面。搜索系统的三个组件
Three Components of Search System
:下图展示了一个典型的电商搜索系统,它具有三个组件:query
处理query processing
、候选检索candidate retrieval
、排序ranking
。query
处理将query
(例如 “爷爷的手机”)重写为可以由下游组件处理的term-based representation
(例如[term 手机] AND [term 爷爷]
)。这个阶段通常包括词干化tokenization
、拼写纠正spelling correction
、query
扩展query expansion
、以及重写rewriting
。- 候选检索使用离线构建的倒排索引
inverted indexes
,根据term matching
高效地检索候选item
。这一步将item
数量从数十亿减少到数十万,使得fine ranking
变得可行。 ranking
根据相关性、预估转化率等因子对检索到的候选进行排序。生产系统可能具有级联的ranking steps
,其中从上游到下游依次应用从简单到复杂的ranking
函数。
在论文中,我们仅关注候选检索阶段,以实现更加个性化
personalized
和语义化semantic
的搜索结果,因为这个阶段在我们的搜索产品中贡献了最多的bad cases
。根据我们的分析,JD.com
作为全球最大的电商搜索引擎之一,搜索流量的不满意案例dissatisfaction cases
大约20%
可以归结于这一阶段的失败。如何在ranking
阶段处理这一点不在本文讨论范围内,但是将是我们未来的工作。候选检索中的两个挑战
Two Challenges in Candidate Retrieval
:如何有效地检索更加个性化和语义相关的item
仍然是现代电商搜索引擎面临的主要挑战。语义检索问题
Semantic Retrieval Problem
:指的是传统的倒排索引无法检索语义相关、但是不包含query
的exact terms
的item
。正如《Semantic Matching in Search》
所述,搜索系统最关键的挑战是query
和item
之间的term mismatch
,尤其是对于电商搜索,item
标题通常很短。传统的互联网搜索通常使用
query rewriting
来解决这个问题,它将原始query
转换为另一个可能更好地代表搜索需求的similar query
。但是,很难保证通过middle man
“中间人” (即重写的query
)来保持相同的搜索意图search intention
,并且也不能保证包含不同terms
的相关item
可以通过有限的rewritten query
集合来检索到。个性化检索问题
Personalized Retrieval Problem
:指的是传统的倒排索引无法根据当前用户的性别、购买力等特征检索出不同的item
。例如,如果用户是女性,那么我们希望检索更多的女性T-shirt
,反之亦然。一些基于规则的解决方案已经在我们的系统中使用了很多年,包括:为
item
建立tag
索引,如购买力、性别等等,就像token
进入倒排索引一样;为不同的用户组建立独立的索引。然而,以前的这些方法太过于人工设计hand-crafted
,因此很难满足更精巧subtle
的个性化需求。
论文的贡献:在论文中,作者提出了深度个性化和语义化的检索
Deep Personalized and Semantic Retrieval: DPSR
来解决前述的工业级电商搜索引擎中的两个挑战。论文的贡献可以总结如下:- 论文概述了由离线模型训练、离线索引、在线
serving
组成的完整DPSR
的embedding
检索系统。作者分享了将基于神经网络的候选检索产品化为工业级电商搜索引擎的关键设计决策。 - 论文开发了一种新颖的神经网络模型,该模型具有双塔架构、
query
塔为multi-head
设计、attention-based
损失函数、负采样方法、高效的训练算法和人工监督数据。所有这些对于训练表现最好的模型都是必不可少的。 - 论文展示了作者在构建大规模深度检索训练系统方面所做的努力,其中论文定制化了现有的
TensorFlow API
以实现在线/离线一致性、输入数据存储、以及可扩展的分布式训练。论文还展示了作者在构建用于embedding
检索的工业级在线serving
系统方面所做的努力。 - 论文进行了广泛的
embedding
可视化、离线评估、在线A/B test
,结果表明论文的检索系统可以帮助找到语义相关的item
,并显著改善用户的在线搜索体验,尤其是对于传统搜索系统难以处理的长尾query
(转化率提升10%
)。
自
2019
年以来,论文的DPSR
系统已经成功部署在京东的搜索产品中。- 论文概述了由离线模型训练、离线索引、在线
相关工作:
传统的候选检索
Traditional Candidate Retrieval
:对于候选检索,大多数研究都集中在学习query rewrites
作为一种间接方法来弥合query
和doc
之间的vocabulary gap
。仅有少数的几种新的模型方法,包括矩阵分解的潜在语义索引latent semantic indexing: LSI
、概率模型的概率潜在语义索引probabilistic latent semantic indexing: PLSI
、自编码模型的语义哈希semantic hashing
。所有这些模型都是从doc
中的单词共现中无监督学习的,没有任何监督的label
。我们的方法和之前的方法不同,因为我们训练了一个监督模型来基于具有相关信号(即
click
)的大规模数据集直接优化相关性度量relevance metrics
(而不是优化单词共现)。基于深度学习的相关性模型
Deep Learning Based Relevance Model
:随着深度学习的成功,大量基于神经网络的模型被提出,以学习query
和doc
之间语义相关性的方式来改进传统的信息检索information retrieval: IR
方法和learning to rank: LTR
方法。有关语义匹配和基于深度神经网络的信息检索的全面综述,可以参考
《Semantic Matching in Search》
和《An Introduction to Neural Information Retrieval》
。特别是DSSM
及其后续工作CDSSM
开创了使用深度神经网络进行相关性评分的工作。最近,包括DRMM
、Duet
在内的新模型得到了进一步发展,以将传统的信息检索lexical matching
信号(如query term
重要性、exact matching
)包含在神经网络中。然而,这个方向所提出的大部分工作都集中在ranking
阶段,其优化目标和要求与我们在本文工作所关注的候选检索有很大不同。深度神经网络的双塔架构已经在现有的推荐工作中广泛采用,以进一步结合
item
特征。这种模型架构在自然语言处理中也被称作双编码器dual encoder
。这里我们提出了一个更高级的双塔模型,它由用于query
塔的multi-head
和基于soft
内积(而不是简单内积)的attention
损失函数组成。搜索引擎中的
embedding
检索Embedding Retrieval in Search Engine
:近年来,embedding
检索技术已广泛应用于现代推荐系统和广告系统,但是尚未广泛应用于搜索引擎。我们发现了关于在搜索引擎中检索问题的一些工作,但是它们尚未被应用到工业生产系统中。据我们所知,我们是在工业搜索引擎系统中应用embedding
检索的首批实践探索之一。
25.1 模型
在我们介绍细节之前,先展示以下我们的
embedding
检索系统的全貌。下图说明了我们的生产系统具有以下三个主要模块:离线模型训练
Offline Model Training
模块:训练由query embedding
模型(即query
塔)和item embedding
模型(即item
塔)组成的双塔模型,分别用于在线serving
和离线索引。这种双塔模型架构是一种谨慎且必要的设计,能够实现快速的在线
embedding
检索,具体细节在后面讨论。此外,我们在后面还讨论了我们优化离线训练系统的努力。离线索引
Offline Indexing
模块:加载item embedding
模型(即item
塔),从item
语料库中计算所有item embedding
,然后离线构建embedding
索引以支持高效的在线embedding
检索。由于不可能在数十亿个
item
的item
语料库中进行全量搜索,因此我们采用了一种state-of-the-art
的算法来来对稠密向量进行有效的最近邻搜索,从而为query embedding
找到相似的item embedding
。Online Serving
模块:加载query embedding
模型(即query
塔)从而将任何用户输入的query
文本转换为query embedding
,然后将其馈送到item embedding
索引以检索K
个相似item
。注意,这个在线
serving
系统必须以几十毫秒的低延迟来构建。此外,它必须能够scale
到每秒数十万次查询query per second: QPS
,并且能够灵活地对实验进行敏捷迭代。我们将在后面详细讨论我们为了构建这样一个在线serving
系统所作的努力。
这里将
User Profile
的embedding
进行Concat
,而User History Events, Query Tokens, Item Title Tokens
的embedding
都是进行Average
,有两个原因:- 首先,
User Profile
的字段数量是固定的,因此embedding
拼接之后的长度是确定的。而User History Events
、Query Tokens
、Item Title Tokens
的embedding
数量是可变的,拼接之后的长度是可变的。 - 其次,
User Profile
的各字段是异质的,例如 “年龄” 和 “性别” 是不同的,它们的embedding
难以直接相加;而User History Event
的embedding
是同质的,它们可以直接相加。
接下来我们逐步介绍
embedding learning
模型,按照双塔架构two tower architecture
、query
塔的多头设计multi-head design
、注意力损失函数attentive loss function
、混合负采样hybrid negative sampling
、人工监督数据human supervision data
的顺序。所有这些对于训练我们的最佳表现的模型都是不可或缺的。
25.1.1 双塔架构
如上图的离线模型训练模块所示,模型由
$ f\left(q, s\right) = G\left(Q\left(q\right),S\left(s\right)\right) $query
塔 $ Q $ 和item
塔 $ S $ 组成。对于给定的query
$ q $ 和item
$ s $ ,模型的输出得分为:其中:
- $ Q\left(q\right)\in \mathbb R^{m\times d} $ 表示 $ d $ 维空间中
query
在query
塔的 $ m $ 个输出embedding
。 - $ S\left(s\right)\in \mathbb R^{n\times d} $ 表示 $ d $ 维空间中
item
在item
塔的 $ n $ 个输出embedding
。 - 评分函数 $ G(\cdot,\cdot) $ 计算
query
和item
之间的最终得分。
研究者和从业人员通常让
$ G\left(Q\left(q\right),S\left(s\right)\right) = Q\left(q\right)^\top S\left(s\right) $query
塔 $ Q $ 和item
塔 $ S $ 都输出一个单一的embedding
,即 $ m=1 $ 和 $ n=1 $ ,并选择内积作为评分函数,即:这种最简单的设置在很多应用中已经被证明是成功的。
- $ Q\left(q\right)\in \mathbb R^{m\times d} $ 表示 $ d $ 维空间中
这种双塔架构的关键设计原则是:在模型训练之后,使得
query embedding
和item embedding
相互独立。所以我们可以分别独立地计算它们。所有的item embedding
都可以离线计算,以便为在线快速最近邻搜索构建item embedding index
,并且可以在线计算query embedding
以处理所有可能的用户query
。即使
embedding
是独立计算的,由于query
塔和item
塔之间简单的内积交互,理论上query embedding
和item embedding
仍然在相同的几何空间中。因此,为给定的query embedding
找到K
个最近邻的item
,等效于最小化给定query
的K
个query-item pair
对的损失。在下面的部分中,我们将介绍一个新颖设计的
query
塔 $ Q $ 和一个交互函数 $ G $ ,从而达到出色的、且可解释的检索结果。由于
item representation
通常很直接明了,我们仍然简单地保持item
塔 $ S $ 不变。item
塔 $ S $ 将所有item
特征拼接起来作为输入层,然后通过多层感知机MLP
(采用ReLU
)来输出单个item
的embedding
,最后归一化为与query embedding
相同的长度,如上图离线模型训练模块右侧所示。类似的MLP
结构可以在以前的工作中找到。
25.1.2 Multi-head 的 Query 塔
如上图中离线训练模块的左侧所示,
query
塔和item
塔有两个不同之处:一个投影层
projection layer
,将一个输入的稠密representation
投影为 $ K $ 个稠密的representation
。这里的另一个选择是使用 $ K $ 个独立的embedding
集合,但是它需要更大的模型规模。在实践中,我们选择投影层来实现类似的效果,但是模型规模要小得多。$ K $ 个独立的
encoding MLP
,每个MLP
独立输出一个query embedding
,它们可能会捕获query
的不同意图。我们将这 $ K $ 个输出embedding
称作multi-head representation
。这些
multiple query embeddings
为query
的意图提供了丰富的representation
。通常,我们在实践中发现:这可以为多义词query
(如apple
)捕获不同的语义含义,为商品query
(如cellphone
)捕获不同的流行品牌,为品牌query
(如Samsung
)捕获不同的商品。
值得一提的是,
encoding
层可以使用任何更强大的神经网络,如RNN
和其它state-of-the-art
的transformer-based
模型。在一项独立的离线研究中,我们使用这些高级模型取得了相似或者稍好一些的结果。但是我们要强调的是,简单的MLP
更适合于我们的工业级生产建模系统,因为它对离线训练和在线serving
都更加高效,这意味着我们能够向模型训练馈送更多的数据(因为MLP
的计算效率高),并部署更少的机器来serving
模型。
25.1.3 Attention 损失函数
除了单个
$ G(Q(q),S(s)) = \sum_{i=1}^m w_i\times \mathbf{\vec e}_i^\top \mathbf{\vec g} $embedding
和内积setup
之外,这里我们为multiple query embeddings
开发了一种更通用的形式。我们将query
塔 $ Q(q) $ 的 $ m $ 个输出简写为 $ \{\mathbf{\vec e}_1,\cdots,\mathbf{\vec e}_m\} $ ,其中 $ \mathbf{\vec e}_i\in \mathbb R^d $ ,item
塔 $ S(s) $ 只有一个输出为 $ \mathbf{\vec g}\in \mathbb R^d $ 。那么query
和item
之间的soft
内积可以定义为:这个评分函数基本上是
$ w_i = \frac{\exp\left(\mathbf{\vec e}_i^\top \mathbf{\vec g}/\beta\right)}{\sum_{j=1}^m \exp\left(\mathbf{\vec e}_j^\top \mathbf{\vec g}/\beta\right)} $query embedding
和item embedding
之间所有内积的加权和。权重 $ w_i $ 是从同一组内积的softmax
计算而来:其中 $ \beta $ 为
softmax
的温度超参数。注意, $ \beta $ 越高,则注意力权重就越均匀。
- 如果 $ \beta\rightarrow 0 $ ,那么上述评分函数等价于选择最大的内积,即: $ \max_i \mathbf{\vec e}_i^\top \mathbf{\vec g} $ 。
- 如果 $ \beta\rightarrow \infty $ ,那么上述评分函数等价于
embedding
内积的均值。
当 $ m=1 $ 时,上述评分函数退化为传统的
embedding
内积形式。
这种
multi-head
和multi-head attention
有几点不同:- 首先,这里
item
只有一个head
,而multi-head attention
中的item
有的 $ m $ 个head
。 - 其次,这里内积采用不同
head
的加权和来计算,而multi-head attention
中的内积就是直接sum
而计算。
因此这里
multi-head
的物理意义为:计算query
的不同意图和item
的相似度,然后对于相似度进行加权和。相似度越大的意图,其权重越大。典型的工业点击日志数据集通常只包含
$ \mathcal D = \left\{\left(q_i,s_i^+,\mathcal N_i\right)\mid i,r\left(q_i,s_i^+\right)=1,r\left(q_i,s_j^-\right)=0,\forall s_j^-\in \mathcal N_i\right\} $query
和item
的点击pair
对。这些pair
对通常都是相关的,因此可以被视为正样本。除此之外,我们还需要通过各种采样技术收集负样本,这将在后面详细讨论。我们将所有训练样本的集合 $ \mathcal D $ 定义为:其中每个训练样本是一个三元组,由
query
$ q_i $ 、query
相关的postive item
$ s_i^+ $ 、以及一个negative item
集合 $ \mathcal N_i $ 组成。其中 $ r(q_i,s_i^+)=1 $ 且 $ \mathcal N_i $ 中的每个item
$ s_j^- $ 都和query
无关(即 $ r(q_i,s_j^-) = 0 $ ) , $ r(\cdot,\cdot) $label
信息。然后我们在训练集 $ \mathcal D $ 上使用带
$ \mathcal L(\mathcal D) = \sum_{(q_i,s_i^+,\mathcal N_i)\in \mathcal D}\sum_{s_j^-\in \mathcal N_i} \max\left(0,\delta-f\left(q_i,s_i^+\right) + f\left(q_i,s_j^-\right)\right) $margin
$ \delta $ 的hinge
损失函数:这要求
postive item
评分比negative item
评分至少高出 $ \delta $ 。注意,该注意力损失函数仅适用于离线训练。在在线检索期间,每个
query head
检索相同数量的item
,然后将所有item
根据它们与被检索head
的内积得分进行排序和截断。
25.1.4 负样本
训练深度模型需要大量的数据。我们探索点击日志,它代表用户的隐式相关反馈
implicit relevance feedback
并由query
及其点击item
组成,从而训练我们的embedding
检索模型。直观地,我们可以假设:如果item
在给定的query
条件下被点击,那么该item
和query
相关,至少是部分相关。形式地,我们可以将点击日志视为只有正样本的数据集的特例。那么如何有效地收集负样本是这里的一个关键问题。在我们的实践中,我们采用了一种混合方法,该方法混合了两种负样本来源,包括随机负样本和
batch
负样本。随机负样本
Random Negatives
:随机负样本集合 $ \mathcal N_i^\text{rand} $ 在所有候选item
中均匀采样。形式上,给定所有 $ N $ 个可用
item
的集合,我们从均匀分布 $ j\sim \text{Uniform}(1,N) $ 中随机抽取一个整数,并将item
集合中第 $ j $ 个元素放入到随机负样本集合 $ \mathcal N_i^\text{rand} $ 中。然而,如果我们直接应用这种均匀采样,则计算成本将非常高,因为每个负样本都必须经过item
塔,更不用说对这些负样本进行采样并获取其特征的成本了。为了在保持效果的同时最小化计算成本,我们对一个batch
中的所有训练样本使用相同的随机负样本集合。在实践中,我们发现结果与使用纯随机负样本的结果相似,但是前者训练速度要快得多。
$ \mathcal B = \left\{\left(q_i,s_i^+,\mathcal N_i\right)\mid i\right\} $batch
负样本Batch Negatives
:将batch
中query
的正样本视为其它query
的负样本,从而得到batch
负样本集合 $ \mathcal N_i^\text{batch} $ 。具体而言,对于一个训练batch
:我们可以为第 $ i $ 个样本收集负样本为:
$ \mathcal N_i^\text{batch} = \left\{s_k^-\mid k\ne i,1\le k\le |\mathcal B|\right\} $我们可以看到
batch
负样本基本上是根据数据集中item
频率来采样的。这些随机生成的query-item pair
对不太可能偶然相关。具体而言,偶然相关的可能性等于两个随机抽取的点击日志具有彼此相关的item
。给定一个包含数亿个点击日志的数据集,这个可能性在训练准确性accuracy
方面基本上可以忽略不计。此外,上述
batch
负样本的主要优点是item embedding
计算的复用。在batch
中每个item embedding
有一次作为正样本、有 $ |\mathcal B| -1 $ 次作为负样本,但是只需要一次特征提取及只需要一次item
塔的前向计算。混合比例
$ \mathcal N_i = \mathcal N_i^\text{rand}\cup \mathcal N_i^\text{batch} $Mixing Ratio
:最终的完整负样本集合 $ \mathcal N_i $ 是上述两个负样本集合的并集:在我们的电商搜索检索实践中,我们发现混合比例参数 $ 0\le \alpha \le 1 $ 对于负样本集合的组成通常很有用。形式上,我们采用 $ \alpha $ 比例的随机负样本、 $ (1-\alpha) $ 比例的
batch
负样本。我们发现 $ \alpha $ 的值与从模型中检索到的
item
的流行度popularity
高度相关(参考实验部分),因此对在线指标影响很大。直观地,我们可以看到混合比例 $ \alpha $ 决定了负样本中的item
分布,从均匀分布( $ \alpha = 1 $ )到实际item
频率的分布( $ \alpha = 0 $ )。通过这种方式,该模型倾向于为较大的 $ \alpha $ 检索到更多流行的item
,因为流行的item
在随机负样本中出现的频率,相对于在batch
负样本中出现的频率更低。如果均匀采样,则所有
item
成为负样本的概率都是相同的。如果batch
内负采样,则热门item
成为负样本的概率更高,这使得模型检索到热门item
的概率更低。我们在
DPSR
训练算法中总结了带有batch
负采样和随机负采样的完整训练算法。每个训练
step
的计算复杂度为 $ O(b^2) $ ,即batch size
$ b $ 的二次方。 因为batch
负样本需要在batch
中需要为每个query
和每个item embedding
的pair
对之间计算内积。在实践中,由于batch size
通常很小(如64
或者128
),因此二次效应实际上比其它计算成本(如特征提取、梯度计算等)小得多。事实上,由于batch
负样本对每个item
塔输出的有效利用,总的收敛速度实际上更快。DPSR
训练算法:输入:
postive
数据集 $ \mathcal D^+ $batch size
$ b $- 最大迭代
step
$ T $ - 混合比例 $ \alpha $
输出:训练好的
query
塔 $ Q $ 、item
塔 $ S $算法步骤:
迭代 $ t=1,\cdots,T $ ,迭代步骤为:
- 采样一个
batch
的 $ b $ 个样本 $ \mathcal B\sube \mathcal D^+ $ 。 - 为这个
batch
随机采样一组负样本 $ \mathcal N^\text{rand} $ 。注意, $ \mathcal B $ 中的每个正样本都共享这组相同的负样本。 - 从
query
塔计算query head embeddings
$ Q(q) $ 。 - 对
batch
$ \mathcal B $ 以及随机负样本集合 $ \mathcal N^\text{rand} $ 内每个item
$ s $ 计算item embeddings
$ S(s) $ 。 - 计算损失函数 $ \mathcal L(\mathcal B) $ ,其中包含了
batch
负样本集合 $ \mathcal N^\text{batch} $ 。 - 通过反向传播更新
query
塔 $ Q $ 和item
塔 $ S $ 。
返回训练好的
query
塔 $ Q $ 、item
塔 $ S $ 。- 采样一个
25.1.5 人工监督信息
除了使用点击日志数据之外,我们的模型还能够利用额外的人工监督来进一步纠正极端
case
,结合先验知识并提高其性能。人工监督来自三个来源:大多数跳过的
item
可以从在线日志中自动收集,这些item
和相关的query
可以用作负样本。即曝光但是未点击的
item
可以视为负样本。可以基于领域知识收集人工生成的数据作为人工负样本和人工正样本。例如:
“手机保护套” 被生成为
query
“手机”的负样本,因为它们虽然字面上共享相似的产品词”手机“,但是语义上有着显著差异。iPhone 11
被生成为query
“最新大屏iphone
” 的正样本。
基于人工规则来自动生成正样本和负样本。
人工
label
和上报的bad case
通常用于训练相关性模型。我们将它们作为样本包含在训练数据集中。
这些人工监督数据可以作为正样本和负样本输入到模型中。
这些人工监督数据可以配置更高的样本权重,从而使得模型更关注这些 “特殊” 的样本。
25.2 Embedding 检索系统
我们采用
TensorFlow
作为我们训练和在线serving
的框架,因为它已经被广泛应用于学术界和工业界。尤其是TensorFlow
具有以下优点:训练之前预先建立静态图、训练速度快、训练与在线serving
无缝集成。我们基于
TensorFlow
的高级API Estimator
构建了我们的系统。为了确保最佳性能和系统的一致性,我们还做出了巨大努力来简化现有的Tensorflow package
和工业级深度学习系统。
25.2.1 训练系统优化
在线和离线的一致性
Consistency Between Online and Offline
:构建机器学习系统的常见挑战之一是保证离线和在线的一致性。典型的不一致通常发生在特征计算阶段,尤其是在离线特征预处理和在线serving
系统中使用两个独立的编程脚本时。在我们的系统中,最脆弱的部分是文本
tokenization
,它在数据预处理、模型训练、在线serving
中进行了三次。意识到这一点,我们用C++
实现了一个unique tokenizer
,并用一个非常轻量的Python SWIG
接口包装它以进行离线数据vocabulary
计算,并使用TensorFlow C++
自定义运算符进行离线训练和在线serving
。因此,可以保证相同的tokenizer
代码贯穿原始数据预处理、模型训练、在线预测。压缩的输入数据格式
Compressed Input Data Format
:工业搜索和推荐训练系统的典型数据格式通常由三种类型的特征组成:用户特征(例如query
、性别、地域)、item
特征(例如流行度popularity
)、user-item
交互特征(例如,item
是否被用户看到)。由于训练数据存储所有user-item
交互pair
对,因此原始输入数据会多次重复用户特征和item
特征,这会导致数百TB
的磁盘空间占用、更多的数据传输时间、更慢的训练速度。为了解决这个问题,我们自定义了
TensorFlow Dataset
来从三个独立的文件中组装训练样本:一个用户特征文件、一个item
特征文件、一个包含query, user id , item id
的交互文件。用户特征文件、item
特征文件首先作为特征lookup
字典被加载到内存中,然后交互文件在训练step
中迭代,迭代时从内存读取并添加了用户特征和item
特征。通过这种优化,我们成功地将训练数据的规模减少为原始大小的10%
。在典型的工业级系统中,用户规模在亿级、
item
规模在千万级,因此将用户特征文件、item
特征文件加载到内存中是个瓶颈。一个解决方案是采用内存数据库,如redis
,但是这会增加系统的复杂度(需要维护一套redis
集群,以及处理redis
请求失败的case
)。可扩展的分布式训练
Scalable Distributed Training
:在具有参数服务器parameter servers
的分布式训练场景中,常见的瓶颈之一是网络带宽。工业界大部分大型机网络带宽是10G bits
,对于大型深度学习模型而言远远不够。我们观察到,现有的TensorFlow Estimator
实现在处理embedding
聚合(例如embedding
的sum
)时没有得到足够的优化,因此在增加一些worker
时网络带宽很快成为瓶颈。为了进一步提高训练速度,我们改进了
TensorFlow
官方实现中的embedding
聚合操作,将embedding
聚合操作移到参数服务器中,而不是在worker
中。因此对于每个embedding
聚合,在参数服务器和worker
之间只需要传输一个embedding
,而不是数十个embedding
。因此,网络带宽显著降低,分布式训练系统可以扩展到五倍以上的机器。
25.2.2 在线 Serving 系统
DPSR
在线serving
系统的概述如下图所示。该系统由两个新颖的部分组成:一个是TensorFlow Servable
模型、另一个是模型sharding
代理。One Servable Model
:DPSR
的简单实现可以由两个独立的部分组成:query embedding
计算和最近邻查找。如果没有精心的设计,可以简单地为它们构建两个独立的在线服务。然而,从以下两个方面来看,这不是最优的系统设计:- 它引入了管理
query embedding
模型和item embedding
索引之间映射的复杂性,如果发生映射错误,那么将完全导致系统故障。 - 它需要两次网络往返(一次计算
query embedding
、一次搜索最近邻)来计算给定query
文本的最近邻。
为了克服这些问题,我们通过
TensorFlow Servable
框架采取了一种更优化的方法。在该框架中,我们可以将两个部分统一到一个模型中。如上图所示,这两个部分可以封装到一个Servable
中。query embedding
直接从query embedding model
发送到item embedding
索引,通过计算机内存而不是计算机网络。这里将
Query Embedding Module
和Embedding Indexes
部署在一起。对于规模在千万级的item
,其Embedding Indexes
可能单机内存无法处理。例如,假设embedding size = 128
,embedding
为双精度浮点,那么1
千万item
需要消耗9.5 GB
内存。- 它引入了管理
模型分片
Model Sharding
:系统的进一步扩展需要同时支持数百个DPSR
模型在线,用于不同的检索任务、以及各种模型的A/B test
。然而,一个由query embedding
模型和一个item embedding
索引组成的servable
模型通常需要数十GB
的内存。因此,将所有模型存储在单台机器的内存中变得不可行,我们必须构建一个系统来支持为数百个DPSR
模型的serving
。我们通过一个代理模块来解决这个问题,这个代理模块的作用是将模型预估请求定向到一个保持相应模型的
model server
,如上图所示。这个基础设施不仅是为DPSR
设计的,而且是作为一个通用系统来支持我们搜索产品的所有深度学习模型。
25.3 实验
在本节中,我们首先利用
t-SNE
可视化embedding
结果,以便我们可以直观地了解模型的工作原理。然后我们和不同方法进行比较来评估离线效果。接下来我们报告了我们的搜索产品中的在线A/B test
结果。最后我们报告了DPSR
系统的离线索引和在线serving
耗时,以证明其效率,这在工业环境中至关重要。我们的生产
DPSR
模型是在60
天用户点击日志的数据集上训练的,其中包含56
亿次session
。我们在5
台48-cores
机器的集群中进行分布式训练,共启动了40
个worker
和5
个参数服务器。我们使用了
margin
参数 $ \delta =0.1 $ 、Adam
优化器、学习率0.01
、batch size
$ b=64 $ 、embedding
维度 $ d = 64 $ 。训练大约4
亿step
收敛,耗时约55
个小时。
25.3.1 Embedding 可视化
Embedding Topology
:为了直观了解我们的embedding
检索模型是如何工作的,我们展示了从我们平台中最热门的33
个类目中选择的高频item
的二维t-SNE
坐标。如下图所示,我们可以看到item embedding
的结构非常明确和直观。基本上,我们可以看到:
- 与电子产品相关的类目(如手机、笔记本电脑、平板电脑、耳机、显示器)都很好地放置在图的左侧。
- 与家电相关的类目(如冰箱、平板电视、空调、洗衣机)都放置在图的左下方。
- 与食品相关的类目(如零食、速食、饼干、奶粉)都放置在右下方。
- 与清洁和美容相关的类目(如洗面奶、洗发水)都放置在右侧。
- 与衣服相关的类目(如鞋子、跑鞋、毛衣、羽绒服)都放置在右上方。
总体而言,这种合理且直观的
embedding
拓扑反映了所提出的模型能够很好地学习item
语义,从而使得query embedding
能够检索相关item
。Multi-Head
消歧:在下图中,我们还计算了从10
个商品类目中选择的高频item
的二维t-SNE
坐标,以此说明在query
塔中使用multi-head
的效果。我们在这里使用两个多义词query
作为示例,即'apple'
和'cellphone'
,这两个词也在我们平台的top-10 query
中。- 在图
(b)
中,我们可以看到query 'apple'
的两个head
分别检索了iPhone/Macbook
和apple fruit
。 - 在图
c
中,我们可以看到query 'cellphone'
的两个head
分别检索了两个最受欢迎的品牌:华为和小米。
这些都显示了不同的
head
能够聚焦于不同的潜在用户意图。相比之下,图(a)
中的single-head
模型不适用于手机类别,其中iPhone
构成了远离其它手机的另一个cluster
。这可能是由于最上面的query
'apple'
的歧义性ambiguity
。- 在图
语义匹配
Semantic Matching
:为了更好地理解我们提出的模型是如何执行的,我们在下表展示了我们的检索产品中的几个good cases
。可以看到:通过学习一些单词的语义,DPSR
令人惊讶地能够连接bridging
query
和相关的item
。例如:大童和3-6
岁、自由泳器材和划臂等等。此外,
DPSR
能够纠正query
中的拼写错误,如v
女包 和LV
女包、ovivo
手机和vivo
手机。部分原因是我们利用了token vocabulary
的英文字母三元组。我们还观察到类似的汉字错字纠正,主要是从用户点击和n-gram embedding
中学到的。
25.3.2 离线评估
评估指标:我们使用以下离线指标来评估检索方法。
Top-k
定义为在给定query
的N
个(我们使用N = 1024
)随机item
中,相关的item
在top-k
检索结果中的概率。这个top-k
值是通过平均20
万个随机query
来计算的。更高的top-k
表示更好的检索质量,即命中率hit rate
。AUC
是在一个独立的数据集中计算的,其中人工标记了query-item
相关性。label
为相关的、不相关的,然后embedding
内积或者任何相关性得分(BM2.5
)可以被视为预估分。更高的AUC
代表更好的检索相关性。time
是在48-cores CPU
机器上从query
文本到1500
万个item
中最相关的1000
个item
的总检索时间。该指标决定了一种方法能否应用于工业级检索系统。通常,cutoff
时间是50ms
,但是最好是20ms
。
baseline
方法:我们将DPSR
和BM2.5
、DSSM
等baseline
进行了比较。BM2.5
:是一种基于倒排索引关键词匹配的经典信息检索方法,它使用启发式方法根据term
频率和逆文档频率对文档进行评分。我们比较了BM2.5
的两个版本:仅unigram
、同时包含unigram
和bigram
(记作BM2.5-u&b
)。DSSM
:是一个经典的深度学习模型,为ranking
而不是检索而设计。我们仍然将它作为baseline
进行比较。
另外我们还对比了
DPSR
的几个变体:DPSR
是指我们模型的普通版本,没有任何用户特征。DPSR-p
指的是我们模型的basic
个性化的版本,包含额外的用户画像特征,如购买力、性别等。DPSR-h
指的是我们模型的完整个性化版本,包含用户画像和用户历史event
。
DPSR
和上述baseline
方法的比较结果如下表所示,可以看到:BM2.5
作为一种经典方法表现出了良好的检索质量,但是从1500
万个item
中检索需要1
分多钟,这意味着将其用于在线检索不太现实。- 将曝光未点击
item
作为负样本进行采样的DSSM
在top-k
、MRR
、AUC
等指标上表现最差。这主要是因为DSSM
针对ranking
任务进行优化,而ranking
任务是与检索任务截然不同的任务。因此,我们可以得出结论:仅使用曝光未点击的item
作为负样本并不能训练检索模型。 - 普通版本的
DPSR
在baseline
方法和其它个性化的DPSR
版本中具有最高的AUC
得分,这表明纯语义DPSR
可以获得最高的检索相关性。 basic
个性化版本的DPSR-p
方法的结果表明:用户画像特征有助于改善普通版本的检索质量指标(top-k
),但是在相关性方面有所折衷。- 完整个性化版本的
DPSR-h
在所有模型中具有最佳检索质量指标(top-k
),这表明可以从用户历史事件中提取大量信号。
注意:个性化的模型通过权衡相关性指标(
AUC
)来提高检索质量指标(top-k
),这是合理的。因为检索质量除了相关性之外还包含更多因素,如item
流行度、个性化等。下图说明了随机负样本和
batch
负样本的混合比率 $ \alpha $ 影响检索到的item
流行度。可以看到:- 负采样中的随机负样本越多,检索到的热门
item
就越多(Popularity
指标)。 - 但是太多的随机负样本(例如 $ \alpha = 1.0 $ ) 将损害检索到的
item
的相关性(AUC
指标)。
因此,我们可以将 $ \alpha $ 参数视为检索流行度
popularity
和相关性relevancy
之间的tradeoff
。在实践中我们发现适当的 $ \alpha=0.5 $ 或 $ \alpha =0.75 $ 将有助于显著提升在线指标。- 负采样中的随机负样本越多,检索到的热门
25.3.3 在线 A/B test
DPSR
被设计为我们搜索系统中的一个关键组件,以改善整体用户体验。因此,我们将重点放在DPSR
作为附加检索方法,从而对搜索系统的整体改进上。- 在对照组(
baseline
)中,包含我们当前生产系统中可用的所有候选item
,这些item
通过启用了query rewritten
的基于倒排索引的方法进行检索。 - 在对实验组(
DPSR
)中,除了baseline
中的候选item
之外,还从我们的DPSR
系统中检索了最多1000
个候选item
。
对照组和实验组都通过相同的
ranking
组件和业务逻辑。在这里,我们强调我们的生产系统是一个强大的baseline
来进行比较,因为这个系统已经经过数百名工程师和科学家多年的优化,并应用了最先进的query rewriting
和文档处理方法来优化候选item
的生成。我们首先对检索到的
item
的相关性进行了人工评估。具体而言,给定相同的500
个长尾query
,我们要求人工评估员分别为来自于baseline
系统、DPSR
系统的结果来标记相关性。标记结果分为三个类别:差bad
、一般fair
、完美perfect
。评估结果如下表所示,可以看到:
DPSR
减少了大约6%
的bad case
从而提高了搜索相关性。这证明了深度检索系统在处理difficult
或者unsatisfied
的query
时特别有效,这些query
通常需要语义匹配。- 在对照组(
然后我们使用标准的
A/B test
,在两周内对整个站点流量的10%
进行了在线实验。为了保护商业机密,我们只报告了相对的提升,实验结果如下表所示:DPSR
检索改进了电商搜索中所有核心业务指标,包括用户转化率user conversation rate: UCVR
、gross merchandise value: GMV
、query rewrite rate: QRR
(query
重写率,这被认为是搜索满意度的一个很好的指标)。- 我们还观察到
query
塔的2-head
版本和个性化版本(记作1-head-p13n
)都改进了没有任何用户特征的1-head query
塔的普通版本。 - 特别地,我们观察到改进主要来自长尾
query
,这对于传统搜索引擎而言通常很难。
25.3.4 效率
我们在下表中展示了我们的离线索引构建和在线最近邻搜索的效率,不包括
query embedding
计算。我们报告了使用NVIDIA Tesla P40 GPU
和Intel 64-core CPU
配置下索引和搜索1500
万个item
所消耗的时间。结果表明
DPSR
可以在CPU
上在10ms
内检索候选item
,并且可以从GPU
中受益:索引时间消耗减少85%
、搜索延迟减少92%
、query per second: QPS
吞吐量提高14
倍。我们在下表中报告了使用上述相同
CPU
和GPU
机器的整体模型serving
性能。从query
文本到1000
个最近邻的总延迟可以在15ms ~ 20ms
内完成,这甚至可以与标准倒排索引的检索相媲美。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论