当前位置: 首页 > article >正文

基于大语言模型的推荐系统(1)

        推荐系统(recommendation system)非常重要。事实上,搜索引擎,电子商务,视频,音乐平台,社交网络等等,几乎所有互联网应用的核心就是向用户推荐内容,商品,电影,音乐。推荐系统几乎无处不在。

      传统的推荐(搜索)系统就是依据各种数学算法实现,例如Google 搜索就是以MapReduce 技术而诞生的。伴随着推荐(搜索)系统的发展,也催生了各种人工智能技术出现。推荐技术的核心就是AI。这就不难理解,为什么像Google,Meta 这样的公司会如此重视发展AI技术。目前的许多推荐系统内部是基于各种神经网络,深度学习技术实现。例如Tiktok 的推荐系统就是基于TensorFlow 构建的AI 模型。

    最近,集中学习了网络上关于推荐系统技术。从TensorFlow Recommandation,TensorFlow Agent 以及Tiktok 的Monolith 推荐算法。

   推荐系统的本质是提出一个事物的特征描述,在一组事物的特征集(Feature set)中寻找与之匹配的事物。实现的基本思想是将特征用矢量来表示,然后通过计算矢量之间的差别,来寻找特征匹配的事物。 例如使用余弦相似度 。

    假设我们有一张包含书籍 1 和 2 的表格,如图 3 所示,其中包含它们的类型。对于类型表中的每个单词,我们在第二个表中创建另一列,如果该单词属于该类型,则赋予它 1,如果不是,则赋予它 0。由于我们的类型是科幻小说和小说,所以我们用这两个词创建另一个表格。如果我们绘制一个图形,其中 x 轴是科学轴,Y 轴是小说轴,我们可以将一个点与每本书关联起来。例如,书籍 1 将是蓝点,其科学轴为 1,小说轴为 1(科幻小说)。书籍 2 将是黄点,其科学轴为 0,小说轴为 1(小说)。我们从原点到这些点绘制一个矢量,我们称之为书籍矢量。

现在,我们可以看到书本向量彼此之间形成一个角度 θ。这个角度的余弦就是我们的相似度度量,它由以下公式给出:

其中AB是我们要考虑的向量,|| A || 和 || B || 是它们的范数(长度)。公式中的A i 和B i 是每个向量的分量。书籍向量 1 为 (1,1),书籍向量 2 为 (0,1)。让我们计算余弦相似度:

这说明了两件事:首先,这些向量具有一定的相似性;其次,θ 是 45º,这是我们已经预料到的,可以使用勾股定理计算出来,并使用三角形的边计算余弦值。

如果两本书都是科幻小说,那么我们将拥有相同的书籍向量 (1,1),余弦值为 1,这意味着它们是相同的。但是,如果第 1 本书是科幻小说 (1,1),第 2 本书是恐怖小说 (0,0),在这种情况下,它们没有任何共同之处,余弦值为 0。因此,相似度高意味着余弦值接近于 1,相似度低意味着余弦值接近于 0 

使用 Python 计算

我们可以列举至少两种方法来计算两个给定向量之间的余弦相似度。一种是使用 numpy:

import numpy as np
from numpy.linalg import norm 

A = np.array([1,8])
B = np.array([9,2])

cos_sim = np.dot(A,B)/(norm(A)*norm(B))
print(f"The cosine similarity is: {round(cos_sim,2)}")

打印的结果 

The cosine similarity is: 0.34

推荐系统的复杂性

从上面的例子看出来,推荐系统似乎比较简单,但是在具体的实现中工程技术是极其复杂的。

        当数据变得巨大时,数据的预处理,存储和算法的计算是十分巨大的,需要各种IT技术做支撑,例如计算机集群系统,大型消息系统,分布式数据库,并行计算,CPU/GPU 算力优化等。这些技术大多数是google 这样的大型互联网公司为了大型推荐系统发展起来的。

针对不同的应用,推荐系统的算法也不尽相同。以视频推荐系统为例:

数据主要包括:

 用户数据

   用户的基本特征:姓名,年龄,语言,爱好

  用户的观看行为:观看的视频,关注,点赞,分享,收看时长

电影数据

  电影的基本特征:标题,描述,语言

  电影的播出行为:收看的听众数量,点赞数,分享数等

