【人工智能】通过ChatGPT、Claude与通义千问 API 实现智能语料知识图谱的自动化构建(详细教程)

ops/2024/12/13 22:54:09/

文章目录

    • 了解更多AI内容
    • 什么是知识图谱
    • 环境与工具准备
    • 文档切分与预处理
      • 数据来源与采集
      • 文档切分方法
      • 数据清洗与标准化
    • 基于文档向量的聚类
      • 向量化处理
      • 向量聚类技术
      • 聚类工具选择与使用
    • 通用知识图谱语料库构建
      • 实体识别
      • 关系抽取
      • 事件抽取
    • 垂直领域知识图谱语料库构建
    • 输入生成 Cypher 语料库
      • Cypher 查询语言简介
      • 查询生成方法
    • 输入生成 SQL 语料库
      • SQL 查询语言简介
      • 查询生成方法
    • 基于大模型的抽取
      • 实体抽取
      • 关系抽取
      • 事件抽取
    • 了解更多AI内容
    • 总结

了解更多AI内容

【OpenAI】(一)获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!

【VScode】(二)VSCode中的智能AI-GPT编程利器,全面揭秘CodeMoss & ChatGPT中文版

【CodeMoss】(三)集成13个种AI模型(GPT4、o1等)、支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率! >>> - CodeMoss & ChatGPT-AI中文版

什么是知识图谱

知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。

在这里插入图片描述

环境与工具准备

在开始之前,确保您具备以下环境和工具:

  • 编程语言:Python(推荐3.7及以上版本)
  • 开发环境:Jupyter Notebook 或任意代码编辑器
  • API 访问权限:注册并获取ChatGPT、Claude与通义千问 API的访问密钥
  • 必要的库
    pip install openai
    pip install faiss-cpu
    pip install neo4j
    pip install requests
    

文档切分与预处理

数据来源与采集

构建知识图谱的第一步是数据收集。数据来源可以多种多样,包括但不限于:

  • 新闻文章
  • 研究报告
  • 数据库记录
  • 社交媒体内容

确保数据的多样性和覆盖面,以构建全面且精确的知识图谱
在这里插入图片描述

文档切分方法

大型文本需要被切分成更小的片段以便后续处理。利用 ChatGPT APIClaude API 进行文档切分是一种高效的方法。

示例代码:

import openaidef split_document(text):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "请将以下文本切分为段落和句子,并标记每个句子的起始和结束位置。"}],prompt=text)return response['choices'][0]['message']['content']# 示例文本
document = "这是第一段。它包含几个句子。这里是第二段。"# 切分结果
split_text = split_document(document)
print(split_text)

数据清洗与标准化

在切分完成后,需要对数据进行清洗与标准化处理,包括:

  • 去除特殊符号
  • 删除重复数据
  • 处理乱码或不完整文本

示例代码:

import redef clean_text(text):# 移除特殊符号text = re.sub(r'[^\w\s]', '', text)# 去除多余的空格text = re.sub(r'\s+', ' ', text).strip()return textcleaned_text = clean_text(split_text)
print(cleaned_text)

基于文档向量的聚类

向量化处理

将文本转换为向量是实现文本相似度计算和聚类的基础。通过 ChatGPT APIClaude API,可以使用内置的嵌入模型将文本转化为高维向量。

示例代码:

def get_embeddings(text):response = openai.Embedding.create(model="text-embedding-ada-002",input=text)return response['data'][0]['embedding']embedding = get_embeddings("这是待处理的文本")
print(embedding)

向量聚类技术

将文档向量化后,可以利用聚类算法将相似的文档归类在一起。常用的聚类算法包括 K-Means 和 HDBSCAN。
在这里插入图片描述

聚类工具选择与使用

FAISS 是一个高效的相似性搜索库,适用于大规模向量数据的聚类。以下是使用 FAISS 进行聚类的示例:

import faiss
import numpy as np# 假设 embeddings 是一个二维的 numpy 数组,每一行是一个向量
embeddings = np.array([embedding1, embedding2, ...]).astype('float32')# 构建索引
index = faiss.IndexFlatL2(embeddings.shape[1])
index.add(embeddings)# 进行聚类,比如使用 K-Means
k = 10  # 聚类数量
kmeans = faiss.Kmeans(embeddings.shape[1], k)
kmeans.train(embeddings)
clusters = kmeans.assignments
print(clusters)

通用知识图谱语料库构建

实体识别

实体识别是知识图谱构建的基础步骤,涉及从文本中提取出人名、地名、组织等实体。

示例代码:

