下拉框推荐-Suggest-SUG

news2024/9/21 12:41:29

什么是下拉框推荐

在我们使用各种app(飞猪)想要搜索我们想要的东西,假设我想要上海迪士尼的门票,那么精确的query是“上海迪士尼门票”,要打7个字,如果在你输入“上海”的时候app就推荐了query“上海迪士尼门票”,你不需要继续输入,直接点击这个query就ok;再举个例子,你不小心输入了“dishi”,app帮你自动纠错并推荐了“迪士尼门票”等query,对于用户来说,体验是不是一下就变好了,降低了我们输入的成本。

这就是下拉框推荐,也称为suggest-sug。搜索场景中,搜索list页的query大部分是从sug引导过去的,这就意味着sug推荐的query好坏对后续链路的转化有着重要影响,sug不仅要推荐用户想要的query,还要确保搜索能承接住这个query,保证有搜索结果。

如何召回

  1. 前缀召回-根据用户的输入前向匹配召回-上海:上海的景点、上海的酒店、上海
  2. 包含召回-召回的query包含用户输入-迪士尼:上海迪士尼门票、香港迪士尼乐园
  3. 分词包含召回-召回的query包含用户输入的分词结果,由分词的粒度决定召回效果-杭州一日游:杭州灵隐寺一日游、杭州西湖一日游
  4. 字召回-分词包含召回中最细粒度分词
  5. 拼音前缀召回-shang:上海、上海迪士尼-尚海:上海、上海迪士尼
  6. 简拼召回-hz:杭州
  7. 中英召回-杭z:杭州、杭州的景点
  8. 英文前缀召回-the twin:the twin tower
  9. 英文分词召回-twin tower:the twin tower
  10. 英文包含召回-twint:the twin tower
  11. 模糊召回-上海迪迪士尼:上海迪士尼乐园、上海迪士尼门票
  12. 向量召回:基于用户输入query的向量与库中向量进行匹配并根据相似度进行排序-成本高效果一般
  13. 生成式模型:基于用户的输入自动补全,可以产生库中没有的query,但很难满足线上的rt要求,且易产生搜索承接不住的query。但是可以离线保存这些query,扩充候选query库,并离线检测这些query搜索是否接得住

如何排序

  1. 排序模型:很多wide-deep模型都可以直接用,构建的特征包括两个大类:离散特征+连续特征。
    1. 离散特征主要是你召回query的相关特征:sug页uctr、pctr、结果页的(30天、15天、7天、3天)uctr、pctr、l2o、用户输入与召回query直接拼接之后的uctr等。用户输入与召回query之间的包含关系:如分词包含、前缀包含等
    2. 连续特征主要是用户的输入和你召回的query之间的关系:用户query与召回query的拼接等
    3. 额外特征:模型毕竟是黑盒的,所以最终排序的分数需要额外增加一些策略特征,如对召回的酒店query计算与用户之间的距离、对3天的uctr额外增加权重等
  2. 根据专家经验进行排序:如用户在北京输入“杭州”,可以离线人工构建一些泛 意图query如“杭州的酒店”、“杭州的景点”、“杭州一日游”、“北京到杭州的机票”、“灵隐寺”、“杭州西湖”...到机票的query是构造的排序,目的地的景点可以根据用户历史搜索的热度进行排序

如何纠错

  • 用户输入错误是很常见的情况,和输入法、query特征都有关系,如很多用户都会把“迪士尼”输成“迪斯尼”,把“恭王府”输成“公王府”,图1中全部使用了“迪士尼”进行了召回,图2中只有前两个query使用纠正之后的“恭王府”进行召回,其余还是用“错误”的“公王府”进行召回,如果没有纠错模型,召回的query并不是用户想搜的,用户还需要重新输入,相当于增加了用户的搜索成本,所以纠错模块是相当需要的。
  • 纠错模型:相关链接-中文文本纠错调研 - nghuyong。离线构建训练集训练模型,再对用户历史输入query进行预测,筛选不同,人工校验,存入纠错库,预处理阶段对用户输入query进行修改。另一方面,专家经验也是相当重要的,可以基于用户输入的频率、点击率等输入产生一批候选待纠错query,一般这个量级不会很大,外包校验就ok。

