关于搜索:coderecycle-可能是目前支持语言最多的语法查询

code-recycle: 可能是目前反对语言最多的语法查问400+种的语法解析like/selector两种查问模式链式查问;多层级解决依据拓展名主动确定文件语言一般查问依据文本进行查问;通过正则表达式查问尽管下面两种查问形式在大多数状况下通用性十分强,然而在一些特定状况下就顾此失彼了比方,查问上面代码中 A 类蕴含的 count 的类型 class A{ value:string count:number}语法查问 - code recycle你能够间接应用 like 查问模式 class A{ [[{]] count: [[$var]] [[}]] },将会间接匹配到 count 的类型并保留到var变量中供应用或者应用 selector 模式 ClassDeclaration:has(>Identifier[value=A]) PropertyDeclaration:has(>[value=count])>NumberKeyword:infer(var) 同样会保留到var变量中like查问模式like 模式在大多数状况下都与一般文本一样,只不过能够忽视格式化带来的影响,let a=6与let a = 6在like模式下会被解析为一种语法树,所以不必放心匹配的内容会被格局影响selector 查问模式应用 css选择器抉择节点,确定上下文关系查问 selector外部能够通过:like(xx)调用like模式残缺的查问上下文不止是进行一次查问,code recycle目前能够一次进行多种不同文件查问,每一次查问后果能够作为下一次查问的范畴,调用曾经查问到的后果,进行 新增/批改/删除[ { name: 'file1', path: './def1.ts', list: [ { query: `LetKeyword`, callback: (context) => { context.data = context.getNodeValue() }, }, { query: `let a=[[$var]]`, replace:{var:'7'},mode:'like' } ] }, { path: './def2.ts', list: [ { query: `Identifier`, callback: async (context) => { return util.setChange.contextNode(context, context.getContext('root.file1.0').data) }, } ] }]如何应用?code-recycle目前同时反对cli与VSCode extension你能够参考疾速开始-cli你能够拉取演示仓库疾速上手git clone https://github.com/wszgrcy/code-recycle-plugin-script.git

February 23, 2024 · 1 min · jiezi

关于搜索:百度垂类离线计算系统发展历程

作者 | 弘远君 导读  本文以百度垂类离线计算零碎的演进方向为主线,详细描述搜寻垂类离线计算零碎倒退过程中遇到的问题,以及对应的解决方案。架构演进过程中始终奉行“没有最好的架构,只有最合适的架构”的主旨,面对不同阶段遇到的问题,给出了适宜的解决方案。尤其是近10年来的超大规模零碎架构的降级, 一方面须要思考零碎自身的通用性和适配性,以满足多个业务方的需要;另一方面须要联合零碎以后运行的特点,在易用性、稳定性、智能化等不同方面进行晋升。心愿读者能在理解零碎演进的过程中取得一些启发。 全文9127字,预计浏览工夫23分钟。 01 相干背景介绍在过来,用户通过“百度一下”失去的搜寻后果是从互联网上抓取来的后果,也被称为“天然后果”。随着网络信息日益丰盛,天然后果不能无效满足用户需要。为了解决天然后果无奈满足搜寻需要的问题,提出了针对各个垂类深耕的搜寻后果的解决方案,一方面为用户带来的更优质的内容,让用户体验即搜即得的便捷,另一方面也能够帮忙优质内容生产者晋升访问量。 随着业务倒退,除了规范通用的业务解决需要变更之外,越来越多的业务有自定义代码的更新需要。通过自定义数据处理,一方面,产品负责同学能够将原始传入的数据依照业务需要进行定制化解决,将原始数据转化为最终搜寻的后果数据。 另一方面,通用默认的一些性能机制限度了大量垂类的倒退,业务心愿引入更多的策略 模型逻辑 信号等解决以及打分机制,晋升排序召回的成果。 在这样的背景下,业务对于数据加工计算的框架引擎的需要越来越强烈,并且性能也逐步成为整个垂搜离线处理过程中不可或缺的一部分。 02 计算零碎演进过程百度搜寻零碎离线数据处理从工夫线的倒退阶段来说一共经验如下几个阶段: a.原始离线解决零碎: 本阶段次要是实现业务加工入口从0到1的构建。整体上还没有造成齐备的框架体系并且开发成本较高,并且所有业务逻辑混在一个公共服务中,不同数据通过不同配置调用不同的策略逻辑。 b.业务离线解决架构: 本阶段初步造成一整套的业务服务解决框架,有对立的服务框架和开发阶段,实现了云原生和服务隔离的模式。 c.Serverless架构: 本阶段业务的接入效率上进一步提高,业务从治理服务面向转向治理业务加工函数,业务只需注册函数就能够疾速测试上线,同时反对容器实例的主动伸缩,使得在业务的应用效率失去的极大晋升的同时相应资源老本急剧压缩。 d.数据智能架构: 在原有服务部署的根底上同时实现了数据的治理,从函数治理进一步降级成为需要治理,实现多语言服务框架反对的根底上,老本进一步压缩&效率晋升。 03 计算系统核心设计外围思路&外围实现上面具体论述各个阶段的具体特点以及外围实现。 3.1 原始离线解决零碎这套架构利用于2018以前,过后垂类的倒退整体属于起步阶段。该阶段业务次要的需要就是能够将原始的业务数据间接上线。架构的次要精力聚焦于通用业务能力的建设。随着业务的逐渐深耕,发现有大量的业务缓缓演变进去自定义加工的需要。 依据过后的业务需要,最终从原有的数据加工模块中衍生出业务数据加工零碎。以后阶段的数据加工解决形式是应用对立Handler解决形式,当然这个解决并非是必选项,少数业务依然不须要自定义加工解决。各业务之间也齐全没有 数据 隔离,这种架构最外围的意义就是从无到有提供业务的自定义加工能力。如下图所示,此时计算零碎只蕴含计算引擎局部,其余零碎齐全没有建设。上面会对该零碎的局部细节进行具体阐明。 3.1.1 业务特点这个期间的业务特点次要有两个: 少数业务,外围诉求最次要的是通用能力的建设。个别业务,有大量简略的自定义加工解决的需要。所以这个工夫点的外围次要是为了解决业务加工入口的问题。 3.1.2 外围设计初版本的离线架构模块非常简单,如下图所示蓝色局部。随着业务倒退,为了满足业务自定义加工的需要,引入红色数据通路,其中对立数据加工模块就是次要解决业务自定义加工逻辑。 如上图所示,灰色局部是业务外层接入的数据系统,最开始的时候只有XML、POST 和 数据队列的这种模式。蓝色局部就是业务没有自定义时候原始的数据框架代码。红色局部就是为了针对业务自定义需要引入的框架模块: 用户数据代理:次要是为了适配业务数据接入形式,数据的协定打平,次要是不同用户协定的RPC做建库层的数据转化。 用户通用需要:次要是为用户共性需要做对立解决,会依据不同业务的不同配置做性能解决:比方业务图片视频的转化解决,业务用户版本治理解决以及用户的外围机制等。 对立数据加工模块:次要是为了对立用户数据的加工解决,次要是给所有接入的业务的数据提供了一个能够数据加工的入口。 3.2 业务解决架构如上文所述3.1架构外围价值是自定义加工能力的从0到1的建设,然而随着业务的疾速倒退,越来越多的业务须要自定义加工能力。业务自定义加工的需要从原来个位数迅速收缩了10倍。因而,为了满足业务在自定义开发上易用性和稳定性的诉求,将原来3.1的中心化的解决模式降级成为服务框架的模式。总体上来说,以后阶段的计算零碎建设曾经根本具备了服务层和业务层两层: 业务层:业务通过平台曾经基本上能够实现,根底的服务治理。 服务层:对计算引擎进行重构,让新的服务框架反对业务的高效开发。 上面会对该零碎的局部细节进行具体阐明。 3.2.1 业务特点因为3.1中上一代零碎数十个业务自定义需要对立在同一个模块外面开发&对立线上运行,遇到了次要如下几方面问题: 效率:业务在雷同的模块外面开发,导致业务开发上线的过程中常常遇到抵触,以及上线排队的问题,导致整体失效周期比拟长。 稳定性:因为这种业务流量混合的模式隔离性比拟差,导致单个业务出问题,常常会影响所有的业务。 因而,架构构建出欠缺的服务框架,业务能够基于服务框架构建本人的业务代码,从效率和稳定性两个方面解决上述问题: 效率:服务开发上线的过程是齐全隔离的,业务在开发上线的过程中齐全没有业务阻塞,整体服务上线周期从天级缩短到小时级别。 稳定性:因为每个业务服务执行逻辑都有齐全独立的app,导致业务的稳定性大大晋升,不会存在业务之间的相互影响。 3.2.3 外围设计 业务解决框架:建设一个数据处理框架,业务能够基于这个框架来实现本人的业务解决性能。 工作平台:每个工作注册、降级、治理都能够通过工作平台来进行治理。 对立网关:所有数据的对立入口,对立接管上游数据,并且做数据的转发和散发。 业务APP:每个业务都有本人独立服务的app,每个业务开发是基于框架的独立分支开发,上线是每个业务独自上线,业务解决的服务流量也都是齐全隔离的。 3.3 Serverless架构如上文中3.2表述曾经解决零碎隔离性的问题,业务疾速倒退从最开始的几十个,倒退到上百个业务利用。当业务倒退到井喷状态后,服务框架的模式曾经齐全不能满足业务的开发需要。 Serverless架构如下图所示,此时计算零碎整体幅员曾经绝对欠缺,相比上一代计算架构,不仅仅业务层蕴含的全流程的优化,提供了残缺的工具性能;服务层充分考虑的架构的设计和复用,同时减少管制层减少智能调度的性能针对零碎流量进行资源的动静调度。 上面会对该零碎的局部细节进行具体阐明。 3.3.1 业务特点&解决问题业务学习老本:大量的新业务接入须要进行开发,导致框架自身学习老本须要几天的工夫,新业务的接入和开发的工夫基本上都在周级别。 ...

August 29, 2023 · 1 min · jiezi

关于搜索:基于Kafka和Elasticsearch构建实时站内搜索功能的实践

