1. 程式人生 > 實用技巧 >基於電影圖譜的智慧問答

基於電影圖譜的智慧問答

一.簡介
電影知識圖譜問答,利用spark,neo4j以及hanlp完成一個簡易的電影問答。

二.要求
利用java-driver方式,使用cypher和apoc構建節點和關係,使用spark完成問句分類。
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語句進行查詢

四.資料
主要資料在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.問答