Elasticsearch:利用希罕向量提拔干系性

[复制链接]
发表于 昨天 23:50 | 显示全部楼层 |阅读模式
作者:来自 Elastic Vincent Bosc

学习如安在 Elasticsearch 中利用希罕向量,以最小的复杂性提拔干系性并实现搜刮效果个性化。

希罕向量是 ELSER 中的关键组件,但它们的用途远不止于此。在这篇文章中,我们将探究希罕向量如安在电阛阓景中提拔搜刮干系性:基于搜刮举动(如点击)和用户偏好对文档举行加权。

什么是希罕向量?

向量搜刮是当前的热门话题,但大多数讨论会合在麋集向量上:用于呆板学习和神经搜刮的紧凑型数值表现。而希罕向量则接纳了差别的路径。
与细密压缩数据的麋集向量差别,希罕向量以更具可表明性和布局化的格式存储信息,通常包罗大量的零。固然没有那么受关注,但在符合的场景下,它们的本领黑白常强盛的。

💡 意见意义小知识:希罕向量和倒排索引都利用希罕性来高效地表现和检索信息。
在 Elasticsearch 中,你可以利用 sparse_vector 字段范例来存储希罕向量:这并不令人不测。

利用希罕向量举行查询

在 Elasticsearch 中利用希罕向量举行搜刮的体验雷同于传统的关键词搜刮,但有所差别。希罕向量查询(sparse vector queries)不是直接匹配词项,而是利用加权词项和点积,根据文档与查询向量的匹配程度来评分。



用例 1:通过信号加强提拔搜刮排名

信号加强是指夸大某些特性或词项以提拔搜刮排名。当业务逻辑或用户举动表明某些效果应该排在更前时,这种方法尤其有效。
假设我们正在处理处罚一个简单的电商索引:
  1. PUT marketplace
  2. {
  3.   "mappings": {
  4.     "properties": {
  5.       "title": {
  6.         "type": "text"
  7.       },
  8.       "query_boost": {
  9.         "type": "sparse_vector"
  10.       },
  11.       "customer_types": {
  12.         "type": "sparse_vector"
  13.       }
  14.     }
  15.   }
  16. }
复制代码
如今,让我们只利用传统的 full text 范例来索引两个文档
  1. POST marketplace/_doc/1
  2. {
  3.   "title": "playstation 5 - special offer"
  4. }
  5. POST marketplace/_doc/2
  6. {
  7.   "title": "playstation controller"
  8. }
复制代码
对 “playstation” 的根本搜刮会起首返回控制器,而不是由于它更干系,而是由于默认的词法评分算法 BM25 倾向于偏好较短的字段,导致标题轻巧的控制器排名更高。更多的内容可以参阅 “Elasticsearch:分布式计分 - TF-IDF”。
  1. GET marketplace/_search
  2. {
  3.   "query": {
  4.     "match": {
  5.       "title": "playstation"
  6.     }
  7.   }
  8. }
  9. "hits": [
  10.   {
  11.     "_index": "marketplace",
  12.     "_id": "2",
  13.     "_score": 0.21110919,
  14.     "_source": {
  15.       "title": "playstation controller"
  16.     }
  17.   },
  18.   {
  19.     "_index": "marketplace",
  20.     "_id": "1",
  21.     "_score": 0.160443,
  22.     "_source": {
  23.       "title": "playstation 5 - special offer"
  24.     }
  25.   }
  26. ]
复制代码
但我们渴望提拔 console 的搜刮效果,特殊是由于它有特价优惠!
一种实现方式是通过希罕向量将加强信号直接嵌入到文档中:
  1. POST marketplace/_doc/1
  2. {
  3.   "title": "playstation 5 - special offer",
  4.   "query_boost": [
  5.     {"playstation": 3, "game console": 1}
  6.   ]
  7. }
复制代码
这个文档如今在搜刮查询 “playstation” 和 “game console” 中具有了额外的权重。
我们可以调解查询,以联合这个希罕向量的加强效果:
  1. GET marketplace/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {
  7.           "match": {
  8.             "title": "playstation"
  9.           }
  10.         }
  11.       ],
  12.       "should": [
  13.         {
  14.           "sparse_vector": {
  15.             "field": "query_boost",
  16.             "query_vector": {
  17.               "playstation": 1
  18.             }
  19.           }
  20.         }
  21.       ]
  22.     }
  23.   }
  24. }
  25. "hits": [
  26.   {
  27.     "_index": "marketplace",
  28.     "_id": "1",
  29.     "_score": 3.160443,
  30.     "_source": {
  31.       "title": "playstation 5 - special offer",
  32.     }
  33.   },
  34.   {
  35.     "_index": "marketplace",
  36.     "_id": "2",
  37.     "_score": 0.21110919,
  38.     "_source": {
  39.       "title": "playstation controller"
  40.     }
  41.   }
  42. ]