作者:京东物流 纪卓志目前咱们在构建一个多租户多产品类网站,为了让用户更好的找到他们所须要的产品,咱们须要构建站内搜索性能,并且它应该是实时更新的。本文将会探讨构建这一性能的外围基础设施,以及反对此搜寻能力的技术栈。 问题的定义与决策为了构建一个疾速、实时的搜索引擎,咱们必须做出某些设计决策。咱们应用 MySQL 作为主数据库存储,因而有以下抉择: 间接在 MySQL 数据库中查问用户在搜寻框中输出的每个关键词,就像%#{word1}%#{word2}%...这样。 应用一个高效的搜寻数据库,如 Elasticsearch。思考到咱们是一个多租户应用程序,同时被搜寻的实体可能须要大量的关联操作(如果咱们应用的是 MySQL 一类的关系型数据库),因为不同类型的产品有不同的数据结构,所以咱们还能够能须要同时遍历多个数据表来查问用户输出的关键词。所以咱们决定不应用间接在 MySQL 中查问关键词的计划。 因而,咱们必须决定一种高效、牢靠的形式,将数据实时地从 MySQL 迁徙到 Elasticsearch 中。接下来须要做出如下的决定: 应用 Worker 定期查问 MySQL 数据库,并将所有变动的数据发送到 Elasticsearch。在应用程序中应用 Elasticsearch 客户端,将数据同时写入到 MySQL 和 Elasticsearch 中。应用基于事件的流引擎,将 MySQL 数据库中的数据更改作为事件,发送到流解决服务器上,通过解决后将其转发到 Elasticsearch。选项 1 并不是实时的,所以能够间接排除,而且即便咱们缩短轮询距离,也会造成全表扫描给数据库造成查问压力。除了不是实时的之外,选项 1 无奈反对对数据的删除操作,如果对数据进行了删除,那么咱们须要额定的表记录之前存在过的数据,这样能力保障用户不会搜寻到曾经删除了的脏数据。对于其余两种抉择,不同的利用场景做出的决定可能会有所不同。在咱们的场景中,如果抉择选项 2,那么咱们能够预感一些问题:如过 Elasticsearch 建设网络连接并确认更新时速度很慢,那么这可能会升高咱们应用程序的速度;或者在写入 Elasticsearch 时产生了未知异样,咱们该如何对这一操作进行重试来保障数据完整性;不可否认开发团队中不是所有开发人员都能理解所有的性能,如果有开发人员在开发新的与产品无关的业务逻辑时没有引入 Elasticsearch 客户端,那么咱们将在 Elasticsearch 中更新这次数据的更改,无奈保障 MySQL 与 Elasticsearch 间的数据一致性。 接下来咱们该思考如何将 MySQL 数据库中的数据更改作为事件,发送到流解决服务器上。咱们能够在数据库变更后,在应用程序中应用音讯管道的客户端同步地将事件发送到音讯管道,然而这并没有解决下面提到的应用 Elasticsearch 客户端带来的问题,只不过是将危险从 Elasticsearch 转移到了音讯管道。最终咱们决定通过采集 MySQL Binlog,将 MySQL Binlog 作为事件发送到音讯管道中的形式来实现基于事件的流引擎。对于 binlog 的内容能够点击链接,在这里不再赘述。 服务简介 为了对外提供对立的搜寻接口,咱们首先须要定义用于搜寻的数据结构。对于大部分的搜寻零碎而言,对用户展现的搜寻后果通常包含为题目和内容,这部分内容咱们称之可搜寻内容(Searchable Content)。在多租户零碎中咱们还须要在搜寻后果中标示出该搜寻后果属于哪个租户,或用来过滤以后租户下可搜寻的内容,咱们还须要额定的信息来帮忙用户筛选本人想要搜寻的产品类别,咱们将这部分通用的但不用来进行搜寻的内容称为元数据(Metadata)。最初,在咱们展现搜寻后果时可能心愿依据不同类型的产品提供不同的展现成果,咱们须要在搜寻后果中返回这些个性化展现所须要的原始内容(Raw Content)。到此为止咱们能够定义出了存储到 Elasticsearch 中的通用数据结构: ...

March 20, 2023 · 3 min · jiezi

关于搜索:HHDESK文件内文本搜索功能

国产桌面软件HHDESK新开发了一个独有性能:搜寻 PDF、Word、文本文件中的内容,想必对于办公人员来说十分不便。1 如何应用递归搜寻性能下载HHDESK最新版本,在软件首页点击递归搜寻呈现如下对话框;在红框标识处填入须要搜寻的文本内容,点击搜寻即可。2 应用技巧1).点击“跳过设置”,会弹出如下对话框,您可依据需要批改默认跳过的文件格式。2).填写文件后缀,将大量节约搜寻工夫。

February 13, 2023 · 1 min · jiezi

关于搜索:Mac本地文件搜索软件Scherlokk汉化

Scherlokk for Mac是一款简略实用的文件搜寻软件。scherlokk mac能够精准的筛选出合乎搜寻条件的每个文件,除惯例的音乐,图片,书签外,还能够搜寻在任何品种的内置音量,便携式音量(Pendrives,存储卡,USB驱动器),网络驱动器(AFP,SMB,FTP)等。

August 9, 2022 · 1 min · jiezi

关于搜索:技术解读-智能开放搜索CTR预估模型

简介:本文介绍凋谢搜寻CTR预估模型在个性化排序中的利用与实际 如何评估搜寻排序成果?搜寻是用户触达信息最简略间接的形式,是APP、网页必备的性能。如何评估并晋升搜寻成果始终是搜寻畛域的常见问题。 一方面,能够基于用户体验判断搜寻成果,比方是否搜寻到指标内容、在多长时间后返回搜寻后果等。另一方面,也能够通过体系化的搜寻统计指标来评估成果。常见的搜寻统计指标蕴含CTR、CVR、搜寻疏导GMV等。 以CTR(Click-Through-Rate)即点击率为例,示意点击数/曝光数,在搜寻、举荐、广告畛域利用宽泛,用以掂量搜寻、举荐等返回后果的点击状况。更高的点击率通常意味着更精确的搜寻成果,因而,搜寻畛域从业者经常将CTR作为搜寻成果外围评估规范,也是企业长期重兵投入的继续优化指标。 近些年来,得益于深度学习(Deep Learning)带来的微小红利,用于CTR预估的深度模型百花盛开。CTR预估模型是针对每个用户的每个搜索词,预测搜寻文档潜在点击的模型。使用CTR预估模型,可能优化搜寻后果的排序,晋升搜寻成果和业务转化。 凋谢搜寻中的CTR预估模型智能凋谢搜寻(OpenSearch)基于机器学习和个性化预估算法技术,借助在电商、内容社区、教育等多个畛域的能力积攒,为客户提供的一站式智能搜寻开发平台,并且一直迭代优化,将最新业界和阿里翻新技术一直交融到该平台框架中。 1.简略易用:凋谢搜寻最新公测公布CTR预估模型,在上传用户曝光、点击等行为数据后,即可自动化训练专属CTR预估模型。模型训练实现后,能够通过cava脚本灵便调试排序规定,最大化施展模型成果,优化最终的搜寻后果排序。 2.凋谢搜寻的CTR预估模型反对定制,疾速适配一套Make For You的模型。 3.从行业颗粒度切入:不同行业会适配一套根底的行业模板,并反对定制,体系化行业级别特色建设。 实用场景实用于电商商品搜寻,内容社区资讯搜寻、多媒体视频搜寻等业务场景;对点击率、转化率(付费、点赞、珍藏等)、或播放时长等指标、搜寻成果有更高要求的客户,均能够应用CTR预估模型;如果想实现个性化的搜寻成果,但团队中又没有精通搜索算法的同学调试排序表达式,也能够尝试在凋谢搜寻中接入CTR预估模型。应用办法通过服务端数据采集,上传点击、曝光等用户行为数据在凋谢搜寻控制台创立CTR预估模型,并点击开启训练创立业务排序cava插件,援用训练实现的CTR预估模型,并在排序中应用该cava插件,查看排序成果更多应用详情请参考产品文档:https://help.aliyun.com/docum... 如需进一步技术领导,也可工单分割技术支持。 案例实际社区内容搜寻某技术社区作为中文IT内容社区,通过凋谢搜寻,为旗下产品的用户提供高质量的内容服务。同时搜寻能力的优化也能带来付费资源转化成果的晋升,减少整体业务收入。 接入CTR预估模型后成果: 比照基于开源自建的服务,CTR晋升80%+后续算法专家通过深度定制模型一直帮客户调优,每曝光用户带来点击次数晋升15%+,Item-CTR晋升10%+,成果还在继续晋升中电商搜寻国内某电商平台,主打保健品、家居用品、化妆品等自营产品,通过凋谢搜寻,在APP和小程序上提供内容资讯和商品购买等便捷服务。 接入CTR预估模型后成果: 电商业务搜寻CTR绝对晋升40%+,qv-GMV 绝对晋升50%+内容业务首页CTR绝对值10%+,无后果率绝对降落20%+原文链接本文为阿里云原创内容,未经容许不得转载。

May 31, 2022 · 1 min · jiezi

关于搜索:技术揭秘百度搜索中台低代码的探索与实践

