干货 | 机器学习模型在携程海外酒店推荐场景中的应用

GBDT FFM(FM) Online Learing(FTRL) GBDT+FFM(FM)+Online Learing(FTRL)是kaggle比赛的重点方法,需要重点学习。 从Ensemble说起 Bagging,Boosting和Stacking是集成学习的三种主要的形式. Bagging Bagging=Bootstrap Aggregating,是model averaging的策略. bootstrap是一种有放回的抽样,那么bagging就... 阅读详情

作者简介

 

Louisa,携程算法工程师,热爱前沿算法和技术在个性化推荐和广告建模等业务的性能优化和落地。

导读

互联网企业的核心需求是“增长”,移动互联时代下的在线旅游业也不例外。随着大数据、云计算和人工智能等技术的不断进步,通过算法和模型来实现增长已成为核心。

近年来推荐系统迅速崛起,主要解决在信息过载的情况下,帮助用户高效获取感兴趣的信息,同时帮助企业最大限度的吸引用户、留存用户、增加用户黏性、提高用户转化率。因此个性化的推荐服务对于在线旅游业也变得非常重要,通过推荐能够将用户从众多的旅行选择中解放出来,指导用户快速找到感兴趣的项目,大大简化用户的旅行计划和购买。

在线旅游服务商 (OTA)提供的应用中包含酒店、航班、旅游产品、攻略等各个环节和产品。其中酒店涉及到的推荐场景较多,例如城市热门酒店推荐、附近同类型酒店推荐、机票页酒店交叉推荐、Meta着陆页相似酒店推荐、信息流推荐等。大部分场景都实现了个性化的推荐服务,其核心就是一组酒店与一组用户相匹配的挑战。

推荐准确性取决于如何利用可用信息,这些信息主要包括物品信息(I)、用户信息(U)及上下文信息(C)等,例如给定的酒店特征、酒店的位置吸引力、用户的购买历史等。将这些信息构建一个函数 f(U,I,C),预测用户对特定候选酒店的喜好程序,再根据喜好程度对所有候选酒店进行排序,生成推荐列表。见图1推荐系统逻辑框架。

推荐系统排序模型在推荐系统中占据绝对核心的地位,很多公司也都在提出并尝试一些前沿的算法和推荐模型。而机器学习和深度学习模型正在变得越来越复杂,将这种复杂模型推上线,模型响应速度就可能变得很慢,因此对推荐系统的数据流和工程实现产生新的挑战。

如何做到海量数据的实时处理、特征的实时提取、线上模型服务过程的数据实时获取以及工程能力与技术方案的平衡等,成为模型上线的重要挑战。本文主要探讨OTA酒店推荐方面常用的在线部署模型以及技术架构,并从核心之外的角度审视推荐系统的不同技术模块及优化思路。

图1 推荐系统逻辑框架

一、酒店推荐系统的技术架构

实际推荐系统中主要解决的问题可以分为两类,数据部分以及算法模型部分。其中数据部分融合了数据离线批处理、实时流处理的数据流框架。算法模型部分则是集训练 (training)、评估 (evaluation)、部署 (deployment)、线上推断 (online inference) 为一体的模型框架。目前通用的推荐系统技术架构如图2所示。

图2 推荐系统的技术架构示意图

1.1 数据部分

推荐系统的数据部分主要负责用户、物品、上下文的信息收集与处理。并且按实时性强弱,分别在三种平台上进行处理。客户端是最接近用户的环节,也是能够实时收集用户会话内行为及上下文特征的地方,这些特征随http请求一起到达服务器端是常用的请求推荐结果的方式。

随着Storm、Spark Streaming、Flink等流计算平台的日益成熟,利用流计算平台进行准实时的特征处理已经成为当前推荐系统的主要模式。流计算平台并非完全实时的平台,每次需要等待并处理一小批日志,以流的形式进行微批处理(mini batch),系统可能无法在3分钟内把session内部的行为历史存储到特征数据库(如Redis)中。但它的优势是能够进行一些简单的特征统计的计算,比如一个物品在该时间窗口内的曝光次数,点击次数、一个用户的页面浏览时长等。

大数据离线数据处理主要是利用Spark等分布式批处理计算平台对全量特征进行计算和抽取。主要用于模型训练和离线评估,以及将特征保存入特征数据库,供之后的线上推荐模型使用。

酒店推荐系统中的实时特征部分主要来源于用户的实时点击行为数据和一些上下文信息(如GPS获得的地点信息等),通过Storm或Flink进行准实时流处理,将用户实时行为数据解析入特征数据库Redis。

