天天看點

知識圖譜能力遷移

作者:ailx10
知識圖譜能力遷移

最近幫系統組招聘【AI安全研究員】(社招),收到的履歷大都是AI算法工程師,問了一下如何将AI能力遷移到網絡安全領域,得到的回答大多都是AI很火,AI應用很廣,對網絡安全領域缺乏了解,也不知道怎麼賦能網絡安全。我覺得,交叉領域确實不好搞的關鍵是能力遷移搞不好,隻好向面試者提問:你最成功的一次能力遷移是什麼?

知識圖譜能力遷移

ailx10

網絡安全優秀回答者

網絡安全碩士

去咨詢

能力遷移說白了就是先模仿再創新,我看了一下neo4j的英文官方文檔,随後很快就模仿出了知識圖譜的雛形。再比如說要建構3部圖,但是你需要先知道如何建構2部圖,是以工作也需要循序漸進,将一個大的目标進行分解,然後不停的模拟,快速的出demo,而不能系統的搞一個大而全的設計,這樣往往會因為看不到效果而爛尾。

建構2部圖,我們可以通過如下的方式:

CREATE CONSTRAINT UniqueIPNode ON (p:IPNode) ASSERT p.ipID IS UNIQUE;
CREATE CONSTRAINT UniqueDomainNode ON (o:DomainNode) ASSERT o.domainID IS UNIQUE;
CREATE CONSTRAINT UniqueResponseIPNode ON (q:ResponseIP) ASSERT q.responseID IS UNIQUE;


LOAD CSV WITH HEADERS FROM 'file:///IPNode.csv' AS row
WITH toInteger(row.ipID) AS ipID, row.IP AS IP, row.City AS City
MERGE (p:IPNode {ipID: ipID})
  SET p.ip = IP, p.city=City
RETURN count(p);


LOAD CSV WITH HEADERS FROM 'file:///RequestDomain.csv' AS row
WITH toInteger(row.domainID) AS domainID, row.Domain AS Domain, toInteger(row.DomainLen) AS DomainLen, toInteger(row.SubDomainLen) AS SubDomainLen
MERGE (p:DomainNode {domainID: domainID})
  SET p.domain = Domain, p.domainlen=DomainLen, p.subdomainlen=SubDomainLen
RETURN count(p);


:auto USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM 'file:///Request.csv' AS row
WITH toInteger(row.ipID) AS ipID, toInteger(row.domainID) AS domainID, row.ResponseIP AS ResponseIP, toInteger(row.TTL) AS TTL
MATCH (p:IPNode {ipID: ipID})
MATCH (o:DomainNode {domainID: domainID})
MERGE (p)-[rel:Request {response: ResponseIP,ttl:TTL}]->(o)
RETURN count(rel);



:auto USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM 'file:///MainDomain.csv' AS row
WITH toInteger(row.fatherID) AS fatherID, toInteger(row.childID) AS childID
MATCH (f:DomainNode {domainID: fatherID})
MATCH (c:DomainNode {domainID: childID})
MERGE (c)-[rel:Main ]->(f)
RETURN count(rel);           

那麼建構3部圖,我們隻需要增加一點點腳本,我認為這就是知識的快速遷移:

LOAD CSV WITH HEADERS FROM 'file:///ResponseIP.csv' AS row
WITH  toInteger(row.responseID) AS responseID, row.ResponseIP AS ResponseIP, toInteger(row.TTL) AS TTL
MERGE (p:ResponseIP {responseID: responseID})
  SET p.responseip = ResponseIP, p.ttl=TTL
RETURN count(p);

:auto USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM 'file:///response.csv' AS row
WITH toInteger(row.domainID) AS domainID, toInteger(row.responseID) AS responseID
MATCH (p:ResponseIP {responseID: responseID})
MATCH (o:DomainNode {domainID: domainID})
MERGE (o)-[rel:Response ]->(p)
RETURN count(rel);           

最後,我們可以來欣賞一下畫出來的圖,是不是非常簡單~

知識圖譜能力遷移