首页 > 解决方案 > AWS Personalize:如何处理没有足够交互数据的庞大目录

问题描述

我正在将 Amazon Personalize 的产品推荐功能添加到电子商务网站。我们目前拥有庞大的产品目录,其中包含数百万种商品。我们希望能够在我们的商品详情页面上使用 Amazon Personalize 向当前商品推荐其他相关商品。

现在您可能已经知道,Amazon Personalize 严重依赖用户交互来提供推荐。然而,由于我们才刚刚开始我们的新业务,我们并没有获得足够的交互数据。我们目录中的大多数项目根本没有交互。一些项目(数千个)虽然会进行很多交互,但会对推荐结果产生巨大影响。因此,即使它们与当前项目根本不相关,您也会看到这几个项目总是被推荐,从而产生了非常奇怪的推荐。

我认为这就是我们通常所说的“冷启动”情况——除了通常的冷启动问题与项目“冷启动”或用户“冷启动”有关,但我现在面临的问题是新业务“冷启动”——我们没有基本的交互数据量来支持完全个性化的推荐。由于没有每个项目的交互数据,我们希望 Amazon Personalize 服务依赖项目元数据来提供推荐。因此,理想情况下,我们希望服务基于项目元数据进行推荐,一旦获得更多交互,就基于项目元数据+交互进行推荐。

到目前为止,我已经做了很多研究,只是为了找到一个解决方案——在创建活动时增加 exploreWeight。正如本文所指出的,explorationWeight 的较高值表示较高的探索;展示次数少的新商品更有可能被推荐。但这似乎对我没有用。它稍微改善了这种情况,但我仍然经常看到由于更高的集成率而被推荐的奇怪结果。

我不确定是否有其他解决方案可以解决我的问题。当我有一个庞大的目录而没有足够的交互数据时,如何改进推荐结果?

如果有人有任何建议,我将不胜感激。谢谢你,有一个美好的一天!

标签: amazon-web-servicesrecommendation-enginerecommender-systemsamazon-personalize

解决方案


The SIMS recipe is typically what is used on product detail pages to recommend similar items. However, given that SIMS only considers the user-item interactions dataset and you have very little interaction data, SIMS will not perform well in this case. At least at this time. Once you have accumulated more interaction data, you may want to revisit SIMS for your detail page.

The user-personalization recipe is a better match here since it uses item metadata to recommend cold items that the user may be interested in. You can improve the relevance of recommendations based on item metadata by adding textual data to your items dataset. This is a new Personalize feature (see blog post for details). Just add your product descriptions to your items dataset as a textual field as shown below and create a solution with the user-personalization recipe.

{
  "type": "record",
  "name": "Items",
  "namespace": "com.amazonaws.personalize.schema",
  "fields": [
    {
      "name": "ITEM_ID",
      "type": "string"
    },
    {
      "name": "BRAND",
      "type": [
        "null",
        "string"
      ],
      "categorical": true
    },
    {
      "name": "PRICE",
      "type": "float"
    },
    {
      "name": "DESCRIPTION",
      "type": [
        "null",
        "string"
      ],
      "textual": true
    },
  ],
  "version": "1.0"
}

If you're still using this recipe on your product detail page, you can also consider using a filter when calling GetRecommendations to limit recommendations to the current product's category.

INCLUDE ItemID WHERE Items.CATEGORY IN ($CATEGORY)

Where $CATEGORY is the current product's category. This may require some experimentation to see if it fits with your UX and catalog.


推荐阅读