离线特征部分主要包含用户和酒店两部分的特征。其中用户离线特征主要由用户画像(CRM)提供,包含数据库中用户的订单和浏览历史信息等,并且严格遵守欧盟通用数据保护条例(GDPR)。酒店离线特征主要包含酒店的基础信息,如星级、评分等。由于特征维度及样本量较大,离线特征数据的清洗与预处理通常在Spark平台上进行,后将处理好的特征数据落入HDFS的Hive表并同步至Redis缓存中。离线特征与实时特征合并供线上模型使用。下面代码展示Hive表数据同步Redis的方法:

1.2 模型部分

模型部分是推荐系统的主体,一般由召回层、排序层、补充策略与算法层组成。召回层一般利用高效的召回规则、算法或者简单的模型,快速从海量的候选集中召回用户可能感兴趣的物品。排序层利用排序模型对筛选的候选集进行精排序。排序层是推荐系统产生效果的重点,后面部分将重点介绍一些主流推荐模型和酒店推荐上的应用。

补充策略与算法层也被称为再排序层,再将推荐列表返回用户之前,根据新鲜度、多样性等指标结合补充策略与算法进行一定调整,最终形成用户可见的推荐列表。从召回所有候选物品集,到最后产生推荐列表,这一过程一般称为模型服务过程。

在线环境进行模型服务之前,需要通过模型训练确定模型结构及参数值,并生成模型文件。另外,为了评估推荐模型的效果,方便模型的迭代优化,推荐模型部分有离线评估和线上A/B测试等多种线上线下评估模式。

 

二、酒店推荐系统的工程实现

如何将离线训练好的模型部署在线上的生成环境,进行线上实时推断,一直是业界难点。目前酒店推荐场景中主要用到两种部署推荐模型的主流方法,一是利用PMML转换并部署模型,二是Tensorflow Serving方式。

2.1 利用PMML转换并部署模型

酒店推荐场景中由于实时数据量较大,通常采用SOA框架实现分布式服务,完成模型服务过程。但绝大部分SOA框架都是Java或C++语言编写,而预测模型大多是基于Python语言。因此常用预测模型标记语言(Predictive ModelMarkup Language,以下简称PMML)重新实现算法模型,然后将模型封装成类,通过JAVA调用这个类来进行预测。由python封装的模型可以通过sklearn中的sklearn2pmml函数实现PMML文件转换。XGBoost模型需要JPMML-XGBoost命令行转换工具,转换命令为:

                           

XGBoost模型需要生成.model模型文件和 .fmap特征映射文件。.model文件可以通过save_model函数生成。

2.2 Tensorflow Serving

上面的方法也适用于Tensorflow生成的模型,但由于Tensorflow模型文件往往较大,且PMML文件无法优化,使用起来比较麻烦。本质上讲,Tensorflow Serving的工作流程和PMML类工具的流程是一致的。不同之处在于,Tensorflow定义了自己的模型序列化标准。

利用Tensorflow自带的模型序列化函数可将训练好的模型参数和结构保存至某文件路径。路径下包括variables文件夹和saved_model.pbtxt文件。variable文件夹下包含各个变量的状态(断点),有*.data和*.index两类文件。*.data记录变量的内容。*.index文件用于将变量名映射到*.data中的变量数据。.pbtxt文件是包含SavedModel、MetaGraphs、Graphs、签名等的二进制protobuf。模型文件通常由自身的Python API生成,然后由Tensorflow的客户端库(如JAVA或C++库)来加载模型并进行在线预测。以下代码展示了使用SavedModelBuilder 构建 SavedModel 的典型方法:

添加Tensorflow相关依赖后Java导入已保存的模型方法为:

具体的酒店实时推荐工程架构如图3所示。

图3 酒店实时推荐工程架构

三、Embedding技术在酒店推荐中的应用

Embedding方法已成为应用最广泛的深度学习技术。通过低维的向量表示一个对象,可以同时表达对象之间的潜在关系,即向量之间的距离反应对象之间的相似性。该方法的流行始于自然语言处理领域对于词向量生成问题的研究,发展到其他应用领域的物品也可以通过某种方式生成其向量化表示,例如旅游领域对酒店进行Embedding,并对酒店进行相似度计算,因此成为常用的推荐系统召回层技术。

Embedding技术中最著名的就是Word2vec模型,用于生成对词的向量表达。而对于用户购买序列中的商品或者用户浏览序列中的酒店使用的Embedding方法称为Item2vec方法。

在酒店召回层我们采用了酒店Embedding技术计算相似度,召回候选酒店集。在Word2vec方法中词的上下文即为邻近词的序列,而词的序列其实等价于一系列连续操作的item序列。因此,我们将用户一次浏览会话中连续点击的酒店序列作为训练语料,学习酒店的向量表示。抽取用户的连续点击如表1所示。酒店间的共现为正样本,且按照酒店的频率分布进行负样本采样。