def extract_entities(text):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "请从以下文本中提取所有实体(如人名、地点、公司等)。"}],prompt=text)return response['choices'][0]['message']['content']text = "在2024年,张三成为了华为的CEO,他访问了美国。"
entities = extract_entities(text)
print(entities)

关系抽取

关系抽取旨在识别实体之间的关系,例如“某人是某公司的CEO”。

示例代码:

def extract_relations(text):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "从以下文本中提取实体之间的关系。"}],prompt=text)return response['choices'][0]['message']['content']relations = extract_relations("张三是华为的CEO。")
print(relations)

事件抽取

事件抽取用于识别文本中的事件信息,如事件类型、时间、参与者等。

示例代码:

def extract_events(text):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "从以下文本中提取事件信息,包括事件类型、时间和参与者。"}],prompt=text)return response['choices'][0]['message']['content']events = extract_events("张三于2024年6月10日发布了新的智能手机产品。")
print(events)

垂直领域知识图谱语料库构建

在特定领域构建知识图谱需要针对领域特定的实体和关系进行识别和抽取。
在这里插入图片描述

领域特定实体与关系抽取

以医疗领域为例,需提取疾病、药品、症状等专业实体,并识别它们之间的关系。

示例代码:

def extract_medical_entities(text):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "请从以下医疗文本中提取所有专业实体(如疾病、药品、症状等)及其关系。"}],prompt=text)return response['choices'][0]['message']['content']medical_text = "患者张三被诊断出患有高血压,医生建议他服用降压药物阿莫洛尔。"
medical_entities = extract_medical_entities(medical_text)
print(medical_entities)

知识图谱构建工具

将提取的实体和关系存储到知识图谱中,可以使用 Neo4j 等图数据库。

示例代码:

from neo4j import GraphDatabaseclass KnowledgeGraph:def __init__(self, uri, user, password):self.driver = GraphDatabase.driver(uri, auth=(user, password))def close(self):self.driver.close()def create_entity(self, name, label):with self.driver.session() as session:session.run(f"MERGE (n:{label} {{name: $name}})", name=name)def create_relationship(self, entity1, relation, entity2):with self.driver.session() as session:session.run(f"MATCH (a), (b) WHERE a.name = $entity1 AND b.name = $entity2 "f"MERGE (a)-[r:{relation}]->(b)",entity1=entity1, entity2=entity2)# 连接到本地的Neo4j实例
kg = KnowledgeGraph("bolt://localhost:7687", "neo4j", "password")# 创建实体
kg.create_entity("张三", "Person")
kg.create_entity("高血压", "Disease")
kg.create_entity("阿莫洛尔", "Drug")# 创建关系
kg.create_relationship("张三", "患有", "高血压")
kg.create_relationship("高血压", "使用药物", "阿莫洛尔")kg.close()

输入生成 Cypher 语料库

Cypher 查询语言简介

Cypher 是 Neo4j 图数据库的查询语言,类似于 SQL,用于创建、读取、更新和删除图中的数据。

查询生成方法

利用 ChatGPT API 自动生成 Cypher 查询,实现自然语言到查询语言的转换。

示例代码:

def generate_cypher_query(description):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "根据以下描述生成Cypher查询语句。"}],prompt=f"查询:{description}")return response['choices'][0]['message']['content']description = "找到所有属于华为公司的员工。"
cypher_query = generate_cypher_query(description)
print(cypher_query)

生成的Cypher查询示例:

MATCH (e:Employee)-[:WORKS_FOR]->(c:Company {name: "华为"}) RETURN e

输入生成 SQL 语料库

SQL 查询语言简介

SQL 是用于关系数据库的标准查询语言,用于管理和操作结构化数据。

查询生成方法

同样利用 ChatGPT API 生成符合需求的 SQL 查询。

示例代码:

def generate_sql_query(description):response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "system","content": "根据以下描述生成SQL查询语句。"}],prompt=f"查询:{description}")return response['choices'][0]['message']['content']description = "获取2020年销售额大于100万的订单。"
sql_query = generate_sql_query(description)
print(sql_query)

生成的SQL查询示例:

SELECT * FROM orders WHERE sales_amount > 1000000 AND YEAR(order_date) = 2020;

基于大模型的抽取

实体抽取

利用 通义千问 API 等大模型,可以更准确地从文本中抽取实体。

示例代码:

import requestsdef extract_entities_via_tongyi(text):api_url = "https://api.tongyi.aliyun.com/nlp/entity_extraction"headers = {"Authorization": "Bearer YOUR_TONGYI_API_KEY"}data = {"text": text}response = requests.post(api_url, headers=headers, json=data)return response.json()entities = extract_entities_via_tongyi("张三是华为的CEO。")
print(entities)

关系抽取

同样,通过大模型提高关系抽取的准确性。

示例代码:

def extract_relations_via_tongyi(text):api_url = "https://api.tongyi.aliyun.com/nlp/relation_extraction"headers = {"Authorization": "Bearer YOUR_TONGYI_API_KEY"}data = {"text": text}response = requests.post(api_url, headers=headers, json=data)return response.json()relations = extract_relations_via_tongyi("张三是华为的CEO。")
print(relations)

事件抽取

利用大模型识别复杂事件信息,增强知识图谱的数据丰富性。

示例代码:

def extract_events_via_tongyi(text):api_url = "https://api.tongyi.aliyun.com/nlp/event_extraction"headers = {"Authorization": "Bearer YOUR_TONGYI_API_KEY"}data = {"text": text}response = requests.post(api_url, headers=headers, json=data)return response.json()events = extract_events_via_tongyi("张三于2024年6月10日发布了新的智能手机产品。")
print(events)

了解更多AI内容

【OpenAI】(一)获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!!

【VScode】(二)VSCode中的智能AI-GPT编程利器,全面揭秘CodeMoss & ChatGPT中文版

【CodeMoss】(三)集成13个种AI模型(GPT4、o1等)、支持Open API调用、自定义助手、文件上传等强大功能,助您提升工作效率! >>> - CodeMoss & ChatGPT-AI中文版

总结

本文详细介绍了如何通过 ChatGPT API、Claude API通义千问 API 实现文档切分、实体识别、关系抽取、知识图谱构建及查询生成的全流程自动化处理。通过结合多种先进的自然语言处理技术,可以大幅提高知识图谱构建的效率和准确性,为企业和开发者提供强大的数据支持和智能分析能力。


http://www.ppmy.cn/ops/141653.html

相关文章

深度学习(2)前向传播与反向传播

这一次我们重点讲解前向传播与反向传播,对这里还是有点糊涂 前向传播(Forward Propagation)和反向传播(Backward Propagation)是深度学习中神经网络训练的核心过程。它们分别负责计算神经网络的输出以及更新神经网络的…

Golang学习笔记_06——变量和常量

Golang学习笔记_03——匿名函数和闭包 Golang学习笔记_04——递归函数 Golang学习笔记_05——延迟调用 文章目录 1. 变量1.1 声明1.2 多变量声明1.3 作用域1.4 生命周期1.5 匿名变量 2. 常量源码 1. 变量 Go语言中的变量是存储数据的基本单元,它们允许你为数据命名…

TCP 和 UDP 可以使用同一个端口吗

TCP 和 UDP 可以使用同一个端口吗 简单来说 可以使用同一个端口,关键在于它们属于不同的传输层协议,在内核中是两个完全独立的软件模块,各自维护独立的端口空间,虽然端口号相同,但通过协议类型可以确定是哪种协议。 …

rabbitMq的rabbitmqctl status报错

Error: unable to perform an operation on node rabbitASUS-PC. Please see diagnostics information and suggestions below. 遇到上图这个错大部分问题可能是由于 RabbitMQ CLI 工具的 Erlang Cookie 与服务器上的不匹配而导致连接问题。Erlang Cookie 在 RabbitMQ 节点之间…

路由介绍.

RIB和FIB Routing Information Base(RIB),即路由信息库,是存储在路由器或联网计算机中的一个电子表格或类数据库,它保存着指向特定网络地址的路径信息,包括路径的路由度量值。RIB的主要目标是实现路由协议…

Javaweb web后端maven介绍作用安装

自动导入到这个项目 src是源代码 main主程序,核心代码 java是Java源代码 resources是项目配置文件 test测试相关的 maven概述 介绍 依赖在本地仓库查找,如果本地仓库有,用本地仓库的依赖,本地没有,连接中央仓库&…

Apache HTTP 服务器性能优化指南

引言 随着Web应用的复杂性和用户需求的增长,确保Apache服务器能够高效处理大量请求变得至关重要。性能优化不仅涉及调整配置参数,还包括选择合适的架构和工具来提升响应速度、减少延迟并最大化资源利用率。本文将探讨如何通过一系列措施来优化Apache的性…

Keras 深度学习库应用全解析

一、模型构建基础 模型初始化 使用 Sequential 模型:简单线性堆叠层的方式,如 model Sequential(),适合初学者快速搭建基础网络结构。函数式 API 构建:通过 Input 定义输入层,如 input_layer Input(shape(input_dim,…