推荐系统

280 阅读5分钟

推荐系统

Definition

定义:根据历史数据,给用户推荐他感兴趣的物品

  • 历史数据:行为数据、user&item的属性数据、上下文;
  • 怎么定位用户的兴趣?

推荐系统的基本逻辑:利用历史数据分析出用户的兴趣

如何判定用户的兴趣

直观上的

直接假设用户的兴趣就是 XXX ;

  • 认为目标用户有过行为、或者明确表示喜好的行为的 item,就是他的兴趣,并以此为兴趣点,给目标用户推荐相似的 item

    如何得到item之间的相似性?

    • item CF:多数用户共同买过itemA,itemB,则认为itemA itemB是相似的
    • 内容相似:利用NLP分析item的相似性,比如:分析文章的标题、描述信息等
    • 关联规则挖掘:

    对应到推荐系统上,就是找回路径:I2I

这样做并不好,有过行为并不一定代表用户真的就喜欢,就像日常生活中,做所有的事并不一定都是兴趣驱动

近似兴趣

不去假定用户的兴趣,而是利用类似、类比的方法,得到相似的用户群,认为同一种人群喜欢的物品,目标用户也会喜欢。也就是物以类聚

  • 如何得到相似的用户群

    • 聚类方法:根据用户的属性信息去聚类
    • userCF:认为具有同样行为的用户可以被认为是相似的

    对应到推荐系统上就是U2U

这样的做法可以有效解决冷启动问题;

但是仍存在问题,不够精准,一个用户肯定不止一个兴趣点,相似的用户群,肯定是基于某几个兴趣点的相似得到的;也就是说,一个用户群中,并不一定能做到用户的兴趣完全匹配

尝试计算出用户的兴趣

提出使用隐语义模型挖掘出 隐含特征(latent factor) 来联系用户兴趣和物品;

latent factor 可以认为是隐含的兴趣向量;

比如:Topic Model、MF、LDA 等

基本步骤如下:

  • 对书和物品基于兴趣进行分类

    • 隐语义分析技术

      通过隐语义分析技术,计算出k个隐类,也就是k个隐含特,以及user、item对象k个隐类的权重;

      隐语义分析技术,有 隐含主题模型、隐含类别模型、矩阵分解

  • 对于用户,首先得到他的兴趣分类,然后从分类中挑选出他可能喜欢的物品

推荐系统与深度学习的联系

尝试计算出用户的兴趣向量中的兴趣向量与基于深度学习的自然语言处理中Embedding概念不谋而合我;

隐兴趣向量能够表示出user与item的相关性;

在自然语言处理中,Embedding技术能够表示出词与词的相关性;

Embedding技术的原理

One-hotting -> Embedding

在自然语言处理中,One-hotting 是用来做word的数值化的一个工具,它能唯一标志每一个词,但它有一个缺点,就是默认了每一个词都是无关的,这显然是不符合现实的;

Embedding向量可以体现出词的相关性。具体的做法是,将一个词表示成一个稠密的向量,就可以计算词的相似度,进而计算句子的相似度,也可以直接把这个稠密向量作为特征输入给高级的预测模型

Andrew Wu在自然语言处理中,举了词语类比推理的例子;

  • 把一个词表示成一个稠密的向量,就可以计算词的相似度,继而计算句子的相似度,也可以直接把这个稠密向量作为特征输入给高级的预测模型

这个问题需要将左边的还有右边这4个词的嵌入向量提供给神经网络,就像我们之前做的那样来预测中间的单词是什么,来预测中间的目标词,这也可以用来学习词嵌入。

最简单的学习词嵌入:

  • 学习词嵌入矩阵 E

    基本模型:

    • one-hotting * E =embedding向量

    • embedding向量再接入一个softmax

    优化目标函数,计算出嵌入矩阵E

    **新的问题:**softmax计算量太大,使用负采样解决

    把10,000的soft-max多分类转换成 **** 个二分类问题

在自然语言处理中,词嵌入Embedding是用来表达词语之间的相关性的;

使用深度学习,来学习出这样一个Embedding矩阵;

深度学习的本质是:通过一大堆具有x->function->y关系的x,y的样本,来学习出function;前提

在这里如何定义词语之间的相关性?

  • 认为出现在同一句话中的词就具有某种相关性。

  • 数据准备:

    具体地,选取一句话中的任意一个词作为 上下文 context c,作为样本的input x,再选取任意上下文附近的一个词作为目标词 t 作为样本的output y;并以窗口滑动的方式选取若干c、t 充实样本库;

  • 模型搭建

    • 样本数值化

      使用 One-hotting 编码,将词向量化。初始状态,假设词与词之间是无关的,从 One-hotting到Embedding就是一种无关到相关的过程

    • One - hotting -> Embedding

      假设一个 Embedding 矩阵。最终的Embedding矩阵就是word2vec追求的结果

    • Embedding -> Softmax输出

      问题,由于词的数量很多,导致Softmax过于庞大从而计算复杂,做一个优化处理:

      • 多层级的二分类

      • 负采用:多分类问题变二分类问题2

用目标词附近的一个单词作为上下文,实际研究中,用目标此的前几个单词作为上下文是常见的作法

使用word2vec学习词嵌入

GloVe学习词嵌入

【唐宇迪】Python快速入门(五小时带你飞)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili


Glove 论文

什么是 GloVe?

  • 一种 词向量 的实现方式

词向量的背景

  • word2Vec

GloVe 的由来?

Glove的具体实现?

实验数据