标签权重在个性化搜索排序中的最佳实践-阿里云开发者社区

开发者社区> 搜索与推荐技术> 正文

标签权重在个性化搜索排序中的最佳实践

简介: 本文通过阿里云开放搜索中的tag_match 函数的标签匹配应用,详细解读标签权重在搜索排序召回中的业务价值

个性化搜索需要满足:

• 具备较强的语义理解能力,精准命中搜索需求;
• 满足搜索关键词和内容的多样性特点,可根据用户行为优化排序,实现个性化搜索;
例如:

  1. 搜索“吃鸡”,可能是游戏吃鸡内容搜索,也可以能是新闻内容搜索;
  2. 用户点赞过的店铺优先排序出现;

开放搜索tag_match 函数在个性化搜索中的应用

功能介绍:
tag_match : 用于对查询语句和文档做标签匹配,使用匹配结果对文档进行算分加权。涉及query和文档匹配的很多需求都可以使用或者转化为tag_match来满足,对实现搜索个性化需求尤其有用。
产品文档:https://help.aliyun.com/document_detail/51259.html?spm=a2c4g.11186623.6.618.28f833251UOr7V

适用场景

内容搜索:
一个大型的综合性论坛,帖子可以被打上各种各样的标签(搞笑,体育,新闻,音乐,科普..)。我们在推送给开放搜索的文档中,可以为每个标签赋予一个标签id(例如搞笑-1, 体育-5, 新闻-3, 音乐-6..), 然后通过一个tag字段存储这些标签。 如果我们对帖子做过预处理,甚至能得到每个帖子每个标签的权重。

例如:

  1. 一个搞笑体育新闻的帖子可以得到搞笑的权重为0.5,体育的权重为0.5,新闻权重为0.1,则这个帖子的tag字段的值为[1 0.5 5 0.5 3 0.1]对会员用户,通过长时间的积累,我们能获知每个用户的兴趣标签。
  2. 用户是nba_fans,对体育和搞笑很感兴趣,他对应的体育和搞笑标签的权重分别为0.6和0.3。那么这个用户查询时,我们就可以通过kv_pairs子句把这个信息加到query里面。假如这个kv_pairs子句名字为user_tag, 那么nba_fans的user_tag的值5=0.6:1=0.3。这样,我们只要在精排表达式中配置了tag_match(user_tag, tag, mul, sum), 我们就能够实现对用户感兴趣的帖子加权,把用户更感兴趣的帖子排到前面。
  3. nba_fans搜索到上面那个帖子时,搞笑和体育这两个标签能够匹配到。通过指定kv_op参数为mul,我们会把query和doc中的值相乘,他们各自的计算分数分别为(体育:0.5 0.6 = 0.3, 搞笑:0.5 0.3 = 0.15)。通过指定merge_op参数为sum,我们会把体育和搞笑的分数加和(0.3+0.15 = 0.45),这个加和的分数会加到最终的排序分数上。这样,我们就能够实现了对这个用户感兴趣帖子的排序加权。

商品搜索:
商品可以具有多个属性标签,例如1表示年轻人(年龄)、2表示中年人(年龄)、3表示小清新(风格)、4表示时尚(风格)、5表示女性(性别)、6表示男性(性别)等。

  1. 假设我们只想表示商品有没有某个标签,不想区分哪个标签更重要。这个标签通过options字段来保存。那么年轻时尚女性的衣服的options字段可以表示为[1 4 5], 注意这里只有标签key,没有value。用户也都有自己的属性标签,和商品标签对应。例如年轻女性用户,历史成交中多购买小清新风格衣服。这该用户的查询可以写为user_options=1:3:5。注意这里kv_pair中也是只有标签key,没有value的。
  2. 要实现对符合用户标签喜好的商品加权,我们可以在formula中使用tag_match(user_options, options, 10, sum, false, false)。这里我们通过user_options和options指定了query和doc的标签信息。kv_op设为常数10,表示只要有标签匹配到,那么匹配的计算结果就是10。has_default为false,表示我们不需要初始值。doc_kv为false,表示我们doc中只存储了key信息,没有value。这样,上面的年轻女用户查询到上面的衣服时,女性和年轻两个标签能够匹配上,这两个标签的计算结果都是10。通过sum这个merge_op,能够得到这件商品的最终加权分数为20。通过这种方式,即使我们没有标签的权重信息,也能够实现对匹配到的文档做排序加权。

标签权重优化案例实践:

假设文档内容共有如下10类型的标签:
1-财经, 2-科技 ,3-体育 ,4-娱乐 ,5-时尚, 6-教育 ,7-旅游 ,8-游戏 ,9-科普 ,10-医疗

案例1:关键词相同,但是标签不同的title
如图,搜索“吃鸡”出现两篇doc,但是二者的类型不同,分别是1-财经、8-游戏;

image.png
实践应用
如果想将“8-游戏”标签的文档在前面展示,可设置tag_match函数

image.png
以下分别演示配置在排序表达式或sort子句中的方法:
• 排序表达式展示的结果:

image.png
• sort子句展示的结果:

image.png
案例2:多标签综合得分展示(可针对用户的个性化推荐)
如图,搜索“运动员",在一级标签相同的情况下,需要匹配二级标签的得分

image.png
实践应用
如果想优化二级标签,把“10-医疗”标签的文档在前面展示,可设置tag_match函数
配置在排序表达式或sort子句中的方法:

image.png
• sort子句展示的结果:

image.png
案例3:多标签同类型,不同得分
如图,搜索“运动员",红框展示的内容,都同属于同样的标签,但是每个标签的打分不同;

image.png
实践应用
如果想根据标签整体的综合分进行排序,可设置tag_match函数

演示配置在排序表达式或sort子句中的方法:

image.png
• sort子句展示的结果:

image.png


如果你想与更多开发者们进行交流、了解最前沿的搜索与推荐技术,可以钉钉扫码加入社群~

image.png

【开放搜索】新用户活动:阿里云实名认证用户享1个月免费试用~https://www.aliyun.com/product/opens

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

AI Online Serving,阿里巴巴集团搜索与推荐,算法与工程技术的大本营,大数据深度学习时代的创新主场。

官方博客
友情链接