导读:据Gartner调研,利用开发需要的市场增长至多超过IT交付能力的5倍,预计到2025年,70%的新利用开发将应用低代码技术。咱们须要在需要迭代越来越高频、创新能力要求越来越高的背景下,摸索如何通过技术手段为业务开发降本增效提质做出冲破,更高效的实现产品翻新。百度搜寻中台撑持多元业务场景,有丰盛的业务状态,对卓越效力有极致谋求。本文从搜寻中台业务研发者面临的艰难和挑战动手,剖析起因,探讨低代码的一些解决思路。 全文5988字,预计浏览工夫15分钟 一、对于低代码低代码是软件系统的疾速开发工具,开发者无需编码就能够实现常见的性能、大量代码即可实现性能扩大,从而实现便捷构建应用程序。随着企业数字化需要的快速增长,传统的软件开发形式的低下生产效率,成为制约企业数字化转型的主要矛盾,低代码失去疾速倒退。相比传统的软件开发模式和工具,低代码的开发门槛更低、研发效率更高;相比其余的疾速开发工具,低代码的扩展性更高,能够胜任简单场景下的外围开发诉求。研发效力也始终是各大互联网企业关注的焦点,随着近几年的摸索和倒退,市场上呈现了泛滥的低代码平台,低代码也受到了越来越多的关注。 目前业界低代码框架次要解决的是个别畛域的通用需要,能够低成本的拖拽组件来打造前后端一体的利用,次要用于 BRM(业务规定治理)、ERP、CRM等零碎的疾速研发。然而这种形式对业余畛域的中后盾开发者并不实用,他们面对的是简单多样的场景,他们专一的问题是如何保护曾经达到十万、甚至百万的代码,如何疾速迭代、策略优化实现业务可持续增长,如何治理与保障服务的稳定性等等。如果低代码工具只能创立带界面的数据库利用,反对简略工作流场景,并不能给后者带来理论帮忙。 搜寻中台从业务场景和业务痛点登程,借鉴业界低代码理念,对简单的后端系统发展了低代码摸索和实际之路。工欲善其事,必先利其器,心愿通过打造新的生产力工具,更高效地实现产品翻新。 二、咱们面对的场景搜寻中台为业务提供两种接入形式,一种是使用者以配置化的模式进行定制,之后应用提供的API接口拜访中台的能力,另一种是容许使用者以代码开发、部署服务的模式在中台外部零碎中进行定制,实现高度灵便的产品逻辑。前者更加靠近“无代码”,然而扩展性和灵活性不够,应答的是一般性需要,后者咱们在中台零碎内提供了利用引擎(以下称Search-AE),业务能够间接入场开发,通过代码实现检索需要定制,满足更加灵便的业务场景。 随着深耕业务场景的规模爆发式增长,大量利用开始涌入 Search-AE,目前曾经蕴含了200+ 独立业务零碎。在需要高速迭代、规模快速增长的状况下,效力上面临的问题也越发凸显: 短少无效积淀 在 Search-AE 倒退之初,各个业务更多的是纵向倒退,通用性能很难积淀,利用之间的能力共享次要通过 copy-paste 来实现,而这些代码在一段时间的迭代后,又会因为一些微不同导致其往各自的方向倒退,最终业务之间齐全演变成各自独立的零碎,本能够复用的能力变的更加难以无效积淀。 高速迭代下零碎的复杂性加大 随着需要的疾速迭代,业务零碎的代码量和架构复杂度也在疾速晋升,局部业务代码量级曾经倒退到数十万级别的规模。同时业务需要又是第一位的,大家都在被需要推着走,开发过程中很难保障对文档做出无效积淀。接手同学在保护迭代时只能通过大量源码去了解零碎,难以保障高效开发。 研发全流程操作繁琐 搜寻自身很简单,尤其在经验过多年的倒退后,搜寻零碎成为链路长、连贯简单的大型分布式系统。环境部署、调试预览等都会对业务研发产生肯定的累赘。另一方面,研发全流程须要接触不同的工具平台,这些平台没有从全流程的维度去规划设计,它们之间的跳转、应用也会产生学习老本。有一个理论场景的例子:开发一个业务需要,先花一周工夫读懂代码评估代码的批改点,再花一周去配置整套环境,还要花一周工夫相熟研发流程中的工具链,而真正写代码可能只须要一天。 总体来看,咱们要解决的问题是:如何更快开发——少写代码,更快上手——零碎易了解,更快交付——全流程操作简略。 三、思路与指标业内的一些低代码平台次要聚焦的是前端的场景需要,将页面元素封装成通用组件,使用者拖拽这些组件实现页面状态的定制。搜寻中台面对的是中后盾场景,然而要解决的问题和思路是十分相似的。从每个业务的理论状况看,尽管最终的检索场景各不相同,但执行的性能流程都有肯定的相似性,如果咱们把通用的性能抽出来,业务通过组合这些通用能力来满足需要,就能够显著晋升效率。同时,这些通用能力是标准化的,业务能够按标准规范进行开发,开发生态易于分享和应用,针对通用算子满足不了的业务场景,大家就会补充更多的通用组件,在下一次相似需要来到时疾速满足。 对立业务框架:图引擎 & 图编排咱们的解决思路是应用图引擎来驱动业务逻辑的执行,通用和定制的能力都以算子模式提供,业务则以 DAG 图的模式串联这些算子。图自身没有一套固定的流程,算子间的连贯和应用齐全由业务场景决定,所以即便是齐全差异化的业务都能够应用图引擎来构建零碎。并且,图和算子定义了一套标准规范,开发的产品性能都通过算子的模式对外裸露,而算子又是能够插拔的,业务之间都能够不便的拿来复用。 然而,仅仅有图引擎是不够的,咱们须要让算子在业务的应用之下疾速积淀起来:业务违心去共建通用算子,并且这些算子对业务可能充沛共享,即大家能够便捷的查看和应用这些通用算子。而应用图编排工具,能够以平台化的模式对这些算子进行出现,研发同学能够疾速的查看所需性能算子,也能够通过可视化拖拽低成本的配置应用。 建设图编排工具还有一个很重要的出发点是:咱们心愿通过可视化的图帮忙开发同学疾速的理解业务零碎。这个图既是零碎的理论运行图,也是帮忙疾速了解零碎的执行流程图。咱们应用图编排进行可视化之后,图自身就具备自解释性,研发同学能够在图上补充备注信息,图就相当于和代码同步的人造文档。对有肯定规模的业务来说,通过“图文档”了解零碎要比读源码了解更快,更加天然易懂。 全流程一站式研发除了代码开发上的改善之外,咱们心愿有一套对立的工具对研发全流程进行提效:在图编排的根底上打造 All-in-one 的开发平台,将研发流程各个单点能力横向集成与拉通。业务研发者在研发过程中不须要学习对接各种开发工具或平台,所有的研发工作都收拢在一套工具里解决。同时这套流程又是标准化的,过来研发过程中所有的飞线技术栈都能对立起来,应用更加高效便捷的标准化解决方案。业务有可能晋升效率的形式、工具也能够往这套工具里进行积淀,独特打造。 四、Nimbus 低代码平台的设计与实际咱们在 iCoding(公司代码开发 IDE) 的根底上建设了 Nimbus 低代码平台,所以 Nimbus 天生就领有了 IDE 蕴含的代码开发、编译调试等根底能力。对使用者来说,研发全流程的操作都能够在 IDE 外部实现,不须要对接内部工具零碎,提供了很大的便利性。咱们将研发全流程划分为五个阶段,别离是环境筹备、开发、预览调试、测试和公布运维。每个阶段 Nimbus 都组建了适宜的工具来升高开发者的研发老本。 一键生成线上同步的开发环境,开箱即用在工程效力部共事的反对下,咱们建设了能够开箱即用的云端开发环境。业务开发者在代码仓库能够一键申请开发镜像,后盾会在云端拉起一个 Docker 容器,容器内运行着 iCoding 的服务端,能够应用浏览器的模式连贯开发镜像,也能够应用 iCoding 客户端进行连贯。 镜像内蕴含代码库、开发过程中的全副工具、服务编译运行所须要的全副依赖包、线上同步的服务配置词典等,业务开发者不须要额定的配置就能够间接开始开发。同时所有用户的开发环境也是完全一致的,不会因为零碎、SDK、配置的不同导致的问题影响。当用户长时间未连贯开发镜像时,镜像会主动挂起闲置,节俭机器老本。镜像也能够分享给其余用户,便于问题排查。 在打包镜像的过程中咱们发现利用的依赖十分多,如果将这些依赖都放入镜像中会导致镜像体积过大,不仅影响镜像的拉起工夫,也对机器的磁盘空间造成很大压力。初期咱们将这些依赖都放到 NFS 里,在镜像内通过 fuse 进行挂载,然而会导致业务无奈批改这些依赖,在一些场景下应用体验不佳。咱们又基于Overlayfs 虚构了一层联结文件系统,用户看到的只是一个一般的文件系统目录,能够任意批改替换。理论文件系统则蕴含两层的合并内容,Lower 层指向了公共的 NFS 集群,外面有全副的依赖文件,和线上实时更新,Upper 层指向镜像的工作目录,用户能够批改 Lower 层的文件,批改后会主动移到 Upper 层,Lower 原始数据不受影响。应用 Overlayfs 后咱们的镜像拉起速度十分快,绝大部分依赖都放到近程,开发镜像只须要5秒钟就能够拉起。 ...

December 28, 2021 · 1 min · jiezi

关于搜索:多业务建模在美团搜索排序中的实践

