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

news/2025/2/25 2:41:45

        推荐系统(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.niftyadmin.cn/n/5864932.html

相关文章

达梦DTS数据迁移工具生产篇(MySQL->DM8)

本文章使用的DTS工具为 2024年9月18日的版本,使用的目的端DM8数据库版本为2023年12月的版本,注意数据库版本和DTS版本之间跨度不要太大,以免出现各种兼容性的报错。若发现版本差距过大时,请联系达梦技术服务工程师处理。 1. 迁移…

Pytorch使用手册-音频 I/O(专题十八)

音频输入/输出 本教程展示了如何使用TorchAudio的基本输入/输出(I/O)API来检查音频数据,将其加载到PyTorch张量中,并保存PyTorch张量。 警告 在最近的版本中,音频输入/输出进行了多个计划或已实施的更改。有关这些更改的详细信息,请参考“Dispatcher 介绍”。 import to…

01 冲突域和广播域的划分

目录 1、冲突域和广播域的划分 1.1、冲突域 1.2、广播域 1.3、对比总结 1.4、冲突域与广播域个数计算例题 2、交换机和路由器的结构 2.1、交换机的结构 2.2、路由器的结构 1、冲突域和广播域的划分 1.1、冲突域 冲突域是指网络中可能发生数据帧冲突的物理范围。当多…

使用Socket编写超牛的http服务器和客户端(一)

实现一个高性能的基于 IOCP(I/O Completion Ports)的 HTTP 服务器,支持多线程、动态线程池调整和路由处理。 主要功能和特性 IOCP 模型: 使用多个 IOCP 句柄(IOCP_COUNT),将客户端连接均匀分配到不同的 IOCP 上,减少线程竞争。 工作线程使用 GetQueuedCompletionStatu…

短剧源码搭建部署海外短剧系统

随着海外短剧市场的蓬勃发展,越来越多的企业和个人希望搭建自己的短剧平台,以满足全球用户的需求。本文将详细介绍如何使用PHP开发、搭建、部署并上线一个海外短剧系统。整个过程将涵盖需求分析、技术选型、系统架构设计、开发流程、测试、部署以及上线后…

前端八股——HTML+CSS

前端八股:HTMLCSS 说明:个人总结,用于个人复习回顾,将持续改正创作,已在语雀公开,欢迎评论改正!

【行业解决方案篇十二】【DeepSeek教育科技:个性化学习路径推荐】

开篇:当AI成为私人导师 你可能不知道,现在北京某重点中学的数学课,同一个班级的30个学生每天要刷30套完全不同的练习题。这不是老师偏心,而是AI系统根据每个人的"知识漏洞"实时生成的个性方案。今天要揭秘的DeepSeek教育科技系统,就是这样一个能把"填鸭式…

【落羽的落羽 数据结构篇】顺序结构的二叉树——堆

文章目录 一、堆1. 概念与分类2. 结构与性质3. 入堆4. 出堆 二、堆排序三、堆排序的应用——TOP-K问题 一、堆 1. 概念与分类 上一期我们提到,二叉树的实现既可以用顺序结构,也可以用链式结构。本篇我们来学习顺序结构的二叉树,起个新名字—…