毕业设计:基于深度学习的短视频推荐系统 人工智能
CSDN 2024-07-13 13:31:02 阅读 97
目录
前言
项目背景
数据集
设计思路
更多帮助
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
大家好,这里是海浪学长计算机毕设专题,本次分享的课题是
🎯基于深度学习的短视频推荐系统 人工智能
项目背景
随着互联网和移动设备的普及,短视频成为人们日常生活中广泛使用的媒体形式。然而,面对海量的短视频内容,用户往往面临着信息过载和资源分散的问题。因此,基于深度学习的短视频推荐系统的研究和设计变得至关重要。这样的推荐系统可以根据用户的兴趣和偏好,为其提供个性化的短视频推荐,提高用户体验和满足用户需求。
数据集
由于网络上没有现有的合适的数据集,我决定自己进行网络爬取。通过编写爬虫程序,我收集了大量的短视频数据,涵盖了各种主题和内容类型。这个自制的数据集包含了真实的用户行为和交互数据,例如观看记录、点赞、评论等,以及视频的文本描述和标签信息。通过这个数据集,我能够更好地理解用户的兴趣和偏好,为短视频推荐系统的设计和优化提供可靠的基础。
设计思路
推荐系统旨在解决在海量信息中为用户提供有价值物品的问题。通过过滤和预测信息,推荐系统能够准确识别用户对物品的偏好,从而更好地满足用户的需求。通常,推荐系统被抽象为一个函数,该函数基于用户、上下文信息和候选物品等数据,计算用户对候选物品的偏好,并生成最终的推荐列表。为了应对复杂的业务环境和大规模的数据,工业级推荐流程通常分为召回层和排序层两个阶段。召回层通过简单高效的算法从海量的候选物品中筛选出有价值的信息,而排序层则利用复杂的深度学习模型根据用户可能点击的概率对物品进行精确排序,以提升排序的准确性。这两个阶段相互配合形成推荐系统的数据流架构,实现了高效而精准的推荐过程。
召回层在处理大量数据时需要保持简洁易用的建模方式。通常情况下,召回层使用较少的特征或仅使用少量特征。为了提高效率,可以采用有效的召回准则、算法或相对简单的深度学习模型。召回层可以看作是一个信息漏斗,快速从海量数据中筛选出有用的信息,以缩小排序层模型的计算范围。召回层还负责将多个召回算法的候选集进行融合,从不同的角度对数据集进行召回。多路召回层起到信息融合的作用,克服了单一召回特征的单一性、信息量不足和缺乏多样性等问题。最终,召回层得到的规模不超过一千条的候选集将作为排序层的输入,因此召回层决定了排序层推荐结果的上限。
排序层本质上是一个端到端的模型,充分利用大量特征和更复杂的深度学习模型来挖掘更深层次的信息。通过深度学习的各个模块,用户特征、物品特征和上下文特征得以充分交叉,对召回层获取的候选集进行复杂的迭代运算,以提高用户点击的准确度。排序层通过深度学习模型的各个组件进行全面的特征交叉和计算,以挖掘更丰富的用户和物品关系。排序层在推荐系统中起到重要作用,通过精确的排序,为用户提供个性化且准确的推荐结果。
协同过滤是最早出现并且被广泛使用的推荐算法,其核心思想是利用用户的历史行为统计来计算和推荐。它并不是一种特定的算法,而是基于物以类聚、人以群分的理念。通过特定的学习方法,可以得到物品之间的相似关系和用户之间的相似关系。协同过滤算法的实现可以分为基于物品的协同过滤和基于用户的协同过滤两种。
基于用户的协同过滤是最早被提出的方法,一般被认为是推荐系统的开创者。该算法以用户为主体,通过计算用户之间的相似度来进行推荐。具体步骤包括:首先建立用户-物品评分矩阵,收集能够代表用户的信息,构建一个包含m个用户和n个物品的共现矩阵;然后计算所有用户的近邻集合,基于用户的协同过滤通过相似度计算,得出每个物品的推荐分数;最后,通过分析近邻集合,预测目标用户的兴趣,并从中选择频次较高且未在共现矩阵中出现的物品作为最终的推荐结果。
基于物品的协同过滤是一种通过分析用户对物品的评价来计算物品之间相似性,并根据用户的兴趣推荐相似度较高的物品的方法。与基于用户的协同过滤相比,基于物品的协同过滤以物品为基础,其核心思想有所不同。基于物品的协同过滤通过比较物品之间的相似度来进行推荐。具体步骤包括:首先建立物品-用户评分矩阵,记录用户对物品的评分情况;然后计算物品之间的相似度,可以使用各种相似度度量方法,如余弦相似度或皮尔逊相关系数;接下来,根据物品之间的相似度,为目标用户推荐与其历史兴趣相似的物品。推荐的排序通常是按照相似度从高到低进行排列,并选择Top-N的物品作为推荐结果。这些推荐的物品是用户之前没有交互过的物品,从而扩展了用户的选择范围。
XDeep FM模型是一种用于排序阶段的深度学习模型,它由线性层、DNN层和CIN层构成,具有卓越的性能。该模型引入了一种新的交叉交互网络结构称为CIN,旨在在向量层上显式生成交互式网络的特征。包括线性层、DNN层和CIN结构。线性层通过逻辑回归,将离散特征使用one-hot编码后作为输入。DNN层则将离散特征的向量表示和连续特征向量作为输入,通过多层全连接网络学习深层特征。CIN层用于显式地学习高阶的交叉特征,通过对特征向量进行向量级别的交互,实现特征交叉的学习。通过引入CIN结构,模型能够有效地学习特征之间的交互特性,提高排序的性能。
BST是一种点击率预估模型,通过引入Transformer结构来处理用户行为序列并提取隐藏信息。相比于其他模型,BST能够更好地表达用户兴趣,考虑序列的依赖和顺序关系,从而在离线和在线场景中取得了性能提升。该模型由Embedding Layer、Transformer Layer和MLP Layer组成,通过嵌入预处理、深度表征和特征抽象,能够准确预测用户的点击率。BST的应用Transfommer结构使其能够深入挖掘用户行为序列中的潜在信息,为个性化推荐和广告点击率预估等任务提供了有效的解决方案。
通过在召回阶段使用Bert编码器对文本特征进行更充分的提取,能够更好地模拟用户与短视频之间的交互特征。相比于传统的word2vec方法,使用大规模预训练的Bert模型可以获取更多的语义级信息表征,从而更好地学习用户的多样性偏好和短视频的本身特性。该模型通过引入Bert编码器,提供了额外的补充信息,使得特征交互发生在元素级上,从而提高了推荐效果。实验结果表明,融合Bert的XDeep FM模型在推荐效果上优于传统模型和其他基线算法。通过这种模型,在排序阶段能够更精准地为用户推荐兴趣度高的微视频,弥补了召回阶段的不足,提升了点击率。
Bert是一种基于Transformer的预训练语言模型,通过学习大规模文本数据的上下文信息,能够提取丰富的文本特征表示。使用Bert提取文本信息特征的过程包括数据预处理、加载预训练的Bert模型、特征提取和特征表示整合。预处理阶段将文本转换为Bert模型所需的输入格式,而加载预训练的Bert模型作为特征提取器,能够将文本映射为高维语义空间中的向量表示。通过选择词向量层或整体句子表示,可以获取单词、子词或整个句子的特征表示。这些特征可以用于各种下游任务,如文本分类、命名实体识别和语义匹配等。
实验在使用Python 3.8版本和Tensorflow 2.5版本进行软件开发时,涉及到的相关开发包有Numpy、Pandas、Sklearn和Gensim等。针对召回层的ItemCF算法,使用Sklearn机器学习库进行学习和实现。而FM、DSSM和YouTube DNN等模型则使用Tensorflow 2.5进行召回模型的构建。在模型训练和测试方面,采用了随机形式划分数据集,其中80%的数据用于训练模型,剩下的20%用作测试集。训练过程中,设置了Batch_Size为512,Epochs为100,学习率为0.001,以及Embedding Size为100。
模型的训练过程主要包括使用预训练的模型提取文本特征表示,将离散特征编码为特征向量并与文本向量拼接,通过Embedding层降维得到模型输入。然后,通过前向传播计算预测评分,使用交叉熵损失函数计算损失值,并通过反向传播和Adam优化算法调节参数以提升模型性能。循环执行这些步骤直至收敛或达到最大迭代次数,完成训练过程。综合使用了Bert、CIN和DNN等模块,通过优化算法和梯度传播迭代更新权重和偏置,该模型能够更好地理解文本信息和离散特征,提高召回模型的性能。
在该实验中,使用精确率(Precision)、F1值(F-measure)和AUC作为评价指标来评估模型的性能。在进行数据预测时,根据实际情况,可以得到四种可能的结果:TP(True Positive,真正例)表示正确预测的数量;FN(False Negative,假反例)表示将实际正确结果错误地预测为错误;FP(False Positive,假正例)表示将错误结果错误地预测为正确;TN(True Negative,真反例)表示完全正确地识别出错误结果的数量。这些指标可以用来衡量模型在准确性、召回率和整体性能方面的表现。精确率评估了模型预测为正的样本中真正为正的比例,F1值结合了精确率和召回率,综合考虑了模型的准确性和召回率,而AUC评估了模型在二分类问题中正例和反例之间的区分能力。
相关代码示例:
<code>import tensorflow as tf
from transformers import TFBertModel, BertTokenizer
# 加载预训练的Bert模型和分词器
model_name = 'bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(model_name)
bert_model = TFBertModel.from_pretrained(model_name)
# 假设有文本数据和离散特征数据
text_data = ['这是一段文本数据', '这是另一段文本数据']
discrete_features = [1, 0, 1, 0] # 示例离散特征向量
# 文本数据处理
encoded_inputs = tokenizer(text_data, padding='max_length', truncation=True, max_length=128, return_tensors='tf')code>
input_ids = encoded_inputs['input_ids']
attention_mask = encoded_inputs['attention_mask']
# 离散特征编码
discrete_features_tensor = tf.convert_to_tensor(discrete_features, dtype=tf.float32)
# 使用Bert模型获取文本特征表示
outputs = bert_model(input_ids, attention_mask=attention_mask)
text_features = outputs.last_hidden_state
# 拼接文本特征和离散特征
concatenated_features = tf.concat([text_features, tf.expand_dims(discrete_features_tensor, axis=1)], axis=-1)
# 使用Embedding层降维
embedding_size = 100
embedded_features = tf.keras.layers.Embedding(input_dim=concatenated_features.shape[-1],
output_dim=embedding_size)(concatenated_features)
embedded_features = tf.reduce_mean(embedded_features, axis=1) # 取平均降维
# 最终得到的embedded_features即为模型的输入
海浪学长项目示例:
更多帮助
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。