表1 用户在同一个会话下的酒店连续点击记录

uid

sessionid

hotelid

001

1

1701976, 480887, 1525866, 846838

002

4

686430,1542818,993356,1525732,1525866,688217,1701976,1007025

酒店嵌入矩阵(Embeddingmatrix)的行数为酒店的总个数,列数为嵌入维度。酒店相似度使用余弦相似度。将相似度得分从高到低排序,选取TopN酒店做候选酒店。酒店向量生成使用的是Word2vec模型中的Skip-Gram模型。Skip-Gram神经网络模型训练一个带有单个隐含层的简单神经网络来执行某个预测任务,训练好的模型并不用于实际预测,其真正目的是获取输入层-隐含层的权重矩阵,将这些权重值视为词向量。

图4展示了当skip_window = 2时(即仅选输入词前后各两个词和输入词进行组合),训练样本是如何产生的(蓝色代表输入词,方框内代表位于窗口内的单词)。通过输入文本中成对的单词来训练神经网络,其输出概率代表着到词典中每个词有多大可能性跟输入单词同时出现。

 

图4 训练样本生成

每个词wt都决定了wt+j,基于极大似然估计方法,希望所有样本的条件概率p(wt+j|wt)之积最大,这里使用对数概率。因此Word2vec的目标函数如公式(1)所示。

  (1)

基于训练数据需要构建词汇表并对单词做one-hot编码。神经网络结构如图5所示。假设从训练数据中抽取出10000个唯一不重复的单词组成词汇表,则模型的输入为10000维的向量,输出也是10000维的向量。每一维输出都是一个概率,代表当前词是输入样本时输出词的概率大小。

图5 Skip-Gram神经网络

隐含层不使用激活函数,输出层使用softmax计算输出概率。由于权重矩阵规模非常大,通过梯度下降更新权重是相当慢的,并且需要大量的训练数据避免过拟合。因此通常对优化目标采用负采样方法,即每个训练样本的训练只会更新一小部分的模型权重,从而降低计算负担。Skip-Gram模型的Tensorflow核心代码如下所示:

 

Word2vec和由其衍生出的Item2vec是Embedding技术的基础性方法,但都是建立在序列样本的基础上。在互联网场景下,数据对象之间更多呈现的是图结构。典型的场景是由用户行为数据生成的物品关系图,如图6(a)(b) 所示,以及由属性和实体组成的知识图谱,如图6(c)所示。

图6 物品关系图与知识图谱

由于用户浏览酒店的模式不一定呈现序列结构,而是一种关系图结构,我们后期尝试Graph Embedding中的DeepWalk方法对图结构中的节点酒店进行Embedding。即在由酒店组成的图结构上进行随机游走(如图7所示),产生大量酒店序列,然后将这些物品序列作为训练样本输入Word2vec进行训练,得到酒店的Embedding。在DeepWalk算法中,需要定义随机游走的跳转概率,即到达节点vi后,下一步遍历vi的邻接点vj的概率。见公式(2)。

图7 随机游走

  (2)

其中ε是物品关系图中所有边的集合。如果物品关系图是有向有权图,则N+(vi)是节点vi所有的出边集合,Mij是节点vi到节点vj边的权重。如果物品关系图是无向无权图,则权重Mij将为常数1,且N+(vi)是节点vi所有边的集合。酒店推荐场景采用无权无向图结构进行训练。

四、酒店推荐系统中的模型应用

深度学习之前传统的推荐模型发展主要由这几部分组成:协同过滤算法族、逻辑回归模型族、因子分解机模型族以及组合模型,思路演化主要是增强泛化能力、保留记忆能力、挖掘特征组合关系。

经典的协同过滤算法曾是推荐系统的首选模型,并且衍生出矩阵分解模型,能够更好的处理稀疏共现矩阵问题,增强模型的泛化能力。在酒店推荐中我们也常常将协同过滤作为召回层的算法使用。与协同过滤仅利用用户和物品之间的显式或隐式反馈信息相比,逻辑回归能够利用和融合更多用户、物品及上下文特征。并发展出来因子分解机模型FM,加入二阶部分,使模型具备进行特征组合的能力。在此基础上又发展出域感知因子分解机FFM,进一步加强因子分解机特征交叉的能力。

另外为了融合多个模型优点,将不同模型组合使用成为推荐模型常用的方法。Facebook提出的GBDT+LR[ 梯度提升决策树+逻辑回归 ] 组合模型是在业界影响力较大的组合方式。其中GBDT作为有监督的特征转换器,对于连续型特征和离散特征分别做离散化非线性变换和笛卡尔乘积的特征组合,将实数向量转换为简单的二进制值向量,构造新特征向量。LR用于新特征向量的训练,并取得比单独使用两个模型都好的结果。组合模型中体现的特征工程模型化的思想,成为深度学习推荐模型的主要思想之一。

酒店推荐系统仍然延续通常意义上的CTR(Click- through rate)预估类的优化目标,其任务核心衍生为把推荐问题当作分类问题对待,预测用户点击某个酒店的概率CTR,并且返回用户一组按CTR从高到低排序的酒店列表。因此也称为搜索排序系统。

酒店推荐场景亦属于高度稀疏数据,往往需要解决记忆/泛化问题及特征交互问题。因此深度学习模型的优势就展现出来,通过学习一种低维的特征向量表示(Dense Embedding),深度神经网络已经表现出自动学习复杂特征交互的潜力。并且通过较少的特征工程,可以从稀疏特征中更好的泛化去发现特征关联。深度学习推荐模型大量借鉴并融合了深度学习在图像、语音及自然语言处理方向的成果,在模型结构上进行了快速的演化。主要有以下几种演变方向。

(1)改变神经网络的复杂结构,从单层神经网络模型AutoRec到经典的Deep Crossing(深度特征交叉),增加了深度神经网络的层数和结构复杂度。

(2)改变特征交叉方式,例如NeuralCF(神经网络协同过滤)和PNN(基于积操作的神经网络)模型。

(3)组合模型,主要是指Wide&Deep模型及其后续变种Deep&Cross、DeepFM等,通过组合不同特点、优势互补的网络,提升模型的综合能力。

(4)注意力机制与推荐模型的结合,主要包括FM与注意力机制的AFM和DIN(深度兴趣网络)。

(5)其他结合方式(序列模型、强化学习与推荐模型的结合等)。

以下简单介绍几种在推荐模型演化过程中常用的模型结构和原理。

4.1 Factorization Machines(因式分解机)

对于一个给定的特征向量,线性回归建模时采用的函数是

 

(3)

其中, W0和为模型参数。方程中各特征分量xi和xj (i≠j)之间相互独立,即中仅考虑单个的特征分量,而没有考虑特征分量之间的相互关系。因此将改写为:

 

(4)

公式中增加了任意两个不同特征之间的关系。但是在稀疏数据中,这样的建模方式存在一个缺陷,对于训练数据中未出现交互的特征分量,不能对相应的参数进行估计。而在类似推荐这种高度稀疏数据场景中,样本中出现未交互的特征分量是很普遍的。

为了克服上面的缺陷,针对每个维度的特征分量xi引入辅助向量

其中为超参数, wij改写为

 

则模型方程可以改写为:

       

                                      

由于对应一种矩阵分解技术,因此模型方程的方法称为Factorization Machines。该模型方程可以证明在线性时间0(kn) 内计算,并且方程可以进一步推导为:

(6)

FactorizationMachines的Tensorflow核心实现代码如下:

4.2 Wide & Deep Learning

深度学习存在过度泛化的问题,当用户与物品交互较少即特征向量稀疏时推荐一些与用户不相关的项目(例如用户有特定的偏好或者一些小众项目),这种情况下大多数项目不应该被推荐,但是Dense Embedding会给出非0的预测,因此不相关的项目也会被推荐。而进行特征交叉乘积变换的线性模型能够记忆这些特殊情况或例外规则,并且使用更少的参数。Google在2016年提出了Wide& Deep模型,很好的结合了线性模型的记忆能力和深度神经网络的泛化能力,在训练过程中同时优化2个模型的参数,从而达到整体模型的预测能力最优。模型结构如图9所示。

图9 Wide & Deep模型结构

Wide部分就是LR,输入特征包含了原始特征和交叉特征。Deep部分是MLP网络,隐含层的激活函数使用ReLUs=max(0,a),输入特征包含了连续的特征和embedding特征。对于一个逻辑回归任务Wide & Deep模型预测方程为:

(7)

其中Y是二分类标签,σ(.)是sigmoid函数,∅(x)是原始特征的交叉乘积转换。Wwide是所有线性模型的权重向量,Wdeep是应用于最后激活层输出的权重。

Wide& Deep建模可以使用Tensorflow高级API,建模步骤如下:

(1)选择Wide部分的特征(wide_columns):稀疏基础特征和交叉特征。

(2)选择Deep部分的特征(deep_columns):连续型特征、类别特征(编码)。

(3)将Wide & Deep特征合并输入模型(DNNLinearCombinedClassifier)。

4.3 FTRL 算法

Wide& Deep模型训练方面常使用结合 L1 正则的Follow-the-regularized-leader (FTRL) 算法进行Wide部分训练,而Deep部分使用AdaGrad算法进行训练。

其中FTRL算法可以实施于在线学习,对模型参数进行实时更新,在处理诸如逻辑回归之类的带非光滑正则化项的凸优化问题上性能非常出色。像Batch Gradient Descent 等优化算法,是对一批样本进行一次求解,得到一个全局最优解。而实际CTR预测需要更快速地更新模型,模型的参数需要针对每一个新来样本进行一次迭代。因此可以通过工程上实现FTRL算法,从而快速更新模型的参数。FTRL算法的特征权重更新公式为:

(8)

其中是针对每个特征维度的学习率。如果特征 A 比特征 B变化快,那么在维度 A 上面的学习率应该比维度 B 上面的学习率下降得更快。维度i的学习率定义为:

(9)

在Logistic Regression中,假设σ(a)=1/(1+exp(-a))是sigmoid函数,yt∈{0,1},需要预测Pt=σ(Wt),损失函数使用LogLoss函数:

(10)

梯度.Logistic Regression的FTRL算法为:

4.4 DeepFM

Wide & Deep 模型中需要宽度部分和深度部分两类不同的输入,而宽度部分仍然需要依赖大量的特征工程工作。2018年提出的DeepFM 模型结合了分解向量机(FM)和深度神经网络(DNN),既能学习复杂的低阶与高阶特征交互又不需要原始特征以外的特征工程,并且允许端到端的学习方式。模型结构如图10所示。嵌入层(Dense Embedding)将原始输入向量压缩到低维稠密向量,作为FM和深度部分的输入。因此不同于Wide & Deep 模型,DeepFM的FM部分和深度部分共享相同的输入向量,从而可以进行端到端的训练。

图10  DeepFM 模型结构

尽管不同Field的输入长度不同,但是Embedding之后的Dense vector的长度均为k。Dense vector其实就是输入层到Embedding层该神经元相连的k条线的权重,即。这k个值组合起来就是我们在FM中所提到的辅助向量vi,即FM和深度神经网络的共享输入向量。其中深度部分可以使用不同的神经网络结构。如图所示DeepFM模型是一种并行结构,预测结果可以表示为:

(11)

DeepFM 模型的Tensorflow核心实现代码如下:

五、酒店推荐系统评估

推荐系统一般分为离线评估和在线评估两部分。离线评估的指标主要是机器学习模型常用的一些评估指标,包括准确率、精确率与召回率、F1-Score、AUC值等。在线评估的主要方式是A/B测试,主要评估指标有点击率、转化率、点击排名等。

为了测试模型效果,我们选取了某一个酒店推荐场景,并抽取100万左右数据作为训练样本。其中正样本为用户点击,负样本为有露出但用户未点击,并对数据集做样本平衡处理。特征部分不赘述。模型离线表现如表2所示。

表2 模型离线表现对比

Model

AUC (5000  iters)

Logistic  Regression

0.597

Xgboost

0.737

XGBoost+LR

0.75

FM

0.599

Wide  & Deep

0.799

DeepFM

0.80

在线测试部分使用A/B测试,其中A版本为旧版本,推荐算法基于规则推荐,B版本为新版本,使用XGBoost模型进行酒店点击率预测并排序,同时使用基于酒店的协同过滤算法进行候选酒店召回。工程上线参考第三部分描述。A/B实验周期为一个月,使用的评估指标包括酒店平均点击率及酒店订单量等。其中酒店平均点击率增长25.35%,酒店订单量总增长率为27.31%,效果较显著。更多模型结构将会持续上线实验。

六、推荐系统中的一些问题

在构建推荐系统的过程中,推荐模型的作用是重要的,但并不是推荐系统的全部。推荐系统需要解决的问题是综合性的,包含特征选取和处理、召回层设计、实时性要求、模型在线学习以及冷启动和推荐多样性问题等。这里主要探讨一下冷启动和推荐多样性问题。

冷启动问题主要包括用户冷启动(新用户注册,无历史行为)、物品冷启动(新物品加入,无用户交互历史)和系统冷启动问题(无任何相关历史数据)三类。主流的冷启动策略是基于规则的冷启动过程,在这过程中可以丰富用户和物品特征,从而通过推荐模型进行个性化推荐。

另外也可以通过主动学习、迁移学习和探索利用机制。最经典的启发式探索利用方法为几个Bandit算法,如Thompson Sampling算法和UCB(Upper Confidence Bound)算法,二者都是利用了分布的不确定性作为探索强弱的依据。UCB算法流程如下:

(1)假设有K个老虎机,对每个老虎机进行随机摇臂m次,获得老虎机受益的初始化经验期望。

(2)用t表示至今摇臂的总次数,用nj表示第j个老虎机至今被摇臂的次数,计算每个老虎机的UCB值:

(3)选择UCB值最大的老虎机i摇臂,并观察其收益Xi,t。

(4)根据Xi,t更新老虎机i的收益期望值。

(5)重复第2步。

ThompsonSampling算法和UCB算法都是工程中常用的探索与利用方法,不但可以解决冷启动问题,还可以发掘用户新兴趣,增加推荐结果的多样性,减少大量同质化内容同时出现时用户的厌倦情绪。可以说探索与利用的思想是所有推荐系统不可或缺的补充。


参考文献

[1] 《深度学习推荐系统》,王喆

[2] H.B. McMahan, G. Holt, D. Sculley, M. Young, D. Ebner, J. Grady, L. Nie, T.Phillips, E. Davydov, D. Golovin, S. Chikkerur, D. Liu, M. Wattenberg, A. M.Hrafnkelsson, T. Boulos, and J. Kubica, “Ad click prediction: a view from thetrenches,” in ACM SIGKDD, 2013.

[3]X. He, J. Pan, O. Jin, T. Xu, B. Liu, T. Xu, Y. Shi, A. Atallah, R. Herbrich,S. Bowers, and J. Q. Candela, “Practical lessons from predicting clicks on adsat facebook,” in ADKDD, 2014, pp. 5:1–5:9.

[4] S.Rendle, “Factorization machines,” in ICDM.

[5]H. Cheng, L. Koc, J. Harmsen, T. Shaked, T. Chandra, H. Aradhye, G. Anderson,G. Corrado, W. Chai, M. Ispir, R. Anil, Z. Haque, L. Hong, V. Jain, X. Liu, andH. Shah, “Wide & deep learning for recommender systems,” CoRR, vol.abs/1606.07792, 2016.

[6]Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, Xiuqiang He, and ZhenhuaDong, “DeepFM:AnEnd-to-End Wide & Deep Learning Framework for CTR Prediction,”arXivpreprint arXiv:1804.04950, 2018

活动推荐

2020云原生微服务大会

8 月 18 日 - 19 日,由阿里云主办的首届“云原生微服务大会”将在线召开。5 大论坛,25 个议题,750 分钟技术干货分享!与 25 位技术大咖一起,聚焦微服务架构发展前沿,共迎云原生时代。

大会官网PC端链接:https://developer.aliyun.com/topic/microservices2020#/

【推荐阅读】

《携程架构实践》

京东

当当

《携程人工智能实践》

京东

当当

 “携程技术”公众号

  分享,交流,成长

推荐系统学习笔记-推荐系统分布式离线训练 工业界需要训练大型的机器学习模型,一些广泛使用的特定的模型在规模上的两个特点:1. 参数很大,超过单个机器的容纳能力(比如大型Logistic Regression和神经网络)2. 训练数据巨大,需要分布式并行提速(大数据)这种需求下,当前类似MapReduce的框架并不能很好适合。如果每个参数都有一个时间戳,那么参数众多,时间截也众多,由于parameter server在oush和oul的时候都是range-based,那么在range里面的参数共享同一个时间戳,就可以大大降低空间复杂度。 阅读详情

相关推荐

于磊-携程AI和推荐系统的云化实践

于磊-携程AI和推荐系统的云化实践于磊-携程AI和推荐系统的云化实践于磊-携程AI和推荐系统的云化实践

RS推荐系统-实例之基于内容相似度的酒店推荐

在推荐系统中,有一个环节是基于物品的推荐。它是基于物品的相似度,即物品的静态属性,如物品内容描述、物品特征向量等属性。这次我们会用到TFIDF和相似度计算的方法,对用户进行酒店推荐。本次使用的酒店数据会放到github中,需要自取:https://github.com/Vihagle/AI/tree/main/data. import numpy as np import pandas as pd import nltk nltk.download('stopwords') from sklearn.met

你好,今天的你 1078

陀螺仪及四元数解算

陀螺仪 四元数

zb313982521的博客 2004

机器学习在马蜂窝酒店聚合中的应用初探

出门旅行,订酒店是必不可少的一个环节。住得干净、舒心对于每个出门在外的人来说都非常重要。 在线预订酒店让这件事更加方便。当用户在马蜂窝打开一家选中的酒店时,不同供应商提供的预订信息会形成一个聚合列表准确地展示给用户。这样做首先避免同样的信息多次展示给用户影响体验,更重要的是帮助用户进行全网酒店实时比价,快速找到性价比最高的供应商,完成消费决策。 酒店聚合能力的强弱,决定着用户预订酒店时可选价格的「厚度」,进而影响用户个性化、多元化的预订体验。为了使酒店聚合更加实时、准确、高效,现在马蜂窝酒店业务中...

whyrookie的博客 876

halcon 查找圆形