美团首页的搜寻是美团 App 上各类生存服务最大的流量散发入口,每天为数千万的用户提供各种服务。而搜寻排序是一个典型的多业务混合排序建模问题,这种多业务场景搜寻存在很多挑战。本文聚焦到店商家多业务场景的多业务排序建模优化工作,心愿能对从事相干工作的同学有帮忙。引言美团的使命是“帮大家吃得更好,生存更好”,美团 App 承载的业务包含外卖、到店餐饮、买菜、优选、酒店、游览、休闲娱乐等各类生存服务。美团首页的搜寻是美团 App 上各类生存服务最大的流量散发入口,每天为数千万的用户提供各种服务。美团搜寻排序是一个典型的多业务混合排序建模问题,一个典型的多业务搜寻场景是当用户搜寻地点,如 “望京” 的时候,用户的需要不是很明确,此时搜寻的后果页如下图 1 所示,下方的商家列表中会蕴含望京左近餐饮、电影、休闲娱乐、酒店等多种业务的后果,这就是一个多业务混合排序场景。 而多业务场景存在如下几点挑战: 因业务之间存在共性和个性,如何让模型兼顾这两种个性,实现更好的数据学习。比方到店餐饮对间隔特色十分敏感,而旅游景点业务对间隔特色绝对不敏感。业务人造存在高频和低频个性(比方外卖和游览),导致模型的训练数据中多业务样本数量不均衡。各个业务往往有本人不同的主指标,如何满足不同业务的指标,最终可能晋升搜寻的用户体验。本文分享了美团搜寻中的多业务排序建模优化工作,咱们次要聚焦在到店商家多业务场景,后续的内容会分为以下四个局部:第一局部是对美团搜寻排序分层架构进行简略介绍;第二局部会介绍多路交融层上的多业务交融建模;第三局部会介绍精排模型的多业务排序建模;最初一部分是总结和瞻望。心愿能对从事相干工作的同学有所启发或者帮忙。 排序流程简介美团搜寻零碎流程如下图 2 所示,整体流程分为数据层、召回层、排序层和展现层。其中排序层分为以下几个子局部: 粗排层:应用绝对简略的模型对召回候选集进行初步过滤,实现排序成果和性能的 Trade-off。多路交融层:应用查问词特色、上下文场景特色构建配额模型,进行不同业务候选集的数量管制,实现用户需要的准确了解。精排层:应用亿级别特色的深度学习模型,捕获各种显式和隐式信号,实现 Item 排序分数的精准预估。重排层:应用小模型和各种机制对精排后的后果进行调序,实现精密定向的优化。异构排序层:应用深度学习模型对异构聚块进行排序,实现多业务的高承载。多层排序架构设计次要是为了均衡排序成果和性能。本文后续提到的多业务建模优化工作次要从多路交融层和精排层进行介绍。 多业务建模实际多业务配额模型(多路交融层)随着美团业务的倒退,美团搜寻接入了到餐、到综、酒店、游览等业务。对于业务用意含糊的搜索词,比方用户搜寻“五道口”,须要依据用户、查问词、场景等多种因素来综合判断用户的业务用意。为了交融不同业务的召回后果,给 L2 精排一个比例适合的候选集,咱们设计了一个多业务配额模型来均衡多业务召回的比例。这种基于配额对多路召回后果进行合并的做法在搜寻、举荐场景中非常罕用,比方淘宝首页搜寻、美团举荐等。 为了多路召回的灵便接入,适配美团搜寻业务的倒退,咱们一直迭代搜寻配额模型。上面将具体介绍美团多业务配额模型的迭代过程,文章后续局部会将多业务配额模型(Multi-Business Quota Model)简称为MQM。 一维指标多业务配额思考到大搜后果存在多路不同业务的召回,为了刻画用户搜寻 Query 对三路业务召回的用意强弱,咱们采纳多指标的建模形式,以每一路召回是否被点击、下单为指标进行建模,实现了多业务配额初版模型 MQM-V1。该模型输入各路召回的点击、下单联结概率,作为最终的配额散布。在特色层面,咱们应用 Query 维度特色、Context 维度特色、Cross 维度特色、User 维度特色,来刻画用户在不同场景的实时个性化需要。MQM-V1 模型构造如下图 4 所示。 MQM-V1 版本上线后,整体线上点击率 +0.53%,各业务访购率根本持平。 二维指标多业务配额随着大搜召回策略的一直迭代,大搜不仅引入了按业务拆分的召回形式,而且引入了向量检索、地理位置近邻检索等跨多业务的异构召回形式,导致大搜召回策略一直减少,多业务配额模型也面临新召回源带来的冷启动问题。同时,为了增强多业务配额模型的个性化,咱们参考借鉴了[6]中用户行为序列建模的办法。综上,该版本 MQM-V2 与 MQM-V1 区别如下: 建模指标上,从以召回形式点击的一维指标降级到召回形式叉乘业务的二维指标,使得多路交融的粒度也更细、精度更高。行为序列建模模块引入Transformer Layer。为了解决新召回源接入的冷启动问题,咱们引入了人工教训层,包含业务先验和历史统计,综合模型输入决定每一路召回的配额。 MQM-V2 版本上线后,各业务指标率均有晋升,其中游览访购率 +2%,到餐访购率 +0.57%,到综、酒店访购率持平。 多业务排序模型(精排层)从美团搜寻精排模型降级为 DNN 模型,始终到 2019 年底,美团搜寻的精排模型构造是业界支流的 Embedding&MLP 的范式构造,期间咱们也尝试过业界提出的模型构造比方PNN[1]、DeepFM[2]、DCN[3]、AutoInt[4]、FiBiNet[5]等等。 随着迭代的进行,咱们发现针对特定业务的优化难以在精排模型发挥作用,为了兼顾各个业务的个性,反对各个业务更加无效的针对性迭代优化,须要摸索出一种模型构造来适配美团搜寻这样的多业务场景。上面会具体介绍精排模型在多业务建模上的发展史,文章后续局部将多业务精排模型(Multi-Business Network)简称为 MBN。 独立子网络拆分思考到酒店和游览在美团大搜排序策略的流量外面占比拟少,而针对小流量的相干优化在目前对立的 Embedding&MLP 模型构造外面很难体现,咱们尝试了如图 6 所示的人工自定义多塔模型 MBN-V1 构造:主网络复用目前的模型构造。具体情况介绍参考[6]中的行为序列建模局部,减少酒店和游览独立子网络;酒店子网络的输出包含酒店独有特色和主网络的打分输入,游览子网络的输出包含游览独有特色、主网络的打分输入、主网络最初一层 FC,酒店和游览子塔输出不同是因为业务逻辑不同导致数据分布差别大,这是实际出的后果,最终的输入是对三个输入的加权求和。 ...

July 9, 2021 · 2 min · jiezi

关于搜索:ES的性能优化

ES的性能优化es在数据量很大的状况下(数十亿级别)如何进步查问效率? 在es里,不要期待着顺手调一个参数,就能够万能的应答所有的性能慢的场景。兴许有的场景是你换个参数,或者调整一下语法,就能够搞定,然而相对不是所有场景都能够这样。 es的性能优化,次要是围绕着fileSystem cache也能够叫做OS cache来进行; 后面曾经剖析了es写入数据的原理,实际上数据最终都会写入到磁盘中去,当咱们搜寻读取的时候,零碎会将数据放入到os cache中,而es重大依赖于这个os cache,如果咱们给机器的内存足够多,在es里存的书库里昂小于内存容量,那么搜寻的效率是十分高的, 1、缩小字段如果咱们的表里有很多的字段,而咱们只须要往es库里写入咱们须要检索的那几个字段就能够了,对于其余的字段咱们能够存到mysql或者说其余的比方Hbase中,hbase的特点是实用于海量数据的在线存储,就是对hbase能够写入海量数据,不要做简单的搜寻,就是做很简略的一些依据id或者范畴进行查问的这么一个操作就能够了,从es中依据检索的字段去搜寻,拿到的后果可能就十几个doc id,而后依据doc id到hbase里去查问每个doc id对应的残缺的数据,给查出来,再返回给前端。简略地说就是:elastcisearch缩小数据量仅仅放要用于搜寻的几个关键字段即可,尽量写入es的数据量跟es机器的filesystem cache是差不多的就能够了;其余不用来检索的数据放hbase里,或者mysql。 2、数据预热如果说咱们依照计划一的办法做了之后,效率还是不行,存的数据量还是超过os cache的空间,那么咱们就能够吧一些比拟热门的数据,比方在电商零碎中,像一些热门的商品,咱们能够在后盾独自的写一个子系统,每隔一段时间,咱们就拜访一下,然数据进入到os cache中,这样用户来拜访的时候就拜访到的是os cache中的数据,就比拟快。 3、冷热拆散es能够做相似于mysql的程度拆分,就是说将大量的拜访很少,频率很低的数据,独自写一个索引,而后将拜访很频繁的热数据独自写一个索引,这样能够确保热数据在被预热之后,尽量都让他们留在filesystem os cache里,别让冷数据给冲刷掉。

February 5, 2021 · 1 min · jiezi

关于搜索:一文纵览向量检索

