精华内容
下载资源
问答
  • 机器学习排序(Learning to rank)将搜索转化为机器学习问题,在本文中,我想找出搜索与其他机器学习问题不同原因,如何将搜索排名作为机器学习或者是分类回归问题?我们将通过两种方法,对机器学习排序方法的评估...

    本文首发于 vivo 互联网技术微信公众号 

    作者:Doug Turnbull

    译者:林寿怡

    机器学习排序(Learning to rank)将搜索转化为机器学习问题,在本文中,我想找出搜索与其他机器学习问题不同的原因,如何将搜索排名作为机器学习或者是分类和回归问题?我们将通过两种方法,对机器学习排序方法的评估有个直观的认识。

    衡量搜索的好坏

    目标是搜索和经典机器学习问题的根本区别,更具体地说,如何量化搜索的好坏。例如股价预测系统的准确性,取决于我们有多少预测数据是来自真实的公司股价。如果我们预测亚马逊的股价是123.57美元,实际上是125美元,我们会说这非常接近。假设按均值来说,我们的预测跟实际股价的误差在1美元到2美元之间,我们可以认为系统预测的很好。

    这种情况下的误差我们称之为残差,即实际值与预测值之间的差异:实际值-预测值。(实际上,残留^2才是最小化,但在这里保持通俗易懂。)

    训练期间,回归系统通过如何量化好坏来得到最优解。我们可以尝试公司不同的量化特征,例如员工人数、收入、手头现金、或者其他任何有助于减少股价误差的特征。它可能会使最小二乘回归(least-squares regression)学习为线性公式,例如:股价= 0.01*员工人数+0.9*收入+0.001*手头现金,作为减少误差的最佳方式。

    搜索结果的好坏(或介于两者之间)却完全不一样。股价预测系统完全是为了减少实际值-预测值的误差,但搜索系统是尽量接近搜索查询的理想排序。换句话说,目标是减小理想排序到结果项集合的距离,排序的优先反映出搜索者感知搜索的好坏。

    例如,电子商务用户搜索“dress shoes”,我们定义一个粗略的理想排序:

    1. Best-selling dress shoes
    2. Low-performing dress shoes
    3. Other kinds of shoes
    4. Ladies dresses (if at all)

    以此我们可以想象一些场景,并猜测他们距离理想结果有多远。至少需要向“dress shoes”的搜索者在展示衣服前优先展示一些鞋子 - 但这一点都不完美。这就像预测亚马逊的股价是150美元而不是125美元:下面的结果接近吗?

    1. A pair of tennis shoes
    2. Meh Dress Shoes
    3. A ladies dress

    另一方面,优先于其他鞋子并在 best-selling dress shoes 前一个位置展示 meh dress shoes,这样可能会非常接近,但也并不完美。这可能与预测亚马逊的股价为123美元相当:

    1. Meh pair of dress shoes
    2. Best-selling pair of dress shoes
    3. Tennis Shoes

    正如你看到的搜索,并不是实际值-预测值,而是尽可能接近每个用户查询的最佳排序。NDCG是一种衡量搜索结果和理想排序差距的指标。其他一些指标衡量搜索结果的好坏各有利弊,这些指标几乎总是取值介于0(最差搜索结果)至1(最好搜索结果)。

    此外,这些指标不能仅是纯粹的差异或编辑距离类型的计算。由于用户更关注顶部的搜索结果,因此要获取这些位置需具备优先权。因此,搜索指标通常包括位置偏差,这意味着前几个结果偏离理想时,比底部结果偏离更糟糕,NDCG内置了位置偏差。

    虽然有一些可用的指标 ( 例如 ERR,MAP 等 ),在本文中我只把 “NDCG”作为真正相关性指标的缩写。

    用机器学习生成ranking函数

    经典的回归问题构建了一个用一组特征直接预测的函数 f。我们尽量减少实际股价- f(公司特征)。机器学习排序的目标是构建不直接预测的 ranking 函数。相反,它用于排序-我们提供一组理想的顺序作为训练数据,ranking函数需要两个输入,即 query 查询和 document 文档,并为每一个查询正确排序的文档分配一个分数。

    重述以上一点更多内容:

    股市:对于公司x,生成函数f(x),使y - f(x)最小化

    搜索:对于文件d,查询q,生成函数f(d,q),当f(d,q)降序排序时,使所有文档的NDCG最大化

    我们来看一个粗略的例子,看看我们的意思。作为数据科学家/搜索工程师,我们认为以下查询/文档的特征对我们的电子商务搜索有帮助:

    • 商品标题中关键字的TF * IDF分数:titleScore(d,q)
    • 商品描述中关键字的TF * IDF分数:descScore(d,q)
    • 商品的销量:numSold(d)

    机器学习过程可能会得到一个文档评分公式,如:

    f(d,q)= 10 * titleScore(d,q)+ 2 * descScore(d,q)+ 5 * numSold(d)

    通过一组测试查询(通过这样的模型,我们可以得到尽可能接近用户理想的排序)可以最大限度地提高 NDCG

    大多数机器学习排序的复杂度通常来自于调整的问题,以便可以应用其他机器学习方法。这些往往分为三种:单文档方法(point-wise),文档对方法( pair-wise)和文档列表方法(list-wise),我们将在下面介绍。我们将简要介绍几种方法,并思考每种方法的利弊。

    单文档 机器学习排序(point-wise learning to rank)

    搜索的“训练集”看起来有点像一般的机器学习训练集。单文档学习排名基于这种情况,所以让我们简要回顾一下搜索训练集的样子。搜索训练集的形式为在某个查询下带得分的文档,并称为判断列表,以下是一个判断列表的例子:

    得分,查询,文档
    4,dress shoes,best_selling_dress_shoes
    3,dress shoes,meh_dress_shoes
    ...
    0,dress shoes,ladies_dress
    0,dress shoes,toga_item

    正如你所看到的,非常相关的文档比如best_selling_dress_shoes的得分为4,而完全不相关的文档(toga_item)得分为0。

    单文档学习排名不关注直接优化每个查询的排名。相反,我们只是尝试预测相关性得分。我们使用某种回归来创建包含文档d,查询q的排序函数f(d,q)。就像股价的例子一样,我们试图尽量减少残差。我们希望f(toga_item,“dress shoes”)得分为0,和f(best_selling_dress_shoes,“dress shoes”)得分为4。

    在训练和评估期间,我们单纯将残差 y - f(d,q)最小化(这里的y是d,q的得分)。在这种情况下,假设我们的排序函数f给出了上述0分的文档为0.12分,4分的文档为3.65分。只看残差的话这似乎做的很好。如果所有文档得分平均不偏离0.5分以上,那么我们认为每个查询的NDCG也被最大化,也就是说,我们认为如果我们能够创建一个只返回得分的排序函数,我们应该可以得到接近用户期望的理想排序。

    但表象可能是骗人的,单文档学习排名的一个问题是获得正确排序的头部项通常比判断列表尾部的模糊项更加重要。基本上所有认知和位置偏差在最大化度量(如NDCG)下都会被忽略。

    实际上,一个经常交换精准相关项和不太相关项,但可以准确地预测第50页较低的相关性等级的模型并不是很好。买家在前几个结果中看了些勉强相关的项目且没有被其打动时,所以他们离开了。

    更为灾难性的是,当你考虑仅发生在具体查询中的关系时会出现另一个问题,单文档方法会清除查询分组,忽略这些查询内的细微差别。例如,一个查询与标题字段上的相关性得分有很强的相关,而另一个查询与描述字段得分相关。或许某个查询的“good”标题匹配得分是5,而另一个查询的“good”标题匹配得分是15,这些情况是真实存在的:不同匹配中文档频率不一致可能导致这些场景。

    因此,一般来说,单文档方法的执行效果不佳,我们将继续研究那些不清除查询分组,而是尝试使用排序函数直接优化每个查询的排序的方法。

    文档列表方法(LIST-WISE),文档对方法(PAIR-WISE)

    单文档学习排名以尽量减少理想与实际相关程度之间的差异。其他方法定义了不同的误差理解,更接近直接优化每个查询的理想顺序。我们来看一下文档列表(LIST-WISE)和文档对方法(PAIR-WISE)机器学习排序解决方案的两个例子,以便更接近于结合位置偏差和容纳每个查询细微差别的能力。

    直接用 w/ListNet 优化列表

    文档列表学习感觉像最纯粹的机器学习排序方式。它非常直接地定义错误:当前ranking函数的列表距离理想值的差距有多大?例如,这样的一种方法是通过查看给定顺序的排列概率。 基本思想是定义一个函数,该函数计算按给定的相关性得分的排列是用户真实寻找的概率。如果我们从判断列表中将“得分”作为排序,第1个结果的得分高于第2个,这样将获得最高概率。然而,从判断列表中获取的相关性等级对于当前用户当前的地点、时间、上下文有可能是不正确的。因此,单个较低分项在高分项上不可能成为完美的相关性排序,也许这才是用户此时此刻实际想要的,最低相关性得分排第一个的重排列表是极不可能的,排列概率接近零。

    相对于计算每个列表排序可能的错误,仅查看排列中的第一个项对于搜索是“最佳”的概率来近似排列优先级在计算上是更加可行的。这被称为“第一”概率,它查找单个相关性分数以及查询的每个其他相关性分数,以计算该项将是第一的概率。正如你所预料的那样,较高的得分的相关性项将获得更高的概率排在前面,较低的得分项在该用户相同上下文时间地点下不太可能排在前面。

    文档列表方法ListNet提出最小化训练集相关得分与神经网络中权重之间的交叉熵。听起来像胡言乱语,但真正重要的是通过最小化的error函数,开发一个直观的例子来看看它如何工作,如下面的伪python所示:

    def error():
    error = 0
    For each query
    For each doc:
    error -= TopOneP(doc.grade) * log( TopOneP(f(doc, query)))

    这里f是我们正在优化的ranking函数。 TopOneP是给定得分或分数排第一的概率。

    首先,我们来看第一项TopOneP(doc.grade)。你想想这里发生了什么,假如第一名基于判断列表得分的概率高,那么第二项log(P ...)将增加更多权重,换句话说,第一项可以被认为是基于判断列表中的得分该项的优先级。更高得分项有更多第一的概率:正是我们寻找的位置偏差!

    现在看第二个,log(TopOneP ...)。回想一下, log(TopOneP = 1)为0,当TopOneP接近0时log(TopOneP <1)越来越负。因此,如果TopOneP接近于0,并且因此log越来越负,则整个项越来越负。负越多越不好,因为error-=(big negative number)使错误变成更大的正数。

    综上所述,当(1)该项在判断列表很重要时(TopOneP(doc.grade)很高),并且当我们的rangking函数f的TopOneP很低时,会产生更多的误差。显然这是不好的:在判断的基础上,真正需要靠前的,应该用f把它排到前面。

    ListNet中的目标是通过迭代更新f函数中的权重来最小化误差。这里我不想深入讲解,因为上面的点更为重要。参阅这篇文章❶ 获得更多信息以及如何使用误差的定义来计算梯度(如何更改特征的权重)以尽量减少误差。

    使用 RankSVM 优化文档对方法

    文档对机器学习排序(pair wise learning to rank)通过最小化在搜索结果中乱序结果数, 一个具体指标:Kendall's Tau衡量了搜索解决方案中有序对的比例。文档对学习排序的一种形式是对查询进行分类,使得项目“有序”或者“乱序”。例如,你可能会发现,当对特定的查询集进行排序时,标题得分更高的其销售事项总数反而比较低。

    Thorsten Joachims 在这篇文章❷ 中介绍了一种流行的文档对机器学习排序方法RankSVM,还在 Fabian Pedregrosa 的博客文章中以Python方式实现,且乐意我在这篇文章借用他的图。

    想象一下我们有两个查询,或许以我们的“dress shoes”查询,另一个是“t-shirt”。下面的图表y轴为标题得分特征,而x轴可能是销量。我们将“dress shoes”的每个判断绘制为三角形,并将“t-shirt”的每个判断绘制成圆形。颜色越深的形状越相关。


    我们的目标是发现一个类似于上面图像中的w向量的函数,将最接近于正确的搜索结果排序。

    事实证明,这个任务与使一个项好于另一个项的分类问题是一样的,适用于支持向量机(Support Vector Machine SVM)的二元分类任务。如果dress_shoes比meh_dress_shoes更好,我们可以将该排序标记为“更好”或者“1”。类似地,meh_dress_shoes在dress_shoes之前标记为“更差”或“-1”。然后,我们可以构建一个分类器来预测一个项可能比另一个更好。

    这个分类任务需要更多底层特征值,想想“更好“的含义是什么,这意味着dress_shoes和meh_dress_shoes之间存在某些差异而将它归类为更好。所以RankSVM在此增量:itemA的特征值减去itemB的特征值上进行分类。

    作为一个例子,只关注单一特征“销量”,我们可能会看到dress_shoes销售为5000,而meh_dress_shoes的销售量只有1000。所以产生的4000“差异”在训练过程中将会是一个特征。我们将这个差异作为一个SVM训练样本:(1,4000)。这里1是我们预测的“更好”的标签,而4000是我们在SVM中用作特征的“销量”增量。

    在特征空间中绘制每个成对的差异来创建两个分类,如下所示,可以使用SVM来找到两个分类之间的适当判定边界:


    当然,我们不需要一个判定边界。 我们需要一个方向向量表示这个方向“更相关”。 最终,与该判定边界垂直的向量提供了ranking函数的线性权重比例:


    这听起来就像变成简单的线性回归,毕竟我们只获得特征权重和线性ranking函数。 但是如果你还记得单文档方法的讨论,在单个查询中你有时会具有查询内依赖性/细微差别。 特征中的一个好的标题在“dress shoes”得分为“5”,相比在“t-shirts”的得分为“15”,“RankSVM” 所做的是通过关注单个查询中指出“标题得分越高,对应查询中相关性越高”的粗略的感官中的分类增量。

    在图形中,你可以看到,使用线性回归运行上述相同的数据:

    RankSVM与List-Wise方法

    你可以看到, RankSVM似乎仍然创建一个直接的、线性的相关性。我们知道现实往往是非线性的。使用SVM,可以使用非线性内核,尽管线性内核往往是最受欢迎的。 RankSVM的另一个缺点是它只考虑到文档对的差异,而不考虑位置偏差。当RankSVM中的项无序时,无法优先保证头部项正确的同时忽略底部项的不准确。

    虽然文档列表方法往往更准确,并且包含位置偏差,但训练和评估的成本很高。虽然RankSVM往往不那么准确,但该模型很容易训练和使用。

    由于其简单性,RankSVM可以轻松地为特定用户或部分查询/用户构建模型。可以想象将查询分类到不同的用例中。也许对于电子商务,有些查询我们可以肯定地说是错别字。而其他的是我们知道的广泛的类目搜索查询(如“shoes”)。

    如果我们相应地对查询进行分类,我们可以为每种类型的用例分别构建模型。我们甚至可以组合不同的SVM模型。例如,由于模型是一组线性权重集合,我们可以将模型绑定到特定的用户Tom,并将其与Tom正在执行的查询绑定的模型相加,搜“dress shoes”返回dress shoes,我们觉得Tom会很喜欢。

    结论

    主要的结论是无论选择什么样的模型,明白该模型需要优化什么,需要尽量减少什么样的误差?

    你了解了单文档方法如何优化判断的残差,以及如何为不理想。 RankSVM执行一个更简单的优化来消除无序对,但这也有问题,因为没有考虑到位置偏差。有趣的是,ListNet的排列概率和第一概率给同样有效的好答案留有余地。我个人认为,如果这种方法用于多样化搜索结果,可以为当前用户展示许多有效的假设。

    当然,结束之刻,假如我们不选取正确的特征来训练我们的模型,模型的类型可能不是很重要!特征选取,创作,生成和设计,往往才是最难的一部分,而非模型的选择。

    更多内容敬请关注 vivo 互联网技术 微信公众号

     

    注:转载文章请先与微信号:labs2020 联系。

    转载于:https://www.cnblogs.com/vivotech/p/10794318.html

    展开全文
  • Doug Turnbull译者:林寿怡机器学习排序(Learning to rank)将搜索转化为机器学习问题,在本文中,我想找出搜索与其他机器学习问题不同原因,如何将搜索排名作为机器学习或者是分类回归问题?我们将通过两种方法...

    本文首发于 vivo 互联网技术微信公众号

    作者:Doug Turnbull

    译者:林寿怡

    机器学习排序(Learning to rank)将搜索转化为机器学习问题,在本文中,我想找出搜索与其他机器学习问题不同的原因,如何将搜索排名作为机器学习或者是分类和回归问题?我们将通过两种方法,对机器学习排序方法的评估有个直观的认识。

    衡量搜索的好坏

    目标是搜索和经典机器学习问题的根本区别,更具体地说,如何量化搜索的好坏。例如股价预测系统的准确性,取决于我们有多少预测数据是来自真实的公司股价。如果我们预测亚马逊的股价是123.57美元,实际上是125美元,我们会说这非常接近。假设按均值来说,我们的预测跟实际股价的误差在1美元到2美元之间,我们可以认为系统预测的很好。

    这种情况下的误差我们称之为残差,即实际值与预测值之间的差异:实际值-预测值。(实际上,残留^2才是最小化,但在这里保持通俗易懂。)

    训练期间,回归系统通过如何量化好坏来得到最优解。我们可以尝试公司不同的量化特征,例如员工人数、收入、手头现金、或者其他任何有助于减少股价误差的特征。它可能会使最小二乘回归(least-squares regression)学习为线性公式,例如:股价= 0.01*员工人数+0.9*收入+0.001*手头现金,作为减少误差的最佳方式。

    搜索结果的好坏(或介于两者之间)却完全不一样。股价预测系统完全是为了减少实际值-预测值的误差,但搜索系统是尽量接近搜索查询的理想排序。换句话说,目标是减小理想排序到结果项集合的距离,排序的优先反映出搜索者感知搜索的好坏。

    例如,电子商务用户搜索“dress shoes”,我们定义一个粗略的理想排序:

    Best-selling dress shoes

    Low-performing dress shoes

    Other kinds of shoes

    Ladies dresses (if at all)

    以此我们可以想象一些场景,并猜测他们距离理想结果有多远。至少需要向“dress shoes”的搜索者在展示衣服前优先展示一些鞋子 - 但这一点都不完美。这就像预测亚马逊的股价是150美元而不是125美元:下面的结果接近吗?

    A pair of tennis shoes

    Meh Dress Shoes

    A ladies dress

    另一方面,优先于其他鞋子并在best-selling dress shoes 前一个位置展示 meh dress shoes,这样可能会非常接近,但也并不完美。这可能与预测亚马逊的股价为123美元相当:

    Meh pair of dress shoes

    Best-selling pair of dress shoes

    Tennis Shoes

    正如你看到的搜索,并不是实际值-预测值,而是尽可能接近每个用户查询的最佳排序。NDCG是一种衡量搜索结果和理想排序差距的指标。其他一些指标衡量搜索结果的好坏各有利弊,这些指标几乎总是取值介于0(最差搜索结果)至1(最好搜索结果)。

    此外,这些指标不能仅是纯粹的差异或编辑距离类型的计算。由于用户更关注顶部的搜索结果,因此要获取这些位置需具备优先权。因此,搜索指标通常包括位置偏差,这意味着前几个结果偏离理想时,比底部结果偏离更糟糕,NDCG内置了位置偏差。

    虽然有一些可用的指标 ( 例如 ERR,MAP 等 ),在本文中我只把 “NDCG”作为真正相关性指标的缩写。

    用机器学习生成ranking函数

    经典的回归问题构建了一个用一组特征直接预测的函数 f。我们尽量减少实际股价-f(公司特征)。机器学习排序的目标是构建不直接预测的 ranking 函数。相反,它用于排序-我们提供一组理想的顺序作为训练数据,ranking函数需要两个输入,即query 查询和 document 文档,并为每一个查询正确排序的文档分配一个分数。

    重述以上一点更多内容:

    股市:对于公司x,生成函数f(x),使y - f(x)最小化

    搜索:对于文件d,查询q,生成函数f(d,q),当f(d,q)降序排序时,使所有文档的NDCG最大化

    我们来看一个粗略的例子,看看我们的意思。作为数据科学家/搜索工程师,我们认为以下查询/文档的特征对我们的电子商务搜索有帮助:

    商品标题中关键字的TF * IDF分数:titleScore(d,q)

    商品描述中关键字的TF * IDF分数:descScore(d,q)

    商品的销量:numSold(d)

    机器学习过程可能会得到一个文档评分公式,如:

    f(d,q)= 10 * titleScore(d,q)+ 2 * descScore(d,q)+ 5 * numSold(d)

    通过一组测试查询(通过这样的模型,我们可以得到尽可能接近用户理想的排序)可以最大限度地提高 NDCG。

    大多数机器学习排序的复杂度通常来自于调整的问题,以便可以应用其他机器学习方法。这些往往分为三种:单文档方法(point-wise),文档对方法( pair-wise)和文档列表方法(list-wise),我们将在下面介绍。我们将简要介绍几种方法,并思考每种方法的利弊。

    单文档 机器学习排序(point-wise learning to rank)

    搜索的“训练集”看起来有点像一般的机器学习训练集。单文档学习排名基于这种情况,所以让我们简要回顾一下搜索训练集的样子。搜索训练集的形式为在某个查询下带得分的文档,并称为判断列表,以下是一个判断列表的例子:

    得分,查询,文档

    4,dress shoes,best_selling_dress_shoes

    3,dress shoes,meh_dress_shoes

    ...

    0,dress shoes,ladies_dress

    0,dress shoes,toga_item

    正如你所看到的,非常相关的文档比如best_selling_dress_shoes的得分为4,而完全不相关的文档(toga_item)得分为0。

    单文档学习排名不关注直接优化每个查询的排名。相反,我们只是尝试预测相关性得分。我们使用某种回归来创建包含文档d,查询q的排序函数f(d,q)。就像股价的例子一样,我们试图尽量减少残差。我们希望f(toga_item,“dress shoes”)得分为0,和f(best_selling_dress_shoes,“dress shoes”)得分为4。

    在训练和评估期间,我们单纯将残差 y - f(d,q)最小化(这里的y是d,q的得分)。在这种情况下,假设我们的排序函数f给出了上述0分的文档为0.12分,4分的文档为3.65分。只看残差的话这似乎做的很好。如果所有文档得分平均不偏离0.5分以上,那么我们认为每个查询的NDCG也被最大化,也就是说,我们认为如果我们能够创建一个只返回得分的排序函数,我们应该可以得到接近用户期望的理想排序。

    但表象可能是骗人的,单文档学习排名的一个问题是获得正确排序的头部项通常比判断列表尾部的模糊项更加重要。基本上所有认知和位置偏差在最大化度量(如NDCG)下都会被忽略。

    实际上,一个经常交换精准相关项和不太相关项,但可以准确地预测第50页较低的相关性等级的模型并不是很好。买家在前几个结果中看了些勉强相关的项目且没有被其打动时,所以他们离开了。

    更为灾难性的是,当你考虑仅发生在具体查询中的关系时会出现另一个问题,单文档方法会清除查询分组,忽略这些查询内的细微差别。例如,一个查询与标题字段上的相关性得分有很强的相关,而另一个查询与描述字段得分相关。或许某个查询的“good”标题匹配得分是5,而另一个查询的“good”标题匹配得分是15,这些情况是真实存在的:不同匹配中文档频率不一致可能导致这些场景。

    因此,一般来说,单文档方法的执行效果不佳,我们将继续研究那些不清除查询分组,而是尝试使用排序函数直接优化每个查询的排序的方法。

    文档列表方法(LIST-WISE),文档对方法(PAIR-WISE)

    单文档学习排名以尽量减少理想与实际相关程度之间的差异。其他方法定义了不同的误差理解,更接近直接优化每个查询的理想顺序。我们来看一下文档列表(LIST-WISE)和文档对方法(PAIR-WISE)机器学习排序解决方案的两个例子,以便更接近于结合位置偏差和容纳每个查询细微差别的能力。

    直接用 w/ListNet 优化列表

    文档列表学习感觉像最纯粹的机器学习排序方式。它非常直接地定义错误:当前ranking函数的列表距离理想值的差距有多大?例如,这样的一种方法是通过查看给定顺序的排列概率。 基本思想是定义一个函数,该函数计算按给定的相关性得分的排列是用户真实寻找的概率。如果我们从判断列表中将“得分”作为排序,第1个结果的得分高于第2个,这样将获得最高概率。然而,从判断列表中获取的相关性等级对于当前用户当前的地点、时间、上下文有可能是不正确的。因此,单个较低分项在高分项上不可能成为完美的相关性排序,也许这才是用户此时此刻实际想要的,最低相关性得分排第一个的重排列表是极不可能的,排列概率接近零。

    相对于计算每个列表排序可能的错误,仅查看排列中的第一个项对于搜索是“最佳”的概率来近似排列优先级在计算上是更加可行的。这被称为“第一”概率,它查找单个相关性分数以及查询的每个其他相关性分数,以计算该项将是第一的概率。正如你所预料的那样,较高的得分的相关性项将获得更高的概率排在前面,较低的得分项在该用户相同上下文时间地点下不太可能排在前面。

    文档列表方法ListNet提出最小化训练集相关得分与神经网络中权重之间的交叉熵。听起来像胡言乱语,但真正重要的是通过最小化的error函数,开发一个直观的例子来看看它如何工作,如下面的伪python所示:

    def error():

    error = 0

    For each query

    For each doc:

    error -= TopOneP(doc.grade) * log( TopOneP(f(doc, query)))

    这里f是我们正在优化的ranking函数。 TopOneP是给定得分或分数排第一的概率。

    首先,我们来看第一项TopOneP(doc.grade)。你想想这里发生了什么,假如第一名基于判断列表得分的概率高,那么第二项log(P ...)将增加更多权重,换句话说,第一项可以被认为是基于判断列表中的得分该项的优先级。更高得分项有更多第一的概率:正是我们寻找的位置偏差!

    现在看第二个,log(TopOneP ...)。回想一下, log(TopOneP = 1)为0,当TopOneP接近0时log(TopOneP <1)越来越负。因此,如果TopOneP接近于0,并且因此log越来越负,则整个项越来越负。负越多越不好,因为error-=(big negative number)使错误变成更大的正数。

    综上所述,当(1)该项在判断列表很重要时(TopOneP(doc.grade)很高),并且当我们的rangking函数f的TopOneP很低时,会产生更多的误差。显然这是不好的:在判断的基础上,真正需要靠前的,应该用f把它排到前面。

    ListNet中的目标是通过迭代更新f函数中的权重来最小化误差。这里我不想深入讲解,因为上面的点更为重要。参阅这篇文章❶ 获得更多信息以及如何使用误差的定义来计算梯度(如何更改特征的权重)以尽量减少误差。

    使用 RankSVM 优化文档对方法

    文档对机器学习排序(pair wise learning to rank)通过最小化在搜索结果中乱序结果数, 一个具体指标:Kendall's Tau衡量了搜索解决方案中有序对的比例。文档对学习排序的一种形式是对查询进行分类,使得项目“有序”或者“乱序”。例如,你可能会发现,当对特定的查询集进行排序时,标题得分更高的其销售事项总数反而比较低。

    Thorsten Joachims 在这篇文章❷ 中介绍了一种流行的文档对机器学习排序方法RankSVM,还在Fabian Pedregrosa 的博客文章中以Python方式实现,且乐意我在这篇文章借用他的图。

    想象一下我们有两个查询,或许以我们的“dress shoes”查询,另一个是“t-shirt”。下面的图表y轴为标题得分特征,而x轴可能是销量。我们将“dress shoes”的每个判断绘制为三角形,并将“t-shirt”的每个判断绘制成圆形。颜色越深的形状越相关。

    我们的目标是发现一个类似于上面图像中的w向量的函数,将最接近于正确的搜索结果排序。

    事实证明,这个任务与使一个项好于另一个项的分类问题是一样的,适用于支持向量机(Support Vector Machine SVM)的二元分类任务。如果dress_shoes比meh_dress_shoes更好,我们可以将该排序标记为“更好”或者“1”。类似地,meh_dress_shoes在dress_shoes之前标记为“更差”或“-1”。然后,我们可以构建一个分类器来预测一个项可能比另一个更好。

    这个分类任务需要更多底层特征值,想想“更好“的含义是什么,这意味着dress_shoes和meh_dress_shoes之间存在某些差异而将它归类为更好。所以RankSVM在此增量:itemA的特征值减去itemB的特征值上进行分类。

    作为一个例子,只关注单一特征“销量”,我们可能会看到dress_shoes销售为5000,而meh_dress_shoes的销售量只有1000。所以产生的4000“差异”在训练过程中将会是一个特征。我们将这个差异作为一个SVM训练样本:(1,4000)。这里1是我们预测的“更好”的标签,而4000是我们在SVM中用作特征的“销量”增量。

    在特征空间中绘制每个成对的差异来创建两个分类,如下所示,可以使用SVM来找到两个分类之间的适当判定边界:

    当然,我们不需要一个判定边界。 我们需要一个方向向量表示这个方向“更相关”。 最终,与该判定边界垂直的向量提供了ranking函数的线性权重比例:

    这听起来就像变成简单的线性回归,毕竟我们只获得特征权重和线性ranking函数。 但是如果你还记得单文档方法的讨论,在单个查询中你有时会具有查询内依赖性/细微差别。 特征中的一个好的标题在“dress shoes”得分为“5”,相比在“t-shirts”的得分为“15”,“RankSVM” 所做的是通过关注单个查询中指出“标题得分越高,对应查询中相关性越高”的粗略的感官中的分类增量。

    在图形中,你可以看到,使用线性回归运行上述相同的数据:

    RankSVM与List-Wise方法

    你可以看到, RankSVM似乎仍然创建一个直接的、线性的相关性。我们知道现实往往是非线性的。使用SVM,可以使用非线性内核,尽管线性内核往往是最受欢迎的。 RankSVM的另一个缺点是它只考虑到文档对的差异,而不考虑位置偏差。当RankSVM中的项无序时,无法优先保证头部项正确的同时忽略底部项的不准确。

    虽然文档列表方法往往更准确,并且包含位置偏差,但训练和评估的成本很高。虽然RankSVM往往不那么准确,但该模型很容易训练和使用。

    由于其简单性,RankSVM可以轻松地为特定用户或部分查询/用户构建模型。可以想象将查询分类到不同的用例中。也许对于电子商务,有些查询我们可以肯定地说是错别字。而其他的是我们知道的广泛的类目搜索查询(如“shoes”)。

    如果我们相应地对查询进行分类,我们可以为每种类型的用例分别构建模型。我们甚至可以组合不同的SVM模型。例如,由于模型是一组线性权重集合,我们可以将模型绑定到特定的用户Tom,并将其与Tom正在执行的查询绑定的模型相加,搜“dress shoes”返回dress shoes,我们觉得Tom会很喜欢。

    结论

    主要的结论是无论选择什么样的模型,明白该模型需要优化什么,需要尽量减少什么样的误差?

    你了解了单文档方法如何优化判断的残差,以及如何为不理想。 RankSVM执行一个更简单的优化来消除无序对,但这也有问题,因为没有考虑到位置偏差。有趣的是,ListNet的排列概率和第一概率给同样有效的好答案留有余地。我个人认为,如果这种方法用于多样化搜索结果,可以为当前用户展示许多有效的假设。

    当然,结束之刻,假如我们不选取正确的特征来训练我们的模型,模型的类型可能不是很重要!特征选取,创作,生成和设计,往往才是最难的一部分,而非模型的选择。

    更多内容敬请关注 vivo 互联网技术 微信公众号

    注:转载文章请先与微信号:labs2020 联系。

    展开全文
  • Docker虚拟机有什么不同

    千次阅读 2017-01-19 10:50:57
    “Docker虚拟机有什么不同?”,这似乎是我听到的有关容器最常见的问题之一,我一般给出的答案取决于提出此问题的不同方式。但是我喜欢这样开头:“容器虚拟机仅仅相似于它们都提供了隔离环境。” 接着我阐述...


    “Docker和虚拟机有什么不同?”,这似乎是我听到的有关容器最常见的问题之一,我一般给出的答案取决于提出此问题的不同方式。但是我喜欢这样开头:“容器和虚拟机仅仅相似于它们都提供了隔离环境。” 接着我阐述他们之间的差异,“容器能做的事少得多并且使用起来相当廉价。而虚拟机提供整个虚拟化硬件层,可以做更多的事情但是使用成本显著。“ 我想有人会有疑问的最大的原因是这两种技术在功能上似乎类似,至少在第一点看来。

    “它如何影响我的部署策略?”
    有人希望直接跳到结论或者他们想要的结果。 “这样会如何影响我的部署策略?我刚上云,难道真的要改变一切,重新来过?这要花费多少?这要花费多大精力来学习呢?“

    如果你从头到尾的解释给他们听,通常他们会由怀疑变成好奇。向他们展示那些项目,比如Docker,如何更简单地使用容器,如何将已经实现的项目与他们在使用的工具整合。他们会明白的,虽然还是有一些工作要做,但是学习和整合很容易。他们仍会希望得到更多的细节。

    “它的性能如何?”
    “它的性能如何?” 这个问题甚至比第一个还要常见。我不确定他们希望听到什么,还有为什么他们会这样问,但是答案会让他们吃惊:性能非常接近裸机(直接地/非虚拟化)的性能。他们不会相信,但是原因就是隔离并不是虚拟化。

    Docker volumes只是绑定挂载文件(文件就像指针指向磁盘上的一个位置,它创建一个绑定挂载仅仅是创建一个指向同一地点的另一个文件而已)。读取或写入该文件基本上像裸机操作的那样廉价。另一方面,读取或写入Volume以外的Docker容器文件系统比较昂贵。所以说不要那样做。

    Docker networking就像裸机的网络。有一组用于每个容器而创建的虚拟(即逻辑的)以太网接口。任何网络性能下降是由于额外的内部跳动,比如:NAT。

    容器的建立在一组Linux内核提供的功能墙壁上。对于IO(如果有的话)很少需要额外的处理或重定向。容器是廉价的。因为 使它们工作的软件是内置于操作系统中的,因此你可以停止(或至少减少)虚拟化软件的开支(或云实例)。

    “它是不是比虚拟机更不安全呢?”
    当然,精明健谈的会问,“它是不是比虚拟机更不安全呢?” 目前来说也许是的......。

    这个比较复杂,因为它取决于你正在拿它们做什么。为了全面了解请参考PPT - Docker,Linux容器(LXC)与安全 by Jérôme Petazzoni。我会尽力来总结概括。

    容器使用由Linux内核提供的命名空间。大多数人把命名空间认为是一个上下文或域的授权决定(进程X有权访问资源Y)。

    如果容器内的进程扫描文件系统来寻找要窃取的东西,它只能找到容器内明确可见的文件。如果容器内的进程中想尝试做一些恶意的事情,比如打开端口31337后门服务,它不会有多大好处,因为这个端口实际上不会暴露在容器外的任何地方。容器内部的恶意进程不能访问的任何容器外的其他进程的内存。

    有几个方法可以摆脱容器的束缚,但这些通常需要容器的root访问权限。不要以root运行应用程序。通过简单的几个步骤稳固root访问权限。

    容器使用cgroup来提供与虚拟机相同级别的资源使用保护机制。容器和虚拟机都可以获取整个网络链接。

    有些人会指出并非所有的Linux内核是命名空间的。这意味着有一些资源尚未隔离。这可能是真的,但它正在发生变化。集成的其他稳固的工具,像AppArmor或SELinux,可以帮助你构建一些真正的堡垒。如果有额外的工作来使容器达到与虚拟机相同的安全级别,那么它是值得的。
    • 容器提供的隔离对于更密切的软件集成可以声明性地减少。虚拟机则是刚性的。
    • 容器运行的是不完整的操作系统(尽管它们可以)。虚拟机必须运行完整的。
    • 容器比虚拟机使用更少的闲置资源。它们不运行完整的操作系统。
    • 容器在在云硬件(或虚拟机)中可以被复用,就像虚拟机在裸机上可以被复用。所不同的是...
    • 容器需要毫秒分配。虚拟机需要几分钟。所以,你可以另配、重新平衡、释放以及使用容器比虚拟机的迭代更加迅速。

    老实说,我感觉大多数傻傻的。以我的经验最常见的原因是人们提供硬件(虚拟或物理)是提供的隔离。

    隔离

    如果每个容器运行的只有一个服务或者数据库,这是比较容易管理的。而且比较容易监控性能,了解故障的影响,并预测成本。像亚马逊公司,团队拥有他们自己的软件和硬件,隔离是其中的关键。你有没有与其他团队分享过一个负载均衡的重要资源?那么,当因为你的服务把他们的VIP设置为激增队列来代替外溢,它们会失败或者在半夜你被叫醒,你就会渴望有隔离了。

    离目标进程越远,隔离会变得更昂贵。虚拟机是伟大的,它通过抽象来增加并行,服务于多操作系统的使用情况以及业界最好的安全性。但对于隔离,它们相当的昂贵。

    容器提供的隔离就便宜。趁热得到它。
    1-Ic2Ph98v7Qt6wChLQtmpEw.jpeg

    如果你想到阅读更多有关Docker和容器的内容,请查阅我的书《Docker in Action》。目前可以在Manning Early Access Program浏览电子版。

    原文链接:Containerization is not Virtualization (翻译:田浩浩 )

    展开全文
  • 5G到底厉害在什么地方?4G有什么不同

    千次阅读 多人点赞 2021-04-05 18:30:57
    5G给大家的第一个印象肯定就是...不知道你没有这种经验,在集会、演唱会、或者什么人很多的会场,会忽然发现4G网络瘫痪了,虽然手机上显示网络的连接信号还是很强,但是数据根本发送不出去,也接收不进来。原因就是数

    5G给大家的第一个印象肯定就是速度很快,秒下电影,这也是媒体大力宣传的一个点,5G的速度的确比4G快了很多,但是5G不仅仅是速度大大提高了,还有其他更重要的优点。

    不知道你有没有这种感觉,4G的速度已经挺快了啊,我们手机看视频一点都不卡啊,有必要换5G吗?5G是不是伪需求?

    为了回答这个问题,我们先来看看4G所面临的问题。

    4G的局限

    不知道你有没有这种经验,在集会、演唱会、或者什么人很多的会场,会忽然发现4G网络瘫痪了,虽然手机上显示网络的连接信号还是很强,但是数据根本发送不出去,也接收不进来。原因就是数据的流量超过了4G网络的带宽,一旦流量超过了带宽,那么传输的错误率就是100%,一字节的数据也传不出去了。

    从理论上讲,4G每平方公里只能支持10万个设备。如果万物互联(IoT)普遍发展,这么多设备同时上网的情况,4G是难以满足的,所以为了适应时代的发展,5G是未来几年很必要的基础设施。

    那么为什么不可能在4G的基础上,通过提高基站的功率和带宽实现两种网络的融合呢?

    因为4G的移动通信标准有三个无法解决的问题:

    首先,当上网设备数量太多后,它的带宽不够,所能同时并发处理上网请求的能力也不足。

    随着现在需要联网的设备越来越多,4G的带宽已经快不能满足这么多设备同时上网了,在制定4G标准时,其实就没有打算让那么多设备同时上网,所以4G网络已经不适应这个时代未来的发展要求了。

    其次,今天的IoT设备联网的方式其实很不方便。

    今天大家使用IoT设备,要么是通过蓝牙和你相联之后再上网,要么是通过家里的Wi-Fi联网,要么是在设备里插上电话卡,总之不能直接联网。想象一下未来几年内我们家里的电饭锅,冰箱,洗衣机,窗帘和电灯能够通过内置的芯片直接连上5G网络,不需要通过手机联网去操作了,是不是会方便许多呢?

    最后,如果单纯增加4G基站的发射功率,那需要增加十几倍的功率,就会危害人们的健康,而且,如果无线电波的频率不断增加,你用一张纸就把信号挡住了。

    由于4G的这些严重问题,是无法适应未来的IoT时代的,所以要重新设计这个被称为5G的新网络标准,除了提高总带宽,更重要的目的就是让海量设备同时上网,因此5G是和IoT相伴生的。

    上面说了这么多次的IoT,那么IoT究竟是什么呢?

    IoT(Internet of things )就是物联网,即“万物相连的互联网”,是互联网基础上的延伸和扩展的网络,将各种信息传感设备与网络结合起来而形成的一个巨大网络,实现在任何时间、任何地点,人、机、物的互联互通。

    5G的优点

    5G网络的主要优势在于,数据传输速率远远高于以前的蜂窝网络,最高可达10 Gbit/s,比现在的4G LTE蜂窝网络快100倍。 当然这只是理论上的速度上限,我们平时使用5G时感觉是远达不到这个速度的,但是速度比4G快个十几倍是肯定有的。

    网速提升了一个数量级之后,想象的应用空间就很大了,虚拟现实(英语:virtual reality,简称VR)和增强现实(Augmented Reality,简称AR)会不会得到普及呢?远程医疗会不会实现呢?会不会重新塑造电子游戏行业,以后我们可能不是对着电脑打游戏了,而是像《头号玩家》一样直接进入一个虚拟世界?

    5G网络的另一个优点是较低的网络延迟(更快的响应时间),在同等条件下 5G 的延迟低于2毫秒,而4G为80毫秒,也就是说平均下来5G反应速度比4G要快40倍。

    5G的低网络延迟的应用场景之一,就是物联网中快速的机器对机器的交互。例如,道路上车辆中的计算机可以通过5G连续不断地相互通信,也可以连续不断地与道路通信,来实现自动驾驶,让以前的不可能变成了可能。

    实际计算一下,120公里时速的汽车刹车,4G网络大概有80ms的延迟,也就是3米多的刹车距离,而5G能把这个距离缩短到10cm,所以5G对于自动驾驶汽车来说,就能实现在4G时代做不到的事情。

    5G的不足

    说了这么多5G的牛逼之处,那么5G就没有缺点吗?

    当然有,下面来说两点:

    1.网速的上限已经确定

    我们现在的通信方式主要就是两种,无线通信和有线通信。

    无线通信的路径:手机/Pad–基站–核心网–英特网

    有线通信的路径:电脑/其他网络设备–英特网

    也就是说无论是手机的无线通信,还是电脑的有线通信,最终都要经过英特网的,5G只是手机和基站之间的连接变快了,最终的网速还得靠因特网,也就是各个数据中心和光纤的带宽和响应速度决定了5G网速的上限。

    2.耗资巨大

    5G使用的电磁波频率比较高,频率一高穿透能力就变差,就需要更多的基站才能覆盖盲区,5G的基站数量预计是4G的5倍左右,这需要有很高的资金要求。

    最后

    5G是为了万物互联而生的,大家都知道5G很重要,但是现在谁也不知道5G最大的应用会在什么地方,或许是一个大家都会意外的地方。

    就像现在的4G,刚开始出来的时候,大家觉得4G最大的用处就是能用手机看电影了,其实4G对我们生活最大的改变是实现了移动支付,让手机变得比钱包更重要,改变了大家的生活方式,从一个意想不到的角度开出了一朵灿烂的花来。

    至于5G的前景,就让我们拭目以待吧!

    展开全文
  • 柴油车尾气检测通常是烟度、CO含量、NOx含量、HC含量。柴油机的排放物主要是因为燃烧不完全而...清洁喷油嘴,因为使用柴油纯净度不够,再加上很多车不注重日常护理,喷油嘴会有不同程度堵塞,导致雾化不好,燃烧不...
  • Java中this与event有什么不同发布时间:2021-02-11 10:37:25来源:亿速云阅读:61作者:LeahJava中this与event有什么不同?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇...
  • 内容大纲:选词原因搜索引擎缓存原因用户体验问题被归入低级别的索引库速度原因新网站考核期原因网站权重不足关键词布局原因1、选词原因每个关键词的排名难度都是不同的,搜索引擎会根据关键词相关的内容数量、质量...
  • 引言继上篇文章“VC CreateWindow 找不到窗口类”中将RegisterClassEx改为RegisterClass问题就解决了,究竟是什么原因,RegisterClassRegisterClassEx有什么区别呢? 经过一番查找测试,终于找到了答案:不同之...
  • (下面的解决问题的内容是我从网上查到的,具体是哪位好心的大虾的,由于时间长我给忘了,所以不能指明出处,非常抱歉。...用Java Build Path导入包把包复制到lib下是区别的,它俩其实不会冲突,也没有什么
  • 出现的问题: 通过Navicat premium12转储的MySQL数据库,通过Navicat premium12导入本地MySQL,导入一半左右,后面的全部报错失败,重新将失败的表导出后导出,仍然失败 ...没有大佬知道原因,并且解决办法
  • 用sendmessage 发送鼠标消息 ...这个是什么原因,会不会导致在不同的电脑上使用,无法达到预期效果? 另外上面的函数 看了下 都在WinUser.h中,vc使用的是vc的WinUser.h, vs使用的是系统的WinUser.h,与这个有关吗?
  • MySQL数据库中的 null与not null、空值有什么不同发布时间:2020-11-16 15:54:59来源:亿速云阅读:65作者:LeahMySQL数据库中的 null与not null、空值有什么不同?相信很多没有经验的人对此束手无策,为此本文总结...
  • PHP取整函数:ceil,floor,round,intval有什么不同发布时间:2021-02-13 09:03:11来源:亿速云阅读:76作者:LeahPHP取整函数:ceil,floor,round,intval有什么不同?相信很多没有经验的人对此束手无策,为此本文总结了...
  • 这个问题有答案以及有意义吗?答案都是没有!那我还为何一直对这个问题死死揪住不放?这类问题可以提高一个人的素质以及了解一段关于网络unix的历史,正是因为这些都很有趣,才如此值得关注。...
  • 最近要开发一个小工具,学习一些网络检测定位的东西遇到了一个问题。我在第12跳上一个IP地址。当我向其IP发送TTL为11的icmp请求数据包时,第11跳的数据包丢失为0%。 但是,如果我ping第11跳的IP地址,或...
  • EasyDSS视频平台同时支持视频直播点播,在网校课堂方面,EasyDSS能很好的模拟课堂场景,并且不受时间、空间的限制,因此EasyDSS在很多课堂直播的项目应用中已经落地。 EasyDSS中的点播支持不同清晰度的切换,在...
  • 最近做项目的时候,我们发现安卓ios设备上的图片字体显示...由于安卓显示都是比较清晰的,所以在想是不是抗锯齿设置不同导致的,然后在cocos底层查了一圈,都没发现ios与安卓抗锯齿设置方面有什么处理不同的地方。
  • 舌苔颜色、形态的不同也代表着不同的疾病,结合自身的状况来考虑舌头厚黄是怎么回事,舌头厚黄又是什么原因引起的呢!1、舌苔颜色由浅逐渐变黄,证明患者内热的症状,中医上认为引起此症状的原因是胃气食物味道...
  • 我在写信道估计时 由于出来的结果 跟别人的结果相差较大,不论是在AWGN信道还是在...这是几种映射表下的16QAM误码率,误符号率曲线,有和理论的结果作对比。 第一张是映射表mapping(1)的结果 也是我做信道估计用到
  • 这个问题不少细心的同学都发现,我们感觉,既然lossmetrics都是一样的计算方法时,为什么不同呢? 实际上,造成这个微小差异的原因在于,模型评价的时候(metrics的结果)是模型训练完一个批次后,对这个批次...
  • (下面的解决问题的内容是我从网上查到的,具体是哪位好心的大虾的,由于时间长我给忘了,所以不能指明出处,非常抱歉。...用Java Build Path导入包把包复制到lib下是区别的,它俩其实不会冲突,也没有什么
  • 我通过Eclipse的 User Libranry 将jar...用Java Build Path导入包把包复制到lib下是区别的,它俩其实不会冲突,也没有什么关系的,Java Build Path是我们编译需要的包,在比如在import ***.***.***时如果没用Jav...
  • 固态硬盘U盘有什么区别

    千次阅读 热门讨论 2015-12-06 16:04:01
     U盘容易丢失数据的原因是因为USB设备经常插拔与不同的主机之间,不正确的插拔操作,USB接口的电压的不稳定,系统问题造成错误的数据写入等都是造成U盘故障频发的原因,而固态硬盘是安置于主机内部,使用的SATA接口...
  •  学问一:吵架时尽量避开孩子,有什么问题要等孩子离开后,再进行沟通。但千万不要冷战,因为那样会给孩子带来更大的心理伤害,孩子会不知所措,甚至认为是自己的原因造成了父母的不,长此以往,便会形成孤僻自卑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,833
精华内容 733
关键字:

原因和问题有什么不同