先找到大概位置进行拟合,然后再以拟合出的位置作为测量的大概位置进行找圆;

qq_59062726的博客 734

华为交换机实战:如何用ACL+流分类精准限制特定IP的网速(附完整命令)

本文详细介绍了华为交换机如何通过ACL+流分类技术实现精准IP限速,包括ACL规则配置、流分类关联、流行为定义及流策略应用等完整步骤。文章提供了实战命令和配置验证方法,帮助网络管理员有效管理带宽资源,解决特定IP占用过多带宽的问题。

weixin_29229055的博客 100

Hotel booking酒店预订——数据分析与建模

Hotel booking酒店预订——数据分析与建模:https://zhuanlan.zhihu.com/p/196757364?utm_source=wechat_session 写文章Hotel booking酒店预订——数据分析与建模(转载翻译自kaggle)海上泊舟数据分析师数据源:https://www.sciencedirect.com/science/article/pii/S2352340918315191字段解释:hotel 酒店is_canceled 是否取消lead_time 预

古月哲亭 9214

基于LangGraph的智能报告生成平台项目分析

不知道你是否知道或者了解OpenAI and Gemini Deep Research。他们是一种能够根据输入问题进行规划、结合网络搜索获取信息并最终呈现结果的研究工具或技术。那这样research是如何实现的呢?最近刚好看到一个实现类似功能的开源项目: open_deep_search。本文将基于该项目进行代码层面剖析。

u011160113的博客 923

携程个性化推荐算法实践

携程个性化推荐算法实践 携程作为国内领先的OTA,每天向上千万用户提供全方位的旅行服务,如何为如此众多的用户发现适合自己的旅游产品与服务,挖掘潜在的兴趣,缓解信息过载,个性化推荐系统与算法在其中发挥着不可或缺的作用。而OTA的个性化推荐一直也是个难点,没有太多成功经验可以借鉴,本文分享了携程在个性化推荐实践中的一些尝试与摸索。 推荐流程大体上可以分为3个部分,召回、

huangshulang1234的博客 8049

【Flink on k8s】- 1 - Flink Kubernetes Operator 简介 2023

Flink Kubernetes Operator 可以与 Kubernetes 的其他功能和工具集成,可以帮助用户快速定位和解决问题。Flink Kubernetes Operator可以在Kubernetes上实现高可用性,以确保 Flink 集群的稳定性和可靠性。Flink Kubernetes Operator 可以快速地部署 Flink 集群,而无需手动配置和管理集群。Flink Kubernetes Operator可以将Flink集群与其他应用程序隔离,以避免资源争用和干扰。

欢迎来到我的博客,一起探索代码里的世界! 1344

matlab 基于离散余弦变换DCT的最小二乘相位解缠

最小范数法是寻求在解包裹相位的局部微分与包裹相位微分相一致的条件下, 逼近于真实相位分布的解包裹相位分布。目标是使解包裹相位与包裹相位曲面的差最小

点云侠的博客 285

干货 | 携程酒店排序推荐广告高效可靠数据基座--填充引擎

作者简介yang,携程资深后端开发工程师,专注推荐系统架构、数据流批一体、系统稳定性、效率提升等领域;kevin,携程高级研发经理,专注以技术驱动解决推荐系统中产品业务上的共性问题,创新生产模式,重构生产力;莫秃,携程高级后端开发工程师,负责酒店机器学习平台的研发工作;一、背景与思考1.1 背景携程酒店排序推荐广告工程(以下简称酒店推荐工程)在数据层面引入抽象化的统一数据协议UnifiedPB,解...

携程技术 1183

【时时三省】tessy 集成测试:小白入门指导手册

有图有文字详细介绍 tessy 集成测试 操作方法。

时时三省的博客 2515

《携程技术2020年度合辑》,送给爱学习的你

01序言 2020年跌宕起伏,突如其来的疫情对旅游行业造成了前所未有的冲击,也让更多人进一步感受到技术互联互通的重要性。对于旅游业技术人而言,外部的不可控因素让我们更加聚焦于系...

携程技术 728

ANFIS实现数据非线性回归附Matlab代码

在本文中,我们将介绍如何使用Matlab实现基于MSE的ANFIS非线性回归,并提供相应的源代码。ANFIS是一种融合了模糊逻辑和神经网络的方法,它可以通过学习数据集中的模式来构建一个模糊推理系统。ANFIS的训练过程基于最小化MSE,以提高模型的拟合能力。通过上述代码示例,我们可以使用基于MSE的ANFIS模型对数据进行非线性回归,并获得相应的预测结果。在示例中,我们定义了一个包含两个样本的新输入数据集 X_new,然后使用训练好的ANFIS模型进行预测,并将结果存储在变量 Y_pred 中。

