一.簡介
電影知識圖譜問答,利用spark,neo4j以及hanlp完成一個簡易的電影問答。
二.要求
利用java-driver方式,使用cypher和apoc構建節點和關系,使用spark ml完成問句分類。
1.neo4j3.5.3
2.apoc3.5.0.13
3.jdk1.8
4.hanlp1.7.7 下載data(包括dictionary和model,配置hanlp.properties路徑)放在resources目錄下即可
5.spark3.0
三.模塊使用,完整項目(https://github.com/jiangnanboy/movie_kg)
(一).節點和關系構建模塊
這里提供兩種方法,分別用cypher和apoc構建。
1.cypher構建node與relation(較慢,一個一個語句create)
\src\main\java\com\sy\mainclass\GraphCypherBuild.java
(1).構建節點
createNode();
(2).構建關系
createRelation();
2.apoc批量構建node與relation(建議利用apoc構建,不需要stop neo4j,速度和數據量中等)
\src\main\java\com\sy\mainclass\GraphApocBuild.java
(1).構建節點
createNode();
(2).構建關系
createRelation();
(二).問答模塊
意圖識別為以下幾類(樣本較少,可以增加更多的數據以提高識別精度):
* 0:電影評分
* 1:電影上映時間
* 2:電影類型
* 3:電影簡介 (暫時沒數據)
* 4:電影演員列表
* 5:演員介紹 (暫時沒數據)
* 6:演員參演的某類型的電影作品
* 7:演員的電影作品
* 8:演員參演評分大於x的電影
* 9:演員參演評分小於x的電影
* 10:演員參演演的電影類型有哪些
* 11:演員和演員合作電影有哪些
* 12:演員參數的電影數量
* 13:演員的出生日期 (暫時沒數據)
\src\main\java\com\sy\mainclass\MovieQA.java(問答部分,問句意圖識別和模板匹配,並轉為查詢語句)
問答模型的程序在\src\main\java\com\sy\qa中,主要有
1.利用spark訓練意圖分類模型
2.對問句進行意圖識別和模板匹配
3.提取問答語句中的實體,包括人名和電影名
4.將問句模板和提取的實體轉為cypher或apoc語句進行查詢
(三).推薦模塊
\src\main\java\com\sy\mainclass\MovieRec.java
1.根據相同的演員或導演,返回top-n評分的電影
recCBF1()
2.根據電影的類型進行推薦,返回topn評分的電影
recCBF2()
(四).搜索模塊
\src\main\java\com\sy\mainclass\MovieSearch.java
1.返回類型為category,評分最高的前10部電影名稱
getMostRatedScoreMovie()
四.數據
主要數據在resources中,數據中包含(數據來源http://www.openkg.cn/dataset/douban-movie-kg)
3類實體(節點):
實體類型 數據文件 數量 說明
Movie Movie.csv 4587 電影實體
Person Person.csv 22937 人員實體
Country Country.csv 84 國家實體
4類關系:
關系類型 主語實體類型 賓語實體類型 數據文件 數量 說明
ACTOR_OF Movie Person actor.csv 35257 電影的主演
COMPOSER_OF Movie Person composer.csv 8345 電影的編劇
DIRECTOR_OF Movie Person director.csv 5015 電影的導演
DISTRICT_OF Movie Country district.csv 6227 電影的制片國家/地區
五.流程圖

六.結果展示
1.關系圖

2.問答
