LLM大模型 (chatgpt) 在搜索和推荐上的应用

news2024/10/5 21:20:26

目录

  • 1 大模型在搜索的应用
    • 1.1 召回
      • 1.1.1 倒排索引
      • 1.1.2 倒排索引存在的问题
      • 1.1.3 大模型在搜索召回的应用 (实体倒排索引)
    • 1.2 排序
      • 1.2.1 大模型在搜索排序应用(融入LLM实体排序)
  • 2 大模型在推荐的应用
    • 2.1 学术界关于大模型在推荐的研究
    • 2.2 推荐存在的一些问题
    • 2.3 大模型在推荐的应用 (加强用户实时兴趣识别)
  • 3 总结

1 大模型在搜索的应用

1.1 召回

我们知道在搜索中,item的召回主要还是基于关键词召回,但是用户表达与商家对item的描述存在差异导致一些长尾query可能召回很少或者召不回item,虽然现在有语义模型可以减少这种问题出现,但当数据稀疏,训练样本较少的情况下,基于语义向量召回效果也并不好。
那么大模型是不是可以提高召回的效果?答案是可以的,大模型的一个优势就是有多领域知识,可以更好的理解信息。接下来介绍用大模型做基础工作提升召回效果

1.1.1 倒排索引

基于关键词的召回,我们首先要清楚什么是倒排索引,如下图所示:

在这里插入图片描述
上述整个流程表示了倒排索引是如何建立的以及ES如何基于倒排索引进行检索。

1.1.2 倒排索引存在的问题

由于用户与商家存在表达差异以及数据噪声等问题,导致基于倒排索引进行召回存在一些问题,假设我们有如下倒排索引数据:

索引词文档
挂面福临门挂面500g*2袋
福临门挂面500g*2袋,佰草集白泥面膜组合
佰草集白泥面膜组合

当用户搜索query=‘白面’,通过切词,可以切分为:"白|面"两个term,从上面倒排索引表可以看出,同时命中“白"和"面“文本是:“佰草集白泥面膜组合”,反而和query相关的文本:“福临门挂面500g*2袋”没能够同时命中这两个term。主要原因是用户表达与商家描述存在差异,同时数据噪声加大了索引建立的复杂性通过语义向量进行召回减少了这种问题,但是需要大量的数据训练模型,才有较好的效果,当数据量不足的时候,效果并不佳。

1.1.3 大模型在搜索召回的应用 (实体倒排索引)

大模型的优势是基于庞大的多类型数据进行学习的,所以有很强的通用知识能力。我们可以基于大模型来优化倒排索引,提升召回的效果。通过大模型对文本生成标准的实体词,比如 {洗面奶,手机,苹果,牛奶,口红,馒头,香蕉,面, 面膜,蛋糕等},基于大模型的理解能力,将文本映射到标准的实体词中,同时对用户输入的query也映射到实体词,这样就可以将query与item的标准实体词建立关联。首先,我们构造好我们的promp,让chatgpt生成我们想要的结果,我们prompt模板可以这么写:

给定如下实体词和文本内容,给出每条文本内容对应的实体词
输出格式:{文本内容:实体词}
实体词:{洗面奶,手机,苹果,牛奶,口红,馒头,香蕉,面, 面膜,蛋糕}
文本内容: {白面, 平安质优 福临门挂面500g*2袋,佰草集白泥面膜组}

然后我们调用chatgpt进行预测,如下所示:
在这里插入图片描述
得到的结果如下:
{白面: 面, 平安质优 福临门挂面500g*2袋: 面, 佰草集白泥面膜组合: 面膜}
从测试来看,预测的还是比较准确的。这样,我们可以基于大模型建立标准化的实体索引,索引建立如下:

索引词标准化实体索引文档
挂面福临门挂面500g*2袋
福临门挂面500g*2袋,佰草集白泥面膜组合
面膜佰草集白泥面膜组合

用chatgpt对query和item生成标准实体词,通过实体词建立索引关系,这种方式可以减少用户表达与item信息描述的差异导致召不回或者召不准的问题,索引建立流程图如下所示:
在这里插入图片描述

1.2 排序

在搜索中,影响语义排序算法主要有三个核心部分,我们基于双塔模型的结构来讲解,如下所示:
在这里插入图片描述
第一部分 (人的特征):在搜索里面,核心是用户搜索的query,还有用户历史行为以及画像等特征
第二部分 (货的特征):这里主要包括货(item)的标题,标签等特征
第三部分 (人与货的关系):主要基于用户行为比如:曝光,点击,转化等反馈数据中建立关系,这也是我们的模型训练样本主要来源。若用户点击了一个item,则这个用户与item的样本label我们就认为是正样本y=1,否则y=0。但是在现实场景中,数据稀疏,数据噪声等问题,导致模型对人与货的匹配学习存在较大的挑战,有可能会犯我们人看来很“低级“的错误,比如用户搜索一个“橙",模型反而将“梨子"相关的item给出的排序分比有“橙子"的item分还高。

1.2.1 大模型在搜索排序应用(融入LLM实体排序)

所以,顺着我们上述部分讲述的大模型在搜索召回层的应用,在排序层我们其实也可以利用大模型的通用知识理解能力,融入大模型的通用知识实体排序,如下图所示:
在这里插入图片描述
我们可以基于大模型对query与item生成的标准实体进行简单的匹配打分再融合到最终的排序的模型里,融合部分可以简单的进行加权求和得到最终的排序分也可以将大模型对query和item生成的标准实体作为基础排序模型特征输入等
在这里也尝试了下用大模型生成向量,基于余弦值做相似度分计算,如下是调用chatgpt计算向量相似分代码:

def embedding(content):
	response = openai.Embedding.create(
	model="text-embedding-ada-002",
	input=content
	)
	embs = response.data[0].embedding
	return embs

if __name__=='__main__':
	query = '白面'
	content_1 ='福临门挂面500g*2袋'
	content_2 = '草集白泥面膜组合'
	q_emb = np.array(embedding(query))
	c1_emb = np.array(embedding(content_1))
	c2_emb = np.array(embedding(content_2))
	# cos simi
	qc1_cos = q_emb.dot(c1_emb) / (np.linalg.norm(q_emb) * np.linalg.norm(c1_emb))
	qc2_cos = q_emb.dot(c2_emb) / (np.linalg.norm(q_emb) * np.linalg.norm(c2_emb))
	print('query:%s\nitem:%s\n相似度为:%s' % (query, content_1, qc1_cos))
	print('query:%s\nitem:%s\n相似度为:%s' % (query, content_2, qc2_cos))	

输出结果为:
在这里插入图片描述
从结果来看,query=‘白面’与item='草集白泥面膜组合’相似分更高😞😞😞😞😞😞😞😞
看来不理想,不过具体openai提供的抽取词向量模型model="text-embedding-ada-002"具体结构是怎样也不是很清楚。

2 大模型在推荐的应用

2.1 学术界关于大模型在推荐的研究

如下是一些大模型在推荐的研究论文:

  • Is ChatGPT a Good Recommender? A Preliminary Study
  • Uncovering ChatGPT’s Capabilities in Recommender Systems
  • LKPNR: LLM and KG for Personalized News Recommendation Framework
  • HeterogeneousKnowledgeFusion:ANovelApproachforPersonalized RecommendationviaLLM
  • LLM-Rec:Personalized Recommendation via Prompting Large Language Models
  • PALR:Personalization Aware LLMs for Recommendation

  • 从上面的一些paper关于大模型在推荐的应用,整体总结如下图所示:
    在这里插入图片描述
    整体还是偏向In-context learning。通过构造 task-specific prompt让大模型进行推荐或者生成更丰富的信息内容提升base推荐模型的效果。

2.2 推荐存在的一些问题

当用户行为数据稀疏,数据量不足的时候,推荐系统存在的一些基础问题如下图所示:
在这里插入图片描述
主要是两大类问题:个性化弱以及精准度问题。

2.3 大模型在推荐的应用 (加强用户实时兴趣识别)

我们可以利用大模型的强大推理以及通用知识能力,让大模型根据用户实时的行为以及场景信息进行用户实时兴趣识别,提升推荐的精准度。下面给出了一个基本方案的流程图:
在这里插入图片描述
让我们给定一些场景信息测试下chatgpt对用户的实时场景兴趣的理解,我们的prompt构造如下:
Task Description:
基于如下用户的画像以及环境信息,针对给出的服务类型:[洗车,加油,代驾,保养,租车],推测出用户接下来在什么时间点做什么服务
Behavior Injection:
{“用户画像":[女,35岁,居住深圳],
“环境信息”:[晚上9点,在北京]
}
Format Indicator:
输出格式:{服务类型:理由:服务概率}

我们调用chatgpt api如下:

在这里插入图片描述
上面红色框的两个参数控制生成文本保守和确定性控制,值越低表示越保守。如下是chatgpt给出的结论:

{“服务类型”:“租车”,“理由”:“用户属性为女性,35岁,长住深圳,晚上9点位于北京,可能是因为需要在北京出差或旅行,所以最有可能需要租车服务。“服务概率”:0.8}

整体来说还是比较符合常规的,我们可以基于实时用户行为数据以及场景信息,借助大模型的强大推理以及通用知识能力进行用户实时意图的理解,让推荐算法更加智能,更好的理解用户的实时用兴趣和需求。

3 总结

本博文给出了大模型在搜索和推荐的一些基础应用,主要针对现有搜索和推荐存在的问题,借助大模型强大的推理能力以及通用知识能力进行一些优化。但大模型在搜索和推荐上的应用还有更多更好的方式,👏🏻欢迎有新兴趣的小伙伴能够一起交流和学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1221902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因,您可能想要将 PDF 转换为 HTML。例如,您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中,您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…

Day33力扣打卡

