• Stars
    star
    259
  • Rank 157,669 (Top 4 %)
  • Language
    Python
  • Created over 6 years ago
  • Updated almost 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

基于豆瓣图书的推荐、知识图谱与知识引擎简单构建neo4j

DouBanRecommend

基于豆瓣图书的推荐、知识图谱与知识引擎简单构建neo4j

本项目主要贡献源来自豆瓣爬虫(数据源)lanbing510/DouBanSpider、知识图谱引擎Agriculture_KnowledgeGraphapple.turicreate中内嵌的推荐算法。 主要拿来做练习,数据来源可见lanbing510/DouBanSpider

练习内容:

  • 豆瓣图书推荐 + 搜索模块
  • 豆瓣图书知识库简单应用(Neo4j的使用)

推荐与搜索模块再结合豆瓣内部的API就更加牛逼~~~!(豆瓣API


20210130 更新

  • book_excel.csv压缩成book_excel.zip放在文件夹book_recomend下面

一、数据整理

简单的把爬虫数据进行简单的整理。主要做了一下针对每本书的评分,数据源中有两个值得用的字段:豆瓣书籍评分 + 书籍阅读人数,先等级化,然后进行平均,简单的得到了该书籍的得分。

# 把豆瓣读书评分 / 豆瓣读书人群数量 进行分箱
book_excel_all['rank_rank'] = pd.qcut(book_excel_all['rank'],10,duplicates ='drop',labels = False)
book_excel_all['people_num_rank'] = pd.qcut(book_excel_all['people_num'],10,duplicates ='drop',labels = False)
# 分箱之后,进行平均
book_excel_all['scores'] = (book_excel_all['rank_rank'] + book_excel_all['people_num_rank'])/2

得到了如图的内容: 此处输入图片的描述 那么就开始做练习题啦~


二、豆瓣图书推荐 + 搜索模块

推荐 + 搜索模块主要使用的是apple.turicreate模块的算法,那么该模块的使用可见: 推荐模块︱apple.Turicreate个性化推荐recommender(五) 简单贴个当时整理的图。

推荐算法 函数名 内容 结果
基于item相似推荐 item_similarity_recommender 有预测功能,item之间喜爱的相似程度。适用在给未知人群推荐的时候,可以寻找到item的相似对 这里写图片描述
因式分解 ranking_factorization_recommender以及factorization_recommender 最常用,支持附加信息共同进模型 这里写图片描述
基于内容的相似推荐 item_content_recommender 没有user概念,Item自己内容(多维度)决定,同类推荐,且没有点评数据可以提取的时候可以应用 数据格式不满足
项目流行度推荐 item popularity 基于项目流行程度来推荐,user不进入模型,缺点:并不能因人而异,受异常值影响较大 这里写图片描述

主要内容见文件夹book_recomend.

本练习主要使用的算法是:基于item相似推荐

2.1 搜索模块:

  • 输入:总表book_excel_all(book_excel.csv)

  • 输出:搜索到的文档

  • 算法:没有建模,主要是:先完全匹配;匹配不到,局部匹配,包含

简单展示一下最终结果:

search_word = '机器学习'
search(search_word,book_excel_all)

得到的结果可见: 此处输入图片的描述

2.2 推荐模块:

  • 输入:总表book_excel_all(book_excel.csv)、基于类目item的推荐表(book_excel_name.csv)、搜索词(该搜索词一定时全的)

  • 输出:相似图书推荐

  • 目前使用的算法:apple.turicreate中的item_similarity_recommender推荐算法

简单展示一下所写的功能:

search_word = '浪潮之巅'
item_recomend(search_word,book_excel_all,recomend_item,topn = 10)

结果: 此处输入图片的描述

2.3 推荐对应表生成模块

根据核心数据源,利用apple.turicreate平台的基于item的推荐,主要是以书籍类别为主要筛选对象,对书籍类别进行相关推荐,输入信息表,输出相关推荐表格。如表格:item_data_item.csv


三、豆瓣图书知识库简单应用(Neo4j的使用)

借用neo4j简单的实践了一下:neo4j的docker启动、数据导入模块、py2neo查询模块。

练习的时候有些心得:

  • 保证节点的唯一性

    犯错:在book_excel,书名信息是不唯一的,可能一本书既可能被归类到 旅游、哲学、编程、创业

  • 其他心得:

    (1)从效果来看,如果关系类型比较少,比较适合直接用多表合一的方式进行查询;

    知识图谱中的图数据库的查询,建立在关系错综复杂、才有查询必要。

    (2)图数据库,一定要对节点 + 关系去重

  • 时间消耗:

    3W节点 - 25.7W关系 - 3h时间 - 1002MB


3.1 neo4j的docker启动

neo4j开启的一种方法就是docker启动,neo4j的docker下载地址:https://hub.docker.com/_/neo4j/

笔者在使用neo4j的使用会遇到几个问题:

  • neo4j的内存默认设置太小,需要手动扩大
  • 数据导入模块
  • 已经导入的数据怎么保存

因为本地数据导入neo4j之中,最好把数据放在指定目录之中,于是乎在docker启动之前就可以设置一下:

docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=/matt/neo4j:/var/lib/neo4j/import  --rm -ti neo4j bash

其中/matt/neo4j是宿主机的目录,/var/lib/neo4j/import是docker之中本地导入csv的路径,那么这样就可以直接使用:LOAD CSV WITH HEADERS FROM "file:///book_excel_name.csv" AS line

扩大内存的话,就需要到/neo4j/conf/neo4j.conf之中修改以下参数:

dbms.memory.heap.initial_size = 1024G 
dbms.memory.heap.max_size= 1024G
dbms.memory.pagecache.size = 10240M # 缓存,可以调制到一些

在docker 之中开启neo4j为:

/var/lib/neo4j/bin/neo4j start

打开之后需要等待一段时间的启动。

此处输入图片的描述

已经导入的数据怎么保存?

备份Neo4j的数据:

1)停掉数据库.

