# pyRecommender
> 基于知识图谱的推荐系统
## TODO
### 基于知识图谱的推荐功能
- [ ] 提取知识图谱特征
- [ ] TransE
- [ ] 基于模糊数学的推荐系统
- [ ] 交替学习MKR
### 基于知识图谱的查询功能
- [ ] pyDatalog
---
## 数据格式
数据用json形式组织。数据包括:用户信息、书籍信息、电影信息、音乐信息
### 用户信息
```
{
"location": // 常驻地
"username": // 用户名
"join_time": // 加入时间
"book_do": [(book_name, book_url), ...] // 在看的书
"book_wish": [(book_name, book_url), ...] // 想看的书
"book_collect": [(book_name, book_url), ...] // 看过的书
"movie_do": [(movie_name, movie_url), ...] // 在看的电影
"movie_wish": [(movie_name, movie_url), ...] // 想看的电影
"movie_collect": [(movie_name, movie_url), ...] // 看过的电影
"music_do": [(music_name, music_url), ...] // 在听的音乐
"music_wish": [(music_name, music_url), ...] // 想听的音乐
"music_collect": [(music_name, music_url), ...] // 听过的音乐
"attation_url": [url1, url2, url3, ...] // 所关注的用户主页url
}
```
### 书籍信息
> 作者、出版社、出版时间、页数、价格、ISBN编号、评分
```
{
"author": "作者"
"publisher": "出版社"
"time": "出版时间"
"pages": "页数"
"price": "价格"
"ISBN": "ISBN编号"
"score": "评分"
}
```
### 电影信息
> 导演、编剧、演员、类型、制片国家/地区、语言、上映时间、片长、IMDb链接、评分
```
{
"director": "导演"
"scriptwriter": "编剧"
"actors": [act1, act2, ...]
"type": [t1, t2, t3, ...]
"country": "制片国家/地区"
"language": "语言"
"time": "上映时间"
"length": "片长"
"IMDb": "IMDb链接"
"score": "评分"
}
```
### 音乐信息
> 歌手、流派、专辑类型、介质、出版者、评分
```
{
"singer": "歌手"
"genre": "流派"
"type": [t1, t2, t3, ...]
"media": "介质"
"author": "出版者"
"score": "评分"
}
```
---
## 算法思路
### 推荐功能
> 特征工程
#### MKR
由于推荐系统(RS)中的物品和知识图谱(KG)中的实体存在重合,因此可以采用多任务学习的框架,讲推荐系统和知识图谱视为两个分离但是相关的任务,进行 __交替学习__。
推荐部分的输入是用户(user_feature)和物品(item_feature)的特征表示,点击率的预估值(predicted_probability)作为输出。知识图谱特征学习部分使用的是三元组的头节点(head)和关系(relation)作为输入,预测的尾节点(tail)作为输出。
推荐系统和知识图谱两者的纽带就是“交叉特征共享单元”(cross-feature-sharing unit)。该单元的目的是让两个模块交换信息,据说这样做是为了让两者获取更多的信息,弥补自身信息稀疏性。
由于该模型存在两个模块的交叉,所以训练的时候首先固定推荐系统模块,训练知识图谱的参数,然后固定知识图谱特征学习模块的参数,训练推荐系统的参数。
推荐系统的训练目的是预测用户点击率,相当于一个二分类问题,使用L2正则项。
```Python
# RS
self.base_loss_rs = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(labels=self.labels, logits=self.scores)
)
self.l2_loss_rs = tf.nn.l2_loss(self.user_embeddings) + tf.nn.l2_loss(self.item_embeddings)
for var in self.vars_rs:
self.l2_loss_rs += tf.nn.l2_loss(var)
self.loss_rs = self.base_loss_rs + self.l2_loss_rs * args.l2_weight
```
知识图谱特征学习是让预测的tail向量和真实tail向量相近,即目标
$$ \vec{v}_{head} + \vec{v}_{relation} = \vec{v}_{tail} $$
因此首先计算预测的tail和真实tail的内积,经过sigmoid平滑后取相反数,最后加上l2正则项。
```Python
# KGE
self.base_loss_kge = -self.scores_kge
self.l2_loss_kge = tf.nn.l2_loss(self.head_embeddings) + tf.nn.l2_loss(self.tail_embeddings)
for var in self.vars_kge:
self.l2_loss_kge += tf.nn.l2_loss(var)
self.loss_kge = self.base_loss_kge + self.l2_loss_kge * args.l2_weight
```
实际上是通过随机选择实体替换头实体或者尾实体来构成错误的训练三元组。由于用户“正确列表”是确定的,并且“正确列表”的物品数量一般小于总物体数量,那么只要知道了“正确列表”,那么就可以从“总列表-正确列表”中随机寻找一些物品构成“错误列表”即可,让两列表的数量尽可能相等。
损失函数
$$\text{loss}(x, class) = -\log\left(\frac{\exp(x[class])}{\sum_j \exp(x[j])}\right) = -x[class] + \log\left(\sum_j \exp(x[j])\right)$$
### 查询功能
> Prolog语言推理
#### pyDatalog
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与知识图谱的推荐系统设计与实现源码+文档说明(高分项目)基于python与
资源推荐
资源详情
资源评论
收起资源包目录
基于python与知识图谱的推荐系统设计与实现源码+文档说明.zip (34个子文件)
-master
torch
preprocess.py 4KB
train_music.bat 141B
main.py 3KB
train_book.bat 139B
layers.py 2KB
train_movie.bat 141B
data_loader.py 2KB
model.py 4KB
run.bat 51B
debug.py 2KB
train.py 5KB
pic
MKR-algorithm.png 97KB
MKR-loss.png 23KB
MKR-ii.png 26KB
MKR-i.png 55KB
User.db 12KB
data
music
user_artists.dat 1.15MB
item_index2entity_id.txt 38KB
kg.txt 569KB
movie
ratings.dat 23.45MB
item_index2entity_id.txt 21KB
kg.txt 543KB
book
BX-Book-Ratings.csv 28.16MB
item_index2entity_id.txt 237KB
kg.txt 773KB
model
MKR_book_0.6394.pth 1.73MB
MKR_book_0.7946.pth 1.73MB
MKR_movie_0.7933.pth 474KB
.gitignore 1KB
server
__init__.py 0B
server.py 4KB
fuxk.txt 147B
json.pdf 86KB
README.md 5KB
共 34 条
- 1
资源评论
yava_free
- 粉丝: 4044
- 资源: 1550
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 秋招信息获取与处理基础教程
- 程序员面试笔试面经技巧基础教程
- Python实例-21个自动办公源码-数据处理技术+Excel+自动化脚本+资源管理
- 全球前8GDP数据图(python动态柱状图)
- 汽车检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 检测高压线电线-YOLO(v5至v9)、COCO、Darknet、VOC数据集合集.rar
- 检测行路中的人脸-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- Image_17083039753012.jpg
- 检测生锈铁片生锈部分-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- 检测桌面物体-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功