摘要:本文针对向量检索要解决的问题,梳理了支流向量检索相干的技术,剖析了向量检索目前的一个趋势。什么是向量检索首先咱们理解下什么是向量,所谓向量就是由n个数字(二值向量由n个比特组成)组成的数组,咱们称之为n维向量。而向量检索就是在一个给定向量数据集中,依照某种度量形式,检索出与查问向量相近的K个向量(K-Nearest Neighbor,KNN),但因为KNN计算量过大,咱们通常只关注近似近邻(Approximate Nearest Neighbor,ANN)问题。 向量度量常见的向量度量有四种:欧式间隔、余弦、内积、海明间隔 不同的度量形式对应不同的场景,通常欧式间隔用于图片检索,余弦用于人脸识别,内积多用于举荐,海明间隔因为向量比拟小,通常用于大规模视频检索场景。 有了度量当前,咱们通常会用召回率(也通常叫精度)来评估向量检索的成果,对于给定的向量q,其在数据集上的K近邻为N,通过检索召回的K个近邻汇合为M,则 召回越靠近100%代表索引成果越好。 向量检索解决的问题向量检索从实质上讲,其思维框架和传统的检索办法没有什么区别,前面在解说向量检索的索引构造部时,领会能更粗浅一些。 缩小候选向量集和传统的文本检索相似,向量检索也须要某种索引构造来防止在全量的数据上做匹配,传统文本检索是通过倒排索引来过滤掉无关文档,而向量检索是通过对向量建设索引构造来绕过不相干的向量,本文重点探讨相干的向量索引构造。 升高单个向量计算的复杂度传统文本检索在排序时通常会采纳漏斗模型,下层计算比拟轻量,越往下计算越精密,但随着过滤的进行,须要计算的文档数也逐级降落,对高维向量而言,单个向量的计算量还是比拟重,通常会对向量进行量化,对向量做近似计算,最初在一个很小的数据集上做原始向量的排序。 上面咱们围绕这两个问题来开展向量检索的相干探讨。 向量检索索引构造为向量建设高效的索引构造是向量检索面对的头等问题,在开始开展前咱们看一个Benchmark我的项目,这个我的项目在多个公开的向量数据集比照了相干索引构造的召回性能指标,使咱们可能疾速对各种索引构造的性能体现有个直观的意识。 暴力计算暴力计算是最简略但复杂度最高的一种形式,在计算召回的时候,暴力计算的后果是作为答案的基准数据,在人脸识别的场景中常常要求100%的召回率,这种状况下个别间接暴力计算。 基于树的办法基于树的办法有很多种,比拟典型的有KDTree、BallTree、VPTree,类比传统的二叉树,树结构无非是在建树的时候是决定往左还是往右扩大,不同的向量树索引在于依照什么规范去决策,KDTree(如下图所示)会选取向量中某个方差最大的维度取中值作为断定规范,也就是以超平面去划分空间,而BallTree则以球面去划分空间,VPTree会先选取一个制高点,而后计算每个点和制高点的间隔,取间隔中值作为断定规范。通常这些办法在检索的时候都会利用三角形不等式来去除不必要的摸索。 基于树的办法还有很多其余类型,但万变不离其宗,无非就是依照某个断定规范,对向量空间进行划分,但不管怎么划分,因为须要回溯的,都决定了基于树的办法在性能上要稍逊一筹。 哈希办法哈希对大家再相熟不过,向量也能够采纳哈希来减速查找,咱们这里说的哈希指的是部分敏感哈希(Locality Sensitive Hashing,LSH),不同于传统哈希尽量不产生碰撞,部分敏感哈希依赖碰撞来查找近邻。 满足如下两个条件的哈希函数称为(d1,d2,p1,p2)-sensitive: 如果d(x,y) <= d1,则h(x) = h(y)的概率至多为p1;如果d(x,y) >= d2,则h(x) = h(y)的概率至多为p2;下面的表达式用人话来说就是:高维空间的两点若间隔很近,那么设计一种哈希函数对这两点进行哈希值计算,使得他们哈希值有很大的概率是一样的,若两点之间的间隔较远,他们哈希值雷同的概率会很小。不同间隔度量的哈希函数不同,不是所有间隔度量(如内积)都能找到对应部分敏感哈希 基于倒排办法传统倒排索引是依据文档蕴含某个词,而后将以后文档放入改词的倒排索引中来建设索引构造,那向量是如何建设起倒排索引呢?通过聚类把整个向量空间划分为K个区域,每个区域用一个中心点C代替,这样每个向量和所有中心点比照,将本身纳入到间隔本人最近的中心点对应的倒排,整个索引构造就建设起来了 另一种基于倒排的索引是BOW,原理大体雷同,例如一张图片会抽取出几百个部分特色,先对所有的特色聚类,造成中心点,这些中心点作为倒排的根底,建设索引时,把图片的每个部分特色归类到其最近的中心点,建设倒排,检索时会依据命中的次数来过滤后果。 基于图的办法后面介绍的索引构造都能够归类为基于空间划分的办法,每个向量只会属于某个划分好的一个区域,这些办法最大的的问题是为了进步召回须要考查很大一块区域的向量,导致计算量激增,那有没有更好的办法来解决这个问题呢?基于图的办法就能够比拟好的实现这一指标,图办法最奢侈的想法是街坊的街坊也可能是街坊,这样把最近邻的查找转化为图的遍历,因为其连通性,能够针对性的考查局部向量而不是按区域来考查,因而能够大幅升高向量的考查范畴。 最近几年图办法是向量检索钻研的一个热点,呈现了如KGraph、NSG、HNSW、NGT等一批图索引办法,但实际上这些图办法的次要区别在构建过程,不同图办法采纳不同的伎俩来晋升图的品质,但图检索的步骤根本是统一的:a.选好入口点;b.遍历图;c.收敛。在一直实际中咱们察看到一些个性来评判图索引品质,指引咱们在图办法改良的方向: 街坊点靠近K近邻街坊点数量尽可能少,即缩小出度尽可能保障图的连通性,减少入度上面咱们以HNSW为例介绍一下图办法的原理,之所以选取HNSW在于该办法易于了解,比拟容易实现流式索引构建和更新,属于传统办法在向量上的完满体现。 HNSW背地其实是跳表在图上的利用,跳表作为一种简略高效的索引构造在Redis、LevelDB等零碎中取得广泛应用,如下图所示: 第一层上有全量的数据,在下层依据随机投币决定,越往上投到的概率越小,投到高层的节点往下都有一条记录,作为检索的高速公路疾速后退。 HNSW的原理也相似,不同于传统跳表在每层用链表来串联节点,HNSW在每层都是一个NSW(Navigable Small World Graph),通过图数据结构组织,下层节点也是通过投币决定在哪一层,并且它们在上层图中都有记录,下层图能够看做上层图的一个缩影,检索时,从上到下,一直指引检索过程逐渐凑近想要探寻的向量空间。另外在构图过程中HNSW通过边的裁剪来保障图的连通性,这里顺便提一下,纵观多篇图办法的论文,都从本人的视角表述了边裁剪办法, 但不论各种办法对裁边形容的有多酷炫,其办法实质都是截然不同的,只是视角不一样而已。 向量量化后面把支流的向量检索的索引技术根本都概述了一遍,通过索引构造对考查的向量做了裁剪当前,对高维向量而言,单个的计算量还是很大,有没有办法来缩小计算量呢?量化正是基于这个目标技术,所谓量化是指把一个很大的值空间量化到一个较小的值范畴,举个简略的例子,全世界有60多亿人口,也就是地球人的表征有60多亿种,咱们能够把人量化为男人和女人两种类型,这样就把一个60多亿的空间量化成只有两个值的范畴。 罕用的量化个别包含PQ(及其优化OPQ、LOPQ)和二值两种。 PQ原理如图,PQ中的P是乘积的意思,那怎么就冒出个乘积呢?在下图中一个128维的向量空间在通过PQ解决后,向量空间切分成了4段,每段内由256个中心点来量化表白,因而原始的128维空间当初能够用每段里的中心点组合,也即256 256 256 * 256种组合来表白,这就是所谓的乘积。 对于二值向量,因为古代CPU都提供了专门的指令,计算海明间隔十分疾速,在海量的向量检索中通常会间接生成二值向量,生成二值向量办法常见的有ITQ(Iterative Quantization)、DeepHash等办法。 其余技术聚类 向量聚类次要指的是K-means系列办法,如经典的K-means、K-means++、K-means#、One pass K-means、YinYang k-means等,在实践中咱们也应用过分层的办法来取得海量中心点。 内积转换 后面在哈希章节咱们曾经看到对内积是没有方法找到对应的部分敏感哈希函数,内积也不满足三角形不等式,因而导致很多索引构造无奈间接应用内积作为度量,大多数做法是先对向量做归一化再检索,但归一化会转换向量空间散布。钻研人员通过一个数学察看发现了一个办法,通过肯定规定变换,能够使得内积和欧式可能实现负相关,如下图所示: 对向量转换后,可间接用欧式间隔度量形式检索。 向量检索发展趋势本文结尾咱们提到向量检索的思维框架和传统检索没有什么区别,到目前为止传统办法利用到向量检索的红利也根本吃完。这两年的一个发展趋势是各种办法的组合,通过排汇各种办法的短处,来取得更好的性能、承载更大规模的向量。 ...

September 28, 2020 · 2 min · jiezi

详解天猫搜索前端技术历代记

导读:作者从 17 年双十一前开始接手天猫搜索前端,开发第一个需求—— H5 凑单页,到今天已经将近两年了。在这两年里,天猫搜索的前端体系发生了比较大的变化。今天分享一篇阶段性的总结文章,记录天猫搜索前端技术的过去、现在,以及自己作为业务目前的唯一前端对未来的思考。大体划分 首先基于前端技术的演进,大体上可以将天猫搜索前端的发展历程和未来趋势总结成几个时代: PC 时代H5 时代MV* 时代Weex 时代搭建时代深度搭建时代智能时代之所以这么划分,主要是基于天猫搜索的前端技术方向以及天猫乃至淘系前端技术体系发生的较大变化。而在这其中可以再提炼时代的关键词: 封闭:PC 时代、H5 时代、MV* 时代开放:Weex 时代、搭建时代、深度搭建时代智能:智能时代下面就来介绍各个时代天猫前端的技术状态和一些思考。 1、PC时代PC 时代可以说是天猫搜索前端的上古时代,那还是手机流量非常贵的 3g/2g 时代。因此大多还是简单的 WAP 页面,大多数人都还是习惯用 PC 进行购物。 ▐ 技术方案 模块化 PC 时代的前端技术方案采用的是 KISSY + MUI 3 ,MUI 3 就是那套 KISSY 的模块规范 KMD 。页面上还有一些非常老旧的 YUI 依赖。在那个 jQuery 王霸天下的时代,基本上天猫的 PC 页面都是采用集团内部根据 YUI 自研的大而全的 KISSY 框架。KISSY框架包含了前端所需要的几乎所有基础功能:模块加载器、 DOM 操作、事件处理、异步请求等等。 页面渲染 PC 天猫搜索采用了同步渲染的方式,页面的主要内容通过 VM 模板渲染输出到前端,因此前端需要维护大量的 Velocity 模板代码以保证 HTML 中的内容和自己 JS 代码能够配合得当。需求修改一旦涉及到 HTML ,就需要改造 Velocity 模板从而陷入 aone 发布的同步模板和部署炼狱之中。 ...

September 19, 2019 · 4 min · jiezi

搜索和其他机器学习问题有什么不同

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/uWg3m5xIGBAKNqqDmxzw2Q作者:Doug Turnbull 译者:林寿怡 目录: 一、衡量搜索的好坏 二、用机器学习生成 ranking 函数 三、单文档 机器学习排序 (point-wise learning to rank) 四、文档列表方法(LIST-WISE),文档对方法(PAIR-WISE) 五、直接用 w/ListNet 优化列表 六、使用 RankSVM 优化文档对方法 七、RankSVM 与 List-Wise 方法 八、结论 机器学习排序(Learning to rank)将搜索转化为机器学习问题,在本文中,我想找出搜索与其他机器学习问题不同的原因,如何将搜索排名作为机器学习或者是分类和回归问题?我们将通过两种方法,对机器学习排序方法的评估有个直观的认识。 一、衡量搜索的好坏目标是搜索和经典机器学习问题的根本区别,更具体地说,如何量化搜索的好坏。例如股价预测系统的准确性,取决于我们有多少预测数据是来自真实的公司股价。如果我们预测亚马逊的股价是123.57美元,实际上是125美元,我们会说这非常接近。假设按均值来说,我们的预测跟实际股价的误差在1美元到2美元之间,我们可以认为系统预测的很好。 这种情况下的误差我们称之为残差,即实际值与预测值之间的差异:实际值-预测值。(实际上,残留^2才是最小化,但在这里保持通俗易懂。) 训练期间,回归系统通过如何量化好坏来得到最优解。我们可以尝试公司不同的量化特征,例如员工人数、收入、手头现金、或者其他任何有助于减少股价误差的特征。它可能会使最小二乘回归(least-squares regression)学习为线性公式,例如:股价= 0.01_员工人数+0.9_收入+0.001*手头现金,作为减少误差的最佳方式。 搜索结果的好坏(或介于两者之间)却完全不一样。股价预测系统完全是为了减少实际值-预测值的误差,但搜索系统是尽量接近搜索查询的理想排序。换句话说,目标是减小理想排序到结果项集合的距离,排序的优先反映出搜索者感知搜索的好坏。 例如,电子商务用户搜索“dress shoes”,我们定义一个粗略的理想排序: Best-selling dress shoesLow-performing dress shoesOther kinds of shoesLadies dresses (if at all)以此我们可以想象一些场景,并猜测他们距离理想结果有多远。至少需要向“dress shoes”的搜索者在展示衣服前优先展示一些鞋子 - 但这一点都不完美。这就像预测亚马逊的股价是150美元而不是125美元:下面的结果接近吗? A pair of tennis shoesMeh Dress ShoesA ladies dress另一方面,优先于其他鞋子并在best-selling dress shoes前一个位置展示meh dress shoes,这样可能会非常接近,但也并不完美。这可能与预测亚马逊的股价为123美元相当: ...

