关于搜索: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