业务结合

  1. 意图识别:构建意图库,对用户输入的query进行意图识别,并根据意图+专家经验进行不同的候选query的召回排序是很有必要的,下图,用户输入目的地意图“北京”,携程的做法是:构造一批泛意图query-目的地+酒店、景点、一日游等;目的地热门景点;北京的热门酒店。对于景点意图-poi-“灵隐寺”,做法是:poi+附近酒店、一日游;精准酒店;query普通召回。敢打赌,经过AB实验,这样搭配的策略该意图的点击率会比一般召回的点击率是高的,因为一些明确意图下,很难猜准用户的精确意图,泛化意图更能收敛,或者说用户也不知道具体自己要搜啥,那就看下大家都在搜啥。站在用户的角度,如果用户输入一个精准酒店名,该配什么样的策略?我觉得精准酒店+该精准酒店附近的酒店(给出附近酒店与精准酒店的距离,并基于距离、评分、价格等因素排序)就比较合适。
  2. 与工程结合,实时的定坑能力:无论在携程,还是在飞猪、美团,会有各种各样的大促活动,如随心飞,酒店打折等活动,产品运营需要对一些query进行定坑配置,如用户输入目的地“法喜寺”时,想要在坑位3配置“打卡拍照攻略”,线上能实时生效,这就需要和工程端联合开发这种能力,并把这种配置试试读取到线上
  3. 基于用于行为推荐:如果用户今天已经点击过某个query或者搜索过某个酒店,当再次搜索相关query时,是不是应该把用户历史行为相关的query放在前面呢?!就类似于默认页推荐吧
  4. 基于所有用户行为推荐:当用户搜索目的地“上海”时,在当前城市“上海迪士尼乐园”是个热度很高的query,放在前面推给用户一般是不会错的
  5. 异地搜索query推荐:用户在杭州输入“北京”,用户是存在交通意图的,所以“杭州到北京的机票”“杭州到北京的火车票”一般点击还挺高的
  6. 推荐query的丰富度:如上图所示,推一个干干的query是不是显得太单一了,可以根据不同类型的query去构建不同的标签,如POI-景点排名、景点特色;酒店-酒店标签、与用户距离等 
  7. 确保推荐的query在结果页是有结果的或者能解析的,这就需要和搜索端进行联合,sug端利用搜索端的日志进行query的筛选
  8. 确保sug页的top1与结果页的top1是相同的。举个例子,用户输入“鼓楼”,sug推荐第一个是“南京鼓楼”,用户点击“搜索”进入结果页的第一个是“西安鼓楼”,这就是不统一的,会给用户错觉,所以这部分明显意图的识别sug端要和搜索端联合起来。

评价指标

  1. sug uctr:最直观的指标,点击算法推荐的query的用户占比。100个用户请求1000次,60个用户点击过推荐的query,uctr=60%
  2. sug pctr:相对准确的指标,点击算法推荐的query的pv占比。100个用户请求1000次,50次点击过推荐的query,pctr=5%。问题在于用户逐字输入“hangzhou”,相当于8次请求,及时最后点击了,pctr也只有1/8
  3. 用户输入的平均字长:越短表明越好
  4. 用户输入的平均时长:越短表明越好
  5. sug无结果率:用户输入query的无结果率。
  6. list页的无结果率:用户点击sug推荐的query之后,在list页无结果的占比
  7. sug ppctr:我自己命名的指标,最精确的指标,用户每一次完整输入才算一次请求,逐字输入“上海迪士尼”时相当于1次输入,而不是5次输入,这样计算是最精确的。
  8. list页uctr:sug引导的结果页的uctr。点击sug推荐的query之后进入list页(结果页),结果页的商品是搜索推荐的,推荐的好坏将直接影响用户的点击,但是sug推荐词的好坏也是会影响点击,所以有影响,但只是间接影响。
  9. list页pctr:sug引导的结果页pctr,和list页uctr的原理差不多,还是间接影响因素
  10. l2o:sug引导的query的下单率。更间接的因素
  11. list页pv来自sug的占比:sug页点击率越大,这个占比就越大

监控指标

  1. 上述指标的监控
  2. query粒度的搜索量、点击率指标:这个很重要,提升sug的uctr几乎是最重要的任务,你可以从高搜索量低点击率的query入手,对这部分query进行优化召回排序,这样也可以快读定位问题
  3. query type粒度的搜索量、点击率指标:比query粒度更粗一些,上面提到有意图链路召回排序利用专家经验构建的必要性,这部分指标可以让你快速发现定位基于专家经验的召回排序问题。例如发现目的地意图的点击率明显低于其他意图,那就需要对目的地意图的召回排序进行针对性优化
  4. query粒度下用户点击习惯指标: 用于监控用户在该输入下喜欢点击的query排序,如统计所有用户输入“北京”时的点击情况,发现用户更喜欢点“北京的酒店”、“北京环球影城”等query,“北京的酒店套餐”几乎没人点,那就可以考虑把“北京的酒店套餐”这个query替换成别的query。这部分数据还可以用于猪搜场景下的“猜你想搜”模块,很通用的用户点击行为数据。
  5. sug推荐用户不点的指标:用户最终输入“上海”,且点击了搜索按钮,但在输入“上”时,sug已经推荐了“上海”这个query,但用户还是没有点,这说明这部分用户的习惯是点击搜索按钮或者输入法的返回键

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线蓝牙耳机哪个牌子好?2023质量好的无线蓝牙耳机推荐

近几年,随着蓝牙技术的不断进步,使用蓝牙耳机的人也越来越多。蓝牙耳机的出现,不仅能让我们摆脱线带来的约束,还能提升我们学习和工作的效率。最近看到很多人问,无线蓝牙耳机哪个牌子好?下面,我…

