Feature Engineering

模型用来逼近 {{c1 特征上限}}

[[特征设计原则四象限]]

[[特征设计]]

[[特征选择]]

  • 特征值之间的方差小,代表其 {{c1 识别能力较弱}}。

[[数据清洗]] 对异常数据进行清洗,最常见的异常有空值异常(缺省值处理)、数值溢出(数值异常处理)。

[[特征变换]]

使用方式

特征重要性分析和[[特征选择]]

特征抽取

  • ((62c2ceb3-0765-41bd-93ce-c614850a09a8))
  • [[PCA]]
  • [[自编码器]]

[[深度学习不需要特征工程?]]

Explicit Semantic Cross Feature Learning via Pre-trained Graph Neural Networks for CTR Prediction

  • 使用 GNN 构造 (用户特征,物料特征) 的交叉特征
  • 预估输入特征的 xtr

Ref

  • @探讨特征工程的方法论
    • [[类似 automl 的特征字典]]
    • 基于业务逻辑去做特征工程
    • 特征重要性表的特征工程思路
      • 利用 xgb/lgb 输出特征重要性,对重要性高的特征交叉
      • 通过 embedding 对物品进行泛化
  • 工业级推荐系统中的特征工程 - 知乎 (zhihu.com)
    • 误区
      • 深度学习不需要特征工程?
        • 模型可以学习 row-based 的特征变换,很难学习 column-based 特征变换(counting,tf-idf)
      • [[AutoML]] 工具取代特征工程?
      • 特征工程没有技术含量?
    • 搜广推场景下的特征工程
      • high-cardinality 属性表示位特征时的挑战
      • 对特征进行统计,分桶,然后再交叉

Attention

ci=j=1Txαijhjc_{i}=\sum_{j=1}^{T_{x}} \alpha_{i j} h_{j}

  • αij=exp(eij)k=1Txexp(eik)\alpha_{i j}=\frac{\exp \left(e_{i j}\right)}{\sum_{k=1}^{T_{x}} \exp \left(e_{i k}\right)} 是隐藏状态 hjh_j 的权重
    • 用 softmax 得到一个强度表征
    • 为什么需要使用 softmax 做归一化 #card
      • 避免 attention score 数值过大,导致优化不稳定(数值小的部分)
      • 保证 score 非负

eij=a(si1,hj)e_{i j}=a\left(s_{i-1}, h_{j}\right) 是注意力打分机制

  • 代表 → 解码器状态 si1s_{i-1} 和解码器状态 hjh_j 之间的匹配程度
  • 常用的注意力计算方式
    • 加性模型 → s(xi,q)=vTtanh(Wxi+Uq)s \left(\mathbf{x}_{i}, \mathbf{q}\right) =\mathbf{v}^{\mathrm{T}} \tanh \left(W \mathbf{x}_{i}+U \mathbf{q}\right)
      • qkv 矩阵较大时效果超越 dot production
    • 点积模型 → s(xi,q)=xiTqs\left(\mathbf{x}_{i}, \mathbf{q}\right) =\mathbf{x}_{i}^{\mathrm{T}} \mathbf{q}
      • 不需要额外参数,但是两个矩阵大小需相同
    • 缩放点积模型 → s(xi,q)=xiTqds\left(\mathbf{x}_{i}, \mathbf{q}\right) =\frac{\mathbf{x}_{i}^{\mathrm{T}} \mathbf{q}}{\sqrt{d}}
    • 双线性模型 → s(xi,q)=xiTWqs\left(\mathbf{x}_{i}, \mathbf{q}\right) =\mathbf{x}_{i}^{\mathrm{T}} W \mathbf{q}

聚焦式(focus)注意力:

  • 自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力。

 Attention (Query, Source) =i=1Lx Similarity (Query, Keyi)Valuei\text{ Attention (Query, Source) }=\sum_{i=1}^{L_{x}} \text{ Similarity (Query, Key}_{i} ) * \text{Value}_{i}

流程可视化

为什么要用 attention

  • 参数少,速度快,能缓解神经网络模型复杂度。解决 RNN 不能并行计算问题
  • 效果显著

按计算区域划分

  • soft-attention(global attention) → query 对所有 key 求相似度权重,得到 m*n 的 attention score
    image.png
    • att((K,V),q)=i=1Nαivi=i=1Nexp(s(ki,q))jexp(s(kj,q))vi\begin{aligned} \operatorname{att}((K, V), \mathbf{q}) &=\sum_{i=1}^{N} \alpha_{i} \mathbf{v}_{i} \\ &=\sum_{i=1}^{N} \frac{\exp \left(s\left(\mathbf{k}_{i}, \mathbf{q}\right)\right)}{\sum_{j} \exp \left(s\left(\mathbf{k}_{j}, \mathbf{q}\right)\right)} \mathbf{v}_{i} \end{aligned}
  • hard-attention → 直接精准定位到某个 key,其余的 key 不管,单个样本 query 仅对单个 key 进行相似度计算,得到 m*1 的 attention score
  • local-attention → hard定位单个key,以这个 key 为中心取周围区域,计算各个窗口的 soft-attention,得到 m*k 的 attention score

按所用信息

  • general-attention → 利用外部信息,用于构建两段文本之间关系的任务
  • [[self-attention]] → 只使用内部信息,寻找原文内部的关系。

按使用模型

  • CNN 是基于 N-gram 的局部编码,RNN 由于梯度消失问题也只能建立短距离依赖。
  • 解决上面的问题有两种方法:利用深层神经网络来获取远距离的信息交互或者是使用全连接网络。
  • [[LSTM]] 对所有 step 的 hidden state 进行加权,注意力集中到整段文本中比较重要的 hidden state 信息。

[[Attention 按 QKV 划分]]

注意力计算方式 Neural Machine Translation by Jointly Learning to Align and Translate

Ref


Word Embedding

两种方法

  • Count-based
    • word frequency and co-occurrence matrix
  • Context-based

词向量常用方法

[[One-hot Encoding]] 维度灾难,样本稀疏

统计语言模型:通过统计词频计算一个句子在文本中出现的概率,以此确定哪个词序列的可能行更大。

  • [[Markov]]假设 n-gram 模型
  • 泛化能力差、模型计算复杂度高、没有解决文本本身的表征问题

[[NNLM]] 利用神经网络求解出每个词语的 Word Embedding

[[Word2Vec]] 考虑文本的上下文环境

[[GloVe]] svd 矩阵分解和 [[Word2Vec]] 上下文思想

Conxtextualized Word Embedding 每一个 word token 都给一个 embedding

[[ELMo]]

[[GPT]] 单向语言模型,生成式任务

[[BERT]]

常见 emebdding 方法对比


Seq2Seq

[[Sequence to Sequence Learning with Neural Networks]]

[[Massive Exploration of Neural Machine Translation Architectures]]

google/seq2seq: A general-purpose encoder-decoder framework for Tensorflow

Encoder - Decoder

