Skip to main content
Open In ColabOpen on GitHub

Diffbot

Diffbot 是一套基于机器学习的产品,使得结构化网页数据变得容易。

Diffbot的自然语言处理API允许从非结构化文本数据中提取实体、关系和语义意义。 Open In 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's 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)

此代码获取关于“沃伦·巴菲特”的维基百科文章,然后使用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 Reference:WikipediaLoader

将数据加载到知识图谱中

您需要有一个正在运行的Neo4j实例。一个选择是在他们的Aura云服务中创建一个免费的Neo4j数据库实例。您也可以使用Neo4j桌面应用程序在本地运行数据库,或者运行一个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://localhost:7687"
username = "neo4j"
password = "password"

graph = Neo4jGraph(url=url, username=username, password=password)
API Reference:Neo4jGraph

可以使用add_graph_documents方法将GraphDocuments加载到知识图谱中。

graph.add_graph_documents(graph_documents)

刷新图模式信息

如果数据库的模式发生变化,您可以刷新生成Cypher语句所需的模式信息

graph.refresh_schema()

查询图

我们现在可以使用图Cypher问答链来向图提问。建议使用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.'

这个页面有帮助吗?