首页 > 其他分享 >关于双塔模型的简单介绍

关于双塔模型的简单介绍

时间:2025-01-21 13:02:06浏览次数:3  
标签:name 模型 item 双塔 num user embedding 简单 input

        双塔模型是一种常用于推荐系统和信息检索等领域的深度学习架构,其核心思想是将用户和物品分别映射到不同的向量空间,通过计算两个向量的相似度来预测用户对物品的偏好或相关性。

1.python示例

 使用python 语言来简单示例一下实现过程如下:

import tensorflow as tf

from tensorflow.keras.layers import Input, Dense, Embedding, Concatenate, Dot, Flatten, Dropout

from tensorflow.keras.models import Model

def build_twin_towers_model(num_users, num_items, embedding_size=32, hidden_units=[64, 32], dropout_rate=0.1):

# 用户塔的输入

user_input = Input(shape=(1,), name='user_input')

# 用户嵌入层

user_embedding = Embedding(input_dim=num_users, output_dim=embedding_size, name='user_embedding')(user_input)

user_embedding = Flatten(name='user_flatten')(user_embedding)

user_tower = user_embedding

# 用户塔的多层感知机(MLP)

for units in hidden_units:

user_tower = Dense(units, activation='relu', name=f'user_dense_{units}')(user_tower)

user_tower = Dropout(dropout_rate, name=f'user_dropout_{units}')(user_tower)

# 物品塔的输入

item_input = Input(shape=(1,), name='item_input')

# 物品嵌入层

item_embedding = Embedding(input_dim=num_items, output_dim=embedding_size, name='item_embedding')(item_input)

item_embedding = Flatten(name='item_flatten')(item_embedding)

item_tower = item_embedding

# 物品塔的多层感知机(MLP)

for units in hidden_units:

item_tower = Dense(units, activation='relu', name=f'item_dense_{units}')(item_tower)

item_tower = Dropout(dropout_rate, name=f'item_dropout_{units}')(item_tower)

# 计算用户和物品的相似度

# 使用点积计算相似度

similarity = Dot(axes=1, name='dot_product')([user_tower, item_tower])

# 构建最终的模型

model = Model(inputs=[user_input, item_input], outputs=similarity, name='twin_towers_model')

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

return model
 

# 示例数据的维度

num_users = 1000

num_items = 500

# 构建双塔模型

model = build_twin_towers_model(num_users, num_items)
 

# 打印模型的摘要

model.summary()
 

# 示例数据生成

import numpy as np

num_samples = 1000

user_indices = np.random.randint(0, num_users, size=num_samples)

item_indices = np.random.randint(0, num_items, size=num_samples)

ratings = np.random.randint(1, 6, size=num_samples)

# 训练模型

model.fit([user_indices, item_indices], ratings, epochs=10, batch_size=32)

# 模型预测

user_id = np.array([1])

item_id = np.array([2])

predicted_rating = model.predict([user_id, item_id])

print(f"Predicted rating for user {user_id[0]} and item {item_id[0]}: {predicted_rating[0][0]}")

2.代码解释

  1. 模型构建函数 build_twin_towers_model

    • 输入层定义
      • user_input 和 item_input 分别是用户和物品的输入层,接收用户和物品的索引。
    • 嵌入层
      • user_embedding 和 item_embedding 是用户和物品的嵌入层,将用户和物品的索引映射到低维的嵌入向量空间。
    • 双塔的多层感知机(MLP)
      • 为用户塔和物品塔分别构建多层感知机,使用 Dense 层添加全连接层,Dropout 层防止过拟合。
    • 相似度计算
      • 使用 Dot 层计算用户塔和物品塔输出向量的点积作为相似度得分。
    • 模型编译
      • 使用 adam 作为优化器,均方误差(MSE)作为损失函数,平均绝对误差(MAE)作为评估指标。
  2. 示例数据生成

    • 使用 numpy 生成随机的用户和物品索引,以及对应的评分。
  3. 模型训练

    • 使用生成的数据对模型进行训练,指定训练的轮数 epochs 和批次大小 batch_size
  4. 模型预测

    • 可以使用 model.predict 对指定的用户和物品进行评分预测。

3.使用说明

  1. 调整超参数

    • 可以调整 embedding_size 来改变嵌入向量的维度,hidden_units 调整用户塔和物品塔中多层感知机的结构,dropout_rate 调整 Dropout 率。
  2. 处理真实数据
    • 上述代码使用了随机生成的数据,实际应用中,需要将真实的用户和物品数据,以及用户对物品的评分数据进行处理,将其转换为合适的格式作为模型的输入。
  3. 评估指标
    • 可以使用更多的评估指标,如余弦相似度、皮尔逊相关系数等,根据不同的应用场景选择合适的指标。
  4. 优化方向
    • 可以尝试使用不同的激活函数,添加更多的隐藏层,使用不同的优化器,或引入更多的特征,如用户的历史行为数据和物品的属性数据,以提高模型性能。

双塔模型在推荐系统、信息检索等领域应用广泛,通过上述代码和解释,你可以根据自己的需求修改和扩展该模型,以适应不同的应用场景。

标签:name,模型,item,双塔,num,user,embedding,简单,input
From: https://blog.csdn.net/eso1983/article/details/145276997

相关文章

  • 【ComfyUI专栏】ComfyUI的模型管理和节点管理-Manager节点
    我们默认情况下,会发现ComfyUI无法进行节点和模型管理。需要通过插件来实现这些模型的管理。而目前开发爱好者们基于ComfyUI的本身功能做了一定的扩展,也就是Manager来进行节点管理,我们需要执行如下的命令来实现节点的复制:cd comfyui\custom_nodesgitclone https://github......
  • ProtChat:融合大语言模型与蛋白质语言模型的自动化蛋白质分析工具
    近年来,大语言模型(LLMs)在自然语言处理领域取得了巨大进展,极大地提升了人机交互的效率和精准度。而在计算生物学中,蛋白质序列被类比为自然语言,基于此的蛋白质大语言模型(PLLMs)也应运而生。然而,PLLMs的应用往往需要复杂的预处理和脚本开发,这使得非计算背景的研究人员难以充分利用其潜......
  • 深度学习与大语言模型开源书单
    下面是一些开源的深度学习与大语言模型教程书籍,可以从GitHub免费下载。神经网络与深度学习链接:https://nndl.github.io/介绍:系统地整理了神经网络和深度学习的知识体系。鉴于深度学习涉及的知识点较多,本书从机器学习的基本概念、神经网络模型以及概率图模型三个层面来串联......
  • tvpvar模型matlab代码及自学手册
    tvp-var模型matlab代码及自学手册,TVP-var新手自学入门必备。资源文件列表derek_zhu201409252059(tvpvar)/drawimp.m , 2080derek_zhu201409252059(tvpvar)/fAt.m , 631derek_zhu201409252059(tvpvar)/fGeweke.m , 768derek_zhu201409252059(tvpvar)/finvm.m , 544de......
  • 【人工智能】Python实战:构建高效的多任务学习模型
    《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界多任务学习(Multi-taskLearning,MTL)作为机器学习领域中的一种重要方法,通过在单一模型中同时学习多个相关任务,不仅能够提高模型的泛化能力,还能......
  • 大语言模型应用实践:性能与资源的权衡之道
    标题:大语言模型应用实践:性能与资源的权衡之道文章信息摘要:文章深入探讨了大型语言模型在实践应用中的多维度权衡。从运行成本、模型特点、部署方案等方面分析了不同选择的优劣势。技术实现上强调了模板设计、缓存优化等细节的重要性,以及RLHF与DPO等训练方法的演进。在评估......
  • 如何有效”PUA“大模型 出好结果?
    实际上来说,并不应该更加礼貌,而是需要“PUA”大模型才能得到更好的结果。最近看的一篇论文《大型语言模型理解情感刺激并可借此得到增强》研究了如何对大模型进行情感刺激来增强提示(prompt)的效果。在这里也将情感划分为两个维度(社会效应和自尊)包含11种类型,分别组合来对比情......
  • 2025最新Ai大模型面试考点,背过就赢了99%的竞争者!
    Ai大模型面试八股文一、大模型(LLMs)基础篇二、大模型(LLMs)进阶篇三、大模型(LLMs)微调篇四、大模型(LLMs)langchain篇五、大模型(LLMs)推理篇六、大模型(LLMS)引强化学习篇七、大模型(LLMs)预训练篇八、大模型(LLMs)agent篇前排提示,文末有大模型AGI-CSDN独家资料......
  • 2025年,程序员转型AI大模型好转吗?成功率高吗?
    前言在程序员圈子中,技术转型近年来一直是热门话题。随着AI技术的迅猛发展,优秀人才短缺,程序员向AI大模型转型似乎成为了一条通往职场先机的路径。但是,这条转型之路是否容易走,成功率又如何呢?前排提示,文末有大模型AGI-CSDN独家资料包哦!一、程序员面临的职场困境对于大多数......
  • 2025年大厂AI大模型面试题精选及答案解析,非常详细!
    前言随着AI市场,人工智能的爆火,在接下来的金九银十招聘高峰期,各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战,为求职市场注入了新的活力。前排提示,文末有大模型AGI-CSDN独家资料包哦!为了助力求职者在面试中展现最佳状态,深入理解行业巨头的选拔标准变得至关重要。......