May 10, 2019 · 1 min · jiezi

百度的搜索流量终于全面开放!新入口就在王牌产品主场景

用户常说小程序难找。这不是因为各大 APP 的搜索做得不好,而是因为用户还没有养成需要什么就去搜索的使用习惯。当然,搜索应用可能是个例外。在用户已有固定搜索习惯的情况下,如果小程序能在用户习惯使用的搜索应用中有一个入口,那是不是就不用担心第一批用户来源了。近日,知晓程序发现,用户在百度搜索引擎搜索时,部分搜索结果的首页页面也新增了不少智能小程序入口。百度智能小程序终于入驻了百度主场景,得到了更多的曝光度。百度智能小程序的主场景入口在百度 APP 内进行搜索,你可能会在百度搜索结果页面看到智能小程序的身影。在搜索电影时,用户首先能看到搜索智能聚合的电影排行榜。往下滑动搜索结果,用户就能看到电影热门片单及购票服务,排在第四位的搜索结果就是百度智能小程序。用户在搜索结果页面能看到小程序的服务类目和基本信息,对小程序有一个基本了解。点击打开即可「秒开」智能小程序,享受极速体验。这个过程非常流畅,从「看到」到「得到」,仅需一两秒。知晓程序也用自己常用的智能小程序进行了测试。在搜索唯品会、爱奇艺、爱说唱、虎牙直播时,这几个智能小程序在搜索结果页面中所处的位置都排在前五。搜索小程序名或关键字可以看到智能小程序入口,那搜索某一具体的问题还能在搜索页面看到其入口吗?答案是能。在搜索具体问题时,百度搜索结果也会推荐智能小程序。以「装修什么公司好」为例,在百度搜索该问题,结果页面就会显示齐家的智能小程序。智能小程序的入口与其它搜索结果保持了较大一致,只是多了智能小程序的提示字样。这让用户在使用智能小程序时,没有操作门槛就能体验智能小程序的流畅。从这个角度来说,以多种形式出现在百度搜索结果页前列的智能小程序有了真正属于自己的主场景入口。降低获客成本,开发者的福音在去年 5 月 22 日百度联盟峰会上,百度 APP 总经理平晓黎曾表示,百度将通过开放百度系全域流量和 AI 赋能等方式扶持开发者,共建智能小程序生态。开放百度系全域流量?随着智能小程序越来越多的出现在百度搜索结果页面中,我们似乎可以说,百度全域的全域流量已经在向开发者展开怀抱了。就在两个月前的 2019 百家号创作者盛典上,百家号曾向公众公布了部分数据,其中最引人注目的就是百度的信息流日均推荐量已超过 150 亿。作为百度搜索引擎的主场景,百度搜索结果页面在移动互联网时代依然有着巨大的价值。日活过亿,信息流推荐量 150 亿的百度 APP 对于所有开发者来说都是不能忽视的流量池。现在,百度将它开放了,百度将自己的主场景与开发者共享,所有的小程序开发者都可以用它获取自己的第一批用户。百度智能小程序的工作人员向知晓程序透露,在百度系应用中,同质内容情况下小程序权重大于 H5,分发流量会有正向趋势。 而在百度 APP 端内,百度也会将智能小程序和同内容的 H5 去重,优先展现和调起智能小程序。百度搜索结果优先推荐智能小程序,这是行动上对开发者最好的扶持。对开发者来说,这也标志着百度搜索的全域流量至此全部开放。在流量越来越贵的前提下,这意味着更低的获客成本和更简单的初期发展。百度搜索结果优先推荐智能小程序,这也能帮助用户免去跳转的麻烦,顺畅「秒开」。这种流畅的体验也能够让用户体验更深层次的服务。百度智能小程序就曾在公开课上举例,小红书智能小程序和其 H5 相比,人均时长提升了 50%;携程智能小程序和 H5 相比,访问深度也提升了 150%。从「知道」到「得到」的一站式满足,没有「割裂感」的百度智能小程序带给了用户更好的体验。▲ 百度 APP 总经理平晓黎借助百度搜索结果页面的巨大流量池,小程序可以稳定的获取用户,用户也能得到更好的体验。搜索:百度智能小程序生态的最佳路径百度视频的 CEO 胡浩曾说过,尽管 BAT 都在发力小程序,但微信小程序是一个头部效应非常明显的生态,且强依赖社交分发;支付宝的小程序主要面向交易类应用;百度智能小程序则可以帮助很多开发者找到更适合自己的长尾流量。正如胡浩所说,微信有社交,支付宝有交易,百度也有自己最大的倚仗——搜索。深耕搜索领域多年,百度在流量分发和搜索上都有自己的独到经验。百度在发布智能小程序之时,就公布了智能小程序的四大关键词:体验、流量、智能、开放。在体验上,百度智能小程序「可以最大限度地接近 Native APP」,同时可以弥补原生应用的高开发发布成本,难被检索等问题。在流量上,日推荐量 150 亿次的信息流也足以满足开发者,为开发者输送源源不断的弹药。百度搜索结果页面就是智能小程序的点火助推器,可以帮助智能小程序的开发者获得更好的成长空间。在智能方面,百度智能识图、百度智能语音识别等百度技术接口也都已开放或即将开放。开发者可以更好地调用它们,从而用更智能的方式、减少用户的操作成本。在百度智能小程序中,「智能」是核心,开发者可以通过小程序使得 AI 能力普惠,「让开发者重回业务理解与创意赛道」。在开放方面,百度已经将搜索结果页面的主场景开放给了开发者,给了开发者更多的流量入口。百度 APP 总经理平晓黎在之前的演讲时也曾表示,百度智能小程序已有 40+ 个入口及 1.5+ 亿的日活。出现在百度搜索结果页面的智能小程序,在体验、流量、智能、开放四个方面都做到了发布之初对开发者和用户的承诺。事实上,百度搜索加智能小程序的应用「秒开」体验对于用户和开发者来说都非常有吸引力。百度做搜索起家,用户也习惯在百度搜索引擎上进行检索。对于用户而言,在百度上搜索并打开智能小程序是很自然的,已有的用户习惯也能帮助用户迅速适应搜索结果+智能小程序的搭配。开放主场景,吸引开发者,流畅体验,吸引用户。用搜索赋能智能小程序,这可能会是百度智能小程序生态发展的关键节点。在重视搜索入口这方面,百度和张小龙的想法都极为相似。张小龙曾说过「其实搜索一直应该是小程序的一个主要流量来源。并且小程序和 APP 有一个很大不同,APP 是一个个的信息孤岛,互相之间没法交换信息。但是小程序是可以被系统统一检索到,是可以直接搜索到小程序里面内容的。」无论是微信小程序在搜索的不断加码,还是百度搜索结果优先推荐智能小程序,这都说明了一点:搜索是小程序触达用户的重要方式之一,搜索也是小程序连接用户的最佳路径。全平台后端云服务 —— 知晓云礼金赠送即日起至 3 月 15 日,报名并通过 Web 端公测审核的用户,在正式接入后都可获得获账户礼金 100 元。????「知晓云」cloud.minapp.com,诞生于 2017 年 8 月 8日,是以小程序开发为起点的后端云服务,它免去了应用开发中服务器搭建、域名备案、数据接口开发、线上运维等繁琐流程,让开发者更快、更低成本地做出优质的小程序。报名点这里 ???? 知晓云公测活动 ???? 公测活动结束后还将挑选出 5 名积极反馈的用户获得知晓云限量纪念 T 恤本文首发于「知晓程序」公众号:https://mp.weixin.qq.com/s/Bw…知晓云是国内首家专注于小程序开发的后端云服务。使用知晓云,小程序开发快人一步。 ...

March 11, 2019 · 1 min · jiezi

微信小程序搜索功能!附:小程序前端+PHP后端

开发需求微信小程序已经是非常火了,而且学习也比较容易,但是对于初学者来说还是一件比较伤脑筋的事,接下来给大家分享一下小程序搜索的思路。流程1、表单(输入框、提交按钮、提交的name值)2、接收表单数据(js获取表单name=keyword的值)3、通过wx.request向服务器后端发起请求查询数据库4、返回JSON格式的数据给小程序,js解析渲染到小程序前端展示界面代码index.wxml<!– 标题 –><view class=“title”>小程序搜索</view><!– 搜索框view –><view class=“search_con”><!– 表单 –> <form bindsubmit=“formSubmit”> <!– 记得设置name值,这样JS才能接收name=keyword的值 –> <input type=“text” name=“keyword” class=“search_input” placeholder=‘你要找什么呢?’/> <button formType=“submit” class=“search_btn”>搜索</button> </form></view><!– 搜索结果展示 –><view wx:for="{{re}}" wx:key=“re” class=“search_result”><!– 当提交空白表单的时候 –> <view class=“empty”>{{item.empty}}</view> <!– 当有搜索结果的时候 –> <view class=“resname”>{{item.resname}}</view> <!– 当查询不到结果的时候 –> <view class=“noresult”>{{item.noresult}}</view></view>index.js其中里面的http://localhost/search.php?k…是服务器后端接口,用于接收小程序传过去的关键词的,下面会有这个后端PHP文件。const app = getApp()Page({ data: {}, //执行点击事件 formSubmit: function (e) { //声明当天执行的 var that = this; //获取表单所有name=keyword的值 var formData = e.detail.value.keyword; //显示搜索中的提示 wx.showLoading({ title: ‘搜索中’, icon: ’loading’ }) //向搜索后端服务器发起请求 wx.request({ //URL url: ‘http://localhost/search.php?keyword=’ + formData, //发送的数据 data: formData, //请求的数据时JSON格式 header: { ‘Content-Type’:‘application/json’ }, //请求成功 success: function (res) { //控制台打印(开发调试用) console.log(res.data) //把所有结果存进一个名为re的数组 that.setData({ re: res.data, }) //搜索成功后,隐藏搜索中的提示 wx.hideLoading(); } }) },})index.wxss/* 搜索样式 /.title{ text-align: center; font-size: 20px; font-weight: bold;}.search_con{ width: 80%; margin:20px auto;}.search_con .search_input{ border: 1px solid rgb(214, 211, 211); height: 45px; border-radius: 100px; font-size: 17px; padding-left: 15px;/此处要用padding-left才可以把光标往右移动15像素,不可以用text-indent/ color: #333;}.search_con .search_btn{ margin-top: 15px; width: 100%; height: 45px; background: #56b273; color: #fff; border-radius: 100px;}.search_result{ width: 80%; margin:10px auto;}.search_result .empty{ text-align: center; color: #f00; font-size: 15px;}.search_result .noresult{ text-align: center; color: #666; font-size: 15px;}.search_result .resname{ text-align: left; color: #333; font-size: 15px;}服务端search.php<?phpheader(‘Content-Type:application/json’);//获取表单数据$keyword1 = $_GET[“keyword”];//过滤表单空格$keyword2 = trim($keyword1);//当表单提交空白数据时if(empty($keyword2)){ //构建数组 $arr = array( “empty” => “表单不能为空” ); //把数组转换为json $data = json_encode($arr); echo “[$data]”;}else{//过滤表单特殊字符$replace = array(’!’,’@’,’#’,’$’,’%’,’^’,’&’,’’,’(’,’)’,’_’,’-’,’+’,’=’,’{’,’}’,’[’,’]’,’;’,’:’,’"’,’<’,’>’,’?’,’/’,’|’);$keyword3 = str_replace($replace, ‘’, $keyword2);// 连接数据库$con = mysql_connect(“数据库地址”,“数据库账号”,“数据库密码”);if (!$con){die(‘Could not connect: ’ . mysql_error());}mysql_select_db(“数据库名”, $con);mysql_query(“SET NAMES UTF8”);//查询数据库$result = mysql_query(“SELECT * FROM 表名 WHERE 需要查询的字段 like ‘%$keyword3%’ ORDER BY ID DESC”);$results = array();//查询数据库是否存在这条记录$exist = mysql_num_rows($result);if ($exist) { //遍历输出 while ($row = mysql_fetch_assoc($result)){ $results[] = $row; } //输出JSON echo json_encode($results); //当查询无结果的时候 }else{ //构建数组 $arr = array( “noresult” => “暂无结果” ); //把数组转换为json $data = json_encode($arr); echo “[$data]”;}//断开数据库连接mysql_close($con);}?>服务端也是非常简单的,大家自己把服务端写好一点,毕竟安全和效率是很重要的。演示 ...