2301_79326588的博客 473

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

携程推荐系统架构学习

下图是携程推荐系统的架构图,参考携程大数据实践:高并发应用架构及推荐系统案例 这个图,画的较携程应用系统整体架构学习清晰。 对我的技术选型和架构设计有很多借鉴参考的地方 1 数据采集 采集的是哪些数据? 采集数据的格式是什么? 采集数据的工具是什么?采集数据时间窗如何? 数据传输方式是什么? 2 数据清晰

warrah 南极狼 3797

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

干货 | 强化学习在携程酒店推荐排序中的应用探索

作者简介宣云儿,携程酒店排序算法工程师,主要负责酒店排序相关的算法逻辑方案设计实施。目前主要的兴趣在于排序学习、强化学习等领域的理论与应用。前言目前携程酒店绝大部分排序业...

携程技术中心 725

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

干货 | 当你在携程搜索时,背后的推荐系统是如何工作的

作者简介葛荣亮,携程搜索部门高级研发工程师。2015年加入携程,目前主要负责搜索平台的前端+数据挖据工作。一、前言随着旅游业的发展,人们对搜索的要求越来越高。智能化大趋势...

携程技术中心 2717

干货 | 携程酒店推荐模型优化

作者简介Yorkey,携程高级算法专家,主要从事大规模分布式推荐系统设计和算法研发工作。一、背景当用户在线上浏览酒店时,作为旅行平台,如何挑选更合适的酒店推荐给用户,降低其选择的费力度,...

携程技术 2262

机器学习模型在携程海外酒店推荐场景中的应用

导读 互联网企业的核心需求是“增长”,移动互联时代下的在线旅游业也不例外。随着大数据、云计算和人工智能等技术的不断进步,通过算法和模型来实现增长已成为核心。 近年来推荐系统迅速崛起,主要解决在信息过载的情况下,帮助用户高效获取感兴趣的信息,同时帮助企业最大限度的吸引用户、留存用户、增加用户黏性、提高用户转化率。因此个性化的推荐服务对于在线旅游业也变得非常重要,通过推荐能够将用户从众多的旅行选择中解放出来,指导用户快速找到感兴趣的项目,大大简化用户的旅行计划和购买。 在线旅游服务...

hellozhxy的博客 945

Lr

二、 逻辑回归        言归正传,因为广告大部分是按照CPC计费的,而我们手里的流量是固定的,因此对每条广告请求我们就需要保证这条广告的展示收益更大。而广告收益是可以根据点击率、广告计费价格、广告质量度均衡决定的,所以我们就需要评估广告的质量度和点击率,本文就主要研究广告点击率预估中广泛使用的逻辑回归模型。在实际广告点击率预估的应用中,样本数目和特征(逻辑回归粗暴离散化后)的数目均可以达到

周红伟讲AI 1102

携程大数据实践:高并发应用架构及推荐系统案例

本文来自携程技术中心基础业务研发部的《应用架构涅槃》系列分享。据基础业务研发部负责人李小林介绍,互联网二次革命的移动互联网时代,如何吸引用户、留住用户并深入挖掘用户价值,在激烈的竞争中脱颖而出,是各大电商的重要课题。通过各类大数据对用户进行研究,以数据驱动产品是解决这个课题的主要手段,携程的大数据团队也由此应运而生;经过几年的努力,大数据的相关技术为业务带来了惊人的提升与帮助。以基础大数据的...

happytofly的博客 1374

实战智能推荐系统(14)-- 推荐系统架构

外围架构 一般来说,每个网站都有一个 UI 系统,UI 系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在 UI 上的各种各样的行为记录到用户行为日志中。 从上面的结构可以看到,除了推荐系统本身,主要还依赖两个条件--界面展示和用户行为数据。 推荐系统架构 推荐系统联系用户和物品的主要方式如下图所示。如果将这三种方式都抽象一下就可以发现,如果认为用户喜欢的物品也是一种用户特...

ouprince 1万+

携程AI和推荐系统的云化实践

嘉宾简介于磊,携程公共BI,高级总监。毕于上海交通大学计算机科学与技术系,获博士学位。2012年在苏黎世联邦理工大学访学,师从 ACM fellow, Dr. Donald Kossman,从事高并发大数据架构研究。2013 年加入三星电子研究院,所带团队参与SVioce超大规模智能中心的相关算法和架构研究。2015 年加入携程,任基础业务部公共BI团队研发负责人,负责集团大数据平台、通用个性化平

Go中国 1549

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 192
上一篇: 干货 | 数据治理落地难?携程度假数据治理需求设计实践
下一篇: UED专栏 | 携程机票订后服务“航班助手”的三大设计秘籍
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值