首页 > 其他分享 >完整代码——SASRec 基于自注意力的序列推荐

完整代码——SASRec 基于自注意力的序列推荐

时间:2024-09-16 13:24:09浏览次数:3  
标签:SASRec courses 注意力 course json user file 序列 id

关于“SASRec 基于自注意力的序列推荐”这篇论文的学习笔记和代码复现可以看之前写的这两篇:

学习笔记——SASRec 基于自注意力的序列推荐-CSDN博客

代码复现——SASRec 基于自注意力的序列推荐-CSDN博客

这次是关于这篇论文的代码展示,全文一万六千多字,难免会有所疏漏,有任何问题欢迎指出。

需要完整代码压缩包的伙伴可以私信我(复现不易,分享难得,小偿即可,白嫖勿扰)。

1、项目代码结构

1.1、data文件夹中存放了各种经过处理的数据集

 文本内容长这样

其中user-course_order.txt是由user-course_order.json得来的, user-course_order.json长这样:

1.2、jsonProcessing文件夹中存放的是各种数据处理代码

如何将json文件转换成模型所需的数据格式呢,在jsonProcessing文件夹下运行json2txt.py代码

import json


def read_json(file_path):
    """
    读取JSON文件,文件中每一行都是一个独立的JSON对象。它将每一行解析为Python字典,并将所有用户存储在一个列表中。
    """
    data = []
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            data.append(json.loads(line))
    return data


def write_to_txt(users, output_file):
    """
    遍历用户列表,对于每个用户,提取新用户ID和课程编号列表,并将它们转换为指定的格式(每行包含用户ID和课程ID),然后写入TXT文件。
    """
    with open(output_file, 'w', encoding='utf-8') as file:
        for user in users:
            new_user_id = user['新用户id']
            for course_id in user['course_order_numbered']:
                file.write(f"{new_user_id} {course_id}\n")


# 主函数
def main():
    """
    读取JSON文件中的用户数据。
    遍历每个用户的数据,提取新用户ID和课程编号列表。
    将这些数据转换为指定的格式,即每行包含用户ID和课程ID。
    将转换后的数据写入TXT文件。
    """
    user_json_path = '../data/selected_user_numbered.json'  # 筛选后的用户JSON文件路径
    output_txt_path = '../data/user-course_order.txt'  # 输出TXT文件路径

    # 读取筛选后的用户数据
    filtered_users = read_json(user_json_path)

    # 将用户数据写入TXT文件
    write_to_txt(filtered_users, output_txt_path)

    print(f'用户数据已写入 {output_txt_path}')


if __name__ == '__main__':
    main()

 要想得到selected_user_numbered_large.json文件,要先将原始慕课数据集进行处理。

1.2.1、原始的user.json,存放了所有学生的id、姓名、课程观看序列等信息

1.2.2、原始的course.json,存放了所有课程的id、课程名等信息 

 1.2.3、在jsonProcessing文件夹下运行course_number.py代码

先给课程重新编号,从1开始,得到course_numbered.json,其文件内容为:

代码为: 

import json


def read_course_json(file_path):
    """
    读取JSON文件,假设每个课程占一行。
    """
    courses = []
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            courses.append(json.loads(line))
    return courses


def assign_numbers(courses):
    """
    为课程分配从1开始的编号。
    """
    course_id_map = {}
    for index, course in enumerate(courses, start=1):
        course_id_map[course['id']] = index
    return course_id_map


def write_courses_with_numbers(courses, course_id_map, output_file):
    """
    将编号后的数据写入新的JSON文件。
    """
    with open(output_file, 'w', encoding='utf-8') as file:
        for course in courses:
            # 创建一个新的字典,只包含编号、原编号和课程名
            new_course = {
                '新课程编号id': course_id_map[course['id']],
                '原课程编号id': course['id'],
                '课程名name': course['name']
            }
            # 将新的课程字典转换为JSON格式的字符串,并确保中文字符不被转义
            json.dump(new_course, file, ensure_ascii=False)
            file.write('\n')
# def write_courses_with_numbers(courses, course_id_map, output_file):
#     """
#     将编号后的数据写入新的JSON文件。
#     """
#     # 创建一个新的列表,包含所有课程的编号信息
#     numbered_courses = [
#         {
#             '新课程编号id': course_id_map[course['id']],
#             '原课程编号id': course['id'],
#             '课程名name': course['name']
#         } for course in courses
#     ]
#     # 将新的课程列表转换为JSON格式的字符串,并确保中文字符不被转义
#     with open(output_file, 'w', encoding='utf-8') as file:
#         json.dump(numbered_courses, file, ensure_ascii=False, indent=4)