Decoder

  • decoder 涉及输入是正确的单词还是预测的单词
    • Free Running → 使用 Decoder 上一步的预测结果作为当前步的输入
      • 错误累积 → 每次输入预测单词,某个单词预测错,后面会跟着错,模型很难收敛
    • [[Teacher Forcing]] → 使用目标文本的“标准答案”作为Decoder的输入
      • 缺点 #card
        • 每次输入正确单词,会导致 overcorrect
        • exposure bias 误差爆炸/曝光误差 (训练环节和预测环节存在行为差异)
    • Scheduled sampling 计划采样 #card
      • 1-p 的概率用 teacher forcing
      • 以一定概率随机选择用模型输出还是用真值,选择概率随着训练的推进不断调整
  • [[Beam Search]] 每一步,多选几个作为候选,最后综合考虑,选出最优的组合。

[[Transformer]] 不适用 RNN

CNN Seq2Seq [[Convolutional Sequence to Sequence Learning]]


Positional Encoding

为什么使用

如何理解Transformer论文中的positional encoding,和三角函数有什么关系? - 知乎 (zhihu.com) #card

  • 如何构建一种位置编码?
    • 直接使用下标计数 PE= pos
      • 序列没有上限,后面的词可能位置编码非常大。
    • 使用文本长度对每个位置归一化 PE = pos/(T-1)
      • 不同长度文本的位置编码步长是不同的,长文本和短文本中两个相邻词的位置编码存在差异
    • 有界周期函数
  • 本质对位置信息进行建模,需要满足
    • 需要体现同一个单词在不同位置的区别
    • 相对次序关系,体现先后次序关系,编码差异不应该依赖于文本长度
    • 值域落在一定数值区间内

Ref


CTR

指标

+

  • CVR 转化率
    • SSB: Sample Selection Bias,训练时集合是点击的样本,正样本为转换的,负样本为未转化。预测时空间为全体样本,存在 bias

BERT

[[@BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding]]

代码:google-research/bert: TensorFlow code and pre-trained models for BERT

大模型 + 微调提升小任务的效果

输入层

BERT

两种 NLP 预训练

[[ELMo]]

[[GPT]]

-w1304

贡献性

模型输入:

训练方式

  • [[Masked-Language Modeling]] →mask 部分单词,80 % mask,10 % 错误单词, 10% 正确单词
    • 目的 → 训练模型记忆句子之间的关系。
      • 减轻预训练和 fine-tune 目标不一致给模型带来的影响
  • [[Next Sentence Prediction]] → 预测是不是下一个句子
    • 句子 A 和句子 B 有 50% 的概率是上下文
    • 解决后续什么问题 → QA 和自然语言推理
      image.png

[[激活函数]] [[GELU]]

优化器

fine tune

研究取不同的 embedding 效果

缺陷

[[Ref]]


Normalization

解决 [[Internal Covariance Shift]]

  • 本质是平滑 Loss,保持在梯度下降过程中的稳定。

连续特征的值分布不统一,会导致训练波动,影响收敛速度。

归一化:对不同特征维度的伸缩变换的目的是使各个特征维度对目标函数的影响权重是一致的,即使得那些扁平分布的数据伸缩变换成类圆形。

[[归一化方法]]

减少人为参数选择

缓解过拟合

减少梯度消失,加快收敛速度,提高训练精度

通过计算均值和方差的集合分成,输入 [N, C, H, W] 维度图片

  • 不同方法的区别在于神经元集合 S 的范围如何确定
    image.png
  • [[Group Normalization]]
  • [[Batch Normalization]] 神经网络中间层进行归一化
    • C 维度上,计算 (N, H, W) 的统计量
  • [[Layer Normalization]] RNN 等序列模型
  • [[Instance Normalization]]
    • LN 相同对单个样本操作
    • IN 对同一层神经元中的同一个通道进行归一化

[[Weight Normalization]]

Ref


Xavier Initialization

Glorot 条件 → 好的初始化应该使得各层的激活值和梯度的方差在传播过程中保持一致。

  • mean=0.0, std_dev=(2.0 / (input_dim + output_dim)) ** 0.5
  • tf.contrib.layers.xavier_initializer
  • W = tf.Variable(np.random.randn(node_in, node_out)) / np.sqrt(node_in)

保持输入与输出的方差一致。在线性函数上推导出来,部分非线性函数比如(tanh)也可以使用。ReLU 需要使用 [[He Initialization]] 解决

Ref


TCN

{:height 198, :width 509}

  • TCN 中输入和输出可能有不同的宽度,c 图表示使用 11 卷积调整输入大小
    • 也可以直接通过 zero padding 来增加 channels

TCN = 1D FCN + causal convolutions

特点

  • 使用因果卷积,不会泄漏未来信息。
    • 论文中强调和 RNN 之类方法进行对比,所以要考虑因果。
  • 可以取任意长度的序列,并将其映射到相同长度的输出序列。
  • 引入 [[ResNet]] 和扩张卷积的组合可以将网络做深以及增加感受野。

细节

  • tcn 中没有 pooling 层
  • normalization 方法是 weight norm,更适合序列问题

增加感受野的方法

  • 更大的 kernel_size (增加参数,卷积核大效果差,卷积核过大会退化成一个全连接层)
  • [[空洞卷积]]

时序问题

    1. 输入和输出矩阵大小相同
    1. 不能使用没有发生时刻的信息,因果卷积

[[ETA 模型]] 实现

  • ((f431b69d-e38f-4a1f-ac98-1c80d3e0bcbe))

Logistic Regression

逻辑回归,能融合多种特征。

$y=f(W^x+b), y \in {0, 1}, f$ 是 link function

线性分类

  • 硬分类 ↔ 直接输出输出对应的分类 $y \in {0, 1}$
    • ((62c2ceb3-0765-41bd-93ce-c614850a09a8))
    • [[感知机]]
  • 软分类 ↔ 产生不同类别的概率 $y \in [0, 1]$
    • 概率生成式(连续),类别先验 [[Gaussian Discriminant Analysis]] GDA [[Naive Bayes Classifier]]
      • $P(y=0|x), P(y=1|x)$ 的大小关系
    • 概率判别式(离散) Logisitic Regression
      • 直接对 $$P(Y|X)$$ 建模