打卡记录 最大和查询(排序单调栈上二分) 链接 大佬的题解 class Solution:def maximumSumQueries(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:ans [-1] * len(queries)a sorted(((a, b) for a, b in zi…

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进,为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升,为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算,2022年中国数据加工环节的…

​软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】 课本里章节里所有蓝色字体的思维导图

python趣味编程-5分钟实现一个Tic Tac Toe游戏(含源码、步骤讲解)

The Tic Tac Toe In Python是用 Python 编程语言编写的,这个Tic Tac Toe Game In Python是一个简单的基于 GUI 的策略游戏板,非常容易理解和使用。 所有的游戏规则都是一样的,就像我们玩实时井字棋一样,这是一个简单的多人游戏。 Python 中的 Tic Tac Toe 游戏:项目信息 …

数字化时代,VR全景如何助力商企抢占市场份额?

随着5G技术的逐步落地,VR全景已经开始逐渐被应用到各行各业中了,VR餐饮、VR房产、VR景区、VR工厂、VR学校、VR博物馆等等,甚至大家所熟悉的汽车之家中的全景看车、贝壳和链接的全景看房等,所应用的都是VR全景的形式。 前几年电商对…

电子学会C/C++编程等级考试2021年09月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字判断 输入一个字符,如何输入的字符是数字,输出yes,否则输出no 输入 一个字符 输出 如何输入的字符是数字,输出yes,否则输出no 样例1输入 样例1输入 5样例1输出 yes样例2输入 A 样例2输出 …

前端NaN解决方案

// 2.3 函数表达式可以传递参数还可以有返回值,使用方法和前面具名函数类似let sum function (x, y) { // 形参xx||0yy||0return x y}let re sum() // 实参console.log(re) // 3 function sum(x 0, y 0) {return x y}console.log(sum()) // 0console.log(s…

centos7安装keepalived 保证Nginx的高可用

keepalived工作在虚拟路由器冗余协议 VRRP (Virtual Router Redundancy Protocol) 上,它允许一个静态 IP 在两个 Linux 系统之间进行故障转移。 环境准备: 两台虚拟机centos7,IP:192.168.213.4(backup) 192.168.213.6(master) 安…

【开源】基于Vue和SpringBoot的数据可视化的智慧河南大屏

项目编号: S 059 ,文末获取源码。 \color{red}{项目编号:S059,文末获取源码。} 项目编号:S059,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 …

Java智慧工地SaaS管理平台源码:AI/云计算/物联网

智慧工地是指运用信息化手段,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程…

果葡糖浆产业分析:中国市场产量超过685万吨

果葡糖浆是一种由水果汁或果蓉经过酶解、浓缩制成的糖浆。果葡糖浆广泛应用在食品和饮料行业,食品饮料产业的快速发展下推动着果葡糖浆市场需求进一步释放 果葡糖浆是一种由果糖和葡萄糖组成的混合糖浆,已经成为食品和饮料制造业中广泛使用的甜味剂。尽管…

react 手机端 rc-table列隐藏(根据相关条件是否隐藏)、实现图片上传操作

最近公司某一项目的手机端,新增需求:table中的附件要可以编辑,并且是在特定条件下可编辑,其他仅做展示效果。 查阅官方文档,没有发现是否隐藏这一属性,通过css控制样式感觉也比较麻烦,后面发现可…

vue2 tinymce富文本插件

一、介绍 TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的优势: 开源可商用,基于LGPL2.1插件丰富,自带插件基…

vue-pdf在vue框架中的使用

在components目录下新建PdfViewer/index.vue vue-pdf版本为4.3.0 <template><div :id"containerId" v-if"hasProps" class"container"><div class"right-btn"><div class"pageNum"><input v-m…

云端援手:智能枢纽应对数字资产挑战 ——华为云11.11应用集成管理与创新专区优惠限时购

现新客3.96元起&#xff0c;下单有机会抽HUAWEI P60 Art 福利仅限双十一 机会唾手可得&#xff0c;立即行动&#xff01; 「有效管理保护应用与数据的同时实现高效互通」——华为云全力满足企业需求&#xff0c;推出全套「应用集成管理与创新」智能解决方案&#xff1a;华为云…

系列四、GC垃圾回收【四大垃圾算法-引用计数法】

一、概述 Java中&#xff0c;引用和对象是有关联的&#xff0c;如果要操作对象则必须要用引用进行。因此判断一个对象是否可以被回收&#xff0c;很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。简单来讲就是给对象中添加一个引用计数器&#xff0c;每当一…

DataFrame.empty 与 DataFrame is None 的区别是?

请注意&#xff0c;empty 与 None 是不同的概念&#xff0c;这个要注意。不信我们试一下&#xff1a; import pandas as pddf pd.DataFrame()df ! df ! Nonedf.empty df is not None # 已经被赋值&#xff0c;为空但不为Nonea is None参考回答&#xff1a; DataFrame.empty…

【观察】华为:数智世界“一触即达”,应对数智化转型“千变万化”

毫无疑问&#xff0c;数智化既是这个时代前进所趋&#xff0c;也是国家战略所指&#xff0c;更是所有企业未来发展进程中达成的高度共识。 但也要看到&#xff0c;由于大量新兴技术的出现&#xff0c;技术热点不停的轮转&#xff0c;加上市场环境的快速变化&#xff0c;让数智化…

SpringBoot 2.x 实战仿B站高性能后端项目

SpringBoot 2.x 实战仿B站高性能后端项目 下栽の地止&#xff1a;请看文章末尾 通常SpringBoot新建项目&#xff0c;默认是集成了Maven&#xff0c;然后所有内容都在一个主模块中。 如果项目架构稍微复杂一点&#xff0c;就需要用到Maven多模块。 本文简单概述一下&#xff0c…