blog | 逍遥郡


  • Home

  • Archives

  • Tags

  • Search

阿里妈妈直通车新一代智能检索模型

Posted on 2018-02-27 |
传统搜索广告召回 为了兼顾效果和性能,一般分为QR(Rewriting)和检索(Ad-selecting)两部分。 QR主要考虑query和bidword的文本相关性,目标并非优化RPM/CTR。 索引依赖bidword。但受限于市场信息的缺失和投放管理的成本,广告主有时并不能及时准确地为自己的广告选择出最合适的bidword。 检索出于性能考虑,使用简单规则而不会用复杂的模型。比如BS。 传统搜索广告召回仅由query触发,并未考虑用户画像,长期、实时点击偏好等信息。这些个性化signal其实也有助于更好的理解user intention。 相关工作 QR 解决query过短问题:伪反馈,外部资源,landing page 利用session数据,利用点击二部图(simrank++) MT、SMT、NMT 伪相关反馈,参考《信息检索导论》第九章。 检索 WAND 各种索引技巧 智能检索模型 3232 3种node、2种edge、3种init、2份index 3种node: signal Query、用 ...
Read more »

DIY a Hackintosh

Posted on 2017-10-10 |
前一台攒的ITX主机还是六年前配的H67平台i3-2100T,本来是打算做nas的,但后来选择群晖解决方案后,这台主机也基本废置了,只能偶尔办公或下载使用。最近突然迫切想搞台性能稍微高点的电脑,能运行macOS,能利用GPU跑跑程序,所以打算攒台新机器。除此之外偏好小巧点的机身,放在桌上或者脚底也不碍事。 硬件 机箱 因为想攒台小钢炮,所以需要先确定机箱。整个攒机基本花了大半时间在挑选机箱,主要关注MATX和ITX机箱,期望容量别超过20L;一定要窄点,宽度别超过200mm;能插长显卡;风道合理,散热良好。 前后选择的机箱有记录的如下: 机箱型号 主板规格 尺寸 电源规格 散热器高度 显卡长度 价格 备注 乔思伯UMX1P ITX 160x300x345 ATX 130 270 500¥ 电源在右上死角 乔 ...
Read more »

《深度学习》读书笔记

Posted on 2016-12-15 |
《Deep Learning》Ian Goodfellow, Yoshua Bengio, Aaron Courville 3.8 期望、方差和协方差 独立变量和不相关变量:协方差为0,表示两变量不相关(没有线性关系);但不一定互相独立(可能存在非线性关系)。 5.2 容量、拟合、过拟合 没有免费的午餐定理(no free lunch) 没有普遍优越的机器学习算法。 一个看似优越的算法都是在我们根据观察到的数据所给出相应假设的基础上。 6.4 结构设计 通用近似定理(universal approximation theorem) 前馈神经网络可以任意精度来近似任何一个有限维空间到另一个有限维空间的Borel可测函数。 这是使用神经网络表达非线性函数的理论基础。当然这只是理论,实际上最坏的情况下,可能需要指数数量的隐含单元。 深层模型比浅层模型的优势:大幅减少隐含单元的数量,提升模型的泛化能力(图6.6)。
Read more »

LambdaMART算法分享

Posted on 2016-12-08 |
组内分享一下在上家公司做搜索排序时对LambdaMART的理解: Learning to Rank: An Introduction to LambdaMART from Julian Qian 学习路径: 阅读GBDT论文,需要理解pesudo-response 阅读LambdaMART论文,从RankNet到LambdaRak,需要理解lambda梯度 阅读Li Hang书LTR for IR&NLP,开阔思路 分享内容: L2R、pairwise等基本概念 GBDT(MART)模型的原理简介 底层训练模型 lambda梯度概念 pairwise如何体现 LambdaMART与其它L2R、其它分类模型比较 分类/回归/rank等不同问题、应用现状等 LambdaMART简单代码实现、工具使用 个人比较喜欢的分享大致包含: 理论的介绍(用例子讲明白,而不是公式一摆完事) 实现代码的走读(可以是开源,也可以是自己的简单实现版本) 应用(找些数据来跑一下,再讲讲实际的应用) 参考文献 业界应用 ...
Read more »

FM和FFM算法学习