推荐方法

推荐的策略可以许多种,我们列出了常见的几种:

  1.  计算用户的特征与电影的特征的相似度,列出前10个最相似的电影。
  2. 列出用户最近看过的前十部电影,计算出与这10部电影相似的电影,比如选择2部电影,一共列出10*2=20 部新的影片。
  3. 计算与用户的特征相似的其它用户,列出前10个相似的用户,找出相似用户看过的电影(每个用户选择2部),于是推荐20部电影。

LLM 时代的推荐系统

   近年来,LLM 横空出世,基于LLM 的应用层出不穷。有意思的是,LLM 也可以被认为是一种推荐系统!根据用户的Prompt ,推荐一段合适的回答。如果说LLM 加上实时数据采集,就成为了搜索引擎,传统搜索公司受到前所未有的压力。这使我在头脑中冒出了一个想法,能够使用LLM 来实现推荐系统么?这将使事情变的简单,清晰。本人觉得这是一个有意思的课题。

LLM 推荐系统的可能有两种:

  •    训练一个专业的LLM 实现推荐。
  •    利用LLM embedding ,LLM 和矢量数据库,实现的推荐系统

第一种方式不知道效果会怎么样,后一种方式已经有人做了出来。我们重点研究第二种方式。 

主要工具

  1.         利用大模型embedding 实现矢量化。
  2.         构建vector 数据库。
  3.         使用大模型的技术架构 

实时 Embedding 技术

        Embedding 潜入是针对已有的,静态的数据集构建的矢量集,例如RAG 技术,将文本向量化,将它们存储在矢量数据库,实现所谓的检索增强生成(RAG)。

     但是在实际应用中,用户,视频的特征,行为是不断变化的。比如在TikTok 的推荐系统中设置了两个模型服务器,一个用于实时训练,另一个用于推理。训练模型和推理模型定时地实现参数同步。因此,如果将LLM 技术应用于推荐系统(或者说搜索系统)的话,要构建实时embedding 机制。

从现有的一些国外文献来看,实现实时Embedding 的技术无非有两种:

真正的实时嵌入

  当用户的信息和行为发生变化的时候,就从新训练一次embedding ,并且更新生产系统中的embedding。为了提高系统的效率,可以考虑将信息分段。使用户特征变化需要更新的矢量数据最小。例如通过语言区分用户,中文用户变化时,只是更新中文用户矢量数据库。当然,实现实时嵌入的成本是很高的。

准实时嵌入

        与实时embedding的流程类似,只是将用户的特征数据暂存起来,间隔一段时间进行一次矢量库更新。

        也可以采取TikTok 的方法,设立两个矢量数据看,一个用于生产系统,一个用于实时更新。当更新达到一定的维度(例如1530) 就开始切换矢量数据库。

在实际应用中,要根据用户和电影的特点,做分段存储和更新。工程实现中有许多技术细节需要考虑。

在下一篇博文中,我们来探讨如何构建一个基于LLM 的播客推荐系统。


http://www.kler.cn/a/561018.html

相关文章:

  • 智慧后勤的消防管理:豪越科技为安全护航
  • 安当ASP:中小企业低成本Radius认证服务器解决方案
  • 数据驱动未来!天合光能与永洪科技携手开启数字化新篇章
  • 机器学习基础入门——机器学习库介绍(NumPy、pandas、Matplotlib)
  • vue3学习3-route
  • 大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1)
  • Qt如何将数据传入labview,Qt又如何从labview中读取数据?
  • PHP入门基础学习七(函数3)
  • 下载安装umamba教程使用命令
  • Golang的静态强类型、编译型、并发型
  • Maven 依赖管理基础(一)
  • uniapp开发,轮播图,文字省略号,具名插槽的实现
  • springboot实现文件上传到华为云的obs
  • 前端面试题---vue和react的区别
  • Ubuntu及其衍生系统安装Python
  • VMware17.6+CentOS 8安装教程
  • C++核心指导原则: 错误处理
  • AWS S3深度解析:十大核心应用场景与高可用架构设计实践
  • Pretraining Language Models with Text-Attributed Heterogeneous Graphs
  • kotlin 知识点五 泛型和委托