# 主函数
def main():
    course_json_path = '/Dataset/MOOCCub

标签:SASRec,courses,注意力,course,json,user,file,序列,id
From: https://blog.csdn.net/m0_63294504/article/details/142301198

相关文章

  • 数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
    时间序列概况在日常生活和专业研究中都很常见。简而言之,时间序列概况是一系列连续的数据点 y(0),y(1),...,y(t) ,其中时间 t 的点依赖于时间 t-1 的前一个点(或更早的时间点)。在许多应用中,研究者致力于预测时间序列概况的未来行为。存在各种建模方法。这些模型通常基......
  • 信息学奥赛初赛天天练-90-CSP-S2023基础题2-离散数学、染色、完全三叉树、平面图、边
    PDF文档公众号回复关键字:202409152023CSP-S选择题1单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)6以下连通无向图中,()一定可以用不超过两种颜色进行染色A完全三叉树B平面图C边双连通图D欧拉图7最长公共子序列长度常常用来衡量两个序列的相......
  • Hetao P1391 操作序列 题解 [ 绿 ] [ 二维线性 dp ]
    操作序列:简单的二维dp。观察我们每次操作可以让\(x\)变为\(2x-1\),或者当\(x\)为奇数时让\(x\)变为\(\frac{x+1}{2}\)。显然,执行第一种操作,会使\(x\)变成奇数。那一旦我们连续执行两次操作,\(x\)就会变为:\[\frac{(2x+1)-1}{2}=\frac{2x}{2}=x\]也就是说,当\(x\)......
  • 学习笔记——MMSR 自适应多模态融合的序列推荐
    AdaptiveMulti-ModalitiesFusioninSequentialRecommendation Systems前几天当我在阅读这篇论文的时候,在网上找到的相关资料很少,所以当时我读这篇论文的时候特别痛苦,精读了两天半.....所以现在我将自己学习笔记分享出来,给后面需要的小伙伴借鉴借鉴。我目前也是处于学习的......
  • 加法时间序列模型原理及Python实践
    加法时间序列模型是一种经典且广泛应用的时间序列分析方法,其原理主要基于将时间序列数据分解为几个相互独立的组成部分,以便更好地理解、分析和预测时间序列的特征和规律。以下是加法时间序列模型原理的详细阐述:一、模型定义加法时间序列模型假设时间序列数据Y[t]由四个基......
  • 乘法时间序列模型原理及Python实践
    乘法时间序列模型是时间序列分析中的一种重要方法,其原理主要基于将时间序列数据分解为多个相互关联的组成部分,并通过乘法关系将它们组合起来以描述和预测时间序列的变动。以下是对乘法时间序列模型原理的详细阐述:一、模型定义乘法时间序列模型假设时间序列数据Y[t]由四个......
  • 【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例
    原文链接:https://tecdat.cn/?p=37702 原文出处:拓端数据部落公众号 分析师:DongzhiZhang 近年来人工神经网络被学者们应用十分广泛,预测领域随着神经网络的引入得到了很大的发展。本文认为单一神经网络模型对序列所包含的线性信息和非线性信息的挖掘是有限的,因此本文为了进一......
  • 负荷预测 | Matlab基于CNN-BiGRU-Attention多变量时间序列多步预测
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab基于CNN-BiGRU-Attention多变量时间序列多步预测;2.多变量时间序列数据集(负荷数据集),采用前多天时刻预测的特征和负荷数据预测未来多天时刻的负荷数据;3.excel数据方便替换,运行环境matlab2023及以上,展示最后96个时间步......
  • 时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测
    时序预测|MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测目录时序预测|MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果基本介绍Matlab实现BKA-XGBoost时间序列预测,黑翅鸢优......
  • CVE-2015-5254(ActiveMQ-反序列化漏洞)
    漏洞描述编号:CVE-2015-5254影响版本:ApacheActiveMQ5.13.0之前5.x版本CVE地址:CVE-2015-5254漏洞原理:该漏洞源于程序没有限制可在代理中序列化的对象。远程攻击者可借助特制的序列化的JavaMessageService(JMS)ObjectMessage对象利用该漏洞执行任意代码复现环境windows,doc......