想知道这是什么符号,手机里没有,打不出来,也搜不到,但别人特殊符号怎么打出来来的

搜索那些事搜索那些事来,我们说说搜索那些事,不止技术哦关注专栏更多最新文章{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&title&:&用Golang写一个搜索引擎(0x00) --- 从零开始&,&author&:&wu-yh-jian&,&content&:&\u003Cp\u003E知乎终于给我开专栏了,听说这里人群高端:)\u003C\u002Fp\u003E\u003Cp\u003E这篇是引子,如果你感兴趣这个话题,感兴趣自己来写一个搜索引擎,这里有全部文章\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=060f010bf88b554d33cd4c0e3152bd30&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x00)从零开始\& class=\&\&\u003E用Golang写一个搜索引擎(0x00)从零开始\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=55ba9eed9f68d6b94713ac&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x01)基本概念\& class=\&\&\u003E用Golang写一个搜索引擎(0x01)基本概念\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=0ce4d0ef5a3a39f147b3c7ffa3f023dd&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x02)倒排索引技术\& class=\&\&\u003E用Golang写一个搜索引擎(0x02)倒排索引技术\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=aee8edfaa2c&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x03)跳跃表,哈希表\&\u003E用Golang写一个搜索引擎(0x03)跳跃表,哈希表\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=eccd79de87c3cccea2609&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x04)B+树\&\u003E用Golang写一个搜索引擎(0x04)B+树\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=1ea24d4f096&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x06)索引构建\& class=\&\&\u003E用Golang写一个搜索引擎(0x06)索引构建\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=fdc6b35ef9&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x07)正排索引\& class=\&\&\u003E用Golang写一个搜索引擎(0x07)正排索引\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=6e80a28acc8ab72ad523&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x08)索引的段\&\u003E用Golang写一个搜索引擎(0x08)索引的段\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=ba986a5a13a93cb938b7fd39d724ea2e&scene=21#wechat_redirect\& data-editable=\&true\& data-title=\&用Golang写一个搜索引擎(0x09)数据增删改\&\u003E用Golang写一个搜索引擎(0x09)数据增删改\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E很早就想写一系列的这样的文章了,之前在一个电商公司做搜索,对搜索引擎有一些认识,来到一个新的创业公司以后非常高兴还有机会继续做这方面的事情,虽然领域已经变了,而且不是做搜索了,但是技术还是那些技术,并且有机会接触到了Go语言,对于一个将近10年C\u002FC++的程序员来说,Go的一些特质让我觉得非常舒服,可参见我之前的文章,点击下面的阅读原文可以看到。\u003C\u002Fp\u003E\u003Cp\u003E从公司项目衍生出了一个自己的搜索引擎项目,然后有了这篇文章。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E先聊聊目标吧,我希望实现一个这样的搜索引擎\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E使用Go语言实现,方便部署,最好就用一个二进制文件搞定一些,不需要安装任何依赖。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E类似一个电商的搜索引擎,支持多字段的检索,不仅仅是文本的全文索引,还需要包括过滤功能(比如价格区间过滤),汇总功能(比如结果集中品牌数量汇总),基本的统计功能。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E索引器和搜索器在一起,主要是为了简洁,不用启多个实例。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E支持建立多个索引,并且多个索引如果有主键关联,可以进行多索引的联查(速度就只能呵呵了)。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E对于1000万的文档,单个词的平均查询时间小于10ms。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E对于一台8核8G内存的机器,QPS达到2000。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E尽可能的少用机器内存,在2G的机器上也能进行1000万以上的文档搜索。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E有较强的扩展性,可以自己扩展策略。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E可以进行分布式的集群部署,增加可搜索的文档数量,提高系统的查询吞吐量。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E支持中文分词,但分词不是我们的重点。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E支持相关性排序,但相关性排序也不是我们的重点。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cstrong\u003E重要的一点,由于是对搜索引擎的一个全面实现,尽量不用开源的代码,所有算法和数据结构都自己实现,当然,也可以方便的进行开源替代。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E\u003Cstrong\u003E当然,一个搜索引擎涉及的部分实在是太多了,下面几个部分不是我们的重点,也不会进行深入的实现\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E没有爬虫部分,搜索引擎的爬虫又是一个另外的话题了,也可以写一个很复杂的系统出来,所以我们这里不涉及爬虫的部分\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E不涉及算法的部分,所谓算法部分就是排序算法,各种相关度计算,这也是一个另外的话题了,等这一系列文章结束以后再来说说排序的算法,目前仅仅有的是按照TF*IDF进行基本的相关性的基本排序\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E不涉及分词部分,分词部分也是一个单独的话题,直接实现了一个非常非常非常(\u003Cstrong\u003E重要事情说三遍\u003C\u002Fstrong\u003E)简单的中文分词器(一个函数),可以用就行了。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E目前代码部分已经完成了一大半了,但是还没有进行优化,并且最后一个分布式引擎还没有完成。但是代码的核心部分,也就是搜索引擎本身的技术部分已经完成了,也已经在github上托管了,所以这一系列文章出现不更新的情况也不太可能,毕竟代码已经基本完成了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cstrong\u003E整个系列文章将分成以下几个部分来进行描述\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E一个单机的搜索引擎的架构,包括搜索引擎的模块组成,各个模块的功能已经他们之间的关系,这个部分会对搜索引擎整体有个了解,方便后面的文章的详细描述,这一部分可能会比较短,后面到第三部分会再详细说。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E搜索引擎的底层技术部分,这部分比较多的内容,会分开一个一个的讲,包括倒排索引技术,正排索引技术,分词算法,MMAP技术,这些是构成一个搜索引擎必要的底层技术,会在这一部分做介绍\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E一步一步的实现一个单机的搜索引擎,按照模块从最底层的倒排和正排索引实现一直到最上层的引擎部分的实现,这一部分如果涉及到了相应的数据结构和算法也会单独写,比如哈希表算法,B+TREE算法,BitMap算法,有些我这个引擎中没有实现的算法也会一起讲讲,比如跳表,前缀树,布隆过滤器等等。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E分布式部分【TODO:需要等我代码写完了才行】,包括如何进行分布式,各个机器之间如果进行同步,索引如果进行分片\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E代码已经在git上开源了,我会本周再整理一下就公布出来,目前就一堆代码实在没办法看。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E好了,算是开了一个头了,如果想在微信上看,可以微信搜索\u003Cb\u003EXJJ267\u003C\u002Fb\u003E或者\u003Cb\u003E西加加语言\u003C\u002Fb\u003E,那里还有其他类型的文章。\u003C\u002Fp\u003E\u003Cimg src=\&83d596cb9d57df2b08bea8282ace5fe5.jpg\& data-rawwidth=\&344\& data-rawheight=\&344\&\u003E&,&updated&:new Date(&T09:43:08.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:2,&likeCount&:12,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T17:43:08+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002Fb7b52b7be0997258aacd4_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:2,&likesCount&:12},&&:{&title&:&搜索引擎排序&,&author&:&wu-yh-jian&,&content&:&\u003Cp\u003E今天说说搜索引擎的排序吧。\u003C\u002Fp\u003E\u003Cp\u003E一个标准的搜索引擎有三个最重要的部分,爬虫,检索,排序。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E爬虫水太深了,各种黑科技层出不穷,光代理的选择就有各种黑科技,而且只有百度这种全网搜索引擎或者某些靠爬数据的细分领域的垂直搜索引擎才需要爬虫,重要的是我也不是很了解这一块,所以就说不了了,我么默认数据都是自有的数据,类似电商的搜索引擎。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E检索的话,我之前的文章主要介绍的就是这一块的东西。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E排序是直接影响用户体验的部分,这也是搜索引擎和数据库效果上差别比较大的部分了,排序完全可以写一本书出来,这里我就用一篇文章来说说我所理解和了解的排序吧。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E我没见过大厂的搜索,所以可能说得不对啊\u003C\u002Fp\u003E\u003Cp\u003E首先,我们还是定个标准,因为搜索引擎的排序根据场景的不同使用的技术也不太一样,比如通用搜索引擎,像谷歌和百度这种,PageRank是主要技术了,对于一个不需要爬虫的搜索引擎,一般也不会用到PageRank技术了,我们说说特定领域的搜索引擎的排序,最经典的场景就是电商类搜索引擎怎么排序。我并不是这方面的专家,所以有些东西说的不够准确也别喷啊,而且排序也是各种新技术层出不穷,一篇文章要说明白也是不太可能的,更深入的大家可以自己去找资料哈,下面我们以一个电商的搜索引擎为例说说排序。\u003C\u002Fp\u003E\u003Cp\u003E对于搜索一个关键词,直观的感觉应该有哪些因素影响到它的结果集排序呢?一般人很明显能想到的有关键词和商品的匹配程度,商品销量,商品好评度,是否有货等,再深入一点可能能想到商品被收藏的次数,被点击的次数这一类的东西。\u003C\u002Fp\u003E\u003Cp\u003EOK,我们一步一步来说说吧,顺着说的时候我们先建立一个规则,就是无论多少个因素,最终每个商品都会得到一个分数,排序的时候就按这个分数来进行排序,我们这里以最简单的办法,这是一个32位的整数,我们使用其中的21位,最后就按这个21位的整数的大小来进行排序。\u003C\u002Fp\u003E\u003Ch3\u003E关键词和商品的匹配程度\u003C\u002Fh3\u003E\u003Cp\u003E首先,我们认为最重要的因素就是关键词和商品的匹配程度,也就是前面几篇所说的TF*IDF的值,这个我们认为是排序最重要的因素,因为你都和关键词不太匹配,怎么说也不好意思排到前面吧。那么我们把最高的3位留给TF*IDF,3位能表示0到7共8个等级,那么计算的时候,我们把结果集每个文档的TF*IDF算出来以后,归一化成0到7这八个数,那么对相关性的打分就打好了,如果你希望区分度更高,可以使用4位或者5位,但是其实意义不大,8个等级都多了,5个等级差不多就行了,因为后面还有其他因素,这里区分度太大了,后面就没什么影响了。\u003C\u002Fp\u003E\u003Cp\u003E这一步的计算量比较大,可以在构建索引的时候就把每个文档在每个关键词下的TF-IDF算好直接存起来,检索的时候只需要求交集的时候把这些值加起来然后归一化就行了。\u003C\u002Fp\u003E\u003Cp\u003ETF-IDF怎么算,可以看我前面的这篇文章【用Golang写一个搜索引擎(0x05)】,这里就不说了。\u003C\u002Fp\u003E\u003Cp\u003E关键词匹配程度除了TF-IDF以为还有个比较重要的因素,就是词距和词序,这个也很好理解,比如你搜索小米手机,结果集中有两个商品,一个名字叫小米手机Note2,全国包邮,一个名字叫优质小米,可手机追溯来源,有可能这两个商品的TF-IDF都是一样的值,但是很明显你更愿意看到第一个排在前面,这就是词距和词序的影响,那么,我们把接下来的2位给词距和词序,也是归一化成4个等级,怎么归一这个比较自由,能区分就行。\u003C\u002Fp\u003E\u003Cp\u003EOK,匹配程度上有5位了,通过这5位我们基本能给出一个初步的排序结果出来了,这个结果不会太差,至少基本上会是你要找的东西,而我实现的这个搜索引擎基本也就做到这一步了,因为后面的排序因素和场景就太相关了,但是这32位我都留着了,后面的可以自由发挥。\u003C\u002Fp\u003E\u003Cp\u003E当然,影响相关性的可不止这两个因素,像分词程序的好坏,关键词纠错能力都直接影响这一部分的排序结果,这里我们就说主要的,给大家一个排序的概念。\u003C\u002Fp\u003E\u003Ch3\u003E商品本身的属性\u003C\u002Fh3\u003E\u003Cp\u003E除了上面的匹配程度以为,商品本身的属性也是很重要的排序因素,这些属性包括销量,收藏次数,点击次数,评论次数,好评次数,差评次数,是否有货等等等等,你能想到的和商品本身有关的东西(也叫feature)都可以算进来,甚至可以包括像有几张图片啊,图片是否漂亮啊,评论中是否有人晒图啊,对于某个属性,比如销量,还可以细分成日销量,周销量,月销量,这些都可以算成商品本身的属性用来影响排序。\u003C\u002Fp\u003E\u003Cp\u003E那么我们把接下来的8位留给商品的属性吧,现在的关键问题是怎么来算这个数,最简单的办法是我们只考虑月销量,收藏次数,点击次数,并且我们人为的给拍一个权重就是月销量 & 收藏 & 点击,他们分别占用8位中的3位,3位,2位,归一化一下,齐活,排好了,够简单吧,而且效果也不会太差。\u003C\u002Fp\u003E\u003Cp\u003E但是作为一个高端的排序,这么做明显比较挫了,因为这一部分的打分比较稳定,它只和商品本身相关,也不需要实时计算,所以一般都是离线算好了就行了,所以这里都是用了机器学习模型或者更高端的用了深度学习模型来计算。\u003C\u002Fp\u003E\u003Cp\u003E机器学习算什么呢?算权重,我们这里有一堆的属性(专业点叫feature)X1,X2,X3...Xn,每个都有权重分别是a1,a2,a3...aN,那么最后的分数就是a1*X1+a2*X2+a3*X3+...aN*Xn,这个分数最高的就排前面。机器学习就是把这些个a1,a2..aN系数给算出来,然后在计算每个商品的分数。\u003C\u002Fp\u003E\u003Cp\u003E这里的方法有非常多,一般用得比较多的是逻辑回归,如果感兴趣的话可以自行去学习一下逻辑回归,不过没有数学基础就算了,我这里就不展开了,展开了就是一堆数学公式。\u003C\u002Fp\u003E\u003Cp\u003E我用最最朴实的话描述一下这个算法啊,希望你能有个直观概念,因为我实在没法更直观的描述了,想要了解个中原理的自己去看逻辑回归吧,下面的文字有一定误导性,请谨慎阅读。\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E简单起见,设某个商品我们有两个属性(销量,收藏),并且我们知道这个商品最后有没有被点击,然后我们不知道他们的权重(a1,a2)需要求出来,然后用a1*销量+a2*收藏来得到这个商品的最后打分。\u003C\u002Fp\u003E\u003Cp\u003E首先,我们定义一个表达式(a1*销量+a2*收藏)*S=Y,Y是什么呢,我们定Y=1表示被点击了,Y=0表示没有被点击,S是什么呢?你把S当成一个牛逼的函数就行了,什么东西乘上他以后就变成不是0就是1了,现在我们把销量,收藏,是否被点击联系起来了,可以开始求这个a1和a2了。\u003C\u002Fp\u003E\u003Cp\u003E我们有的是最近三个月每个商品的销量,收藏和点击数据,那么每个商品我们都可以写成下面的样子,其中的20,10,30表示销量和收藏的具体数\u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003E商品1在某时刻 : (a1*20+a2*10)*S=1\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003E商品2在某时刻: (a1*30+a2*30)*S=0\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cem\u003E…...\u003C\u002Fem\u003E\u003C\u002Fp\u003E\u003Cp\u003E有了这一堆表达式,那么我们就一个一个去试这些系数呗,计算机不是最喜欢干这事情么,一直试到某一组系数能满足大部分表达式了,那么OK,就是它了,于是我们得到了一组能满足大部分表达式的系数,就用这组系数配合属性来计算分数了。\u003Cbr\u003E这就是逻辑回归的机器学习算法了,注意啊,这里不是解方程,是试\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E于是我们把S丢掉,就用a1*X1+a2*X2+a3*X3+...aN*Xn给每个商品算上一个分数,再归一化一下,就是这一部分的分数了,然后填写到这8位上。\u003C\u002Fp\u003E\u003Cp\u003E一般在这一部分,由于计算量巨大,都是用的Hadoop来算了,算出来的这一组系数一般也比较稳定,能用很久,不用每天更新,只有当数据积累到一定程度以后,再重新算一次系数就行了。这样,我们有了这组牛逼的系数,那么每天我们把所有商品的分数重新算一遍,然后更新到这8位中就行了。\u003C\u002Fp\u003E\u003Cp\u003E然后更牛逼的是,当你发现一个新的属性(比如某个商品是不是在搞活动),你觉得应该会影响排序效果,那简单,把这个属性放进去,重新计算一下系数,以后就按新系数来计算分数了。好,黑模式开启,其实吧,算法工程师每天做的就是不停的找属性(他们管这个叫featrue,就是为了显得你们看不懂),然后让机器去算新系数,没啥难度嘛,嘿嘿。\u003C\u002Fp\u003E\u003Cp\u003E这一切看起来都很美好,但是如何来评估也是问题。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E首先,这个Y怎么定,上面我们把是否点击定成Y,是不是合理,如果不合理应该怎么定,如果你有大批闲散人员,那么可以人来给每个商品打个标签【好,或者不好】来代替是否点击了,但是即便这样也有主观因素,所以这一块也是个可以深挖的东西。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E第二,机器这么算出来的就是对的么?我前面拍的月销量 & 收藏 & 点击难道就不好么?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E第三,除了逻辑回归,还有其他的机器学习的模型,用其他模型算出来的肯定和这个系数不一样,那哪个好呢?\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E所以说,算法工程师还是很忙的,还需要解决至少上面几个问题,还有一些问题,比如你找到一个属性,就是图片漂亮不漂亮应该也会影响排序,卧槽,那图片多漂亮,怎么变成一个X放到那个表达式中去啊,这也是算法工程师要解决的。\u003C\u002Fp\u003E\u003Cp\u003E系数好不好,最简单直观的办法就是用了这一组系数以后,搜索引擎的点击提高了没,如果是电商的话,那么搜索引擎带来的收入提高了没,提高了那就行,降低了的话,对不起,把系数回滚吧。\u003C\u002Fp\u003E\u003Cp\u003E好了,说了这么多了,其实也只是说了排序的皮毛,里面的东西实在是太多太多了,不然也不会有那么多算法工程师前仆后继的来弄这个了。\u003C\u002Fp\u003E\u003Cp\u003E这一段写得比较多,我用了尽量能理解的话来说,如果对机器学习感兴趣的话自己去找资料吧,最好先看看线性代数和概率论,如果你不准备深入学习线性代数和概率论,只是想复习一下,那么推荐两本书,小日本写的《程序员的数学-线性代数》,《程序员的数学-概率论》。\u003C\u002Fp\u003E\u003Ch3\u003E用户本身的属性和行为\u003C\u002Fh3\u003E\u003Cp\u003E除了上面两个部分以为,用户本身的属性行为也可以作为搜索引擎排序的选项,比如我们把最后8位留给用户行为吧,何为用户本身的属性和行为呢?\u003C\u002Fp\u003E\u003Cp\u003E比如天猫吧,在登录的情况下,搜索上衣,男的和女的看到的结果是不一样的,男的看到的基本都是男上衣,女的反之。这就是用户属性的利用。又比如你在天猫上一年买的东西好几十万,而且都是高端货,那么你搜索某些关键词的时候,可能贵的东西会排前面,但我搜的时候就不会。这就是用户行为数据的利用。\u003C\u002Fp\u003E\u003Cp\u003E总之,这一块的想象空间更加巨大,而且这一块和上一块究竟哪个的权重应该更高,也不好说,所以搜索引擎的排序这一块能做的工作实在是太多太多了,这部分也可以跟推荐系统和广告系统结合起来对搜索结果产生影响,来达到最大化的收益。具体怎么做需要单开一篇甚至几篇来写了,最终也会得到一个分数,然后放到最后的8位上去。\u003C\u002Fp\u003E\u003Ch3\u003E总结\u003C\u002Fh3\u003E\u003Cp\u003E搜索引擎的排序,不外乎就是上面三个大的部分,但是每一部分都可以深挖出很多很多东西,而且排序是关乎到一个搜索引擎好坏的重要指标,大家都是投入巨大人力做这个,一个人要全弄明白也不太可能,我文章中所说的21位整数作为打分的最终表达方式也只是其中的一种方法,只是为了让大家更直观的理解排序模型,所以排序的可操作程度实在是太高了,想怎么玩都行,只要最后有效果就是好的排序。\u003C\u002Fp\u003E\u003Cp\u003E最后说说我个人的想法啊,就说电商排序这一块,某宝的排序目前已经是很流弊了,一般能想到的东西他们都做了,而且各种新技术新理论也用得很多,我觉得相对于其他电商已经是一个炫技的程度了,但真的都有效么?上面说的男的女的搜索出来的东西不一样,你搜的时候会觉得:\&卧槽,好流弊啊!!\&,但仔细想想你搜东西的时候真的会因为你是男的搜的东西都是男装,你就会多下单吗?搜索是一个意图非常明确的操作,你明明是要买女装给老婆的,不会因为搜出来是男装你就会多买个男装。当然,阿里肯定是做了AB测试了,不然这个功能都上了一年多了,要是真没效果估计也下线了。\u003C\u002Fp\u003E\u003Cp\u003E最后,道高一尺,魔高一丈,排序做得这么流弊,老子照样可以刷单刷排名,民间的高人根本不明白搜索排序的理论,一样可以分分钟秒了你的搜索排序,呵呵。\u003C\u002Fp\u003E\u003Cp\u003E如果想在微信上看,可以微信搜索\u003Cb\u003EXJJ267\u003C\u002Fb\u003E或者\u003Cb\u003E西加加语言\u003C\u002Fb\u003E,那里还有其他类型的文章。\u003C\u002Fp\u003E\u003Cimg src=\&83d596cb9d57df2b08bea8282ace5fe5.jpg\& data-rawwidth=\&344\& data-rawheight=\&344\&\u003E&,&updated&:new Date(&T11:08:14.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:2,&likeCount&:6,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T19:08:14+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002F015c2dfc5747_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:2,&likesCount&:6},&&:{&title&:&用机器学习再谈搜索排序&,&author&:&wu-yh-jian&,&content&:&\u003Cp\u003E这里没有标记颜色,可能看起来重点不突出,可以去微信页面观看\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5ODczNTkwMA==&mid=&idx=1&sn=97606ecfeeb21#rd\& data-editable=\&true\& data-title=\&这里\& class=\&\&\u003E这里\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E前面说排序的时候已经简单了说了一下排序的方法,包括三部分:相关性排序,商品本身的属性排序,个性化排序,无论怎么排,大体上都逃不掉这三项。\u003C\u002Fp\u003E\u003Cp\u003E今天,说说如何用机器学习的办法来进行排序(商品本身的属性排序)。\u003C\u002Fp\u003E\u003Cp\u003E说起机器学习,是个很大的话题,我也不是专家,但是至少用机器学习这个工具还是没什么大问题的,今天我们深入一下机器学习中的逻辑回归,看看如何用逻辑回归来进行排序。\u003C\u002Fp\u003E\u003Cp\u003E我尽量不会用大量公式,尽量用说人话的方式说一下机器学习的逻辑回归,有些东西我会直接给出结论,如果感兴趣的可以去查资料,好了,开始吧,看我们如何从数据开始,一步一步来做到商品属性的排序的。\u003C\u002Fp\u003E\u003Ch4\u003E1.前期准备\u003C\u002Fh4\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E首先,我们确定一下背景,就是在什么场景下排序,假设我们是一个电商搜索引擎,搜索的数据就是各种各样的商品,并且通过关键字,很多商品的打分是一样的,无法进行区分了,所以需要对这些商品进行商品质量的排序。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E然后,我们有哪些数据可以用来进行排序呢?为了简单起见,我们假设我们有最近半年的每个商品的销量,每个商品的收藏数量,每个商品的点击次数这三种数据。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch4\u003E2.目标\u003C\u002Fh4\u003E\u003Cp\u003E我们有每个商品的销量,每个商品的收藏数量,每个商品的点击次数这三种数据,那我们的目标是什么呢?\u003C\u002Fp\u003E\u003Cp\u003E既然要确定好还是不好,那么必然最后我们会给每个商品打一个分,分越高越好,我们有上面的数据,那么这个分数我们这么来定义(没有使用点击次数是为了后面说明比较直观,把点击当结果了)\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003EScore = a1*销量 + a2*收藏数量\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E而我们的目标就是求出a1和a2来(请牢记这一目标),那么以后我们每看到一个商品,用上面这个分数公式一算,就知道这个商品多少分了。\u003C\u002Fp\u003E\u003Ch4\u003E3.衡量商品\u003C\u002Fh4\u003E\u003Cp\u003E我们的目标是把好的商品排在前面,怎么样来衡量一个商品是好还是不好呢?有种直观的办法来确定,找一群人,然他们凭直观感觉搜索结果中排前面的商品好不好\u003C\u002Fp\u003E\u003Cp\u003E但这里我们用个简单的办法,就是商品被点击超过10次,我们认为就是好商品,而我们有最近半年的数据,所以我们知道哪些是好商品,哪些是不好的商品。\u003C\u002Fp\u003E\u003Ch4\u003E4.开始排序\u003C\u002Fh4\u003E\u003Cp\u003E好了,前期准备工作完成了,目标也确定了,我们开始机器学习的排序了。\u003C\u002Fp\u003E\u003Cp\u003E我们使用的是逻辑回归的方法,如果看维基百科的定义的话,不见得你能明白,我们这里就不做名词解释了,你把它看成一个方法就行了。\u003C\u002Fp\u003E\u003Cp\u003E为了简单起见,我们假设一共只有6个商品,他们的销量和收藏数量分别是下表,现在,我们一步一步来完成对目标a1和a2的求解。\u003C\u002Fp\u003E商品
收藏量\u003Cul\u003E\u003Cli\u003EA1 50 (1.69) 20(1.30)A2 30(1.47) 60(1.77)\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003EA3 500(2.70) 60(1.77)\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003EB1 30(1.47) 5(0.70)\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003EB2 5(0.70) 30(1.47)\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003EB3 1(0) 10(1.00)\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Ch2\u003E4.1 数据归一化\u003C\u002Fh2\u003E\u003Cp\u003E首先,我们需要做的是将数据标准化,也就是归一化。\u003C\u002Fp\u003E\u003Cp\u003E为什么要归一化数据呢?比如上表中的A3,他的销量是500,和其他的所有的商品的销量差别特别大,所以如果用a1*销量 + a2*收藏数量这个公式来计算分数的话,它就特别占便宜,随随便便就排到前面去了,但是有可能这个商品只是搞了一次1折促销,所以销量突然变大的,对于这种情况,我们就要通过归一化把数据变得尽量在一个可控的区间中。\u003C\u002Fp\u003E\u003Cp\u003E数据归一化的方法比较多,我们这里用个简单的,直接取log值来归一化,那么上面的数据就被归一化到一个可控的范围内了,这样计算分数的时候一些突变数据就很难占便宜了,上面数据后面括号里面就是归一化以后的数,比较靠谱了吧。\u003C\u002Fp\u003E\u003Ch2\u003E4.2 sigmoid函数\u003C\u002Fh2\u003E\u003Cp\u003E到这里,我们目前已经拥有了下面的东西\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E上面表的归一化好的数据\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E一个计算分数的公式:a1*销量 + a2*收藏数量\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E如果商品的好和坏用1和0表示的话,要是我们能将上面的计算分数的公式和好坏联系起来就好了,好了,直接出结论,真有这样的函数,这个函数叫sigmoid函数,他长成这样:\u003C\u002Fp\u003E\u003Cimg src=\&ad95bc9fa071f728016ce.jpg\& data-rawwidth=\&2564\& data-rawheight=\&2276\&\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E这个可以将任何东西变成0到1之间的值,我们再取巧一点,在0到1之间如果大于0.5我们就认为是1,小于0.5我们认为是0的话,那么这个算分公式就和好坏联系起来了。\u003C\u002Fp\u003E\u003Cp\u003E根据已知的条件,我们可以列出下面的东西\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003EA1的好坏值 = sigmoid( a1*A1的销量 + a2*A1的收藏数量 )\u003Cbr\u003EA2的好坏值 = sigmoid( a1*A2的销量 + a2*A2的收藏数量 )\u003Cbr\u003EA3的好坏值 = sigmoid( a1*A3的销量 + a2*A3的收藏数量 )\u003Cbr\u003EB1的好坏值 = sigmoid( a1*B1的销量 + a2*B1的收藏数量 )\u003Cbr\u003EB2的好坏值 = sigmoid( a1*B2的销量 + a2*B2的收藏数量 )\u003Cbr\u003EB3的好坏值 = sigmoid( a1*B3的销量 + a2*B3的收藏数量 )\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E好了,到这一步,我们的原始数据(销量,收藏数量)就和商品的好坏联系起来了。\u003C\u002Fp\u003E\u003Ch2\u003E4.3 代价函数\u003C\u002Fh2\u003E\u003Cp\u003E至此,我们已经有了以下几个东西了:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E上面表的归一化好的数据\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E一个计算分数的公式:a1*销量 + a2*收藏数量\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E一个计算商品好坏的公式:sigmoid( a1*商品销量 + a2*商品收藏数量 )\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E除了上面的,我们还有5个月的真实数据,也就是我们知道每个商品实际是否真被点击了,如果我们按照上面衡量商品的方法统计一下,我们就得到了一批真实的好商品和一批真实的坏商品,假设分别是A1,A2,A3和B1,B2,B3,如果我们找到一个a1和a2,用计算商品好坏的公式把所有商品一算,如果和真实的好坏一致,那么a1和a2就是我们要找的目标了。\u003C\u002Fp\u003E\u003Cp\u003E那么,怎么来描述我们算的结果和实际结果的差异呢?这里再引入一个公式(这是最后一个公式),我不做推导了,直接给出来,这个公式长成这样子,它表示每一个商品预测的好坏和实际的好坏的差异\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E-log(sigmoid( a1*销量 + a2*收藏数量 )) — 实际被点击的时候\u003Cbr\u003E-log(1 - sigmoid( a1*销量 + a2*收藏数量 ) ) — 实际没有被点击的时候\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E有了这个公式,那么总体的差异就是每个商品的差异求和除以商品数了,我们叫代价函数,就是下面这个公式,X1和X2对应的就是销量和收藏数量,m表示一共有多少个商品,代价函数的值越小,那么对应的a1和a2就越接近我们需要的值。\u003C\u002Fp\u003E\u003Cimg src=\&4cc5eec9b8df.jpg\& data-rawwidth=\&2056\& data-rawheight=\&448\&\u003E\u003Ch2\u003E4.4 开始求解\u003C\u002Fh2\u003E\u003Cp\u003E至此,我们有了以下内容了\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E上面表的归一化好的数据\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E一个计算分数的公式:a1*销量 + a2*收藏数量\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E一个计算商品好坏的公式:sigmoid( a1*商品销量 + a2*商品收藏数量 )\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E实际每个商品的好坏A1,A2,A3为好商品,B1,B2,B3为坏商品\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E有一个预测值和实际值比较差异的代价函数,可以用来判断我们预测得准不准\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E通过上面这么些步骤,最后,我们通过代价函数将我们通过销量和收藏预测出来的点击和实际的点击联系起来了,终于,我们完成了数据到商品实际好坏(是否真的被点击)的联系。\u003C\u002Fp\u003E\u003Cp\u003E我们通过代价函数将我们通过销量和收藏预测出来的点击和实际的点击联系起来了,终于,我们完成了数据到商品实际好坏(是否真的被点击)的联系。\u003C\u002Fp\u003E\u003Cp\u003E我们通过代价函数将我们通过销量和收藏预测出来的点击和实际的点击联系起来了,终于,我们完成了数据到商品实际好坏(是否真的被点击)的联系。\u003C\u002Fp\u003E\u003Cp\u003E重点说三遍,相当于我们的排序模型已经建立起来了\u003C\u002Fp\u003E\u003Ch2\u003E4.5 梯度下降\u003C\u002Fh2\u003E\u003Cp\u003E好了,前面铺垫了这么多,终于要开始求解a1和a2了。\u003C\u002Fp\u003E\u003Cp\u003E首先,我们有一个函数,这个函数是上面的最后一个公式,我们再写一遍\u003C\u002Fp\u003E\u003Cimg src=\&4cc5eec9b8df.jpg\& data-rawwidth=\&2056\& data-rawheight=\&448\&\u003E\u003Cp\u003E这里的a1和a2是未知数,也就是我们要求的,其他的都是已知的,通过已有的六个月的销量和收藏的值,以及不断变化a1和a2,我们可以画出这个函数的三维图像(我直接用mac的画图软件画的,和数据对应不上,但不影响我们的分析),其中X,Y轴分别表示a1和a2,Z轴表示代价函数的值。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cimg src=\&1c501cf8ffff54.jpg\& data-rawwidth=\&825\& data-rawheight=\&477\&\u003E\u003Cbr\u003E我们要求的a1和a2,实际上就是这个代价函数的最小值的情况下的a1和a2,也就是图像中蓝色的区域对应的a1和a2值。\u003C\u002Fp\u003E\u003Cp\u003E通过上面这么多步骤,我们终于把求a1和a2变成了求一个函数的最小值。\u003C\u002Fp\u003E\u003Cp\u003E要求解出这个函数的最小值,接下来就看计算机的了,一个一个去试呗,看看哪两个参数下,整体的代价函数值最小,那么就用这个a1和a2了。呵呵,傻子也看得出来这一个一个试的方法有多傻。\u003C\u002Fp\u003E\u003Cp\u003E机器学习之所以叫机器学习,那么至少需要体现出来学习的能力吧,怎么体现呢?\u003C\u002Fp\u003E\u003Cp\u003E一个一个值去试显然不是机器学习,那叫穷举,机器学习就是我先试一个值,然后看看和实际结果有多少差异,然后去调整这个值,让新的结果和实际结果的差距变小,直到差距变得最小,这样的过程才叫机器学习。\u003C\u002Fp\u003E\u003Cp\u003E我们通过一个叫梯度下降的迭代运算,可以得出满足差异最小化的a1和a2的值,什么叫梯度下降我这里不描述了,感兴趣的可以自己去查资料,因为这一部分涉及的数学内容太多,我也描述得不好,大家看着也没兴趣。真正感兴趣的可以自己去查查资料。\u003C\u002Fp\u003E\u003Cp\u003E简单来说,就是先随便选一个a1和a2,比如下图中的红色部分的白点,计算出一个代价函数的值,然后通过求代价函数的偏导数,我们就知道了如何调整这个a1和a2,那么通过一步一步的迭代循环(这一步一步的迭代就是机器学习的过程了),沿着白点的路径,我们就可以走到图像蓝色的部分,从而得到满足最小值的a1和a2,这样可以通过有限的几次迭代运算,而不用求出全部的a1和a2来得到最小值。\u003C\u002Fp\u003E\u003Cimg src=\&639be9a1e789dd414cf7d4b071e3fd31.jpg\& data-rawwidth=\&2204\& data-rawheight=\&1784\&\u003E\u003Cbr\u003E\u003Cp\u003E现在,通过梯度下降的算法,就求出a1和a2了,我们的目标也就达成了。\u003C\u002Fp\u003E\u003Ch4\u003E5.使用a1和a2\u003C\u002Fh4\u003E\u003Cp\u003E好了,上面通过一系列步骤,a1和a2已经求出来了,使用起来就简单了,碰到任何一个商品,通过上面的算分公式a1*销量 + a2*收藏数量就可以直接算出来这个商品的分数,在排序的时候按这个分数排序就行了。\u003C\u002Fp\u003E\u003Ch4\u003E6.评估\u003C\u002Fh4\u003E\u003Cp\u003E有了这个a1和a2,我们如何来评估好还是不好呢?\u003C\u002Fp\u003E\u003Cp\u003E我们不是有最近半年的数据么,那么我们只用其中5个月的数据来计算a1和a2,然后用最后一个月的数据来测试,把数据套入公式中看看预测的点击和真实的点击准不准,准确度越高那么就越有效。\u003C\u002Fp\u003E\u003Cp\u003E当然,最直接的办法还是上线以后做AB测试,看用户买单不买单了。\u003C\u002Fp\u003E\u003Ch4\u003E7.写在后面的话\u003C\u002Fh4\u003E\u003Cp\u003E这篇文章我尽量没有特意去写逻辑回归的数学原理,只是用工程化的思想将排序的方式说了一遍,没有特别涉及数学原理,如果感兴趣我可以再写一篇来说说逻辑回归的数学原理,不过估计看的人少,我也怕我这半桶水写不好,呵呵。\u003C\u002Fp\u003E\u003Cp\u003E上面的方法我们使用了销量和收藏数据,其实任何一个你认为可能会影响排序的因素都可以用来排序,每一个因素叫一个feature,比如发货速度,购物车添加次数,最近7天点击次数,最近一个月点击次数,评论数,好评数,图片数量,发货范围,甚至包括图片的好看程度,这样,求a1和a2就变成了求a1,a2...an了,每个因素对应一个权重,算法没有任何区别。\u003C\u002Fp\u003E\u003Cp\u003E如果我们有个特别牛逼的专家,他说别算了,也别搞那么多因素,就选销量和收藏数量,按我的直觉来,拍一个权重:a1等于0.9,a2等于0.1,结果一上线,效果出奇的好,用户哗哗点击,哗哗下单啊。有没有这种可能呢???当然有!!因为机器学习的方法来计算排序,本质上是因为我们有大量的数据而人工无法处理,我们觉得这些数据有用,于是我们想出来机器学习的办法来使用这些数据,最后的可解释性其实不强,你算出来a1等于0.86,a2等于0.14,为什么呢??看似一步一步都是按照数学公式来的,但其实不好解释,就和人的直觉一样,不见得比专家的直觉强。\u003C\u002Fp\u003E\u003Cp\u003E好了,本篇结束,你有什么问题可以留言,但可能我也答不出来,所以不见得会回哦。。\u003C\u002Fp\u003E\u003Cp\u003E最后,欢迎关注我的微信号:可以微信搜索\u003Cb\u003EXJJ267\u003C\u002Fb\u003E或者\u003Cb\u003E西加加语言\u003C\u002Fb\u003E,那里还有其他类型的文章,主要说说搜索,推荐,广告的架构和算法,有时也会瞎扯一下。\u003C\u002Fp\u003E\u003Cimg src=\&83d596cb9d57df2b08bea8282ace5fe5.jpg\& data-rawwidth=\&344\& data-rawheight=\&344\&\u003E&,&updated&:new Date(&T11:22:49.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&likeCount&:4,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T19:22:49+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic4.zhimg.com\u002Fd676e0d90b6eb_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:0,&likesCount&:4},&&:{&title&:&面壁人VS智子 --- 搜索排序的作弊和反作弊&,&author&:&wu-yh-jian&,&content&:&\u003Cp\u003E搜索引擎已经是目前网络流量最大入口,在大搜上,基本上大家打开网页做的第一件事情就是打开一个搜索引擎,然后键入你感兴趣的内容,然后开始浏览。如果是个电商的网站,你打开以后,基本上也是直接键入你感兴趣的内容,然后开始浏览。\u003C\u002Fp\u003E\u003Cp\u003E电商的搜索引擎带入到店铺和商品的流量是巨面壁人大的(天空飘来一首歌:不要问我流量有几多,我会告诉你很多很多),流量的巨大必然带来销量的巨大,这些都是钱啊,有人的地方就有江湖,从小的思想品德课老师就告诉我们:马克思说过,一有适当的利润,资本就会非常胆壮起来。只要有10%的利润,它就会到处被人使用;有20%,就会活泼起来;有50%,就会引起积极的冒险;有100%,就会使人不顾一切法律;有300%,就会使人不怕犯罪,甚至不怕绞首的危险。所以,搜索排序舞弊就变成了一条又黑又长的地下黑色产业链了。\u003C\u002Fp\u003E\u003Cp\u003E今天,我们以一个对话的剧本形式来说说搜索排序中的作弊和反作弊\u003C\u002Fp\u003E\u003Ch2\u003E0. 人物介绍\u003C\u002Fh2\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:是一个为了追求利润不择手段的资本家\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:高智能的系统,专门和面壁人做斗争\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cb\u003E光糕喜通\u003C\u002Fb\u003E:一个没啥原则,只要出钱就可以给你做事的人\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:他的技能就是耍蛋,这可是一个技术活\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Ch2\u003E1. 荒蛮时代\u003C\u002Fh2\u003E\u003Cblockquote\u003E\u003Cp\u003E\u003Cu\u003E其实在荒蛮时代之前还应该有个规矩时代,那是第一代电商时代,以亚马逊这种B2C的电商为代表,因为所有的商品都是他自营的,所以不存在作弊一说,想怎么排就怎么排,反正都是我自己的东西,直到像ebay,易趣,淘宝之类的平台型电商出现,才开始了荒蛮时代。\u003C\u002Fu\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cu\u003E荒蛮时代,是线上购物刚刚兴起的时候,那时候在线上买商品还不是那么普及,而且商品的数量也没那么多,作弊主要体现在能把商品显示出来就行了,对于排名其实没有那么大的需求,而且那时候不管是商家还是平台,大家都是新手,那些个武林绝学都还在某个山洞里面藏着没有公布于众。\u003C\u002Fu\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E新上了一个商品,是一条红色的ZARA的连衣裙,商品标题写成了\u003Cem\u003E\u003Cu\u003EZARA红色连衣裙\u003C\u002Fu\u003E\u003C\u002Fem\u003E,上了以后发现搜索裙子找不到啊,于是,\u003Cb\u003E面壁人\u003C\u002Fb\u003E把商品的名字改成了\u003Cem\u003E\u003Cu\u003EZARA红色裙子,连衣裙,长裙,短裙,超短裙,绣花裙\u003C\u002Fu\u003E\u003C\u002Fem\u003E,这一下不管是搜索\u003Cem\u003E裙子,连衣裙,长裙,短裙,超短裙,绣花裙\u003C\u002Fem\u003E都能搜到这个商品了,曝光机会一下大大提高了,\u003Cb\u003E面壁人\u003C\u002Fb\u003E觉得很爽,本来一天才1,2单,现在每天有6,7单了,这只是改了一下标题。\u003C\u002Fp\u003E\u003Cp\u003E到这一步,\u003Cb\u003E智子\u003C\u002Fb\u003E刀已经拿手上了,但还是忍着了,毕竟\u003Cb\u003E面壁人\u003C\u002Fb\u003E还不是特别离谱,至少标题描述的和实际商品差别不是那么大。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E尝到了甜头,但还是不满足,\u003Cb\u003E面壁人\u003C\u002Fb\u003E发现热门搜索词里面有个H&M裙子,每天搜索量巨大,但是没我的商品啊,这还了得,改标题,改成\u003Cem\u003E\u003Cu\u003EZARA,H&M,Mango,红色裙子,连衣裙,长裙,短裙,超短裙,绣花裙\u003C\u002Fu\u003E\u003C\u002Fem\u003E,呵呵,流量更多了,一天有个10来单了。\u003C\u002Fp\u003E\u003Cp\u003E到这一步,\u003Cb\u003E智子\u003C\u002Fb\u003E刀已经举起来了......\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E一看,我去,改个标题威力这么大,好,打开搜索排行榜,把前100名的搜索词挨个撸了一遍,标题变成了\u003Cem\u003E\u003Cu\u003EZARA,H&M,Mango,NIKE,ADIDAS,红色,绿色,黄色,紫色,裙子,连衣裙,长裙,短裙,超短裙,绣花裙,裤子,鞋子\u003C\u002Fu\u003E\u003C\u002Fem\u003E,呵呵,么么哒,销量准备翻翻了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E刀落......\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:我X,你没说不能改标题啊!!!\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E一想也是,于是说:我们订个规则吧,我们都退一步,我去改我的程序,保证近义词,同义词都能找到你的商品,这样你就算是连衣裙,搜裙子也能找到你的商品,怎么样,大哥够意思了吧?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:恩,够,够意思,够意思。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:你呢,也老实点,以后商品标题不能超过10个字,不能出现两个以上的物品词,不能出现两个以上的品牌词,颜色,品牌这种词我另外给你个地方写,你别写标题里面了,以后你每改一个标题,我就这么检查一遍,如果你违反规则了,那么就只能咔擦了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:..........\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:并且我还告诉你,我后面有大哥哦,我大哥和你一样是人类,他会不定期抽查你的商品描述哦,要是他觉得不符合要求,直接干掉你哦。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E心想:哼哼,抽查哦,这么多商品,你哪抽查得过来,我改了只要你大哥没看到就没事,嘿嘿。。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E有一天发现好像关键词次数出现得越多,好像排的越靠前啊,他只说不能出现两种物品词,没说不能出现多次啊,我改成\u003Cem\u003E\u003Cu\u003EZARA红色连衣裙连衣裙连衣裙连衣裙连衣裙\u003C\u002Fu\u003E\u003C\u002Fem\u003E,嘿嘿,也排前面啊,爽。\u003C\u002Fp\u003E\u003Cp\u003E终于有一天被\u003Cb\u003E智子\u003C\u002Fb\u003E的大哥抽查到了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:我X,真背,不过没事,这次被查了,后面应该不会查我了,接着改。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:我告诉你,你心里那小九九别以为我不知道,我现在能力变强了,我大哥抽查的时候我在后面看着,我会学习的哦,我大哥每干掉一个人,那个规则我就学会了,我就会用到你的商品身上哦。你注意点哦!\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:呃。。。。。。。\u003C\u002Fp\u003E\u003Cp\u003E就这样,\u003Cb\u003E面壁人\u003C\u002Fb\u003E不停发现关键字上的新作弊规则,而\u003Cb\u003E智子\u003C\u002Fb\u003E不断强化自己的识别规则,两边都累得够呛,终于有一天,出现了下面的对话。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:嘿,每天和你这么斗真累,你现在也做大了,我们商量个事呗。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:唉,是累,死了好多脑细胞想个规则出来,一旦被发现了又要重新想,烦死了。你说商量,商量啥啊?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:我有个兄弟,他叫光糕喜通,你去找他,你可以去他那里买关键字,你想什么关键词都行,一个一块钱,有人搜这个关键字的时候,不管你啥商品,右边最上面的位置给你,怎么样,那可以排名第一的位置啊。\u003C\u002Fp\u003E\u003Cp\u003E面壁人:嘿,还有这事,好啊好啊,一块钱,便宜!!没问题!!\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E\u003Cu\u003E于是,\u003Cb\u003E智子\u003C\u002Fb\u003E和面壁人第一次握手言和......\u003Cb\u003E智子\u003C\u002Fb\u003E轻松了不少,面壁人每天花点钱就有了相应的流量,订单也不错,抬头一看日历,恩,明年就是北京奥运会了,备点货,多和光糕喜通君交流交流,明年多卖点吧。\u003C\u002Fu\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Ch2\u003E规则时代\u003C\u002Fh2\u003E\u003Cblockquote\u003E\u003Cp\u003E\u003Cu\u003E规则时代,大家的线上购物习惯已经慢慢被培养起来了,线上的商品也越来越多了,线上的交易金额也越来越大了,总之,是电商的爆发时代了,网上购物已经成为一种常态,作为商家,竞争已经越来越激烈了,不靠点小手段很难获取到流量了,于是作弊开始成规模的爆发了,但这个时代作弊还基本上是单兵作战,还没有集团化。\u003C\u002Fu\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E虽然有广告系统帮忙,但是广告系统可不是我一个人用,大家都在用,竞价越来越高,之前只要一块钱就能排第一个,现在10块钱都排不了第一啊。而且人们越来越聪明了,知道右边的是广告,都不怎么点,怎么办呢?\u003Cb\u003E面壁人\u003C\u002Fb\u003E每天愁得满头大汗。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E到底脑子活,哼哼,商品标题上我做不了文章,那我做做排序的文章总可以吧?他发现,这个商品要是点击次数多,排序上也占便宜啊,于是没事就拼命点啊点,呵呵,还真有点效果,排序真的越来越好了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E也没闲着,出了一条规定:同一个关键词的同一个IP地址的点击,每天最多算3次,同一个商品的点击,每天最多算20次,其他的点击都不算,看你怎么玩,跟姐斗,还嫩点呢。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:我X,真够狠啊!\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E到底是\u003Cb\u003E面壁人\u003C\u002Fb\u003E,点击不行,我直接买总可以吧?于是,\u003Cb\u003E面壁人\u003C\u002Fb\u003E每上一件商品,就自己注册个号来买,而且一买就买100件,销量瞬间就上去了,关键词的排名蹭蹭往上涨啊,没多久就排到第一名了,这时候,自然流量哗哗进来,真正的销量自然上去了,好开心啊。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E一看形势不对啊,于是,紧急出了一条新规则,凡是单个订单商品数量超过1个的,就按1个处理,也就是说不管你一个订单买了多少件商品,姐都只算你买了一个。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E想,哼,小意思,我多注册几个号,反正注册号也不要钱,搞他几百个号,轮着买,反正也不用真寄出去东西,随便秒杀\u003Cb\u003E智子\u003C\u002Fb\u003E啊,你不就关注订单么,我订单多啊。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:新规则:同一IP地址买订单太多了,加入黑名单,这个IP的购买行为都不记入排序中\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:我靠!!跟我斗!看来单兵作战不行了啊,只能发动群众了啊,于是找来他的亲戚朋友,有需要就找亲戚朋友们帮着下单,这下总不能靠单个订单和IP地址干掉我了吧?而且\u003Cb\u003E面壁人\u003C\u002Fb\u003E们联合起来了,我帮你刷,你也帮我刷,反正不用真正寄东西出去,只要下了单就行了,让我们联合起来,玩死\u003Cb\u003E智子\u003C\u002Fb\u003E吧。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:小样,跟我玩,姐要出大杀器了!新规则:订单必须真寄东西,订单号要来我这备案哦,不然算无效订单,而且这种无效订单多的帐号,一旦进入黑名单,以后这种账户下的订单全部不计入排序中。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:吐血。。。。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:姐再给你补一刀,你商品的评论也很重要哦,你刷得再靠前,但是你质量不好,有些个差评啥的,直接影响你的店铺分数哦,店铺分数低,排序受影响哦,你得保证商品质量哦,而且还得好好伺候你的顾客哦。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:吐血的平方。。。。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:姐还有很多规则哦,你听着哦,巴拉巴拉巴拉......\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E:吐血的立方。。。\u003C\u002Fp\u003E\u003Cp\u003E正当\u003Cb\u003E面壁人\u003C\u002Fb\u003E被吊打得皮肉开裂的时候,有个叫\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E的找到了\u003Cb\u003E面壁人\u003C\u002Fb\u003E,跟他说:来,我帮你刷,我是专业的,我们公司的员工遍布全国各地(的网吧中),IP地址分散,\u003Cb\u003E智子\u003C\u002Fb\u003E没辙,而且我们是真实的人在那边帮你操作哦,真实的帐号哦,可以下真实的订单哦,你不用真寄东西,我们提供真实的快递单号,\u003Cb\u003E智子\u003C\u002Fb\u003E查不出来,怎么样?给我个商品,两天,包你上搜索第一页,价格嘛?只要998!!!现在搞活动,只要668,保证上第一页,你想啊,上了第一页,668不瞬间挣出来了啊?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E面壁人\u003C\u002Fb\u003E一想,也是啊,上了第一页还怕没销量,反正没上还能退款,just do it!!\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E在这个时代快结束的时候,职业\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E登上了舞台,他们专业,他们深知中国互联网的规则:那就是没规则,他们也深知中国的国情:那就是人多,闲人更多,网吧的闲人那是多得不能再多了,在打游戏的间隙,接个任务,到各大电商平台下几单,一包烟钱就到手了,why not?这一年的年底,\u003Cb\u003E面壁人\u003C\u002Fb\u003E带着女朋友看了个电影,电影说的是关于一张价值连城的船票的故事。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Ch2\u003E智能时代\u003C\u002Fh2\u003E\u003Cblockquote\u003E\u003Cp\u003E智能时代,网上购物已经是常态了,连老婆都能在网上买到了,作为商家,到了如果不花钱基本上已经得不到流量的时代了,新开个店,不砸些钱,一个单都接不到,而作为平台方,已经到了如果不遏制作弊,将会严重影响用户体验的程度了。这个时代的作弊,已经完全产业化了,因为只凭个人能力,不可能和平台对峙了,于是出现了各种各样的作弊工作室。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E上个时代中,最后以\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E的登场结束了,而且\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E简直所向披靡,只要给钱,没有刷不了的单,你再牛逼,订出了无数的规则,但总没有人牛逼吧,我这可是真正的人在下单哦。\u003C\u002Fp\u003E\u003Cp\u003E正当\u003Cb\u003E耍蛋师\u003C\u002Fb\u003Ehappy得不行的时候,有一天,突然发现几乎所有的账户好像都不起作用了。怎么刷都不好使了,怎么回事??\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:我进化了,哼哼,沉寂了这么久,我get到了新技能,这些年我默默无闻的,其实我是在闭关修炼,为了能和你对抗,我已经挥刀自宫把之前的武功全部砍掉了,如今我已炼成葵花宝典,就等着和你较量了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:什么鬼?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:我用葵花宝典这门绝学分析了这么多年的用户行为数据,我已经知道了哪些订单是真订单,哪些订单是假订单,虽然有时候会搞错,但是准确率还是相当高的哦,最关键的是,我已经不用什么规则了,你找个人下个订单试试,我基本能预测出这个订单是真的还是假的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:卧槽!这么厉害,真人都不行?我是真下单啊,我是真快递单号啊,我是全国各地订单啊。。。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:那又如何,你这次交易行为就不像个正常交易。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:哪不像了?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:店家是新店家,刚开店才4,5天,哥们,你上来就直接打开这个商品的链接,点加入购物车,结算,付款,整个过程5秒钟,大哥,这是1万块的苹果笔记本啊,你连和店家打个招呼都不打,直接下单,你是真土豪呢?还是脑子进了水?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:我靠!!!变超级赛亚人了啊!!我再叫个经验丰富的小弟买个看看。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:呵呵,还是被我抓到了,这哥们倒不是直接打开链接了,是搜了个词再点进去买的,但是你看看你这小弟搜了个什么词,和商品标题长得一模一样,整个搜索结果就这一个商品,他是懒得翻页吧?这和直接打开商品链接有啥区别??后面的行为我都懒得看了...\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:卧槽,又阵亡一个,再上\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:恩?这哥们行为像真的,但是这个账户有问题哦,之前这个账户已经有多次交易被列为高危了,我觉得这像个作弊的账户啊,恩,不管了,宁可错杀一万,高危!干掉!这个帐号已经被列为超级高危账户了,以后他的交易都会被列为假交易。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:。。。。。再上!\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:这哥们正常搜索了,还翻了几页,然后点进去了,礼貌的和客服MM进行了深入的交谈,互相留了微信号,然后下了一单,3天后来了个好评,还晒了图,像真交易哦,但不好意思,还是要干掉,谁叫你和客服MM说话的?\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:不是你说的要聊天才真实吗??!!!\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:你不知道女人是善变的么???我通过统计发现啊,有一类交易叫静默交易,就是啥也不说,就直接下单了,而且这类交易在很多分类中比例还挺高的,你这商品就在这个类目下啊,不好意思,这次被静默掉了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:我顶你个肺啊!!!\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E智子\u003C\u002Fb\u003E:嘻嘻,我还有很多其他的方式判断哦,比如页面停留时间,如果是比较贵的商品,你是不是货比三家了。。。总之还有很多哦,哦,顺便告诉你,这葵花宝典啊,核心的心法是机器学习,后面还有深度学习,神经网络。。我们慢慢切磋呗。。。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E:看来我只能修炼我的内力了,尽量让交易显得真实才是王道啊。。。。你等着。。。\u003C\u002Fp\u003E\u003Cp\u003E就这样,\u003Cb\u003E智子\u003C\u002Fb\u003E和\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E就这么你来我往一直较量着,有时\u003Cb\u003E耍蛋师\u003C\u002Fb\u003E占了上风,有时\u003Cb\u003E智子\u003C\u002Fb\u003E占着上风,而且这场较量会一直持续下去。。。\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E而我们,正处在这个时代中,下个时代什么时候来临,我也不知道。。。\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Ch2\u003E后记\u003C\u002Fh2\u003E\u003Cp\u003E作弊和反作弊是一个永远不会结束的话题,作为一个技术人员,能做的其实比较有限,就像高考作弊一样,技术上只能提供监控录像,手机信号屏蔽器这种东西,但这两个东西真的只能抵挡低端的作弊行为,就像上面提到的\u003Cb\u003E智子\u003C\u002Fb\u003E,能做的也很有限,而人的想象是无限的,特别是在有高利润驱动的时候,想象力更是无限,所以想光靠技术来阻住搜索排序的作弊,其实是很难的,抱歉,关于人的无限想象力有多么的黑暗,不能再说了(其实我也不知道)。\u003C\u002Fp\u003E\u003Cp\u003E本篇文章只是很浅的说了一下搜索排序中几个常见的作弊和反作弊的场景,真实的反作弊就是在雄兔脚扑朔,雌兔眼迷离,双兔傍地走 安能辨我是雌雄这种扑朔迷离的场景下辨出真正的雌雄来。难度可想而知了。\u003C\u002Fp\u003E\u003Cp\u003E最后,本篇所有内容都是个人臆想,请勿对号入座。\u003C\u002Fp\u003E\u003Cp\u003E欢迎关注我的公众号,主要聊聊搜索,推荐,广告技术,还有瞎扯。。文章会在这里首先发出来:)微信号XJJ267或者搜索西加加语言就行\u003C\u002Fp\u003E\u003Cimg src=\&7f38d454caadbce851ab6.jpg\& data-rawwidth=\&258\& data-rawheight=\&258\&\u003E&,&updated&:new Date(&T01:46:13.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&likeCount&:5,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T09:46:13+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002Fc77ba_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:0,&likesCount&:5},&&:{&title&:&搞机器学习要哪些技能&,&author&:&wu-yh-jian&,&content&:&\u003Ch1\u003E今天文章比较轻松,不涉及技术,前天抢了两张张学友的演唱会门票,很开森~~~在SF这充满90后的地盘暴露年龄了。。。\u003Cbr\u003E\u003C\u002Fh1\u003E\u003Ch2\u003E前言\u003C\u002Fh2\u003E\u003Cp\u003E本来这篇标题我想的是算法工程师的技能,但是我觉得要是加上机器学习在标题上,估计点的人会多一点,所以标题成这样了,呵呵,而且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点。不过放心,文章没有偏题,我们来说正经的。今天就说说机器学习这个最近两年计算机领域最火的话题,这不是一篇机器学习的技术文章,只是告诉大家机器学习里面的坑实在是太多,而且很多还没入门或者刚刚入门的朋友们,其实在你们前面是个大坑,如果你励志要在这条路上走下去的话,请做好心理准备。\u003C\u002Fp\u003E\u003Ch2\u003E我们学习机器学习的目的\u003C\u002Fh2\u003E\u003Cp\u003E实话实说,目前大部分人上各种班来学习机器学习,学习大数据,归根到底还是希望能找到一个好的工作,拿到更高的薪水,当然还有一部分原因是自己对这一方面比较感兴趣,希望更深入的了解这个领域。我个人觉得,第一个原因的因素更大。\u003C\u002Fp\u003E\u003Ch2\u003E我们在谈机器学习的时候在谈什么\u003C\u002Fh2\u003E\u003Cp\u003E首先,我们看看一个机器学习的系统长成什么样子\u003C\u002Fp\u003E\u003Cimg src=\&7cca529e28b5ffbdc33ffc.png\& data-rawwidth=\&517\& data-rawheight=\&421\&\u003E\u003Cbr\u003E\u003Cp\u003E几乎所有的机器学习系统都是由上述系统图组成,不同的是监督型的系统训练数据可能需要人工干预而非监督型的系统不需要人工干预,简单来说就是给一批训练数据给这个机器学习模型进行\u003Cstrong\u003E学习\u003C\u002Fstrong\u003E,得到一个\u003Cstrong\u003E预测模型\u003C\u002Fstrong\u003E,然后用这个预测模型对新的未知数据进行预测。现在网络上机器学习方面的文章,博客到处都是,市面上各种各样的书籍也到处都是,而且目前在线教育最火的领域也是这个,各种各样的机器学习的在线教育的班,学费还挺贵。但是你发现没有,所有这些谈论的机器学习都是在谈论模型,什么《深入理解XXX模型》,《可能是最好的理解XXX的文章》,《机器学习并不难,XXXX模型详解》之类的文章和书遍地开花。各种介绍逻辑回归,深度学习,神经网络,SVM支持向量机,BP神经网络,卷积神经网络.....等等等等。所以,我们在谈论机器学习的时候,实际上是在谈论机器学习的模型,也就是各种机器学习算法。而且大家都认为只要学会了模型和算法的理论,那就是机器学习的专家了。我相信大多数人都是这么认为的。\u003C\u002Fp\u003E\u003Ch2\u003E小明成了机器学习\&专家\&\u003C\u002Fh2\u003E\u003Cp\u003E有个小朋友,是搞计算机的,叫小明,看了alphago虐李世石的视频,虽然他完全不懂围棋,但是他还是被震撼到了,决心要好好学习一下这个传说中的机器学习。于是到处在网上找教程,找博客文章,找书籍,好好的学了半年,终于觉得自己入门了。每个机器学习的模型算法都能说出个所以然来了。\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E不知道大家有多少在这个阶段?\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E但小明还想更进一步,于是开始研究各种模型的代码和工具了,hadoop和spark那是标配了,又是各种找文章,各种找书,各种在线学习班,还好这些东西一大把一大把的,特别现在的在线学习班,要是没有大数据处理班,没有hadoop班,那就别开了。一路下来,大半年又过去了,终于小明觉得自己学会了,理论也有了,大数据处理工具也会了,简直无敌了!\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E又有多少人在这个阶段?并以为自己已经会机器学习了。到这个阶段,如果你学得好,那么你已经可以去开个学习班教别人机器学习了。但如果你以为这样就可以去找个公司做算法工程师了,那么告诉你,\u003Cstrong\u003E图样图森破,乃义五!\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E小明因为有较强的理论知识,能推导所有公式,又会hadoop,spark,再加上自己的表达能力强,很容易的秒了几个面试官进了一个大公司,是在一个电商做搜索的算法工程师,月薪很高,终于可以一展拳脚了,老板交给他一个任务,用你那牛逼的知识把搜索的点击率给我提升一个百分点吧。如果你是小明,如果你刚从某个机器学习的学习班下来,你怎么弄?你是不是傻了?\u003C\u002Fp\u003E\u003Ch2\u003E机器学习不仅仅是模型\u003C\u002Fh2\u003E\u003Cp\u003E产生这个问题的原因就是所有人都以为机器学习的模型就是机器学习本身,以为对那些个算法理解了就是机器学习的大牛了,但实际上完全不是这样的。模型是谁在玩呢?模型是\u003Cstrong\u003E科学家\u003C\u002Fstrong\u003E发明出来的, 是各个大公司的各个\u003Cstrong\u003E科学家\u003C\u002Fstrong\u003E,\u003Cstrong\u003E研究员\u003C\u002Fstrong\u003E发明出来的,这个发明出来是会出论文的,是他们用来虐我们的智商的,一般情况下,你发明不了模型吧\u003Cstrong\u003E(如果可以,可以不要往下看了,你可以走学术那条路)\u003C\u002Fstrong\u003E?你修改不了模型吧?所以说,学会了模型,只是刚刚刚刚入门,甚至还算不上入门吧那各个公司的那么多算法工程师在干嘛呢?我们以一个搜索排序的算法工程师为例,他们在做甚呢?\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cp\u003E\u003Cstrong\u003E观察数据---&找特征---&设计算法---&算法验证---&洗数据---&工程化---&上线看效果---&goto 观察数据\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E而且一个成熟的系统中,一般模型已经大概确定了,如果效果不是特别不好不会换模型,比如一个公司的搜索排序系统用了机器学习的逻辑回归模型,你要改成别的模型一般不太可能,那么只能做一些特征上的补充。好,我们通过这个流程来看看一个机器学习的算法工程师到底还要什么能力。\u003C\u002Fp\u003E\u003Ch3\u003E观察数据\u003C\u002Fh3\u003E\u003Cp\u003E小明每天就在工位上看数据,查数据,看表格,画曲线,发现像\u003Cstrong\u003E销量\u003C\u002Fstrong\u003E,\u003Cstrong\u003E收藏\u003C\u002Fstrong\u003E,\u003Cstrong\u003E点击\u003C\u002Fstrong\u003E等等这种能想到的特征早就被用了,就这么耗了三个月,没有任何进展,人都崩溃了,来了这么久,机器学习代码毛都没看到呢。第四个月,他发现一点问题,他发现有些商品,评论什么的都挺好,感觉产品质量也不错,但就是销量上不去,所以老排后面,于是,他把这些评论都是五星,但是销量比较差的商品滤出来了,想看看他们有什么共性。观察数据阶段,你说要什么能力?呵呵,只能告诉你,需要数据敏感性,其实也就是告诉你需要全面的能力,需要经验,需要产品经理的能力。除了这些,你还需要能随手编脚本代码的能力,遇到有些数据需要初步处理,可能需要随手编代码处理,而且编的要快,因为这些代码可能就用一两次就不用了,所以需要比较强大的脚本语言能力,那么python至少要熟悉吧,shell要会吧。\u003C\u002Fp\u003E\u003Ch3\u003E找特征\u003C\u002Fh3\u003E\u003Cp\u003E数据观察下来发现了问题,现在要找特征了,要找特征,也就是找什么因素导致销量上不去的,首先,需要想象力,然后去验证你的想象力。小明的想象力爆棚,即便这样,也搞了一个月才发现这些个商品有个共同特征,那就是图片都比较烂,让人一看就不想点。卧槽,要是能把图片质量加入到排序因素里面的话,是不是有奇效呢?图片质量作为特征,这之前可没人做过,终于找到一个特征了。所以在这一阶段,毕竟大家的想象力都是有限的,更多的是经验值,才能找到符合当前场景的特征。\u003C\u002Fp\u003E\u003Ch3\u003E设计算法\u003C\u002Fh3\u003E\u003Cp\u003E特征是找到了,但怎么把这个特征加到排序模型里面去呢?图片好不好,有多好,这些机器怎么理解呢?如果不能把图片质量变成一个数学上的向量,那永远都无法加入到排序模型里面去。这一阶段是真正考验算法工程师的地方了,那就是将特征\u003Cstrong\u003E向量化\u003C\u002Fstrong\u003E,小明观察到\u003Cstrong\u003E越好看的图像往往颜色变化更多,而质量差的图片往往颜色没什么变化\u003C\u002Fstrong\u003E,于是他想到一种办法,\u003Cstrong\u003E先把图像数据进行傅里叶变换,变成频域的数据,根据傅里叶变换的性质,高频部分的幅度高表示图像的颜色变化很明显,如果低频部分高,表示颜色变化不明显\u003C\u002Fstrong\u003E,这和观察到的图像信息基本能匹配上,这样一副图像的好坏,就可以用傅里叶变换后高频部分的幅度表示了,然后在做一些归一化的变化,就把图像向量化了,向量化以后就可以加入到排序模型去了。这一步,你可能会用到你学习的机器学习模型,但肯定只占了一小部分,大部分情况需要你根据当前场景\u003Cstrong\u003E自己建立一个数学模型\u003C\u002Fstrong\u003E,而不是机器学习模型,你说这一阶段需要什么技能?虽然我这里举的例子比较极端,但是数学抽象能力,数学建模能力和数学工具的熟练使用是必不可少的,并且同样需要较强的编程能力,这已不是上一步的脚本能力,是实打实的计算机算法编程能力了。\u003C\u002Fp\u003E\u003Ch3\u003E算法验证\u003C\u002Fh3\u003E\u003Cp\u003E算法是设计好了,还要设计一个算法的离线验证方法来证明给你的老大看说我的算法是有效果的,不然哪那么多机会让你到线上去试啊,这一步也是各种综合能力的组合,关键是在这一步上,\u003Cstrong\u003E你要用一种通俗的语言从理论上说服你的老大\u003C\u002Fstrong\u003E,这是一种什么能力?强大的语言表达能力。除了这个你还需要设计出一个上线以后的AB测试方案,能够很好的测试出你的算法是否真的有效。\u003C\u002Fp\u003E\u003Ch3\u003E洗数据\u003C\u002Fh3\u003E\u003Cp\u003E特征找到了,算法也设计得差不多能体现特征了,体力活来了,那就是洗数据,这是算法工程师的必修课,数据不是你想要什么样子他就长得什么样子的,所以要把数据变成你想要的样子,然后去掉无效的数据可是个体力活。像上面这个例子,首先可能大家的图片大小都不一样,要变成一个尺寸才好进行变换,有些商品有多个图片,可能需要找出质量最好的再处理等等等等。这一阶段首先也是要\u003Cstrong\u003E脚本语言处理能力\u003C\u002Fstrong\u003E,而且还需要掌握一些数据处理工具的使用,关键还要有足够的耐性和信心,当然,必不可少的是优秀的编程能力。\u003C\u002Fp\u003E\u003Ch3\u003E工程化\u003C\u002Fh3\u003E\u003Cp\u003E好了,前面的坑你全跨过来了,到了这一步了,呵呵,算法设计完了,数据也准备好了,估计半年过去了,那赶快放到线上去吧,你以为拿着一堆脚本就能上线了啊,得考虑工程化了,如果把你的算法嵌入到原有系统中,如果保证你的算法的效率,别一跑跑一天,代码的健壮性也要考虑啊,如果是在线算法,还得考虑性能,别把内存干没了。这一步,你才真正的用上了你上面学的机器学习的hadoop,spark工具,看了上面说的,要完成工程化这一步,得有什么能力不用我说了吧,这是一个标准的软件开发工程师的必要技能,还是高级开发工程师哦。\u003C\u002Fp\u003E\u003Ch3\u003E上线看效果\u003C\u002Fh3\u003E\u003Cp\u003E所有的都做完了,前前后后10个月了,终于可以上线了,好了,真正的考验来了,看看上线的效果呗,产品经理说,做个AB测试吧,结果呵呵了,点击率降低了,小明啊!这10个月忙活下来点击率还下降了???老板还不把你骂死,所以,你必须有强大的抗打击能力。呵呵,赶快下线吧,从头看看哪里出了问题,又花了一个月修改了算法,重新上线,恩,这次不错,点击率提高了0.2个百分点,继续努力吧,看看还有没有什么可以挖掘的,于是,你就goto到了看数据的那一步。别看这0.2,大的数据集合下,提高0.2已经是非常不错的提高了,所以花这么多钱,养算法工程师,要是一年能出几次0.2,那就是真值了。\u003C\u002Fp\u003E\u003Ch2\u003E让我们总结一下\u003C\u002Fh2\u003E\u003Cp\u003E上面这么多的过程,靠一个人全部完成确实有点困难,我说的有点夸张,中间有些步骤是有人配合的,\u003Cstrong\u003E观察数据的时候有产品经理配合你,洗数据的时候有数据工程师配合你,工程化的时候有系统工程师配合你\u003C\u002Fstrong\u003E,但是作为机器学习的算法工程师,整个过程你都得能hold得住啊,所以即便是你一个人应该也要能完成整个流程才行。这只是一个标准的算法工程师应该具备的能力,当然我这里是以搜索算法举例的,其他的算法工程师也差不太多,总跑不过上面几个过程,当然,你要是牛人,能根据场景修改这个机器学习的模型,甚至自己能想个模型,那就更厉害了。好,我们把上面的重点标记的部分取出来汇总一下,让我们看看一个算法工程师需要具备哪些技能\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E数据敏感性,观察力\u003C\u002Fli\u003E\u003Cli\u003E数学抽象能力,数学建模能力和数学工具的熟练使用的能力\u003C\u002Fli\u003E\u003Cli\u003E能随手编脚本代码的能力,强大的计算机算法编程能力,高级开发工程师的素质\u003C\u002Fli\u003E\u003Cli\u003E想象力,耐性和信心,较强的语言表达能力,抗打击能力\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E然后,还有很关键的一点,你需要很聪明,当然,你如果能做到以上那么几点,基本上也会很聪明了,如果真能做到这样,反而那些机器学习的模型,理论和工具就显得不那么重要了,因为那些也只是知识和工具,随时都可以学嘛。你说,这些是靠看几篇博客,看几本书,上几次课就能具备的么??当然,我们这里讨论的是一般情况,如果你一心就是做研究的话,那么需要把上述技能熟练度再提高一个量级。学习机器学习,励志做算法工程师的你,准备好踏这些坑了么??\u003C\u002Fp\u003E\u003Cp\u003E欢迎关注我的公众号,主要聊聊搜索,推荐,广告技术,还有瞎扯。。文章会在这里首先发出来:)扫描或者搜索微信号\u003Cstrong\u003EXJJ267\u003C\u002Fstrong\u003E或者搜索\u003Cstrong\u003E西加加语言\u003C\u002Fstrong\u003E就行\u003C\u002Fp\u003E\u003Cimg src=\&7f38d454caadbce851ab6.jpg\& data-rawwidth=\&258\& data-rawheight=\&258\&\u003E&,&updated&:new Date(&T09:25:08.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&likeCount&:8,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T17:25:08+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic4.zhimg.com\u002Fe8ea7ce674f1f45c2f84ad4_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:0,&likesCount&:8},&&:{&title&:&推荐系统技术文本相似性计算(二)&,&author&:&wu-yh-jian&,&content&:&\u003Cp\u003E上一篇中我们的小明已经中学毕业了,今天这一篇继续文本相似性的计算。\u003Cbr\u003E首先前一篇不能解决的问题是因为我们只是机械的计算了词的向量,并没有任何上下文的关系,所以思想还停留在机器层面,还没有到更高的层次上来,正因为这样才有了自然语言处理这门课程了。\u003C\u002Fp\u003E\u003Cp\u003E今天我们

我要回帖

更多关于 箭头符号怎么打出来 的文章

 

随机推荐