大模型助力高效创建知识图谱( 三 )


  1. OpenAI 初始化:`llm = OpenAI(model_name="gpt-3.5-turbo")`。初始化了 `gpt-3.5-turbo` 的大型语言模型(LLM) 。
  2. 输入文本:`texts = '小红是我的同学 。小红是小明的邻居 。小明是我的篮球队队友 。'` 定义要处理的文本,其中包含多个句子 。
  3. 创建图谱索引:`index_creator = GraphIndexCreator(llm=llm)` 使用 `GraphIndexCreator` 类来创建一个图索引生成器 , 它会用到先前初始化的大型语言模型 。
  4. 初始化最终图:`final_graph = f_index_creator.from_text('')` 初始化了一个空的知识图谱,用于存放最终的三元组信息 。
  5. 文本切割和三元组生成: `for text in texts.split("."):`这个循环通过句号切割文本,然后对每一个非空句子生成三元组 。
  6. `triples = index_creator.from_text(text)`通过 `index_creator` 的 `from_text` 方法,为每个句子生成三元组 。
  7. 三元组存储和输出:`final_graph.add_triple(KnowledgeTriple(node1, node2,relation ))`将生成的三元组添加到 `final_graph` 知识图谱中 。
下面是运行结果:
=================小红是我的同学=================小红是小明的邻居=================小明是我的篮球队队友
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
看起来是不是比上面NLP处理的结果要好些 。
如果我们将texts变量进行修改:
texts = '''小鸟国,正式名称飞禽国度(ISO:飞禽国度),是位于新世界南部的国家 。它以领土面积而言是世界第七大国家;是人口最多的国家,一直是世界上人口最多的民主国家 。小鸟国南临翡翠海,西南濒临蓝色海洋,东南濒临碧玉海,与翼足国家在西部接壤;北部与巨翼国、鸣虫国和象牙国相邻;东部与彩虹国和翡翠国接壤 。在翡翠海中,小鸟国位于双岛国家和翡翠群岛,与彩虹国、碧玉国和绿洲国共享海上边界 。翡翠海是7大文明遗迹之一,在天门东边'''
  • 1.
用一个特别复杂的例子来表示,这个例子是我们虚拟的一个国家,并且描述了和这个国家相关的一些其他国家,看上去比较复杂 。此时,我们加入图表的方式,通过节点和边展示这样的复杂关系 。加入如下代码:
import networkx as nximport matplotlib.pyplot as plt#创建一个空的有向图G = nx.DiGraph()#将上面得到的三元组放到图像的边中#source - node1,target - node2,relation - relationG.add_edges_from((source, target, {'relation': relation}) for source, relation, target in final_graph.get_triples())#指定图像的大小和分辨率plt.figure(figsize=(8,3), dpi=500)#通过spring算法定义节点的布局pos = nx.spring_layout(G, k=3, seed=0)edge_labels = nx.get_edge_attributes(G, 'relation')nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8,font_family='simhei')#定义显示中文字体nx.draw_networkx(G, font_family = 'simhei')#关闭坐标轴显示plt.axis('off')plt.show()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
这段代码使用了`networkx`和`matplotlib.pyplot`库来可视化一个有向图(即知识图谱),其中的节点和边是从之前抽取的三元组(实体-关系-实体)中得到的 。
1. 创建空的有向图: `G = nx.DiGraph()`
2. 添加边到图中:
`G.add_edges_from((source, target, {'relation': relation}) for source, relation, target in final_graph.get_triples())`
把之前从文本中抽取出的三元组添加到图`G`中作为边 。每一条边都有一个起点(`source`),一个终点(`target`)以及一个表示两者关系的标签(`relation`) 。
3. 设置图像大小和分辨率:
`plt.figure(figsize=(8,3), dpi=500)`
设置了图像的大?。?x3)和分辨率(500 DPI) 。
4. 定义节点布局:
`pos = nx.spring_layout(G, k=3, seed=0)`
使用“spring”布局算法来确定图中每个节点的位置 。`k`是一个用于设置节点间距的参数 , `seed`是随机数生成器的种子 。


推荐阅读