登录
原创

谷歌推荐系统框架 (一) —— 基本架构

发布于 2020-10-20 阅读 10101
  • 人工智能
原创

推荐系统框架

基本模式

  • 候选集生成
    在第一阶段,系统从潜在的庞大语料库开始,并生成更小的候选集。 例如,YouTube中的候选生成器将数十亿个视频减少到数百或数千。 考虑到语料库的庞大规模,该模型需要快速评估查询。 给定模型可以提供多个候选生成器,每个候选生成器都指定候选的不同子集

  • 评分
    接下来,另一个模型对候选者进行评分和排名,以便选择要显示给用户的项目集(大约10个)。 由于此模型评估的是项目的相对较小子集,因此系统可以依靠其他查询来使用更精确的模型。

  • 重排序
    最后,系统必须考虑最终排名的其他限制条件。 例如,系统删除用户明确不喜欢的项目或提高新鲜内容的得分。 重新排序还可以帮助确保多样性,新鲜度和公平性。
    image.png

先验知识

item 物品

物品/电影/音乐/…

Query 查询(用户和他的额外信息)

系统用来提出推荐的信息。 查询可以是以下各项的组合:

  • 用户信息

    • 用户的ID

    • 用户先前与之互动的项目

  • 附加语境

    • 一天中的时间

    • 用户的设备

候选集生成

两种常见的候选集生成算法

  • 基于物品的协同过滤:物品(电影)之间的相似度
  • 基于用户的协同过滤:用户之间的相似度

Embedding词嵌入方法

基于内容的过滤和协作过滤都将每个项目和每个查询(查询就是指用户)映射到公共嵌入空间<math><semantics><mrow><mi>E</mi><mo>∈</mo><msup><mi>R</mi><mi>d</mi></msup></mrow><annotation encoding="application/x-tex">E \in R^d</annotation></semantics></math>ERd中的嵌入向量。 通常,嵌入空间是低维的(即d比语料库的大小小得多),并且捕获项目或查询集的某些潜在结构。 相似项目(例如通常由同一用户观看的YouTube视频)最终在嵌入空间中并排在一起。 “相似性”的概念由相似性度量定义。

相似度度量

相似性度量是函数<math><semantics><mrow><mi>s</mi><mo>:</mo><mi>E</mi><mo>×</mo><mi>E</mi><mo>→</mo><mrow><mi mathvariant="script">R</mi></mrow></mrow><annotation encoding="application/x-tex">s:E\times E \rightarrow\mathcal{R}</annotation></semantics></math>s:E×ER ,它采用一对嵌入并返回一个标量来度量它们的相似性。 嵌入可用于候选生成,如下所示:给定查询嵌入<math><semantics><mrow><mi>q</mi><mo>∈</mo><mi>E</mi></mrow><annotation encoding="application/x-tex">q \in E</annotation></semantics></math>qE,系统将查找与q接近的项嵌入<math><semantics><mrow><mi>x</mi><mo>∈</mo><mi>E</mi></mrow><annotation encoding="application/x-tex">x \in E</annotation></semantics></math>xE,即具有高相似度<math><semantics><mrow><mi>s</mi><mo>(</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">s(q,x)</annotation></semantics></math>s(q,x)的嵌入。

为了确定相似程度,大多数推荐系统都依赖以下一项或多项:

  • 余弦

  • 点积

  • 欧氏距离

余弦

<math><semantics><mrow><mi>s</mi><mo>(</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>)</mo><mo>=</mo><mi>c</mi><mi>o</mi><mi>s</mi><mo>(</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">s(q,x) = cos(q,x) </annotation></semantics></math>s(q,x)=cos(q,x)

点积

两个向量的点积为:

<math><semantics><mrow><mi>s</mi><mo>(</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>)</mo><mo>=</mo><mo><</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>></mo><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>d</mi></msubsup><mrow><msub><mi>q</mi><mi>i</mi></msub></mrow><mrow><msub><mi>x</mi><mi>i</mi></msub></mrow></mrow><annotation encoding="application/x-tex">s(q,x) = <q,x> = \sum_{i=1}^d{q_i}{x_i} </annotation></semantics></math>s(q,x)=<q,x>=i=1dqixi

它也由

<math><semantics><mrow><mi>s</mi><mo>(</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>)</mo><mo>=</mo><mrow><mo fence="true">∥</mo><mi>x</mi><mo fence="true">∥</mo></mrow><mrow><mo fence="true">∥</mo><mi>q</mi><mo fence="true">∥</mo></mrow><mi>c</mi><mi>o</mi><mi>s</mi><mo>(</mo><mi>q</mi><mo separator="true">,</mo><mi>x</mi><mo>)</mo></mrow><annotation encoding="application/x-tex">s(q,x) = \left \| x \right\| \left\| q \right\| cos(q,x) </annotation></semantics></math>s(q,x)=xqcos(q,x)

给出(角度的余弦乘以范数的乘积)。 因此,如果将嵌入标准化,则点积和余弦会重合。

欧式距离

比较相似度

考虑右图中的示例。 黑色矢量说明了查询嵌入。 其他三个嵌入向量(项A,项B,项C)表示候选项。 根据所使用的相似性度量,项目的排名可能会有所不同。

使用图像,尝试使用所有三种相似性度量来确定物品等级:余弦,点积和欧几里得距离。
Image showing a two-dimensional embedding space, which contains a query embedding and three candidate items.

选择哪种相似性度量?

与余弦相比,点积相似度对嵌入的规范敏感。 即,嵌入的范数越大,相似度越高(对于具有锐角的项目),并且推荐该项目的可能性就越大。 这可能会影响建议,如下所示:

  • 训练集中经常出现的项目(例如,流行的YouTube视频)往往具有较大的规范嵌入。 如果需要捕获流行度信息,那么应该更喜欢点积。 但是,如果不小心,受欢迎的商品最终可能会主导这些建议。 在实践中,可以使用相似性度量的其他变体,这些变体较少强调项目的规范。

  • 在训练期间,很少出现的项目可能不会经常更新。 因此,如果使用大范数对它们进行初始化,则系统可能会建议稀有项目,而不是更相关的项目。 为避免此问题,请注意嵌入初始化,并使用适当的正则化。

评论区

哎嘿

1

1

1

举报