PageSourceSearch

https://wd1900.github.io/2018/11/26/Real-time-Personalization-usin…earch-Ranking-at-Airbnb-%E8%A7%A3%E8%AF%BB/

html wd1900.github.io collected 2026-10-03 10:09:34 UTC 30,562 bytes, 487 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head><meta name="generator" content="Hexo 3.8.0">
4    <meta charset="utf-8">
5    <meta http-equiv="X-UA-Compatible" content="chrome=1">
6
7    
8
9    <title>
10      Real-time Personalization using Embeddings for Search Ranking at Airbnb 解读 | 王鸣辉的博客
11    </title>
12
13    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
14    
15      <meta name="author" content="Minghui Wang">
16    
17    
18
19    <meta name="description" content="最近看到了�Airbnb的一篇paper获得了2018å¹´KDD best paper,于是阅读并在组内分享了下,顺便搬到博客上来">
20<meta name="keywords" content="Embeddings,Recommend,Search Ranking,Airbnb,KDD best paper 2018">
21<meta property="og:type" content="article">
22<meta property="og:title" content="Real-time Personalization using Embeddings for Search Ranking at Airbnb 解读 | 王鸣辉的博客">
23<meta property="og:url" content="http://yoursite.com/2018/11/26/Real-time-Personalization-using-Embeddings-for-Search-Ranking-at-Airbnb-解读/index.html">
24<meta property="og:site_name" content="王鸣辉的博客">
25<meta property="og:description" content="最近看到了�Airbnb的一篇paper获得了2018å¹´KDD best paper,于是阅读并在组内分享了下,顺便搬到博客上来">
26<meta property="og:locale" content="default">
27<meta property="og:image" content="http://yoursite.com/images/skipgram_listing.png">
28<meta property="og:image" content="http://yoursite.com/images/embed1.jpeg">
29<meta property="og:image" content="http://yoursite.com/images/embed2.jpeg">
30<meta property="og:image" content="http://yoursite.com/images/map_table.png">
31<meta property="og:image" content="http://yoursite.com/images/type_embedding.png">
32<meta property="og:image" content="http://yoursite.com/images/offline_eval_emb.png">
33<meta property="og:updated_time" content="2019-05-26T16:52:16.691Z">
34<meta name="twitter:card" content="summary">
35<meta name="twitter:title" content="Real-time Personalization using Embeddings for Search Ranking at Airbnb 解读 | 王鸣辉的博客">
36<meta name="twitter:description" content="最近看到了�Airbnb的一篇paper获得了2018å¹´KDD best paper,于是阅读并在组内分享了下,顺便搬到博客上来">
37<meta name="twitter:image" content="http://yoursite.com/images/skipgram_listing.png">
38
39    
40    
41      <link rel="icon" type="image/x-icon" href="/favicon.png">
42    
43    <link rel="stylesheet" href="/css/uno.css">
44    <link rel="stylesheet" href="/css/highlight.css">
45    <link rel="stylesheet" href="/css/archive.css">
46    <link rel="stylesheet" href="/css/china-social-icon.css">
47
48</head>
49<body>
50
51    <span class="mobile btn-mobile-menu">
52        <i class="icon icon-list btn-mobile-menu__icon"></i>
53        <i class="icon icon-x-circle btn-mobile-close__icon hidden"></i>
54    </span>
55
56    
57
58<header class="panel-cover panel-cover--collapsed">
59
60
61  <div class="panel-main">
62
63
64    <div class="panel-main__inner panel-inverted">
65    <div class="panel-main__content">
66
67        
68
69        <h1 class="panel-cover__title panel-title"><a href="/" title="link to homepage">王鸣辉的博客</a></h1>
70        <hr class="panel-cover__divider">
71
72        
73        <p class="panel-cover__description">
74          Wang Minghui&#39;s Personal Blog
75        </p>
76        <hr class="panel-cover__divider panel-cover__divider--secondary">
77        
78
79        <div class="navigation-wrapper">
80
81          <nav class="cover-navigation cover-navigation--primary">
82            <ul class="navigation">
83
84              
85                
86                <li class="navigation__item"><a href="/#blog" title class="blog-button">首页</a></li>
87              
88                
89                <li class="navigation__item"><a href="/about" title class>关于</a></li>
90              
91                
92                <li class="navigation__item"><a href="/archive" title class>归档</a></li>
93              
94
95            </ul>
96          </nav>
97
98          <!-- ----------------------------
99To add a new social icon simply duplicate one of the list items from below
100and change the class in the <i> tag to match the desired social network
101and then add your link to the <a>. Here is a full list of social network
102classes that you can use:
103
104    icon-social-500px
105    icon-social-behance
106    icon-social-delicious
107    icon-social-designer-news
108    icon-social-deviant-art
109    icon-social-digg
110    icon-social-dribbble
111    icon-social-facebook
112    icon-social-flickr
113    icon-social-forrst
114    icon-social-foursquare
115    icon-social-github
116    icon-social-google-plus
117    icon-social-hi5
118    icon-social-instagram
119    icon-social-lastfm
120    icon-social-linkedin
121    icon-social-medium
122    icon-social-myspace
123    icon-social-path
124    icon-social-pinterest
125    icon-social-rdio
126    icon-social-reddit
127    icon-social-skype
128    icon-social-spotify
129    icon-social-stack-overflow
130    icon-social-steam
131    icon-social-stumbleupon
132    icon-social-treehouse
133    icon-social-tumblr
134    icon-social-twitter
135    icon-social-vimeo
136    icon-social-xbox
137    icon-social-yelp
138    icon-social-youtube
139    icon-social-zerply
140    icon-mail
141
142-------------------------------->
143
144<!-- add social info here -->
145
146
147
148<nav class="cover-navigation navigation--social">
149  <ul class="navigation">
150
151    
152      <!-- Github -->
153      <li class="navigation__item">
154        <a href="https://github.com/wd1900" title="Huno on GitHub">
155          <i class="icon icon-social-github"></i>
156          <span class="label">GitHub</span>
157        </a>
158      </li>
159    
160
161    <!-- China social icon -->
162
163
164      <!-- <li class="navigation__item">
165        <a href="https://github.com/wd1900" title="">
166          <i class='icon cs-icon-douban'></i>
167          <span class="label">Douban</span>
168        </a>
169      </li> -->
170
171      <li class="navigation__item">
172        <a href="http://weibo.com/p/1005051882909995/" title>
173          <i class="icon cs-icon-weibo"></i>
174          <span class="label">Weibo</span>
175        </a>
176      </li>
177
178
179
180
181  </ul>
182</nav>
183
184
185
186
187        </div>
188
189      </div>
190
191    </div>
192
193    <div class="panel-cover--overlay"></div>
194  </div>
195</header>
196
197
198    <div class="content-wrapper">
199        <div class="content-wrapper__inner entry">
200            
201
202<article class="post-container post-container--single">
203
204  <header class="post-header">
205    
206    <h1 class="post-title">Real-time Personalization using Embeddings for Search Ranking at Airbnb 解读</h1>
207
208    
209
210    <div class="post-meta">
211      <time datetime="2018-11-26" class="post-meta__date date">2018-11-26</time> 
212
213      <span class="post-meta__tags tags">
214
215          
216
217          
218             &#8226; 标签:
219            <font class="tags">
220              <a class="tags-link" href="/tags/Airbnb/">Airbnb</a>, <a class="tags-link" href="/tags/Embeddings/">Embeddings</a>, <a class="tags-link" href="/tags/KDD-best-paper-2018/">KDD best paper 2018</a>, <a class="tags-link" href="/tags/Recommend/">Recommend</a>, <a class="tags-link" href="/tags/Search-Ranking/">Search Ranking</a>
221            </font>
222          
223
224      </span>
225    </div>
226    
227    
228
229  </header>
230
231  <section id="post-content" class="article-content post">
232    <p>最近看到了�Airbnb的一篇paper获得了2018å¹´KDD best paper,于是阅读并在组内分享了下,顺便搬到博客上来<br><a id="more"></a><br>最近看到了�Airbnb的一篇paper获得了2018å¹´KDD best paper <a href="http://delivery.acm.org/10.1145/3220000/3219885/p311-grbovic.pdf?ip=61.135.194.49&amp;id=3219885&amp;acc=OPENTOC&amp;key=4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E4D4702B0C3E38B35%2E054E54E275136550&amp;__acm__=1543248634_1e9984a4c6d29462dd6a1428cb109404" target="_blank" rel="noopener">Real-time Personalization using Embeddings for Search<br>Ranking at Airbnb</a><br>,于是阅读并在组内分享了下,顺便搬到博客上来。<br>此文主要是对论文的重点部分�进行翻译性地解读,同时穿插着我自己对各部分理解和想法。如有问题,欢迎指正。</p>
233<p>目前在推荐上比较流行的方案,主要是基于<code>google</code>的<code>wide&amp;deep</code>开启的end to end的模型,uid,itemid作为<code>embedding</code>输入 加上其他各种特征,并着重在wide部分进行优化,比如以<code>deepFM</code>为首的模型。我们自己也是在这个方向上实践的。这篇论文是先单独训练embedding,然后在�把embedding当特征输入到rank model中</p>
234<h2 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h2><p>搜索算法的目标就是为了提升网站的收益,在airbnb需要同时优化客人和房主两方,即给定地点和日期后,将位置、价格、风格和评价等方面对用户有吸引力的房子排前。也要考虑房主的偏好,将可能会拒绝客人的排名名降低,比如用户评价差,有宠物,人数等等原因。</p>
235<p>在一个search session中会有多次点击和联系房主,这些都是in-session signals。实时个性化推荐的目标是在搜索会话期间为客人展现更多类似于我们认为他会喜欢的房间,同时,可以用负面信号,如跳过高排名的listings,去减少与之相似的我们认为不喜欢的。</p>
236<p>引入listing embeddings,利用这些相似性去为Search Ranking Model创建个性化特征,驱动相似listing推荐</p>
237<p>由于一般人一年旅行一到两次,在Airbnb的场景中,booking是很稀疏的,其中大量用户只订过一次。为此,训练listing_type级别的embeddings。同样,也学习与 listing _type embeddings 同一向量空间的user_type embeddings.<strong>��这里边的一个亮点就是user_type embeddings 和 list_type embeddings是�同一空间下的。</strong></p>
238<h3 id="历史工作:"><a href="#历史工作:" class="headerlink" title="历史工作:"></a>历史工作:</h3><ul>
239<li>Real-time Personalization</li>
240<li>Adapting Training for Congregated Search</li>
241<li>Leveraging Conversions as Global Context</li>
242<li>User Type Embeddings</li>
243<li>Rejections as Explicit Negatives</li>
244</ul>
245<h3 id="效果:"><a href="#效果:" class="headerlink" title="效果:"></a>效果:</h3><p>CTR相对于现有的模型提升20%</p>
246<hr>
247<p>如上文所说,接下来介绍Listing Embeddings、Listing_type Embeddings 和 User_type Embeddings</p>
248<h3 id="Listing-Embeddings"><a href="#Listing-Embeddings" class="headerlink" title="Listing Embeddings"></a>Listing Embeddings</h3><p>首先定义<code>session</code>,用户的点击序列就是session,两个点击间超过30min就是一个新的session,或者预订了房间也算是结束了一个session。根据此数据集
248去学习,使用<code>skip-gram model</code>最大化如下目标函数</p>
249<script type="math/tex; mode=display">
250\mathcal { L } = \sum _ { s \in \mathcal { S } } \sum _ { l _ { i } \in s } \left( \sum _ { - m \geq j \leq m , i \neq 0 } \log \mathbb { P } \left( l _ { i + j } | l _ { i } \right) \right)</script>
250<p>$\mathbb { P } \left( l _ { i + j } | l _ { i } \right)$ 是在临近点击 $l _ { i }$ 情况下,应用soft-max后 $l _ { i + j }$ 被点击的概率:</p>
251<script type="math/tex; mode=display">
252\mathbb { P } \left( l _ { i + j } | l _ { i } \right) = \frac { \exp \left( \mathbf { v } _ { l _ { i } } ^ { \top } \mathbf { v } _ { l + j } ^ { \prime } \right) } { \sum _ { l = 1 } ^ { | \mathcal { V } | } \exp \left( \mathbf { v } _ { l _ { i } } ^ { \top } \mathbf { v } _ { l } ^ { \prime } \right) }</script>
252<p>�变量的定义很好理解,l就是listing(paper中的listing我理解就是房子),u就是user,v代指vector,像$v_ { l _ { i } }$就是指listing i的embedding,$\mathcal { V }$代指所有listings集合。</p>
253<p><strong>随机采样当做负例</strong>和传统的skip-gram相同,于是优化目标函数转变为:</p>
254<script type="math/tex; mode=display">
255\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 } } } (3)</script>
255<p>�<br>$\mathcal { D }$ 指数据集, p为positive,n就是negative了。</p>
256<h4 id="Booked-Listing-as-Global-context"><a href="#Booked-Listing-as-Global-context" class="headerlink" title="Booked Listing as Global context:"></a>Booked Listing as Global context:</h4><p>session被分为两种:</p>
257<ol>
258<li>booked sessions  ( i.e. click sessions that end with user booking a listing to stay at</li>
259<li>exploratory sessions (i.e. click sessions that do not end with booking, i.e. users were just browsing</li>
260</ol>
261<p>引入最终预订的listing作为全局上下文,无论其是否在窗口内,帮助优化临近点击listing到预订listing的先关关系。于是<code>booked sessions</code>的embedding更新规则变成:</p>
262<script type="math/tex; mode=display">
263\underset { \theta } { \operatorname { argmax } } \sum _ { ( l , c ) \in \mathcal { D } _ { p } } \log \frac { 1 } { 1 + e ^ { - v _ { c } ^ { \prime } v _ { l } } } + \sum _ { ( l , c ) \in \mathcal { D } _ { n } } \log \frac { 1 } { 1 + e ^ { v _ { c } ^ { \prime } v _ { l } } } + \log \frac { 1 } { 1 + e ^ { - v _ { l _ { b } } ^ { \prime } v _ { l } } } (4)</script>
263<p><img src="/images/skipgram_listing.png" alt=" Skip-gram model for Listing Embeddings"></p>
264<h4 id="Adapting-Training-for-Congregated-Search"><a href="#Adapting-Training-for-Congregated-Search" class="headerlink" title="Adapting Training for Congregated Search:"></a>Adapting Training for Congregated Search:</h4><p>在线预定一般都是在一个market里去选择,比如你想去London,那么你会在London这个market里去选择。而负样本是全局随机采样的,很可能与正例不在同一个market里,导致同market内学习到的相似性不够好,为此引入同market的随机样本作为额外的负样本。</p>
265<script type="math/tex; mode=display">
266\underset { \theta } { \operatorname { argmax } } \sum _ { ( l , c ) \in \mathcal { D } _ { p } } \log \frac { 1 } { 1 + e ^ { - v _ { c } ^ { \prime } v _ { l } } } + \sum _ { ( l , c ) \in \mathcal { D } _ { n } } \log \frac { 1 } { 1 + e ^ { v _ { c } ^ { \prime } v _ { l } } } + \log \frac { 1 } { 1 + e ^ { - v _ { l _ { b } } ^ { \prime } v _ { l } } } + \sum _ { ( l , m_{n} ) \in \mathcal { D } _ { m_{n} } } \log \frac { 1 } { 1 + e ^ { - v _ { m_{n} } ^ { \prime } v _ { l } } }  (5)</script>
266<h3 id="cold-start-listing-embedding"><a href="#cold-start-listing-embedding" class="headerlink" title="cold start listing embedding"></a>cold start listing embedding</h3><p>新房子的embedding,用10英里内最相似的三个房子(类型、价格范围)的embedding均值来代替</p>
267<h3 id="Examining-Listing-Embeddings"><a href="#Examining-Listing-Embeddings" class="headerlink" title="Examining Listing Embeddings"></a>Examining Listing Embeddings</h3><p>在8亿的click sessions上训练32维embeddings,进行K-means聚类,可以发现位置相近的聚集在一起,可知学习到了地理位置的相似性。也可以看到相同类型和价格的listing比不同的更相似,如下图:</p>
268<p><img src="/images/embed1.jpeg" alt="Embeddings"></p>
269<p><img src="/images/embed2.jpeg" alt=" Embeddings Evaluation Tool"></p>
270<h2 id="User-type-amp-Listing-type-Embeddings"><a href="#User-type-amp-Listing-type-Embeddings" class="headerlink" title="User-type &amp; Listing-type Embeddings"></a>User-type &amp; Listing-type Embeddings</h2><p>用用户预订序列来训练Embedding,可以捕获cross-market的相似度</p>
271<p>不过这样学习有以下挑战:</p>
272<ul>
273<li>预订是个低频事件,booking sessions数据相较于click sessions少很多。</li>
274<li>许多用户只预订一次,session长度为1是无法被学习的</li>
275<li>对于任何一个实体,要学到有意义的embedding需要实体出现在数据中至少5-10次</li>
276<li>用户两次预订间隔时间很长的话,用户自身偏好可能会改变比如因为职业的改变而对价格敏感度改变</li>
277</ul>
278<p>解决方案,引入Listing_type embeddings</p>
279<p>listing Embeddings 比较适合short-term, in session场景, peronalization还需要基于长期历史的个性化,用户曾经在纽约和伦敦预订过,现在在搜索洛杉矶。这就需要去找到不同market之间的相似性,通过用户的booked list可以捕获此信息。</p>
280<p>给定一个listing_id,根据它的位置,价格,类型,容量,床数等进行规则映射用数据驱动的方式最大化每个listing_type 桶的覆盖范围</p>
281<p>使用Listing_type embeddings来解决这个问题。给定一个listing_id,根据它的位置,价格,类型,容量,床数等进行规则映射,用数据驱动的方式最大化每个listing_type 桶的覆盖范围。Airbnb的映射table如下:<br><img src="/images/map_table.png" alt="map_table"></p>
282<h3 id="Training-Procedure"><a href="#Training-Procedure" class="headerlink" title="Training Procedure"></a>Training Procedure</h3><p><strong>此处我觉得是一个比较有想法的点,就是学习在同一向量空间下的user_type和listing_type embedding</strong></p>
283<p>$s _ { b } = \left( u _ { t y p e _ { 1 } } l _ { t y p e _ { 1 } } , \ldots , u _ { t y p e _ { M } } l _ { t y p e _ { M } } \right) \in \mathcal { S } _ { b }$ 是用户预订序列数据集,将user_type, list_type组合在一起,再拼成一个序列即相当于把他们确定到了一个空间中。<br>于是在skip-gram中, $user_type ( u _ { t } )$为中心项时,目标函数为:</p>
284<script type="math/tex; mode=display">\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 } \mathbf { v }_{ u _ { t }} } } + \sum _ { \left( u _ { t } , c \right) \in \mathcal { D } _ { n e g } } \log \frac { 1 } { 1 + e ^ { \mathbf { v } _ { c } ^ { \prime } \mathbf { v } _ { u_{t}} } }</script>
284<p> $listing_type ( l _ { t } )$为中心项时,目标函数为:</p>
285<script type="math/tex; mode=display">\underset { \theta } { \operatorname { argmax } } \sum _ { \left( l_ { t } , c \right) \in \mathcal { D } _ { b o o k } }  \log \frac { 1 } { 1 + e ^ { - v _ { c } ^ { \prime } \mathbf { v }_{ l _ { t }} } } + \sum _ { \left( u _ { t } , c \right) \in \mathcal { D } _ { n e g } } \log \frac { 1 } { 1 + e ^ { \mathbf { v } _ { c } ^ { \prime } \mathbf { v } _ { l_{t}} } }</script>
285<p><img src="/images/type_embedding.png" alt="type embeddings"></p>
286<h4 id="Explicit-Negatives-for-Rejections"><a href="#Explicit-Negatives-for-Rejections" class="headerlink" title="Explicit Negatives for Rejections"></a>Explicit Negatives for Rejections</h4><p>不像一般的场景里只考虑用户偏好,�Airbnb的这个场景既要考虑用户偏好也要考虑主人的偏好。引入房主拒绝行为,作为房主方的显示反馈。某种层面上会使对用户不敏感的房主和评分一般的客人聚拢,减少客人被拒绝几率,提高预定概率。<br>对于被拒绝的序列,我们优化的目标函数分别变为:</p>
287<script type="math/tex; mode=display">\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 } \mathbf { v }_{ u _ { t }} } } + \sum _ { \left( u _ { t } , c \right) \in \mathcal { D } _ { n e g } } \log \frac { 1 } { 1 + e ^ { \mathbf { v } _ { c } ^ { \prime } \mathbf { v } _ { u_{t}} } } + \sum _ { \left( u _ { t } , l_{t} \right) \in \mathcal { D } _ { reject } } \log \frac { 1 } { 1 + e ^ { \mathbf { v } _ { l_{t} } ^ { \prime } \mathbf { v } _ { u_{t}} } }</script>
287<p>and</p>
288<script type="math/tex; mode=display">\underset { \theta } { \operatorname { argmax } } \sum _ { \left( l_ { t } , c \right) \in \mathcal { D } _ { b o o k } }  \log \frac { 1 } { 1 + e ^ { - v _ { c } ^ { \prime } \mathbf { v }_{ l _ { t }} } } + \sum _ { \left( u _ { t } , c \right) \in \mathcal { D } _ { n e g } } \log \frac { 1 } { 1 + e ^ { \mathbf { v } _ { c } ^ { \prime } \mathbf { v } _ { l_{t}} } } + \sum _ { \left( l _ { t } , u_{t} \right) \in \mathcal { D } _ { reject } } \log \frac { 1 } { 1 + e ^ { \mathbf { v } _ { u_{t} } ^ { \prime } \mathbf { v } _ { u_{t}} } }</script>
288<h2 id="EXPERIMENTS"><a href="#EXPERIMENTS" class="headerlink" title="EXPERIMENTS"></a>EXPERIMENTS</h2><p>这段主要介绍了下训练和离线评估的细节,和listing Embeddings在房间相似推荐中的应用,以及如何将embedding处理为特征提供给Search Ranking Model。</p>
289<h3 id="Training-Listing-Embeddings"><a href="#Training-Listing-Embeddings" class="headerlink" title="Training Listing Embeddings"></a>Training Listing Embeddings</h3><ol>
290<li>30分钟不活跃原则</li>
291<li>移除偶发和短点击(如停留少于30s)</li>
292<li>只保留&gt;=2 的sessions</li>
293<li>匿名session,移除userid</li>
294</ol>
295<p>点击会话分为 exploratory sessions &amp; booked sessions。训练数据中booked sessions过采样5倍达到最好效果.</p>
296<h4 id="Setting-up-Daily-Training"><a href="#Setting-up-Daily-Training" class="headerlink" title="Setting up Daily Training"></a>Setting up Daily Training</h4><ul>
297<li>over multiple months</li>
298<li>每天引入新一天,去掉最早一天的数据</li>
299<li>重新训练是要比增量训练现有的vector效果好。</li>
300</ul>
301<p>模型中,day-to-day vector的变化不会导致矛盾,因为最终使用的是embeddings间的相似度而非具体的vector</p>
302<p><strong>超参</strong></p>
303<ul>
304<li>dimensionality 32</li>
305<li>window size 5</li>
306<li>iterations 10.</li>
307</ul>
308<h4 id="Offline-Evaluation-of-Listing-Embeddings"><a href="#Offline-Evaluation-of-Listing-Embeddings" class="headerlink" title="Offline Evaluation of Listing Embeddings"></a>Offline Evaluation of Listing Embeddings</h4><p>从预订房间开始回溯17个点击,统计预订房间在对应点击时刻的平均位置,比较了如下三个版本:</p>
309<ol>
310<li>d32: trained using (3), </li>
311<li>d32 book: trained with bookings<br>as global context (4) </li>
312<li>d32 book + neg: trained with bookings<br>as global context and explicit negatives from same market (5)</li>
313</ol>
314<p>最终可以发现<code>d32 book + neg</code>效果最好,具体如下图:</p>
315<p><img src="/images/offline_eval_emb.png" alt="Offline evaluation of Listing Embeddings"></p>
316<h4 id="Similar-Listings-using-Embeddings"><a href="#Similar-Listings-using-Embeddings" class="headerlink" title="Similar Listings using Embeddings"></a>Similar Listings using Embeddings</h4><p>Airbnb home listing page有相似房源,会展示相同可用日期下类似的房源,用余弦相似度,最近邻,取top K。</p>
317<p>A\B Test显示,CTR整体提升21%(有入住日期的提升23%,无日期提升20%),在相似房源处进行最终预定的提升4.9%</p>
318<h3 id="Real-time-personalization-in-Search-Ranking-using-Embeddings"><a href="#Real-time-personalization-in-Search-Ranking-using-Embeddings" class="headerlink" title="Real time personalization in Search Ranking using Embeddings"></a>Real time personalization in Search Ranking using Embeddings</h3><p>训练数据 $D_{s} = (x_{i} ,y_{i}), i = 1…K$, K是搜索后返回listing的序号,$x$特征vector,$y$是label</p>
319<ul>
320<li>y = 1 booked</li>
321<li>y = 0.25 contacted but no booked</li>
322<li>y = -0.4 host rejected</li>
323<li>y = 0.01 clicked</li>
324<li>y = 0  just viewed</li>
325</ul>
326<p>每次使用最近30天的数据训练新的ranking model</p>
327<p>特征具体如下:</p>
328<blockquote>
329<p>Feature vector xi for the i-th listing result consists of listing features,<br>user features, query features and cross-features. Listing<br>features are features associated with the listing itself, such as price<br>per night, listing type, number of rooms, rejection rate, etc. Query<br>features are features associated with the issued query, such as number<br>of guests, length of stay, lead days, etc. User features are features<br>associated with the user who is conducting the search, such as<br>average booked price, guest rating, etc. Cross-features are features<br>derived from two or more of these feature sources: listing, user,<br>query. Examples of such features are query listing distance: distance<br>between query location and listing location, capacity fit: difference<br>between query number of guests and listing capacity, price difference:<br>difference between listing price and average price of user’s<br>historical bookings, rejection probability: probability that host will<br>reject these query parameters, click percentage: real-time memorization<br>feature that tracks what percentage of user’s clicks were<br>on that particular listing, etc. The model uses approximately 100<br>features. For conciseness we will not list all of them.</p>
330</blockquote>
331<p>�他们使用了<code>pairwise regression</code>的思路去�训练了一个<code>GBDT</code>model,�使用的<a href="https://github.com/yarny/gbdt" target="_blank" rel="noopener">支持Lambda Rank的gbdt</a>,用NDCG评估。</p>
332<p><strong>Embedding Features for Search Ranking</strong><br>| Feature Name   |      Feature Name      |<br>|—————|:——————-:|<br>|EmbClickSim| similarity to clicked listings in Hc<br>|EmbSkipSim| similarity to skipped listings Hs<br>|EmbLongClickSim| similarity to long clicked listings Hlc<br>|EmbWishlistSim| similarity to wishlisted listings Hw<br>|EmbInqSim| similarity to contacted listings Hi<br>|EmbBookSim| similarity to booked listing Hb<br>|EmbLastLongClickSim| similarity to last long clicked listing<br>|UserTypeListingTypeSim| user type and listing type similarity</p>
333<h4 id="User-type-amp-Listing-type-Embedding-Features"><a href="#User-type-amp-Listing-type-Embedding-Features" class="headerlink" title="User-type &amp; Listing-type Embedding Features"></a>User-type &amp; Listing-type Embedding Features</h4><ul>
334<li>500K user types</li>
335<li>500K listing type</li>
336<li>50 million user booking sessions</li>
337</ul>
338<p><strong>Embedding Features Coverage and Importances</strong></p>
339<div class="table-container">
340<table>
341<thead>
342<tr>
343<th>Feature Name</th>
344<th style="text-align:center">Coverage</th>
345<th>Feature Importance</th>
346</tr>
347</thead>
348<tbody>
349<tr>
350<td>EmbClickSim</td>
351<td style="text-align:center">76.16%</td>
352<td>5/104</td>
353</tr>
354<tr>
355<td>EmbSkipSim</td>
356<td style="text-align:center">78.64%</td>
357<td>8/104</td>
358</tr>
359<tr>
360<td>EmbLongClickSim</td>
361<td style="text-align:center">51.05%</td>
362<td>20/104</td>
363</tr>
364<tr>
365<td>EmbWishlistSim</td>
366<td style="text-align:center">36.50%</td>
367<td>47/104</td>
368</tr>
369<tr>
370<td>EmbInqSim</td>
371<td style="text-align:center">20.61%</td>
372<td>12/104</td>
373</tr>
374<tr>
375<td>EmbBookSim</td>
376<td style="text-align:center">8.06%</td>
377<td>46/104</td>
378</tr>
379<tr>
380<td>EmbLastLongClickSim</td>
381<td style="text-align:center">48.28%</td>
382<td>11/104</td>
383</tr>
384<tr>
385<td>UserTypeListingTypeSim</td>
386<td style="text-align:center">86.11%</td>
387<td>22/104</td>
388</tr>
389</tbody>
390</table>
391</div>
392<h4 id="Online-Experiment-Results-Summary"><a href="#Online-Experiment-Results-Summary" class="headerlink" title="Online Experiment Results Summary"></a>Online Experiment Results Summary</h4><p>引入 embedding features后,NDCU提升2.27%,booking DCU增长2.58%</p>
393<h2 id="收获-amp-反思"><a href="#收获-amp-反思" class="headerlink" title="收获&amp;反思"></a>收获&amp;反思</h2><ul>
394<li>我们自己的end to end模型所产生的embedding是否训练的足够充分有效</li>
395<li>尝试引入以其他逻辑训练的embeddings<br>不一定直接引入embedding,论文中引入的实际是相似度</li>
396<li>训练同一向量空间下的embedding是很好的想法,将本来不同的embedding进行了统一</li>
397<li>和平台自身场景、需求进行合理的结合</li>
398</ul>
399
400  </section>
401
402  
403
404<section class="post-comments">
405  <div id="disqus_thread"></div>
406  
406<script type="text/javascript">
407      var disqus_shortname = 'wd1900'; 
408      /* * * DON'T EDIT BELOW THIS LINE * * */
409      (function() {
410          var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
411          dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
412          (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
413      })();
414  </script>
414
415  <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
416</section>
417
418
419  
420
421</article>
422
423
424            <footer class="footer">
425
426    <span class="footer__copyright">&copy; 2014-2015. | 由<a href="https://hexo.io/">Hexo</a>强力驱动 | 主题<a href="https://github.com/someus/huno">Huno</a></span>
427    
428</footer>
429        </div>
430    </div>
431
432    <!-- js files -->
433    
433<script src="/js/jquery.min.js"></script>
433
434    
434<script src="/js/main.js"></script>
434
435    
435<script src="/js/scale.fix.js"></script>
435
436
437
438    
439
440    
440<script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
440
441    
441<script type="text/javascript"> 
442        $(document).ready(function(){
443            MathJax.Hub.Config({ 
444                tex2jax: {inlineMath: [['[latex]','[/latex]'], ['\\(','\\)']]} 
445            });
446        });
447    </script>
447
448
449
450    
451
452    
452<script src="/js/awesome-toc.min.js"></script>
452
453    
453<script>
454        $(document).ready(function(){
455            $.awesome_toc({
456                overlay: true,
457                contentId: "post-content",
458            });
459        });
460    </script>
460
461
462
463    
464    
465    <!--kill ie6 -->
466<!--[if IE 6]>
467  
467<script src="//letskillie6.googlecode.com/svn/trunk/2/zh_CN.js"></script>
467
468<![endif]-->
469
470<script type="text/x-mathjax-config">
471    MathJax.Hub.Config({
472        tex2jax: {
473            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
474            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
475            processEscapes: true
476        }
477    });
478    MathJax.Hub.Queue(function() {
479        var all = MathJax.Hub.getAllJax();
480        for (var i = 0; i < all.length; ++i)
481            all[i].SourceElement().parentNode.className += ' has-jax';
482    });
483</script>
vendor: 1 bytes, line 483
483
484<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
484
485
486</body>
487</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.