February 27, 2019 · 2 min · jiezi

从零开始学 Google(二)

上篇文章中我们学习了 Google 的一些初级使用。这一篇文章我将带大家学习它的更多好玩儿的、进阶的用法。(除非特别说明,以下均不包含双信号,加粗部分即为输入搜索框中的内容),本篇开启多图流量预警。搜索小技巧使用 “ $ ”,搜索特定价格比如我们搜索价格为400美元的相机 “camera $400”使用“ .. ”,搜索指定范围内的数字比如,搜索价格在 400~800 美元的相机 “camera $400..$800”(当然这类场景购物网站更擅长)使用“ filetype: ”,搜索指定类型的文件有时候我们需要在网上搜索指定类型的文件。如果你是现在刚好处于找工作时期,想搜下简历的模板下载下来,如果你直接搜“简历”,那么一定会有各种垃圾信息来干扰你。现在你可以直接搜索“程序员简历 filetype:docx”可以看到,在每一项的开头都有个【DOC】标记,来告诉我们这是个doc文档,这时候你点击任何一项,就会直接把这个文档下载下来。是不是很方便。以此类推,你可以下载其他格式的文件的(通过文件后缀来搜索),比如 PDF、xlsx(Excle文件)等等使用“ * ”,搜索通配符或未知字词在一些情况下,我们并不一定需要很精确的搜索,可能只是一个有点模糊的概念或者框架,这时候我们就可以使用“*”通配符来进行搜索,比如我想知道中国的城市的各种排行,也就是“城市之最”,这时候我就可以搜索“中国最 * 校园”,注意,星号前后有空格使用“ site: ”,在指定网站上搜索有时候我们只关注某些网站上的内容,那就需要把其他网站上面的内容给过滤掉。如果你是一个程序员,只想搜索在CSDN上发表的跟 Glide 有关的文章,那就可以搜索“Glide site:csdn.net”当然,如果你是个米粉,或许会搜索“小米8 site:jd.com”来获取在京东售卖的小米8的信息,而这并不会含有其他购物网站上的此商品信息。内置小工具这节我们聊点 Google 为我们提供的一些内置实用小工具,它能让我们的搜索变得有趣而高效。天气搜索框中直接搜索"天气",就会展示出来当前定位到的天气的温度走势图。当然你也可以手动指定要搜索的位置,比如“天气 北京”我们可以在这里面查看温度、降水概率、风力等,稍微留意可以发现,这里打开的其实是“ weather.com ”网站,在搜索结果中直接进行了预览,以下各工具也类似计算器搜索框中直接搜索"计算器",在搜索的出来的计算器页面就可以进行计算了。当然,我们也可以直接在搜索框中输入一些简单的算式,比如“ 100+200 ”,然后 Google 就会直接在上面的计算器中给出计算之后的结果.颜色选择器有时候我们写代码,需要查看设计给的某些颜色是否标注正确或者自己去取色,那么就可以使用这个工具。在搜索栏里直接搜索“颜色选择器”我们可以拖动颜色滑块儿,也可以直接手动输入颜色值,来选择颜色货币兑换我们可以直接输入要兑换的货币,如“美元兑换人民币”,当然也可以直接输入上我们需要进行转化的数值,比如“ 10 美元兑换人民币 ”可以看到,这里我们可以选择我们要兑换的货币,上面也会显示最近的汇率变化情况翻译我们直接搜索“ 翻译 ”,就会出现下面的搜索框,我们能方便的进行各种语言的转换,而不需要再进行安装翻译软件,特别效率。当然,我们也可以直接输入我们要翻译的语言,比如把“ hello ”这个单词翻译成汉语,我们就可以直接使用“ hello in chinese ”可以看到,当我们输入了 “in”这个单词之后,后面会自动对我们进行提示,我们选择要翻译的语言即可。根据数学公式绘制图形我们可以直接在浏览器中输入数学公式,直接查看该函数绘制出来的效果,挺厉害的,比如查看函数“cos(3x)+sin(x)”的图形当然,我们也可以在一个坐标中同时绘制多个函数,那么只需要用逗号把他们分割开就行,比如“cos(3x)+sin(x), cos(7x)+sin(x),x”好啦,这次就讲到这里。这节相对就比较轻松啦。下一篇将是本系列文章的最后一篇,将会讲一点跟图片有关的搜索技巧,以及高级搜索的使用,不要走开。也可以直接扫码关注我的公众号来关注最新消息:或者直接加我的微信好友,一起交流,有趣的灵魂在等你:

January 29, 2019 · 1 min · jiezi

搜索引擎原理科普

导读:本文主要阐述搜索引擎的基本技术。故事纯属虚构,如有雷同,算我抄你。中堂的烦心事乾隆六年,皇城和府。时任内务府总管的和珅正在府邸里来回踱步,让他烦心的是主子乾隆爷交给他的选秀女一事。“老爷,您这是怎么了?”管家刘全很会察言观色。“今日早朝,圣上让我负责今年选秀女的事,哎……”和珅叹了口气接着说:“虽然离岁末还有数月,但这茫茫人海,我到哪去给圣上找他要的‘总没有右耳朵’的姑娘啊。”“啥?没有耳朵的姑娘?”刘全很是惊讶。不过他很快就镇定下来,对和珅说道:“老爷,这历年选秀女,最终送进宫的都是万里挑一筛出来的,别说没有耳朵,哪怕两只耳朵不一般大恐怕都不行吧。想必这又是万岁爷出的题目在考咱呢,您可一定要慎重啊!”“对啊!”和珅一拍大腿,“这一定是圣上在故意考我呢。走走走,去找老纪,让他帮我想想。”和珅口中的老纪正是时任国史馆总纂的纪昀(字晓岚)。此人博闻强记、才思敏捷,最关键的是他很善于猜解乾隆皇帝的字谜。“和中堂,什么风把您给刮来了?”和珅刚一进门,纪昀就拱手示好。没办法,谁让和珅的官职比他高出好几个级别。“纪大人,我又要来麻烦你了……诶?刘大人也在啊,”这一天内阁学士刘墉恰逢在纪昀家做客,这让和珅很是欣喜,“两位大学士都在,那我这事差不了了。”和珅向两位同僚叙述了乾隆爷交代给他的事。思忖片刻,纪昀果真有了答案:“哈哈哈……和中堂,‘总没有右耳朵’指的不就是个聪明的‘聪’字嘛,万岁爷是让您给他找聪慧伶俐的姑娘家啊。”“哎呀呀,纪大人果然才气过人,圣上定是这个意思,错不了,错不了。”和珅此时茅塞顿开。(猿知原味注:作为搜索引擎,首先要理解用户的意图——究竟是想搜什么?虽然用户的输入不会像上文中乾隆皇帝那般隐晦,但计算机也远不及纪昀那般聪明,甚至可以说是笨。比如你输“中外科学名著”几个字,对于我们人而言很简单,中外/科学/名著,然而计算机或许就会犯糊涂。对它而言,“外科”、“学名”仅从词库去看也是合理的词,究竟该如何切分是一个问题。这里就涉及到了搜索引擎中的分词算法,这里不展开讨论)从长计议一番道谢之后,和珅准备离去,正要走,被刘墉喊住了:“和大人,您这是准备去寻皇上要的聪明丫头吗?”一句话问得和珅呆住了,心想着“那不然呢?”“依臣看此事不可操之过急。”见和珅顿住了脚,刘墉接着说道:“咱大清幅员辽阔,随着‘摊丁入亩’的制度实施,现在人口眼看就要破一万万了,想必其中待字闺中的女娃子也不少。大人您这一去少说也得个把月,就算一切进展的顺利,您遴选出了一批秀外慧中的女子带到了万岁爷面前,但倘若到那时咱主子又改了主意,不要聪慧的了,要朴实淡雅的,那中堂您不就白忙活了吗?”“对对对,大人提醒的极是啊,”和珅刚刚舒展开的眉头又锁了起来,“我做奴才的无所谓白不白忙,但这一来二去的,要是耽搁了给万岁爷上交秀女的时日,那可是欺君之罪啊!刘大人,这事儿您一定得帮帮我,您看这选秀女的事往下该如何进行啊?”“和大人,您看这样可好,”原来刘墉一早就有了主意,“此次您下民间征召秀女,无需将‘聪慧’列为征求条件,也暂时不必把她们带回宫。您需要做的只是尽可能多的搜罗适龄女子,并将她们的门第、容貌、修养、性格、能力、品行等统统登记造册,回宫之后再对收集到的这些材料加以归纳整理。待圣谕下达之时,您只需要根据整理好的档案,筛选出那些最符合圣上心意的女子,再差人……”“此计甚妙、甚妙!”刘墉还没说完,纪昀已经忍不住在一旁连连称赞了,“依刘大人的意思,如果在赵家村找了个叫‘赵梨影’的姑娘考察结果是‘白、富、美’,又在关家村找了个叫‘关逍桐’的姑娘考察结果是‘傻、白、甜’,那在我们重新编排之后的档案里,关于‘肤白’的记载,就应该同时存在这两个人。别说今年了,以后任意一届选秀女,只要咱万岁爷好上肤若凝脂的类型,直接把这俩丫头提溜进宫就是了。”“两位大人简直就是我刘某人的再生父母啊!”听到这,和珅终于醒过味儿了。一边给他们作揖致谢,一边堆着笑脸转向纪昀:“纪大人,刘某在这还有一事相求。我的人到时候都到民间去寻秀女了,听说您最近在负责纂修《四库全书》,等我们将秀女的材料呈到宫中,还得麻烦您分一拨人帮忙整理建档啊。”“我去,这罗锅(刘墉外号)出的馊主意……”纪昀心中一万头羊驼奔过,可面对乾隆爷身边的大红人又无可奈何,只得苦笑着应道:“应该的,应该的”。(猿知原味注:如果整个互联网上只有三个网站,用户在搜索一个词的时候完全可以通过字符串匹配的方式找到包含这个词的网站,这很简单。如果有100个网站,以目前计算机的检索速度也能轻松做到毫秒级别的响应。然而,网络上的站点千千万万,若是在用户点击搜索时才从这些多如牛毛的网站中去匹配某个词,那就会犹如大海捞针,显得很不靠谱了。搜索引擎为了解决这个问题,有了“倒排索引”这个概念。上文中将某位秀女的体貌性格等特征登记造册被称之为“正排”,有了所有秀女的正排数据,再在“特征”这个维度下创建“白、富、美、傻、甜”等一系列索引,每个索引对应于具备此项特征的秀女们,这些索引就被称之为“倒排索引”。构建倒排索引是搜索引擎的关键技术,有了它,用户输入N个词,只需要对这N个词的索引所对应的网站列表求交集就可以了)阅女无数的秘密“对了,两位大人,刚才我们谈到的都是如何给秀女建档的事,那在搜罗秀女的问题上你们有何看法啊?”看样子和珅今天是赖上纪昀和刘墉了,他接着解释道:“历朝历届选秀女,地方官借此霸占民女的事都时有发生,所以这次万岁爷专门叮嘱过奴才,今年所选秀女不想通过下面的官员举荐了。如此一来,这泱泱大国,我如何才能搜罗到天下所有的秀女啊?”不得不说,和珅能做到现在这个位置上还是有两把刷子的,一个问题就让两位大学士缄默了。沉静了好一阵,纪昀说话了:”中堂,您看能否这样。搜寻秀女的差事就从臣府上的两个丫鬟开始,除了把她俩登记之外,再顺便问问,看她们老家还有哪些十三到十六岁尚未婚嫁的女子……“”老纪,你等等,”和珅打断了纪昀的陈述,“你府上那俩丫头我都清楚,她们那穷乡僻壤的能出几个美人啊?”“别急啊,和大人,臣是这么想的,”纪昀接着说到:“虽然这两个丫鬟能介绍的人少之又少,但在您去统计这些人的同时,也可以顺便让她们介绍几个各自认识的适龄女子啊,这不就从两个发展到了数十个,数十个发展到了几十个吗?再往后也都如此,对搜罗到的秀女,除了将她们做记录外,还要让她们介绍身边的其他女子,如此一来……”“如此一来,和大人就如同布下了一张天罗地网,网尽天下美女指日可期啊!纪大人,您这一招真可谓是高啊!”这次轮到刘墉捧纪昀了。(猿知原味注:纪昀谈到的搜罗方案在搜索引擎中被称作“网络爬虫”(Spider),爬虫通常的做法是利用网页之间的超链接从一定范围的网页出发,提取出指向其他页面的链接,把它们当成将下次要请求的对象。周而复始地重复这个过程,最终从理论上而言,几乎就能爬取到整个互联网上的内容。显而易见的,通过爬虫采集网页是搜索引擎的首要任务)“刘大人过奖了。臣这法子虽说可以搜罗到绝大多数民间的适龄女子,但毕竟这次不通过地方官举荐了,皇上给的时间又有限,只恐怕临时才去一一登记,不经过长时间的详细考察,对一些性格较为内敛的女子在品行上的评定会有所疏漏啊。”看得出来,纪昀是一个谨小慎微的人。“不打紧不打紧,”此时的和珅已是志得意满,“纪大人,您就知足吧,数月时间要评定登记上百万的人,能将她们外在表现出来的容貌品行登记造册,不出纰漏就不错了,还哪顾得上她们内不内敛啊。”(猿知原味注:很多搜索引擎只对爬虫请求到的html感兴趣,而不去解析请求到的javascript。这就使得一些运用前后端分离技术开发的网页就如同上文提到的内敛女子一样,异步渲染的内容很不利于被搜索引擎搜索到,从而影响网站被收录)排名次“不过,和大人,有一个问题您还真得考虑到,”刘墉似乎又想到了点什么,他说道:“圣上不是找您要聪明的姑娘吗,臣估摸着按照刚才咱们讨论的方案实施下去,到了年底,纪大人整理的秀女档案里具备‘聪慧’这一条件的女子再怎么说也得万八千个,您不可能将她们全都带进宫面圣吧。是不是也得分个三六九等,只有最最符合条件的一批人方能入选呢?”“哈哈,刘大人,这有何难呢,”刚当过恩科主考官的和珅对排名这一套玩的很溜,他慢条斯理地说道:“您看,虽说万岁爷只跟为臣提到了聪明,但这其中还有些标准是不言而喻的。咱大清朝选秀女,自顺治爷以来都是满蒙汉的八旗女子或包衣出身,这一下就能筛掉一大半人吧。容貌秀丽、举止端庄,这万岁爷没说但祖制总要遵从吧,这又要筛掉一部分人。再说这‘聪明’也分大聪明亦或是小聪明,从古至今,机关算尽祸乱宫闱的不叫聪明,外戚专权把持朝政的更不叫聪明,把那些尚未进宫就玩小聪明的再筛掉又还能剩多少人呢?”和珅的一番话让刘墉和纪昀瞠目结舌,似乎和珅在教他们如何成为主子身边的红人,又似乎在告诉他们“你大爷还是你大爷”。(猿知原味注:我们都知道在使用搜索引擎的时候,它会根据用户搜索的关键词,排列出相关性最高的内容呈现出来。和珅谈到的正是这里所谓的相关性,它对于搜索引擎排名来讲是一门大学问。关键词的词密度、位置、距离等都会影响到搜索引擎对其相关性的判定。除此之外,随着大数据和人工智能的发展,现代搜索引擎在做相关性分析的时候正变的越来越‘懂你’,你输入‘黄晓明的妻子’,出来的一定有大量和Angelababy相关的内容;你手误将‘赵丽颖’输成了‘赵梨影’,没关系,搜索引擎知道你究竟是想输什么;对于一个注重养身、经常搜索食品的人,输入‘苹果’排名靠前的会是水果,而对于一个电子发烧友,输入‘苹果’排名靠前的一定会是手机)“对了,两位大人,说起给秀女们排名,臣这还有一个困惑,”和珅接着说道:“假设有这么一个人,为了从千千万秀女中脱颖而出,她伪造了满族贵族的身份,用胭脂水粉把自己倒腾的芳菲妩媚,古灵精怪的性格更是伪装的恰到好处。有什么法子能够防止这种作弊行为呢?毕竟我们对其进行评定也就是依据这些表象,短时间内无法有更深入的了解。”“哎,她们只知道荣华富贵,却不晓得‘一入侯门深似海’啊!”刚刚还在发愣的纪昀发出了感慨。又继续说道:“和大人,臣倒是有个主意可以很大程度上地打击这种作弊。您看啊,一般而言,越是真正的名门望族、国色天香,越会被十里八乡的人所熟知,在您以我们刚才谈到的口口相传的方式去搜罗秀女的过程中,往往那些名副其实的秀女人选会被别人多次提及。相反的,虽然有些伪秀女能用一些办法干扰到朝廷对她们的考察,得到很不错的评定,但如若周边并没几个人知道她们的存在,那这其中就必定有诈了。”“这法子好,除此之外,对被介绍人的评定在很大程度上也要看介绍人是谁,”刘墉补充道:“比如纪大人家这两个丫鬟,本来就是亲信,介绍的女子应该也比较靠谱,排名就该靠前。而那些信口雌黄,原本口碑就不大好的女子介绍的人就理应往后排。”(猿知原味注:搜索引擎在计算排名的时候除了看内容和关键词的相关性,对一个网站整体权重的评估也是一个非常重要的依据。比如Google的PageRank算法,就是创始人Larry Page 和 Sergey Brin 当年在斯坦福读博期间搞出来的一个算法,也正是凭借此算法他们创立了Google。其核心思想很简单:1、如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是PR值会相对较高;2、如果一个PR值很高的网页链接到一个其他的网页,那么被链接到的网页的PR值会相应地因此而提高)“哈哈哈哈……今日造访,受两位大人的启发,我和某人所获颇丰啊。待我完成圣命,即向皇上请旨,给两位大人加官进爵,你们就等我好消息吧。”和珅一边起身,一边拜谢。至此,他心头的石头总算是落地了。(完)故事读完了,还是意犹未尽?没关系,关注“猿知原味”公众号(yz–yw),还有一大波生动有趣的干货等着你。寒冬腊月里的一天,和珅路过神武门,恰巧看到一女子被守卫拦在门外。“和大人,这女子非说她就是这次选秀女排名第一的人,名叫魏璎珞。”守卫上前禀报道。和珅凑近打量一番,这女子长的容色清丽、秀雅绝俗。“看看你们都是什么态度,这指不定以后就会是咱主子,”和珅数落了守卫两句,扭过头一脸谄媚的对女子说道:“魏姑娘,还是烦请您报一下生辰八字,只要和咱档案库里记载的一样,微臣马上带您去面见圣上……”

January 11, 2019 · 1 min · jiezi