2)备份D:\Neo4J\neo4j-enterprise-1.9.1\data目录下graph.db目录中的所有内容.

3)在服务器上拷贝graph.db目录中的内容到新的服务器的相同目录中,启动即可.

3.2 数据导入模块

为了确保唯一性,所以导入的时候,书名节点、书类别节点、出版社节点都是唯一的,同时建立了书籍-类型的关系。

// 导入书名节点
LOAD CSV WITH HEADERS  FROM "file:///book_excel_name.csv" AS line
CREATE (:BookNode { name:line.book_name,rank:line.rank,people_num:line.people_num, author:line.author,public_infos:line.public_infos,public_time:line.public_time,price:line.price })

// 导入书类别节点
LOAD CSV WITH HEADERS  FROM "file:///book_excel_type.csv" AS line
CREATE (:BookType { type:line.type })
// MATCH (n:BookType) OPTIONAL MATCH (n)-[r]-() DELETE n,r // 删除命令

// 导入书出版社节点
LOAD CSV WITH HEADERS  FROM "file:///book_excel_public.csv" AS line
CREATE (:BookPub { pub:line.public })
// MATCH (n:BookPub) OPTIONAL MATCH (n)-[r]-() DELETE n,r //删除命令

//建立关系:书-类型
LOAD CSV WITH HEADERS  FROM "file:///book_excel.csv" AS line
MATCH (entity1:BookNode{name:line.book_name}), (entity2:BookType{type:line.type})
CREATE (entity1)-[:RELATION_TYPE]->(entity2);

这边导入的时候发现有些重复关系,懒... 就不改了...

3.3 py2neo查询模块

主要数据可见:douban_kg文档

from py2neo import Node, Relationship, Graph
graph = Graph(
    "http://localhost:7474", 
    username="neo4j", 
    password="qwer@1234"
)

通过py2neo先链接neo4j数据库。同时:

# 查询书目内容
graph.find_one(label="BookNode",property_key="name",property_value='计算机视觉')
    # label代表:标签
    # property_key代表:节点属性
    # property_value代表:具体属性名称


# 查询书目-类型
graph.data("MATCH (entity1) - [:RELATION_TYPE] -> (entity2)  WHERE entity2.ytpe = '旅行' RETURN rel,entity2")

More Repositories

1

ChineseWiki

维基百科中文语料整理
Python
284
star
2

Face_Swapping

简单换脸、人脸对齐、关键点定位与画图
Jupyter Notebook
167
star
3

keras-yolov3-KF-objectTracking

以kears-yolov3做detector,以Kalman-Filter算法做tracker,进行多人物目标追踪
Python
163
star
4

py-kenlm-model

python | 高效使用统计语言模型kenlm:新词发现、分词、智能纠错等
Python
158
star
5

U-Net-Demo

U-Net图像分割练习题两则
Jupyter Notebook
121
star
6

LtpExtraction

基于ltp的简单评论观点抽取模块
Jupyter Notebook
116
star
7

LangueOne

练习题︱基于今日头条开源数据的文本挖掘
Python
84
star
8

py-yanwenzi

网络表情NLP,颜文字识别,颜文字表情实体识别、属性检测、新颜发现
Python
35
star
9

Attention-RNN-Multi-Touch-Attribution

Attention-RNN来做多触点归因模型
Python
27
star
10

python-Apriori

Python,两款Apriori算法实践与比较,基于今日头条数据的练习题
Python
24
star
11

gensim-fast2vec

gensim-fast2vec改造、灵活使用大规模外部词向量(具备OOV查询能力)
Python
21
star
12

streamlit_demo

streamlit一些样例以及相关的博文收集
Python
18
star
13

WA-ModelEnsemble

Weight Averaging Model Ensemble
Jupyter Notebook
17
star
14

KwaiSurvival-Test-Demo

2021/7/9测试KwaiSurvival的实验代码
Python
11
star
15

pyALS

练习题,python 协同过滤ALS模型实现:商品推荐 + 用户人群放大
Python
9
star
16

causal_inference_demo

Causal Inference Demo
Python
8
star
17

SparkDesk_Document_QA

SparkDesk Document QA
Python
8
star
18

qdrQA

基于Query-Document Relevance ranking 的知识问答
Python
8
star
19

forSSD_txt2xml

用caffe实现SSD中,从txt文件格式到xml转变
Python
7
star
20

chAI_API

国内AI常见API调用情况
Python
6
star
21

ml_interpretability

机器学习
Python
6
star
22

Keras_for_Image

如何用Keras做图像处理。
Python
2
star
23

tensorflow_nlp

tensorflow_nlp:word segmentation、NER、POS、Parse .e.t.
Python
2
star
24

ColorfulR

wordcloud Extended application for R!
R
2
star
25

mBandit

bandit的尝试
Python
1
star
26

TopicClassifier

MOne︱基于词包的无监督多主题得分
Python
1
star
27

forDataset_CaltechPedestrian

Caltech Pedestrian Dataset 数据集变现代码,matlab+python
MATLAB
1
star