AI => 知識圖譜之Neo4j-Cypher

CRUD

創建

普通無屬性創建(默認給你創建一個ID)

create (p:person)-[:eat]->(f:food)

帶有屬性的創建( {} )

create (p:person{name:'zhangsan'})-[:eat]->(f:food{name:'apple'})

給兩個孤獨的實體創建關係:

match 
    (a:animal),(c:color) 
create    (如果這裏改爲 merge 則是 “有則查詢,無則創建”)
    (a)-[h:have]->(c) return h
    
對應查詢:
    match 
        (a:animal),(c:color) 
    return  a,c

刪除 (delete)

match
    (a:animal)-[h:have]->(c:color) 
delete a,h,c

更新修改(set)

match
    (f:food) 
set f.age=20

查詢

主體查詢結構

match 
    (p:)-[:關係名]-[別名2:實體名] 
return 別名1,別名2

普通條件查詢1(whree)

match 
    (n:User) 
where 
    n.name='Tom'
return n

普通條件查詢2:( {} )

match 
    (p:person{name:'zhangsan'})-[:eat{level:1}]->(f:food{name:'apple'}) 
return p,f

正則條件查詢(~)

match 
    (n:User) 
where 
    n.name=~'T.*'
return n

包含條件查詢(contains)

match 
    (n:User) 
where 
    n.name contains 'T'
return n

多度查詢

match (t:teacher)-[]-(s:student)-[]-(ss:score) return t,s,ss

# 注意1: [] 裏面不寫,代表所有關係
# 注意2: -  沒有箭頭,代表任意方向
# 注意3: 別名不可以重複指定, 所以我設置了 ss

多度關係: (通常是基於人脈來講的)
1度關係:我 -> 你
2度關係:我 -> 你 -> 他

理解技巧: 算幾度關係時,把自己(節點)捂住不看, 然後剩下幾個人員節點,就是幾度關係

特別注意:
    多度查關係時,比如你查 3度關係的結果。
    neo4j的圖可能會把, 2度關係也畫出來,why? 因爲他通過2度關係也可直接得出結果。
    (可理解爲 條條大路通羅馬。)
    !!!但是最終有效的返回路徑只是你最初想要的 3度。   (2度就不算了)

查詢最短路徑:

match (t:teacher), (s:student), 
    p=shortestpath( (t)-[*..]-(s) ) 
return p

# 注意: p= 之前有個逗號 ,

查詢所有最短路徑:

match (t:teacher), (s:student), 
    p=allshortestpaths( (t)-[*..]-(s) ) 
return p

# 注意1: 前面多個 all ,後面多個s
# 注意2: 所有最短路徑的都會列出來。 人人平等~

索引

創建索引 (create)

create index on  :food(name)      

# food爲實體名,name爲屬性名, 同時注意這個 :    

刪除索引(drop)

drop index on  :food(name)

約束

創建約束

create constraint on (gf:girlfriend) assert (gf.name) is unique

刪除約束

create constraint on (o:others) assert (o.name) is unique

聚合

統計個數(count)

match ... return count(別名)        

限制取多少條 (limit)

match ... return 別名 limit 5    # 只取5條

知識圖譜流程

  1. 數據抓取
  2. 知識模型設計
  3. NER (遠程監督)
  4. 關係抽取(Bootstrap)
  5. 知識推理
  6. 圖譜存儲(Neo4j Cypher)
  7. 檢索/問答/推薦

實體抽取

BILSTM+CRF

關係抽取

Bootstrap方法:

1. 構建種子實體: "貓", "老鼠"。

2. 尋找包含 "貓"  "老鼠" 的 句子:
    找到句子:"貓和老鼠是好朋友"  
    可抽取關係: 和...是好朋友

3. 拿着抽取的關係再次尋找新句子:
    找到新句子:"張三和裏李四是好朋友"
    提取出新實體: "張三", "李四"
    
4. 尋找包含 "張三"  "李四" 的 句子:
    找到句子:"張三經常和李四一起玩"  
    可抽取關係:  經常和... 一起玩

5. 拿着抽取的關係再次尋找新句子:
    找到新句子:"王五和趙六是好朋友"
    提取出新實體: "王五", "趙六"
...
...
循環反覆
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章