基於java,spark,neo4j的電影知識圖譜智能問答


一.簡介
電影知識圖譜問答,利用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.問答


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM