Microsoft GraphRAG:RDF知识图谱的应用与解析(第2部分)

2024年09月03日 由 alex 发表 78 0

6


如果你已经按照本系列第1部分的步骤进行了操作,那么你应该已经创建了一些 parquet 文件。我们将把这些 parquet 文件转换成海龟格式文件,以描述我们的链接数据。你可以在这里阅读有关海龟格式的信息。然后,我们将把龟格式文件导入 RDF 存储器。但在导入该文件之前,我们要先导入我创建的本体文件,以描述 Microsoft GraphRAG。我们还将创建一个矢量索引,用于语义搜索。完成所有这些工作后,我们就可以在 RDF 知识图谱的帮助下使用 RAG 了。本部分的步骤如下:

  • 将本体导入 RDF 存储库
  • 创建并导入符合本体的数据到 RDF 存储中
  • 创建矢量索引


将本体导入 RDF 存储器

本体是对知识的正式描述,是一个领域中的一组概念以及它们之间的关系。本体是知识图谱的重要基础。你可以在此阅读更多相关信息。万维网联盟(W3C)创建了一个格式规范,允许我们定义称为 OWL2 的本体。我为我们将要使用的 Microsoft GraphRAG 创建了一个本体,它看起来是这样的:


7


我使用一款名为 Metaphactory 的优秀产品创建了本体,然后将其导出为 OWL 文件。请查看 “资源 ”部分的链接,获取本体文件的副本以及与本部分相关的所有其他文件(和笔记本)。


本体是知识图谱的重要组成部分。本体允许以标准化的方式定义数据和关系。本体还提供了验证数据和解释数据的能力。非常重要的一点是,我们创建的系统不能是无人能懂的黑盒子。我们需要能够解释我们的系统和输出,并验证输入的数据。


首先,我们将在 RDF 存储器中创建一个空存储库,然后导入本体文件。我使用 GraphDB 作为我的 RDF 存储库(因为他们提供免费版本),所以你可以像这样创建一个新的存储库(我将其命名为 msft-graphrag):


8


创建存储库后,你就可以导入我提供的本体 OWL 文件:


9


导入时,确保指定 “默认图形”:


10


创建符合本体的数据并将其导入 RDF 存储器

现在我们已经将本体导入了 RDF 存储,可以安全地创建和导入数据了。


我创建了一个 Jupyter 笔记本,它可以读取第 1 部分输出的 parquet 文件,然后创建相应的海龟文件,并将其导入图中。如果你只想导入数据,而不想知道数据是如何创建的,我还提供了 2 个海龟文件供你使用。一个是用 300 块大小创建的,另一个是用 1200 块大小和相关数据创建的。


创建矢量索引

在 Jupyter 笔记本的最后一部分,我展示了如何使用 Elasticsearch 为数据创建矢量索引。


我们将为实体类创建一个索引,存储 description_embedding 字段。该字段在实体的 parquet 文件中,因此我们将其与 id 字段绑定。


from elasticsearch import Elasticsearch
embedding_vector = entity_df['description_embedding'].iloc[0]
es = Elasticsearch("https://localhost:9200", 
                   basic_auth=("elastic", "password"), 
                   verify_certs=False)
indexMapping = {
    "properties":{
        "id":{
            "type":"keyword"
        },
        "description_embedding":{
            "type": "dense_vector",
            "dims": len(embedding_vector),
            "index": True,
            "similarity": "cosine",
        }, 
    }
}
index_name = "entity_graph_index" 
#es.indices.delete(index=index_name)
es.indices.create(index=index_name, mappings=indexMapping)
# We need to convert our DataFrame to a dictionary as this is the format Elasticsearch 
# expects when we're adding a record to the index.
record_list = entity_df[['id', 'description_embedding']].to_dict("records")
for record in record_list:
    es.index(index=index_name, document=record, id=record["id"])


创建此索引后,我们将在第 3 部分中使用它与我们的 RDF 知识图谱一起,为用户的问题生成更好的答案。

文章来源:https://medium.com/@ianormy/microsoft-graphrag-with-an-rdf-knowledge-graph-part-2-d8d291a39ed1
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消