accent-color一行代码,让你的表单组件变好看

不做切图仔,从关注本专栏开始 文章目录 不做切图仔,从关注本专栏开始前言兼容性语法继承性智能前言 在之前的网站开发中,我们是很难去更改的你某些控件的颜色。我们可能要使用各种技巧来自定义我们的控件。好消息是,今天如果我们想要去改变控件的颜色,css为我们提供了一些…

docker删除已停止的容器

一、docker删除已停止的容器 1、根据容器的状态,删除Exited状态的容器 先停止容器、再删除镜像中的容器、最后删除none的镜像。执行命令如下: docker stop $(docker ps -a | grep "Exited" | awk {print $1 }) #停止容器 docker rm $(docke…

【C++初阶】1. C++入门

1. 前言 1. 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(…

Python每日一练(20230228)

目录 1. 螺旋矩阵 II ★★ 2. 排列序列 ★★★ 3. 数字 1 的个数 ★★★ 1. 螺旋矩阵 II 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3…

java本地搭建宝塔部署实战likeadmin系统vue前端源码 - admin端(二)

大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享了java版likeadmin的server端本地搭建运行,宝塔部署的方式,今天来给大家分享admin前端vue在本地搭建,与打包发布到宝塔的方法。感兴趣的朋友可以自行下载学习。…

Unity——制作简易红绿灯

效果图与该类红绿灯相似。前提准备首先在场景中,创建一个正方体(灯座),球体(作为灯),把其放置成红绿灯结构。创建四个材质球,基础色分别赋为灰色,红色,黄色&a…

如何彻底删除SQL Server 2008中的登录账号

我个人遇到的最烦人的事情之一是 SQL Server Management Studio中“服务器名称和登录名”对话框的下拉列表。 以下是我想从 SSMS 连接屏幕中删除某些内容的两种情况: 键入的服务器名称不正确 服务器将来不需要。当我看到服务器的名称,它已经存在了很长一段时间,我知道我不会…

gismo中用等几何解决线弹性问题的程序示例---未完待续2023.2.28

文章目录前言一、调用线弹性程序示例1.1 对plateWithHole.xml文件的理解1.2 程序及注释1.3 对边界力函数的理解总结 #pic_center前言 gismo中用等几何解决线弹性问题 一、调用线弹性程序示例 1.1 对plateWithHole.xml文件的理解 算例来自文章:Isogeometric analysi…

操作系统真相还原_第7章:中断

文章目录7.1 中断分类外部中断内部中断7.2 中断描述符表中断门描述符中断描述符表寄存器IDTR中断处理过程中断发生时的栈变化7.3 可编程中断控制器8259A级联8259A8259A的编程7.4 编写中断处理程序中断初始化过程中断执行过程简单的中断处理程序中断处理程序改进思考7.5 8253定时…

PXC高可用集群(MySQL)

1. PXC集群概述 1.1. PXC介绍 Percona XtraDB Cluster(简称PXC) 是基于Galera的MySQL高可用集群解决方案Galera Cluster是Codership公司开发的一套免费开源的高可用方案PXC集群主要由两部分组成:Percona Server with XtraDB(数据…

XXL-JOB

XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 官网:https://www.xuxueli.com/xxl-job/ 文档:分布式任务调度…

GO中sync 包的 RWMutex 读写互斥锁

文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写,如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读…

Linux服务器快速安装MySQL数据库

Linux服务器快速安装MySQL数据库 mysql官网下载地址:https://downloads.mysql.com/archives/community/ 推荐使用命令下载安装,比较快 开始安装mysql 1.通过wget下载安装包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.no…

运动耳机怎样戴不容易掉,运动不容易掉的运动蓝牙耳机推荐

在运动当中总是避免不了大幅度的晃动、跳跃,但是普通的耳机在运动当中佩戴时,耳机会时常出现掉落或者佩戴不牢固的现象发生,下面就给大家分享几款在运动当中佩戴较为稳固的运动蓝牙耳机吧~1、南卡Runner Pro4骨传导蓝牙运动耳机 ¥…

卡尔曼滤波学习

原教程地址:KalmanFilter.NET 卡尔曼滤波广泛应用在雷达系统(目标跟踪)中,但是其实它还可以应用在任何需要估算和预测的领域。 一、一维卡尔曼滤波 通过8个数值例子介绍卡尔曼滤波,涉及平均数、方差、标准差等&#…

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…

【python学习笔记】:条件语句

Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为true,0 或者 null为fa…

Vue 中过滤器 filter 使用教程

Vue 过滤器 filter 使用教程文章目录Vue 过滤器 filter 使用教程一、过滤器1.1 过滤器使用的背景1.2 格式化时间的不同实现1.3 过滤器的使用1.4 过滤器总结一、过滤器 1.1 过滤器使用的背景 过滤器提供给我们的一种数据处理方式。过滤器功能不是必须要使用的,因为它…

DSP_TMS320F28377D_ADC学习笔记

前言 DSP各种模块的使用,基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO,这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直…