Posted on 2016-11-14 |
[TOC] $\newcommand{\v}{\mathbf{v}} \newcommand{\C}{\mathcal{C}} \newcommand{\x}{\mathbf{x}} \newcommand{\w}{\mathbf{w}} \newcommand{\W}{\mathbf{W}} \newcommand{\V}{\mathbf{V}} \newcommand{\T}{\mathsf{T}} \newcommand{\R}{\mathbb{R}} \newcommand{\N}{\mathbb{N}}$ FM 原理 FM的优点: 适用于高度稀疏的特征; 具备线性复杂度,可以训练超大规模数据; FM对比LR的优点是考虑了任意两个互异特征分量之间的关系。 但是,不同于一次项参数,FM没有直接去估计交互项的参数。因为对观察样本中未出现过的交互特征分量(稀疏数据中很常见),是没法直接去估计相应的参数的。FM的做法是引入辅助向量来表达交互项的参数: \[\v_i= (v_{i1}, v_{i2}, \cdots, v_{ik})^\T \in \R^k, \ ...
Read more »

ps-lite源码阅读

Posted on 2016-10-10 |
整理了一份ps-lite UML图 KVCache KVPair 关键数据结构,一个Key对应一组定长或变长Value。 如果是变长Value,需要设置val_size,指定每组value的长度,length(val_size) == length(key)。 struct KVPair { // [key_0, ..., key_n] SArray<K> key; // constant value size: // [val_00, ..., val_0k, ..., val_n0, ..., val_nk] // dynamic value size: // [val_00, ...val_0,val_size[0], ..., val_n0, ..., val_n,val_size[n] V* val = NULL ; size_t len_val = 0; // length of val std::vector<V>* val_vec = NULL; // allocator fo v ...
Read more »

Wormhole源码阅读

Posted on 2016-10-07 |
[TOC] $\newcommand{\w}{\mathbf{w}} \newcommand{\x}{\mathbf{x}} \newcommand{\v}{\mathbf{v}} \newcommand{\T}{\mathsf{T}}$ 核心代码 learn/solver/minibatch_solver.h + iter_solver.h 实现了H/W/S三个角色 MinibatchScheduler : IterScheduler : DataParScheduler : ps::App MinibatchServer = IterServer : ps::App MinibatchWorker : IterWorker : DataParWorker : ps::App wormhole整个train或test均由H驱动,所有任务由WorkloadPool维护,MinibatchScheduler::Run() 是一个runloop,不断把Workload分配给各个空闲的W计算;W从S拉取需要的模型参数,并计算梯度,再去更新S的模型。 MinibatchSche ...
Read more »

dmlc-core源码阅读

Posted on 2016-09-30 |
核心代码 dmlc/data.h RowBlock:把样本矩阵X转换成一维向量存储。可以结合spmv.h中的矩阵乘法理解。 此外,offset起始可以不为0,这样可以把输入的样本切割为很多个RowBlock。 template<typename IndexType> struct RowBlock { /*! \brief batch size */ size_t size; // 样本数量 /*! \brief array[size+1], row pointer to beginning of each rows */ const size_t *offset; // 每个样本的偏移位置,搭配index和label使用 /*! \brief array[size] label of each instance */ const real_t *label; // 样本label /*! \brief With weight: array[size] label of each instance, otherwise nullp ...
Read more »

rabit学习笔记

Posted on 2016-09-28 |
rabit库 实现了MPI的主要功能:Allreduce和Broadcast,此外还提供了:容错性(Fault Tolerance)和可恢复性(Recovery)。 Allreduce http://mpitutorial.com/tutorials/mpi-reduce-and-allreduce/ Allreduce类似reduce,区别是不指定主线程,而是把reduce结果返回给所有线程。 Allreduce相较于mapreduce,通过允许程序员轻松的将模型(这些模型将被复制于每个节点)维护于内存中,使它避免了不必要的map过程、重新分配内存步骤以及迭代器之间的硬盘读写过程。 Broadcast http://mpitutorial.com/tutorials/mpi-broadcast-and-collective-communication/ Broadcast比循环Send/Recv数据效率更高,等价于在主线程里Send数据,然后在其他线程里Recv数据。 每个节点向上传递自己的值,每个节点执行一次求和操作,直到根节点,这就是Allreduce过程 ...
Read more »

SGD优化方法总结

Posted on 2016-07-10 |
凸函数性质: 它通常有唯一的极值点。 Hessian矩阵正定。 求解非凸函数: \(f(x,y)=x^2-2x+100xy+10y^2+20y\) Gradient Descent \[\theta = \theta - \eta \cdot \nabla_\theta J( \theta)\] def batch_gd(x_start, step, g): x = np.array(x_start, dtype='float64') for i in range(50): grad = g(x) x -= grad * step if abs(sum(grad)) < 1e-6: break; return x GD算法的挑战: 难以挑选合适的学习率 $\eta$,太小收敛慢,太大容易振荡,甚至不收敛 期望学习率可以随着迭代次数变化 学习率对所有对参数是固定的,如果数据稀疏或特征具备不同的频率,会不合理 对非凸的损失函数(如NN),GD可 ...
Read more »
1 2 … 19
Julian Qian

Julian Qian

记录编程、Hack和自娱自乐的一些玩意。

189 posts
60 tags
RSS
Creative Commons
© 2024 Julian Qian
Powered by Jekyll
Theme - NexT.Mist