逻辑回归

  • $$P(Y|X, \theta)=p_1^yp_0^{1-y}$$ 服从[[Bernoulli Distribution]]
    • 求 MLE 转化成 Cross Entropy
  • $P(C|x)$ 利用[[贝叶斯定理]] $$P(C_1|x)=P(x|C_1)P(C_1)$$
  • 取 $$z=\ln \frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2}$$
    • 激活函数 [[sigmoid]] ((e85db27c-df31-452f-9f86-c9ebdb308e6c))
      • 阶跃函数不连续,sigmoid函数光滑,处处可导
      • 数据取值范围从正无穷压缩到 0-1
    • 两类联合概率比值的对数
    • odds 几率代表事件发生和不发生的比值 $$\frac{p}{1-p}$$
    • 对数几率的线性回归
  • $$P(y=0|x)=\frac{1}{1+\exp(-w^Tx)}$$
  • $$P(y=1|x)=\frac{\exp(-w^Tx)}{1+\exp(-w^Tx)}$$
  • MLE $$w=\mathop{argmax} \sum(y_i \log p_1 + (1-y_i)\log p_0)=\mathop{argmax} \sum(y_i \log f(x,w) + (1-y_i)\log (1-f(x,w))$$
    • 等价于 Cross Entropy
  • 多分类
    • softmax regression
    • 参数冗余
  • 多标签:每个标签设计一个分类器

在推荐系统中,LR 当成是一个分类问题处理,通过预测正样本的概率对物品进行排序。将推荐问题转化为预估问题。另外也能使用 [[Pair Wise]]

优点

  • 数学含义:用户是否点击广告是一个经典的掷偏心硬币问题,显然符合伯努利分布
  • 可解释性强
  • 工程化较为简单

[[面试]]

  • LR归一化问题
    • 什么情况可以不归一化 → 最小二乘法
    • 什么情况必须归一化 → 梯度下降算法
    • [[Wide&Deep]]
  • 提到LR损失函数要能知道交叉熵,为什么是它,以它为损失函数在优化的是一个什么东西,知道它和KL散度以及相对熵的关系
    +
  • 提到LR的求解方法,比如SGD,知道SGD和BGD的区别,知道不同的GD方法有什么区别和联系,二阶优化算法知道什么,对比offline learning和online learning的区别
  • 提到调参,知道模型不同超参数的含义,以及给定一个特定情况,大概要调整哪些参数,怎么调整
  • 提到LR的正则,知道l1l2的原理,几何解释和概率解释
  • LR的分布式实现逻辑是怎么样的,数据并行和模型并行的区别,P-S架构大概是怎么一回事
  • LR作为一个线性模型,如何拟合非线性情况?
    • 特征侧比如离散化,交叉组合,模型比如引入kernel,又可以推广到FM等model上
  • LR 如何解决低维不可分
    • 通过核函数将特征从低维空间转换到高维空间,高维空间中线性可分的几率会变高

DCN

在 Wide & Deep 基础上,对 Wide 部分进行改进。LR 无法进行特征交叉,FM 受限于性能一般只去做二阶交叉,Cross 可以实现高阶交叉。DCN 和 DNN 相比,相同效果情况下可以减少参数量。

Cross 网络只能处理定长的输入,[[ETA]] v4 中无法使用……

特征处理和常规的模型一样,Sparse feature 经过 embedding 处理,然后和 Dense feature concat 在一起。由于 Cross network 每一层的大小都和输入向量大小相等,如果 Sparse feature 不处理,输入维度会很大,然后参数量会增加。

Cross 和 Deep 的输出结果 concat 后过一个 LR 直接输出。

Cross Network

  • 每一层都是由 x0x_0 和前一层的输出 xlx_l 交叉学习残叉。
  • ResNet 的引入可以将网络做的更深。
  • 特点:有限高阶、自动叉乘、参数共享
  • xl+1=x0xlTwl+bl+xl=f(xl,wl,bl)+xl\mathbf{x}_{l+1}=\mathbf{x}_{0} \mathbf{x}_{l}^{T} \mathbf{w}_{l}+\mathbf{b}_{l}+\mathbf{x}_{l}=f\left(\mathbf{x}_{l}, \mathbf{w}_{l}, \mathbf{b}_{l}\right)+\mathbf{x}_{l} #card
    • 图中可以看到随着层数的增加,参数 w 会线性增加。
      image.png

Deep NetWork

  • Cross Network 中的参数量太少,不能学习高维的非线性特征。

Analysis

  • Cross 的设计最后包含了每个特征的从 1 阶到高阶的特征组合。与 FM 不同每个特征组合的参数部分共享,所以能降低参数量,比 FM 有更好的泛化性和鲁棒性。比如 FM 可以解决 xi 和 xj 没有同时出现过的情况,但是 Cross 能处理 xi 和 xj 都没有出现过的情况 …… #card
    image.png

Learning to Rank

[[Point Wise]]

  • 全局相关性
  • 没有对先后顺序的优劣做惩罚
  • 将 Ranking 算法转化成回归、分类或序列回归

[[Pair Wise]] 二分类

  • 多个 pair 排序问题,比较不同文章的先后顺序
  • 目标
    • 减少误分类 doc pair 的比例
  • 问题
    • 考虑出现的相对位置,但是没有考虑文档在搜索列表中的位置。
      • 排在搜索结果前面的文章更为重要,如果排在靠前的文章出现判断错误,代价明显高于排在后面的文档
    • 不同查询相关文档数量差异大
  • 方法
    • RankNet
    • [[GBRank]]
      • $L\left(f ; x_{u}, x_{v}, y_{u, v}\right)=\frac{1}{2}\left(\max \left{0, y_{u, v}\left(f\left(x_{v}\right)-f\left(x_{u}\right)\right)\right}\right)^{2}$
        • 关注逆序部分
        • 逆序 loss 为正,正序 loss 为零

[[List Wise]]

  • 考虑整体序列,针对 Ranking 评价指标进行优化
  • 方法
    • AdaRank
    • SoftRank
    • [[LambdaMART]]
    • LambdaRank
      • 蓝色表示相关文档,右侧的图片中,虽然指标下降,但是从直觉上来说并不好。

指标

  • MAP(Mean Average Precision)
    • $$A P=\frac{\sum_{j=1}^{n_{i}} P(j) \cdot y_{i, j}}{\sum_{j=1}^{n_{i}} y_{i, j}}$$
    • $$P(j)=\frac{\sum_{k: \pi_{i}(k)} \leqslant y_{i, k}}{\pi_{i}(j)}$$
    • $$MAP=\frac{\sum_{q=1}^{Q} \operatorname{AveP}(q)}{Q}$$
      • 所有 query 的 ap 值取平均
    • 例子
      • 假设query_1有4个相关的document,分别被模型排在1,2,5,7位,那么query_1的AP就是(1/1+2/2+3/5+4/7) / 4;
      • query_2有5个相关的document,分别被模型排在2,3,6,29,58位那么query_2的MAP就是(1/2+2/3+3/6+4/29+5/58) / 5,但通常情况下,我们的 %5B公式%5D 不会取到58,只会关注排名靠前的document,因此排在29与58的document可以视为没有被模型检索出来,假设取m %5B公式%5D ,则query_2的AP是(1/2+2/3+0+0+3/6+0+0)/5。
      • 对以上两个query取平均即可得出MAP。
  • [[NDCG]]

Ref

  • Learning to Rank for Information Retrieval
  • FM模型在LTR类问题中的应用 [[杨镒铭]]
    • $$L=-\log \left(\tilde{y}{i j}\right)=\log \left(1+\exp \left(-\left(\tilde{y}\left(x{i}\right)-\tilde{y}\left(x_{j}\right)\right)\right)\right.$$

self-attention

不同部分作用

  • query → 与 key 计算相似度,为自身的输出 i 建立权重
  • key → 与 query 计算相似度,建立第 j 个向量 j 的权重
  • value → 作为加权总和的一部分,计算每个输出向量

对自身 $$X$$ 线性变化得到 $$Q=W_QX, K=W_KX, V=W_VX$$,用来捕获同一个句子中单词之间的一些句法特征或者语义特征。

注意力计算

  • $$\begin{aligned} \mathbf{h}{i} &=\operatorname{att}\left((K, V), \mathbf{q}{i}\right) \ &=\sum_{j=1}^{N} \alpha_{i j} \mathbf{v}{j} \ &=\sum{j=1}^{N} \operatorname{softmax}\left(s\left(\mathbf{k}{i}, \mathbf{q}{i}\right)\right) \mathbf{v}_{j} \end{aligned}$$

打分函数 $${H=V softmax(\frac{K^TQ}{\sqrt{d_3}})}$$

过程

  • {:height 648, :width 1229}

为什么 self-attention 先对 embedding 进行 dense 层映射,然后再进行 attention 计算?

  • dense 层 #card
    • W 为自注意力层提供一些可控制的参数,允许输入的向量适合 QKV 的功能。
    • qkv 的大小,实现降维。
    • 多头机制作用 → 每一个头对应的 wq、wk、wv 矩阵都不同,对模型的本身特征抽取的多样性具有帮助。
  • 为什么不能直接做 attention 计算?原始 embedding 空间点击建模 → 语义关系
    • 点积建模语义的问题 → 默认假设语义相近的注意力更高, ((6302f9de-2236-4a22-bdd4-3800e7a976da))
      • 结果 → 其他位置上有关系的注意力相关性就会被弱化。
  • 进行变换后的点积含义
    • 新空间点积 → 表示注意力高,但不代表语义相似度高。
      • 好处 → 能在新空间里更加专注于注意力的学习。
  • 一个词在做 query、key、value 时,直觉 → 有不同的表示

为什么 self-attention 中的词向量要乘以 QKV 参数矩阵?

  • self-attention 核心利用 {{c1 文本中的其它词}}来增强 {{c2 目标词的语义表示}}
  • 不乘以 QKV 矩阵 → qkv 完全一样,qi 和 ki 的点积比重会最大,无法有效利用上下文信息来增强当前词的语义表示。
  • QKV 参数矩阵使得多头作用 → 类似于 CNN 中的多核,使捕捉更丰富的特征/信息成为可能

现在看来self-attention 是增强了模型表示能力,还是有了更好的对特征的权重加权? - 知乎 → 增强模型表达能力

  • 增强模型表达能力 → 加权对象是 token,融合不同的 token 来构造当前 token 在当前上下文情况下的表示
  • 如果是对特征进行加权, → 初始化的 word embedding应该直接用那些预训练好的,实际上预训练的词向量并不会提高模型收敛后的效果。

Ref


GMM

解决高斯分布的单峰性,引入多个高斯模型加权平均拟合数据

几何角度

  • $$p(x)=\sum _{k=1}^{K} \alpha _k N( \mu _k, \Sigma _k), \sum \alpha = 1$$

生成模型角度

  • 利用离散变量 z 来选择来自哪一个高斯分布
  • $$p(x)=\sum\limits_zp(x,z)=\sum\limits_{k=1}^Kp(x,z=k)=\sum\limits_{k=1}^Kp(z=k)p(x|z=k)$$
  • 得到 $$p(x)=\sum\limits_{k=1}^Kp_k\mathcal{N}(x|\mu_k,\Sigma_k)$$

[[MLE]] 求解

  • 求解上面的 px
  • $$\theta_{MLE}=\mathop{argmax}\limits_{\theta}\log p(X)=\mathop{argmax}{\theta}\sum\limits{i=1}^N\log p(x_i)=\mathop{argmax}\theta\sum\limits{i=1}^N\log \sum\limits_{k=1}^Kp_k\mathcal{N}(x_i|\mu_k,\Sigma_k)
    $$
    id:: c2bad652-6069-4d7d-8ee2-2183f91a67cb
  • log 中有连加号存在,无法求出解析解。

[[EM]] 求解

  • ((a605dce6-2a08-4836-8f9e-7c5565daea7f))
  • E-Step
    • $$Q(\theta,\theta^t)=\sum\limits_z[\log\prod\limits_{i=1}^Np(x_i,z_i|\theta)]\prod \limits_{i=1}^Np(z_i|x_i,\theta^t)\
      =\sum\limits_z[\sum\limits_{i=1}^N\log p(x_i,z_i|\theta)]\prod \limits_{i=1}^Np(z_i|x_i,\theta^t)
      $$
    • 对第一个累加号展开,第一项为:
      • $$\sum\limits_z\log p(x_1,z_1|\theta)\prod\limits_{i=1}^Np(z_i|x_i,\theta^t)=\sum\limits_z\log p(x_1,z_1|\theta)p(z_1|x_1,\theta^t)\prod\limits_{i=2}^Np(z_i|x_i,\theta^t)\
        =\sum\limits_{z_1}\log p(x_1,z_1|\theta)
        p(z_1|x_1,\theta^t)\sum\limits_{z_2,\cdots,z_K}\prod\limits_{i=2}^Np(z_i|x_i,\theta^t)\
        =\sum\limits_{z_1}\log p(x_1,z_1|\theta)p(z_1|x_1,\theta^t)$$
      • 后面与 1 无关求和结果为1
    • $$Q(\theta,\theta^t)=\sum\limits_{i=1}^N\sum\limits_{z_i}\log p(x_i,z_i|\theta)p(z_i|x_i,\theta^t)$$
      • $$p(x,z|\theta)=p(z|\theta)p(x|z,\theta)=p_z\mathcal{N}(x|\mu_z,\Sigma_z)$$
      • $$p(z|x,\theta^t)=\frac{p(x,z|\theta^t)}{p(x|\theta^t)}=\frac{p_z^t\mathcal{N}(x|\mu_z^t,\Sigma_z^t)}{\sum\limits_kp_k^t\mathcal{N}(x|\mu_k^t,\Sigma_k^t)}$$
    • $$Q=\sum\limits_{i=1}^N\sum\limits_{z_i}\log p_{z_i}\mathcal{N(x_i|\mu_{z_i},\Sigma_{z_i})}\frac{p_{z_i}^t\mathcal{N}(x_i|\mu_{z_i}^t,\Sigma_{z_i}^t)}{\sum\limits_kp_k^t\mathcal{N}(x_i|\mu_k^t,\Sigma_k^t)}$$
  • M-Step
    • $$Q=\sum\limits_{k=1}^K\sum\limits_{i=1}^N[\log p_k + \log \mathcal{N}(x_i|\mu_k,\Sigma_k)]p(z_i=k|x_i,\theta^t)$$
    • $$p_k^{t+1}=\mathop{argmax}{p_k}\sum\limits{k=1}^K\sum\limits_{i=1}^N[\log p_k+\log \mathcal{N}(x_i|\mu_k,\Sigma_k)]p(z_i=k|x_i,\theta^t)\ s.t.\ \sum\limits_{k=1}^Kp_k=1$$
      • 化简 $$p_k^{t+1}=\mathop{argmax}{p_k}\sum\limits{k=1}^K\sum\limits_{i=1}^N\log p_kp(z_i=k|x_i,\theta^t)\ s.t.\ \sum\limits_{k=1}^Kp_k=1$$
      • [[Lagrange Multiplier]] $$L(p_k,\lambda)=\sum\limits_{k=1}^K\sum\limits_{i=1}^N\log p_kp(z_i=k|x_i,\theta^t)-\lambda(1-\sum\limits_{k=1}^Kp_k)$$
      • [[Lagrange]] $$L(p_k,\lambda)=\sum\limits_{k=1}^K\sum\limits_{i=1}^N\log p_kp(z_i=k|x_i,\theta^t)-\lambda(1-\sum\limits_{k=1}^Kp_k)$$
      • $$\frac{\partial}{\partial p_k}L=\sum\limits_{i=1}^N\frac{1}{p_k}p(z_i=k|x_i,\theta^t)+\lambda=0\
        \Rightarrow \sum\limits_k\sum\limits_{i=1}^N\frac{1}{p_k}p(z_i=k|x_i,\theta^t)+\lambda\sum\limits_kp_k=0\
        \Rightarrow\lambda=-N$$
      • $$p_k^{t+1}=\frac{1}{N}\sum\limits_{i=1}^Np(z_i=k|x_i,\theta^t)$$
    • $$\mu_k,\Sigma_k$$ 无约束参数,直接求导

对比 MLE 和 EM 在求解 GMM 问题上的区别

  • ((c2bad652-6069-4d7d-8ee2-2183f91a67cb))
  • ((3aa8ac1b-d4d1-4771-8b53-bedb9504a747))
  • 极大似然需要计算 $$P(X)$$,EM 计算 $$P(X,Z)$$。$$P(X) = \sum _Z P(X,Z)$$,每次单独考虑 $$P(X,Z)$$,避免在 log 中求和。

E 和 M 具体的含义还没有整理!


DIEN

亮点

    1. 引入辅助 Loss:利用 GRU 的 hidden state 与下一个点击的商品做一个
    1. 一般模型把用户行为直接当成兴趣,dien 认为用户兴趣是隐藏在行为中,需要去挖掘

image.png

  • feature 分成四类:User Profile, User Behavior, Ad and Context
  • [[interest extractor layer]] 作用 → 兴趣抽取层,用 GRU 抽取序列信息
  • [[interest evolving layer]] 作用 → 兴趣进化层,将Target Attention引入GRU,过滤掉与待排序的广告不相关的信息。
  • [[AUGRU]] 计算方法 #card
    • 这里是先用序列中Item的隐状态和待排序的广告Embedding计算一个Attention标量,再将该标量乘以更新门控向量。
    • 最终隐藏状态和候选状态,以及每一个维度的重要性,由当前Item隐状态,待排序广告,前一Item隐状态,当前Item原特征(后两者用于计算更新门)共同决定。

源码阅读

  • train.py 指定模型
  • model 中包含对模型的实现
  • 数据
    • uid_voc.pkl: 用户名对应的id
    • mid_voc.pkl: item对应的id
    • cat_voc.pkl:category对应的id
    • item-info:item对应的category信息
    • reviews-info:用于进行负采样的数据
    • local_train_splitByUser:训练数据,一行格式为:label、用户名、目标item、 目标item类别、历史item、历史item对应类别。
    • local_test_splitByUser:测试数据,格式同训练数据
  • 网络设置
    • embeeding 18
    • hidden size 18*2
    • attention_size 18*2
    • fcn: 200-80-2
    • dice
    • prelu
  • 需要分析代码:
    • aux 网络
    • gru 改造
    • din_fcn_attention

[[Ref]]


inductive bias

先验知识以及假设

  • 算法对学习问题做的假设

归纳偏置

  • 归纳和演绎 induction deduction
  • 从一些例子中寻找共性、泛化,形成一个比较通过的规则的过程
  • 偏置代表对模型的偏好
  • 用规则约束模型,从而起到模型选择
    • 将无限可能的目标函数约束在一个有限的类别假设中
    • 近似损失 + 估计损失(更宽松的假设会增大这个损失)

常见的例子

  • [[奥卡姆剃刀]] → 希望学习到的模型复杂度更低
  • [[KNN]] → 特征空间中相邻的样本倾向于属于同一类
  • {{c2 SVM 好的分类器}} 应该 {{c1 最大化类别边界距离}}
  • [[RNN]] → 每一个时刻的计算依赖历史计算结果
    • sequentiality
    • time invariance
      • 序列顺序上的 timesteps 有联系
    • 时间变换不变性
      • 权重共享
  • 双向 RNN
    • RNN 假设当前输入和之前的输入有关系,双 RNN 假设当前输入和之前、之后的输入都有关系
  • [[DNN]] → 信息应该逐级加工,层层抽象
  • [[CNN]] → 信息具有空间局部性,滑动卷积共享权重方式降低参数空间
    • locality
    • spatial invariance
      • 空间相近的 grid elements 有联系而远的没有
    • 空间变换不变性 translation invariant
      • kernel 权重共享
  • [[GNN]] 连接不变性
  • [[Attention]]
  • [[Word2Vec]] → A word’s meaning is given by the words that frequently appear close-by.
    • 结构相似性
    • 例子:猫和狗在语料中没有同时出现,但是他们的上下文完全一致,所以最终 embedding 相似。
      • 我有一只猫。
      • 我有一只狗。

Multi-Task Learning

基本网络框架 [[底层共享法]]
image.png

结构

  • [[MMoE]]
  • CGC
  • ESSM
  • [[PLE]]

Optimization

  • Gradnorm
    • 考虑 Loss 量级和考虑不同任务的速度
    • Label loss 和 Gradient loss
  • Dynamic Weight Averaging

两大分支:“网络设计” 以及 “损失函数设计”

关键点

  • 任务需要有相关性
  • 任务之间可以共享低层表示

网络设计

  • 参考 [[神经网络与深度学习]]
  • 网络如何小巧轻便,如何最大幅度的让不同的任务去共享信息。
  • Hard parameter sharing 底层共享参数,最上层有不同的任务。
    • Task 越多,单任务越不容易拟合
    • 底层难以学到试用于所有任务的表达,比如多任务:猫狗分类,猫汽车分类
  • Soft parameter sharing
    • 不同任务的参数空间需要添加限制,不然容易变成 single task learning
  • 层次共享
    • 图像中不同层次的表达能力不同:结构提取、语义提取
  • 共享-私有
  • Cross-Stitch Network、Multi-Attention Network、AdaShare、MTL+NAS 可以参考 “综述性质的文章Multi-task Learning and Beyond: 过去,现在与未来 - 知乎

损失函数设计

  • 如何分配不同任务损失函数的权重?

类似方向 [[Auxiliary Learning]]

[[Ref]]


Beam Search

[[NLP]] 中比较常用

参数 B 控制 beam width

翻译任务中:第一次选取概率最高的 B 个词语。第二次在这 B 个词语上进行扩展下一个单词,然后选取概率最高的 B 个词组,以此类推,直到结束。B=1 时相当于贪心。
image.png

[[Seq2Seq]] 中应用在 decode 部分

[[Transformer]] 解决实际预测环节如何构造一个理想输出

[[Ref]]


A Survey of Transformers

[[PTM]] pre-train-model

17 年 Google 发表论文 「Attention is all you need」提出 Transformers 框架,之后一大批人在此基础上进行研究和应用。原始 Transformer 改进的变体被称为 「X-formers」。

X-formers 改进方向有三个:

  • Model Efficiency
    • self-attetion 带来的计算量和参数量(内存)
      • divide-and-conquer methods 分治方法

背景知识

模型使用形式

  • Encoder-Decoder

根据对原始 Transformer 的改进分类:architecture modification, pre-training, and applications

  • architecture modification
    • Module Level
      • OTHER MODULE-LEVEL MODIFICATIONS
        • Position Representations
          • Relative Position Representations.
            • Transformer-XL
        • LayerNorm
          • Placement of Layer Normalization
            • post-LN
    • Arch. Level
      • Transformers with Divide-and-Conquer Strategies
        • Recurrent Transformers 上一个 T 输出信息输入到下一个输入
          • Transformer-XL 上一个输出和下一个输入 concat 在一起

[[Layer Normalization]]


平稳性

平稳性

  • 存在某种周期、季节性及趋势的方差和均值不随时间变化
  • 从统计学角度,平稳性要求对于一个时间序列的取值满足一个确定的分布

平稳性是时间序列分析的基础

  • 如果一个时间序列是不平稳的,需要通过 {{c1 差分}} 的方式将其转化为平稳时间序列。

严平稳 strictly stationary

  • 时间序列中任意给定长度的两段子序列都满足相同的联合分布

弱平稳 weakly stationary

  • 时间序列满足均值平稳性 stationary in mean 和二阶平稳性 secondary order stationary
  • 时间序列 $$r_t$$ 满足下面两个条件,则它是弱平稳的
    • 对所有时刻 t,有 $E[r_t] = \mu$,其中$\mu$是常数。
    • 对于所有时刻 t 和任意时间间隔 k,$r_t$ 和 $r_{t-k}$ 的协方差 $\sigma(r_t, r_{t-k}) =\gamma _k$, $\gamma _k$ 与 t 无关,仅依赖于时间间隔 k。
  • 方差平稳性 stationary in variance
    • 当 k=0 $\sigma(r_t, r_{t}) =\gamma _t$, $\gamma _t$ 是一个与时间 t 无关的常数且不随时间变化。
  • 关于 ((63259ba3-3e2c-4547-bb58-f219a4c4b813)) 的例子
    • 假设指数的日收益序列满足弱平稳条件,对于某一天指数日收益的期望可以用前一段时间的收益期望来近似估计。
  • 平稳的随机过程 stationary stochastic process

非平稳性

  • 非平平稳数据会导致虚假回归,表现为两个没有任务因果关系的变量,却有很高的相关性

[[ADF 检验]] ← 判断时间序列是否满足平稳性要求

  • 特殊时间序列
    • 时间序列 ${w_t, t=[1,n]}$,$w_t$ 满足均值 0 方差为 $\sigma^2$([[正态分布]]),且对于任意的 k>0,[[自相关]]系数均为 0,则称该时间序列为一个离散的白噪声。
      • $X_t=w_t, w_t\left(0, \sigma^2\right)$
    • 时间序列 $x_t$,满足 $x_t=x_{t-1}+w_t$ ,$w_t$ 是一个均值 0 方差为 $\sigma^2$ 的白噪声,则序列 $x_t$ 为一个随机游走。
      • $X_t=X_{t-1}+w_t, X_t\left(0, t \sigma^2\right)$
  • 思想
    • 基于随机游走,对 Xt 回归,如果发现 p=1,说明该序列满足随机游走,就是非平稳的。
      • $\rho_k=\frac{\operatorname{Cov}\left(r_t, r_{t-k}\right)}{\sigma_{r_t} \sigma_{r_{t-k}}}=\frac{\operatorname{Cov}\left(r_t, r_{t-k}\right)}{\sigma_{r_t} \sigma_{r_t}}=\frac{\gamma_k}{\gamma_0}$,利用弱平稳的性质
      • $X_t=X_{t-1}+u_t$ 随机游走,非平稳
      • $X_t=p X_{t-1}+u_t$ 如果 p=1,则 Xt有一个单位根
  • from statsmodels.tsa.stattools import adfuller as ADF
    • ADF 函数计算结果
      • 第一个参数 T检验,假设检验值。
      • 第二个参数,P-value,假设检验结果。
      • 第五个参数,不同程度拒绝原假设的统计值
  • 如何判断是否平稳
    • ADF 假设检验值同时小于 1% 5% 10% 不同程度拒绝原假设的统计值,说明非常好地拒绝该假设
      • 原假设存在单位根
      • 统计值小于 1%,认为拒绝原假设,该序列是平稳的。
    • [[p-value]] 是否非常接近 0

Ref


Teacher Forcing

seq2seq使用teacher forcing有一个问题,就是模型训练和预测行为的不一致会导致模型的泛化性能下降

[[Transformer]] 训练阶段使用这种方式,旨在提升序列模型训练稳定性、加速模型收敛。

  • 一次性输入全部目标序列,可以并行的方式一次性输出完整的目标序列,提高训练效率

NFM

$\hat{y}{N F M}(\mathbf{x})$ → $w{0}+\sum_{i=1}^{n} w_{i} x_{i}+f(\mathbf{x})$

  • 第一项和第二项是线性回归
  • 引入第三项神经网络学习 → 数据之间的高阶特征
    • 网络输入 → FM 模型的二阶特征交叉结果
    • 与直接使用高阶 FM 模型相比 → 可以降低模型的训练复杂度,加快训练速度。

NFM 的神经网络部分包含 4 层,分别是 Embedding Layer、Bi-Interaction Layer、Hidden Layers、Prediction Score。

  • {:height 503, :width 717}

Embedding Layer 层对输入的稀疏数据进行 Embedding 操作。最常见的 Embedding 操作是在一张权值表中进行 lookup ,论文中作者强调他们这一步会将 Input Feture Vector 中的值与 Embedding 向量相乘。

Bi-Interaction Layer 层是这篇论文的创新,对 embedding 之后的特征两两之间做 element-wise product,并将结果相加得到一个 k 维(Embeding 大小)向量。这一步相当于对特征的二阶交叉,与 FM 类似,这个公式也能进行化简:

  • $f_{B I}\left(\mathcal{V}{x}\right)=\sum{i=1}^{n} \sum_{j=i+1}^{n} x_{i} \mathbf{v}{i} \odot x{j} \mathbf{v}{j} =\frac{1}{2}\left[\left(\sum{i=1}^{n} x_{i} \mathbf{v}{i}\right)^{2}-\sum{i=1}^{n}\left(x_{i} \mathbf{v}_{i}\right)^{2}\right]$

Hidden Layers 层利用常规的 DNN 学习高阶特征交叉

Prdiction Layer 层输出最终的结果:

  • $$
    \begin{aligned} \hat{y}{N F M}(\mathbf{x}) &=w{0}+\sum_{i=1}^{n} w_{i} x_{i} +\mathbf{h}^{T} \sigma_{L}\left(\mathbf{W}{L}\left(\ldots \sigma{1}\left(\mathbf{W}{1} f{B I}\left(\mathcal{V}{x}\right)+\mathbf{b}{1}\right) \ldots\right)+\mathbf{b}_{L}\right) \end{aligned}
    $$

实验结果:


Initialization

影响模型的收敛速度和模型质量。

[[Batch Normalization]] 可以有效降低深度网络对 weight 初始化的依赖。非线性计算之前,输出值有较好的分布。BN 强行将输出值做一次高斯变换和线性变换。

常量初始化

高斯分布初始化

  • tf.truncated_normal 按两倍标准差截断
  • tf.random_normal

[[正交初始化]]

不同方法的均值和方差

  • [[He Initialization]] ↔ 0 均值,标准差为 sqrt(2 / fan_in)
  • [[Xavier Initialization]] ↔ 0 均值,标准差为 sqrt(2 / (fan_in + fan_out))

See Also

  • [[神经网络参数全部初始化为0]] 不可行

Ref


Loss Function

MSE/MAE/ [[Huber Loss]]

  • 假设误差服从某种特定分布,然后通过 MLE 推导最终 loss 形式。
  • MSE 反向传播梯度 $-\left(y^{(i)}-\theta^T x^{(i)}\right) x^{(i)}$
    • MSE 梯度容易受到异常值影响。异常样本 label 非常大时,$y^{(i)}-\theta^T x^{(i)}$ 的值也会非常大,将模型带偏。
      • 反过来离群点会影响业务时,应该使用 MSE。
  • MAE 反向传播梯度 $-\frac{y^{(i)}-\theta^T x^{(i)}}{\left|y^{(i)}-\theta^T x^{(i)}\right|} x^{(i)}$
    • 使用 MAE 损失时,梯度始终相同。在接近最小值的时候减少学习率。
  • MSE 和 MAE (L2 损失和 L1 损失)
      1. 平方差更容易求解,绝对误差对离群点更加鲁棒。
      1. pb 如果只预测一个值,最小化 MSE 倾向于均值,最小化 MAE 倾向于中位数。对于异常点,中位数比平均值更鲁棒。(简单可以证明)

[[ZILN]] [[Log-Normal Distribution]]

  • LTV 分布,首次购买后产生的价值,0 代表只购买一次
  • $L_{Z I L N}(x ; p, \mu, \sigma)=-\mathbf{1}{x=0} \log (1-p)-\mathbf{1}{x>0}\left(\log p-L_{\text {Lognormal }}(x ; \mu, \sigma)\right)$
    • x 是 label
    • p 预估购买概率
    • 预估金额 $L_{\text {Lognormal }}(x ; \mu, \sigma)=\log (x \sigma \sqrt{2 \pi})+\frac{(\log x-\mu)^2}{2 \sigma^2}$
    • 网络结构

[[Weighted Logistics Regression]] 预估用户观看时长

  • 出处 [[@Deep Neural Networks for YouTube Recommendations]]
  • [[Cross Entropy Loss]] ((6c7dd4e8-46b1-4d90-8ff1-95c0ab0d7a41)),reweight 后,改变正负样本的比例。
    • cross entropy 最终预估的概率是正样本的比例。
  • label 为 T 的样本,相当于在分类任务重变为 T 个正样本。正样本总体比例变成 $\frac{\sum_{i=1}^k T_i}{N+\sum_{i=1}^k T_i-k}$
    • N 总样本,k 正样本,Ti 每个样本时长
  • LR 可以写成
    • $\frac{1}{1+e^{- \text {logit }}}=\frac{\sum_{i=1}^k T_i}{N+\sum_{i=1}^k T_i-k}=\frac{P}{N+P}$
    • $\frac{P}{N}=e^{\text {logit }}$
    • 上面推导如果不忽略 k
      • label为 T 的样本,把它当做 T 个正样本和一个负样本,为每个正样本多增加一个负样本。
      • $\frac{1}{1+e^{-\operatorname{logit}}}=\frac{\sum_{i=1}^k T_i}{N+\sum_{i=1}^k T_i-k+k}$
  • reweight 之后相当于假设 label 服从参数为 p 的几何分布(失败概率),label T就是几何分布的 pdf 取 log 后提到前面的值,表示连续失败 T 次。

[[Bucketing with Softmax]] 对 label 的值域进行分桶,根据每个样本的 label 把样本分到某个桶里。回归任务转成多分类问题,使用 softmax 损失函数训练。

  • 线上预测时,用 softmax 预估的概率分布对每个桶做加权求和。
    • pred $=\sum_{i=1}^n p_i v_i$
  • 如何确定分桶数量和每个桶大小?
    • 目标让每个分桶的样本均衡
  • 优化
    • 每个桶再套上 mse 等损失转化成分区间的 multi-task 建模
  • 分桶之后会丢失 laebl 之间的大小关系(label=50 分到 [0,10] 或 [51,100] 的损失没有区分性)。引入[[Label Smooth]]
    • 对 label 做变换时,不用 one-hot 而是转化成高斯分布等形式

[[ETA]]

  • 均值和中位数哪个大?均值大?
  • 对于 badcase 来说,哪个模型效果更好?
  • MSE 对异常值更加
  • MAPE 没有上界,对异常值敏感,训练出来的模型倾向于低估。(高估带来较大的惩罚)
  • SMAPE 有界(0-200),高估和低估的上界都是 200 。

Ref


teacher forcing

seq2seq使用teacher forcing有一个问题,就是模型训练和预测行为的不一致会导致模型的泛化性能下降

[[Transformer]] 训练阶段使用这种方式,旨在提升序列模型训练稳定性、加速模型收敛。

  • 一次性输入全部目标序列,可以并行的方式一次性输出完整的目标序列,提高训练效率

FM

自动特征交叉,解决特征稀疏

FM 与其他模型对比

  • 可以模拟二阶多项式核的 [[SVM]]、MF、SVD++
    • [[SVM]] 训练和预测需要计算核矩阵,核矩阵的复杂度是 N 方
    • MF 扩展性没有 FM 好,只有 u 和 i 两类特征

与 [[SVM]] 对比

  • 二阶多项式内核 SVM 二元交叉特征 wij 相互独立
    • fm 参数 nk,svm 参数 nn,更适合大规模稀疏特征,泛化能力更强
  • 核方法需要计算核矩阵
  • 样本 → FM 预测和训练样本独立,SVM 和支持向量有关
  • FM {{c1 在原始形式下}} 进行优化学习,非线性SVM通常需要在 {{c1 对偶形式}} 下进行

交叉项需不需要乘 value ?

  • eta 放到 xi 和 xj 泛化能力不好

FM 如何加入 index embedding?

对比 FM 和 SVM 有什么区别?

  • 特征角度 → ((6302f9ee-9149-431f-9d5d-e56e83182c1e)), ((6302f9ee-11be-4f7a-9cf9-26400d6d4601))

为什么要用 FTRL 优化 FM #card

  • FTRL 是 SGD 算法,离线调参,减少线上风险
  • 稀疏特征, ((6302f9ef-36a2-4bea-a935-0d18c250125f))
  • 不同特征有不同的学习速度、收敛速度快

[[Ref]]


pointer network

求解凸包、TSP 等问题有一个特点:输出是输入的子集。由于输入序列就是词表(不定长),无法使用传统的 seq2seq 模型去建模。


@Real-time Personalization using Embeddings for Search Ranking at Airbnb

[[Abstract]]

  • Search Ranking and Recommendations are fundamental problems of crucial interest to major Internet companies, including web search engines, content publishing websites and marketplaces. However, despite sharing some common characteristics a one-size-fitsall solution does not exist in this space. Given a large difference in content that needs to be ranked, personalized and recommended, each marketplace has a somewhat unique challenge. Correspondingly, at Airbnb, a short-term rental marketplace, search and recommendation problems are quite unique, being a two-sided marketplace in which one needs to optimize for host and guest preferences, in a world where a user rarely consumes the same item twice and one listing can accept only one guest for a certain set of dates. In this paper we describe Listing and User Embedding techniques we developed and deployed for purposes of Real-time Personalization in Search Ranking and Similar Listing Recommendations, two channels that drive 99% of conversions. The embedding models were specifically tailored for Airbnb marketplace, and are able to capture guest’s short-term and long-term interests, delivering effective home listing recommendations. We conducted rigorous offline testing of the embedding models, followed by successful online tests before fully deploying them into production.

论文解决问题:

  • 数据稀疏情况下如何进行训练?
    • 稀疏 id 聚类处理
  • 将 user id 和 listing id 聚合成 user type、listing type
  • word2vec 中加入 booked listing 作为 global context

目标函数
image.png

argmaxθ(l,c)Dplog11+evcvl+(l,c)Dnlog11+evcvl+log11+evlvl\underset{\theta}{\operatorname{argmax}} \sum_{(l, c) \in \mathcal{D}_{p}} \log \frac{1}{1+e^{-\mathbf{v}_{c}^{\prime} \mathbf{v}_{l}}}+\sum_{(l, c) \in \mathcal{D}_{n}} \log \frac{1}{1+e^{\mathbf{v}_{c}^{\prime} \mathbf{v}_{l}}}+\log \frac{1}{1+e^{-\mathbf{v}_{l}^{\prime} \mathbf{v}_{l}}}

booked listing 是正样本,所以有一个负号。由于只有一项,所以没有 sigma 符号。

原始负采样是在全体样本中随机选择,业务特殊性,在正样本同一市场的样本中负采样。更好能发现同一市场中内部 listing 的差异。

new listing 通过附近 3 个同类型、相似价格的 listing embedding 进行平均。

word2vec 方法本来是无监督的,通过引入 booked listing 以及 reject 信息传递部分监督信息

利用 booked 数据训练时,文章中提到 user type 和 listing type 要在同一个空间,不知道为什么下面要有两个公式,以及 c 的含义是什么?

argmaxθ(ut,c)Dbooklog11+evcvut[[]]+(ut,c)Dneglog11+evcvut[[]]\underset{\theta}{\operatorname{argmax}} \sum_{\left(u_{t}, c\right) \in \mathcal{D}_{b o o k}} \log \frac{1}{1+e^{-v_{c}^{\prime} v_{u_{t[[}}}}]]+\sum_{\left(u_{t}, c\right) \in \mathcal{D}_{n e g}} \log \frac{1}{1+e^{v_{c}^{\prime} v_{u_{t[[}}}}]]

argmaxθ(lt,c)Dbooklog11+evcvlt[[]]+(lt,c)Dneglog11+evcvlt[[]]\underset{\theta}{\operatorname{argmax}} \sum_{\left(l_{t}, c\right) \in \mathcal{D}_{b o o k}} \log \frac{1}{1+e^{-\mathrm{v}_{c}^{\prime} \mathrm{v}_{l_{t[[}}}}]]+\sum_{\left(l_{t}, c\right) \in \mathcal{D}_{\text {neg}}} \log \frac{1}{1+e^{v_{c}^{\prime} \mathrm{v}_{l_{t[[}}}}]]

embedding 之间直接对比需要在相同的向量空间。根据上面的计算可以生成一个特征 UserTypeListingTypeSim。

在如何在实时模型中引入 embedding 特征:根据一些规则收集一些 listing,计算这些 listing embedding 的平均值,再和当前排序的 lisitng 计算一个相似度,做为一个特征放到模型中。

如何评估按上面方法生成的 emb sim 特征重要性?利用 GBDT?

[[冷启动]] listing embeddings

  • 找方圆 10 英里之内的 3 个最相似的 listing,取 listing embedding 的平均

使用 Embedding 方法要考虑的问题:#card

    1. 希望Embedding表达什么,即选择哪一种方式构建语料
    1. 如何让Embedding向量学到东西
    1. 如何评估向量的效果
    1. 线上如何使用

基于 [[向量化召回统一建模框架]] 角度理解

  • 如何定义正样本 #card
    • 如同前边分析的那样,给定 tt 个用户点击的房屋(Airbnb叫 listing)序列,序列内部的房屋,其两两之间都应该是相似的。
    • 但由于两两组合太多,因此仿照Word2Vec采用滑窗,认为某个房屋 I 只与窗口内的有限几个房屋 cc 是相似的。
    • 但是,如果一个点击序列最终导致某个房屋 lbl_b 成功预订,则 lbl_b 业务信号非常强,必须保留。
    • 因此,Airbnb还额外增加了一批正样本,即点击序列中的每个房屋 I 与最终被成功预订的房屋 lbl_b 是相似的。
  • 如何定义负样本 #card
    • 根据召回的一贯原则,随机采样得到的其他房屋肯定是主力负样本。
    • 但是民宿中介的业务特色决定了,在一个点击序列中的房屋(即正样本)基本上都是同城的,而随机采样得到的负样本多是异地的。
    • 如果只有随机负采样,模型可能只使用“所在城市是否相同”这一粗粒度差异来判断两房屋相似与否,导致最终学到的房屋句量按所在城市聚类,而忽视了同一城市内部不同房屋的差异。
    • 为了弥补随机负采样的不足,Airbnb还为每个房屋在与其同城的其他房屋中采样一部分作Hard Negative, 迫使模型关注所在城市之外的更多细节。
  • 如何使用 embedding #card
    image.png
  • 如何定义损失函数 #card
    image.png

[[向量化召回统一建模框架]] 来理解从用户类别到房屋类别的召回

  • 如何定义正样本 #card
    image.png
  • 如何负样本 #card
    image.png
  • 如何 embedding #card
    image.png
  • 如何定义损失函数 #card
    image.png