向量内积召回

向量召回的目标

1:内积时既考虑到了相关性、又考虑到了兴趣,所以这就是前两个目标

2:有的还会考虑rpm最大化

3:有的团队还会在训练模型时,loss上加入点击loss、下单loss、相关性loss等目标

一、基础的向量召回就不简述了

就是使用精排的样本,然后形成两个塔,一个用来训练user向量,一个用来训练item向量,然后内积相乘再反向梯度传播,训练出来模型后,不管是离线刷出来所有user/item的向量保存起来,还是线上实时计算这两个向量,再采用ann的思路进行大范围快速检索得到结果

二、阿里全链路召回 - LDM(Learning to Rank based Deep Match Model)

原文链接:阿里广告技术最新突破:全链路联动-面向最终目标的全链路一致性建模 - 知乎

1:这篇文章中讲了两个召回思路其中一个就是ldm,是以学习后链路(精排)的序为目标

优点,1:以序为目标,而不是精准值,这样会节省一部分算力;2:召回模型本身就比较简单,如果以精排模型产生样本的点击与否进行学习,不如以学习序来得直接,更简单一些

详细做法

这篇文章没有详细讲解如何以序来召回的详细做法

猜测1:根据博主经验,对比pointwise pairwise listwise这三种训练架构来看(这里有篇很好的文章 推荐- Point wise、pairwise及list wise的比较 - 知乎),大概率是采用的listwise的办法,训练时以ndcg(搜索评价指标——NDCG - 胖喵~ - 博客园)为loss指标,但是这样复杂度会很高,可能他们还做了特殊的优化解决了这个问题

猜测2:设置参数,序大于n设为正样本,小于n设为负样本,这样就又和普通的向量训练模型一致了,大概率是这样

2:召回和精排联动,一起进行训练,面向任意目标的向量召回技术PDM(Point based Deep Match Model)

实验开始:直接使用精排的曝光点击样本训练一个双塔结构的向量内积模型效果很差。曝光点击样本和召回面对的全库样本有很大的差异,样本选择偏差问题

最终定论:样本上选择精排时的曝光、点击、未展示三种样本

(1) 联合训练,共享一部分embedding,召回和精排都只用曝光、点击两部分的loss来回传梯度,这里感觉写的有点错误,精排还能理解,但是召回都不适用这部分回传梯度的话,要他有啥用

(2) batch内随机负采样,给每个正样本都随机选k个ad向量,和user向量拼在一起组成随机负样本,这样可以提升模型对简单负样本的区分能力。为了不影响pctr预估精度,这部分会再次引入一个塔,专门用来引入随机负样本来进入交叉熵loss,而正常的那个就输出pctr就好

(3) 对于“未展示”样本,会用精排模型来指导训练,是为了提升两个模型在召回空间上的打分一致性,但是这部分样本的梯度要对精排stop

三、有的团队在训练向量召回模型时,假如是一个点击场景吧,他可能只用点击样本(也就是只用正样本)

这种情况,可能就是像前面说的“batch内随机负采样”这种方法吧

四、多模态,就是训练loss不止是一个目标,也是淘宝一个团队提出来了,这里直接贴图吧

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一段用 Matlab 实现支持向量积 (inner product) 的代码: ``` function res = inner_product(u, v) % 计算两个向量 u 和 v 的内积 % 输入:u,v - 两个列向量,其长度相等 % 输出:res - 内积的结果,标量 % 使用 Matlab 内置的矩阵乘法计算内积 res = u' * v; end ``` 注解: - `inner_product` 函数的输入是两个列向量 `u` 和 `v`。 - 内积的结果是一个标量,是两个向量的乘积。 - 函数内部使用了 Matlab 内置的矩阵乘法(`' *`)计算内积,并将结果存储在变量 `res` 中。 - 函数最后返回结果 `res`。 ### 回答2: 使用MATLAB编写支持向量积(Support Vector Machine, SVM)代码可以通过以下步骤完成: 1. 导入所需的库和数据集。首先,导入`svmtrain`和`svmpredict`函数以支持SVM模型的训练和预测。然后,通过函数`load`或其他方式导入含有训练数据的数据集。确保数据集中的样本已标记为不同类别。 2. 准备训练和测试数据集。将数据集一分为二,一部分作为训练集,另一部分作为测试集。常用的划分比例是70%用于训练,30%用于测试。可以使用`cvpartition`函数实现此目的。 3. 训练模型。创建SVM模型的训练选项和参数,例如选择线性核函数或高斯核函数。将训练数据集和选项作为输入,使用`svmtrain`函数训练模型。该函数返回训练完成的SVM模型。 4. 测试模型。使用`svmpredict`函数和训练好的模型对测试集进行预测,并与实际的类别标签进行比较。这将生成一个向量,其中包含预测的类别标签。可以使用此向量来计算分类准确率和其他分类性能指标。 5. 分析结果。根据测试结果,分析模型的性能。可以通过比较实际和预测类别标签,计算分类准确率、召回率、精确率和F1-Score等指标,以评估模型的性能。 6. 对代码进行注解。在代码中添加注释以解释每个步骤的作用和原理。注解应该包括导入库、加载数据集、划分数据集、训练模型、测试模型以及评估模型性能的步骤。 请注意,以上只是一个大致的步骤指南,实际上,SVM模型的实现和使用可能有其他细节和调整,具体取决于数据集和任务的特定需求。可参考MATLAB官方文档以获取更详细的说明和示例代码。 ### 回答3: MATLAB是一种流行的科学计算软件,它也提供了支持向量机(SVM)的工具箱,可以用来实现支持向量机模型。下面是一个使用MATLAB编写支持向量机代码的示例,并附有注解说明: ```matlab % 准备训练数据和标签 X = [1, 2; 2, 3; 4, 5; 6, 7; 8, 9]; % 训练数据 Y = [1; 1; -1; -1; 1]; % 训练标签 % 创建SVM模型 svmModel = fitcsvm(X, Y); % 使用fitcsvm函数创建一个SVM模型 ``` 第一行代码中,我们准备了训练数据X和相应的标签Y。其中,X是一个5行2列的矩阵,每一行代表一个数据样本,每一列代表一个特征。Y是一个5行1列的列向量,记录了每个样本的类别标签。 接下来,我们使用`fitcsvm`函数创建了一个SVM模型,并将其存储在变量`svmModel`中。`fitcsvm`函数的第一个参数是训练数据,第二个参数是训练标签。该函数会自动根据数据和标签进行模型的训练。 现在我们已经得到了一个SVM模型,可以用它来进行预测: ```matlab % 准备测试数据 testData = [3, 4; 5, 6]; % 测试数据 % 使用SVM模型进行预测 predictedLabels = predict(svmModel, testData); ``` 我们准备了测试数据`testData`,它是一个2行2列的矩阵,每一行表示一个测试样本。然后,我们使用`predict`函数对测试数据进行预测,该函数的第一个参数是SVM模型,第二个参数是测试数据。预测结果将保存在变量`predictedLabels`中。 以上就是一个使用MATLAB编写支持向量机代码的简单示例。通过这个示例我们可以了解到如何使用MATLAB的工具箱来创建和使用支持向量机模型,以及进行预测。在实际应用中,可以根据需求进一步调整参数等,以得到更好的模型性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值