跳到主要內容
Open In ColabOpen on GitHub

Diffbot

Diffbot 是一套基於 ML 的產品,可輕鬆結構化網路資料。

Diffbot 的 自然語言處理 API 允許從非結構化文字資料中擷取實體、關係和語意含義。在 Colab 中開啟

用例

文字資料通常包含用於各種分析、推薦引擎或知識管理應用程式的豐富關係和見解。

透過將 Diffbot 的 NLP API 與圖形資料庫 Neo4j 結合,您可以根據從文字中擷取的資訊建立強大、動態的圖形結構。這些圖形結構是完全可查詢的,並且可以整合到各種應用程式中。

這種組合允許以下用例,例如

  • 從文字文件、網站或社群媒體摘要建立知識圖譜(如 Diffbot 的知識圖譜)。
  • 根據資料中的語意關係產生建議。
  • 建立了解實體之間關係的進階搜尋功能。
  • 建立分析儀表板,讓使用者探索資料中的隱藏關係。

概觀

LangChain 提供與圖形資料庫互動的工具

  1. 從文字建構知識圖譜,使用圖形轉換器和儲存整合
  2. 查詢圖形資料庫,使用鏈來建立和執行查詢
  3. 與圖形資料庫互動,使用代理程式進行穩健且彈性的查詢

設定

首先,取得所需的套件並設定環境變數

%pip install --upgrade --quiet  langchain langchain-experimental langchain-openai langchain-neo4j neo4j wikipedia

Diffbot NLP API

Diffbot 的 NLP API 是一種從非結構化文字資料中擷取實體、關係和語意上下文的工具。此擷取的資訊可用於建構知識圖譜。若要使用 API,您需要從 Diffbot 取得免費 API 令牌

from langchain_experimental.graph_transformers.diffbot import DiffbotGraphTransformer

diffbot_api_key = "DIFFBOT_KEY"
diffbot_nlp = DiffbotGraphTransformer(diffbot_api_key=diffbot_api_key)

此程式碼擷取關於「華倫·巴菲特」的 Wikipedia 文章,然後使用 DiffbotGraphTransformer 擷取實體和關係。DiffbotGraphTransformer 輸出結構化資料 GraphDocument,可用於填入圖形資料庫。請注意,由於 Diffbot 的 每個 API 請求的字元限制,因此避免了文字分塊。

from langchain_community.document_loaders import WikipediaLoader

query = "Warren Buffett"
raw_documents = WikipediaLoader(query=query).load()
graph_documents = diffbot_nlp.convert_to_graph_documents(raw_documents)
API 參考:WikipediaLoader

將資料載入知識圖譜

您將需要有一個正在運行的 Neo4j 實例。一種選擇是在他們的 Aura 雲端服務中建立一個免費 Neo4j 資料庫實例。您也可以使用 Neo4j Desktop 應用程式在本機運行資料庫,或運行 docker 容器。您可以透過執行以下腳本來運行本機 docker 容器

docker run \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-d \
-e NEO4J_AUTH=neo4j/password \
-e NEO4J_PLUGINS=\[\"apoc\"\] \
neo4j:latest

如果您使用的是 docker 容器,則需要等待幾秒鐘才能啟動資料庫。

from langchain_neo4j import Neo4jGraph

url = "bolt://127.0.0.1:7687"
username = "neo4j"
password = "password"

graph = Neo4jGraph(url=url, username=username, password=password)
API 參考:Neo4jGraph

可以使用 add_graph_documents 方法將 GraphDocuments 載入到知識圖譜中。

graph.add_graph_documents(graph_documents)

重新整理圖形結構描述資訊

如果資料庫的結構描述變更,您可以重新整理產生 Cypher 陳述式所需的結構描述資訊

graph.refresh_schema()

查詢圖形

我們現在可以使用圖形 cypher QA 鏈來詢問圖形的問題。建議使用 gpt-4 來建構 Cypher 查詢,以獲得最佳體驗。

from langchain_neo4j import GraphCypherQAChain
from langchain_openai import ChatOpenAI

chain = GraphCypherQAChain.from_llm(
cypher_llm=ChatOpenAI(temperature=0, model_name="gpt-4"),
qa_llm=ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo"),
graph=graph,
verbose=True,
allow_dangerous_requests=True,
)
chain.run("Which university did Warren Buffett attend?")


> Entering new GraphCypherQAChain chain...
Generated Cypher:
MATCH (p:Person {name: "Warren Buffett"})-[:EDUCATED_AT]->(o:Organization)
RETURN o.name
Full Context:
[{'o.name': 'New York Institute of Finance'}, {'o.name': 'Alice Deal Junior High School'}, {'o.name': 'Woodrow Wilson High School'}, {'o.name': 'University of Nebraska'}]

> Finished chain.
'Warren Buffett attended the University of Nebraska.'
chain.run("Who is or was working at Berkshire Hathaway?")


> Entering new GraphCypherQAChain chain...
Generated Cypher:
MATCH (p:Person)-[r:EMPLOYEE_OR_MEMBER_OF]->(o:Organization) WHERE o.name = 'Berkshire Hathaway' RETURN p.name
Full Context:
[{'p.name': 'Charlie Munger'}, {'p.name': 'Oliver Chace'}, {'p.name': 'Howard Buffett'}, {'p.name': 'Howard'}, {'p.name': 'Susan Buffett'}, {'p.name': 'Warren Buffett'}]

> Finished chain.
'Charlie Munger, Oliver Chace, Howard Buffett, Susan Buffett, and Warren Buffett are or were working at Berkshire Hathaway.'

此頁面是否有幫助?