复制代码
得益于希罕向量匹配所带来的额外得分,console 如今排在了 controller 之前,这正是我们想要的效果!
这种方法提供了一种更换传统加强技能的方式,比方 function_score 查询或字段级权重调解。通过利用希罕向量将加强信息直接存储在文档中,你可以在调解干系性时得到更高的机动性和透明度。同时,它还实现了业务逻辑与查询逻辑的解耦。
不外,也必要注意衡量:对于一些简单的利用场景,传统的加强方式大概更容易实现,而且在某些环境下性能更优。而当你必要更细粒度、具有多维控制的加强方式时,希罕向量的上风就会凸显出来。
   提示: must 子句会举行过滤并影响评分,而 should 子句在条件匹配时会增长评分。
  
用例 2:利用希罕向量实现个性化

希罕向量同样可以实现个性化。你可以为客户特性或用户画像分配权重,并利用这些权重为个体用户展示最干系的产物。
以下是一个示例:
  1. POST marketplace/_doc/3
  2. {
  3.   "title": "High fructose snack bar with artificial flavor"
  4. }
  5. POST marketplace/_doc/4
  6. {
  7.   "title": "Snack bar with whole food ingredients",
  8.   "customer_types": {
  9.     "healthy-conscious": 3
  10.   }
  11. }
复制代码
假设 Jim 是一位偏好康健、可连续选项的客户:
  1. POST user/_doc/jim
  2. {
  3.   "customer-types": {
  4.     "healthy-conscious": 2
  5.     "tech-savvy": 1,
  6.     "eco-friendly": 1
  7.   }
  8. }
复制代码
我们可以根据 Jim 的偏好定制搜刮体验:
  1. GET marketplace/_search
  2. {
  3.   "query": {
  4.     "bool": {
  5.       "must": [
  6.         {
  7.           "match": {
  8.             "title": "snack bar"
  9.           }
  10.         }
  11.       ],
  12.       "should": [
  13.         {
  14.           "sparse_vector": {
  15.             "field": "customer_types",
  16.             "query_vector": {
  17.               "healthy-conscious": 2,
  18.               "tech-savvy": 1,
  19.               "eco-friendly": 1
  20.             }
  21.           }
  22.         }
  23.       ]
  24.     }
  25.   }
  26. }
  27. "hits": [
  28.   {
  29.     "_index": "marketplace",
  30.     "_id": "4",
  31.     "_score": 7.2515574,
  32.     "_source": {
  33.       "title": "Snack bar with whole food ingredients",
  34.       "customer_types": {
  35.         "healthy-conscious": 3
  36.       }
  37.     }
  38.   },
  39.   {
  40.     "_index": "marketplace",
  41.     "_id": "3",
  42.     "_score": 1.1612647,
  43.     "_source": {
  44.       "title": "High fructose snack bar with artificial flavor"
  45.     }
  46.   }
  47. ]
复制代码
因此,更康健的能量棒出如今搜刮效果的顶部,由于这更符合 Jim 的购买倾向。
这种通过希罕向量实现的个性化方法,基于雷同于静态用户标签的理念,但使其更具动态性和表现力。与其将用户归类为某个单一标签(如 “tech-savvy - 技能达人” 或 “healthy-conscious - 康健意识强”),希罕向量可以表现多个偏好,并赋予差别的权重,而且这些权重可以直接整合进搜刮排名过程。
利用 function_score 查询来融入用户偏好是一种机动的个性化更换方案,但随着逻辑的复杂化,它大概变得难以维护。另一种常见的方法是协同过滤(collaborative filtering),它依靠外部体系来盘算用户与商品之间的相似度,通常必要额外的底子办法支持。学习排序(LTR)也可以应用于个性化,具备强盛的排序本领,但在特性工程和模子训练方面要求较高的成熟度。

总结

希罕向量是你搜刮工具箱中的一个多功能增补。我们只先容了两个现实的例子:提拔搜刮效果和基于用户画像实现个性化。但它的应用范围非常广泛。
通过将布局化、加权的信息直接嵌入到文档中,你可以以最小的复杂度实现更智能、更干系的搜刮体验。
Elasticsearch 拥有很多新功能,资助你为特定用例构建最佳搜刮办理方案。深入相识我们的示例条记本,开始免费云试用,大概如今就试试在当地呆板上运行 Elastic。

原文:Enhancing relevance with sparse vectors - Elasticsearch Labs

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表