【10】知识图谱实战案例(动手做)

目录

案例1:使用neo4j构建小型金融行业知识图谱

案例2:基于金融知识图谱的问答机器人

案例3:基于金融知识图谱的企业风险挖掘

案例4:使用MRC技术完成事件抽取

案例5:基于法律领域的知识图谱

案例【6】:基于医药领域的知识图谱

案例7:基于农业领域的知识图谱


案例1使用neo4j构建小型金融行业知识图谱

引用于:知识图谱—仅用neo4j搭建简单的金融知识图谱-CSDN博客

一、任务描述

在用neo4j构建一个简单的金融领域的知识图谱,挖掘“高管上市企业行业/概念”之间的关系。

二、数据获取

爬取同花顺官网,得到的html文件,企业信息就存储在这写文件中,需要用BeautifulSoup去解析其内容,挖掘出相关的数据

三、数据清洗,得到图谱源数据

导入到neo4jcsv文件主要有nodes.csv文件(这部分文件在neo4j中是databases的作用)和relationship.csv文件(这部分文件在neo4j中是relation的作用)。

四、导入

使用neo4j-admin导入neo4j,完成实体关系存储

导入命令:

./neo4j-admin import --mode=csv --database=stockkg.db --nodes=/Users/zero/Desktop/kg/stock.csv --nodes=/Users/zero/Desktop/kg/industry.csv --nodes=/Users/zero/Desktop/kg/concept.csv --nodes=/Users/zero/Desktop/kg/executive.csv --relationships=/Users/zero/Desktop/kg/stock_industry.csv --relationships=/Users/zero/Desktop/kg/executive_stock.csv --relationships=/Users/zero/Desktop/kg/stock_concept.csv

案例2基于金融知识图谱的问答机器人

 

from flask import Flask, jsonify, request, abort  
#from flask_cors import *  
from py2neo import Graph,Node,Relationship  
from decimal import Decimal  
from pyhanlp import *   
import json  
import math  app = Flask(__name__)  
#CORS(app, supports_credentials=True)  
@app.route("/qa", methods=['POST', 'GET'])  
def kg_qa():  if request.method == 'GET':          ques = request.args.get('question')  cb = request.args.get('callback')  print(ques)  qa_graph = Graph('http://localhost:7474',username='neo4j',password='nlp')  #qa_graph = Graph('http://10.124.142.22:7474',username='neo4j',password='nlp')  keyword = []  ansList = []  # CRF 词法分析器  CRFLexicalAnalyzer = JClass("com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer")  analyzer = CRFLexicalAnalyzer()  han_word_pos = analyzer.analyze(ques).toString()  print(han_word_pos)  wordlist = han_word_pos.split(" ")  for word in wordlist:  pos = word.split("/")  if "n" in pos[1]:  print(pos[0],pos[1])  if pos[0] not in keyword:  keyword.append(pos[0])  print(keyword)  
#枚举组成cypher查询语句  for key1 in keyword:  for key2 in keyword:  #query_str = "match (n:ques{theme:'%s'})-[r1]->(m:desc{name:'%s'})-[r2]->(a:ans) return a.content"%(key1,key2)  query_str = "match (q)-[r2]->(a) where  q.theme=~'.*%s.*' AND a.key=~'.*%s.*' return a.content"%(key1,key2)  print(query_str)  answer = qa_graph.run(query_str).data()  print(answer)  if answer:  for item in answer:  print(item)  ans_str = item['a.content']  print(ans_str)  #如果结果里面没有才加入  if ans_str not in ansList:  ansList.append(ans_str)  print(ansList)  #如果两个条件查不出来,那就只查theme  if not ansList:  for key in keyword:  #query_str = "match (n:ques{theme:'%s'})-[r]->(a:ans) return a.content"%(key)  query_str = "match (q)-[r2]->(a) where  q.theme=~'.*%s.*' return a.content"%(key)  answer = qa_graph.run(query_str).data()  if answer:  for item in answer:  ans_str = item['a.content']  print(ans_str)  #如果结果里面没有才加入  if ans_str not in ansList:  ansList.append(ans_str)  print(ansList)# re_ans = "您想问的是不是这些问题:\n"  re_ans = ""  for i in range(len(ansList)):  re_ans += "(%s) %s \n"%(i+1,ansList[i])  print(re_ans)  result = {  "question" : ques,  "answer" : re_ans  }  res_str = json.dumps(result)  cb_str = cb + "(" + res_str + ")"  print(cb_str)  return cb_str  return 'Error Format'  if __name__ == '__main__':  from werkzeug.serving import run_simple  run_simple('127.0.0.1', 9001, app)  

基于上述代码可以完成基于KBQA的智能问答机器人。本代码使用了flask作为后台,使用了hanlp作为POSNER来解析用户问题,解析完成后,将识别出来的实体传入neo4j中进行查询。

案例3:基于金融知识图谱的企业风险挖掘

一、背景

传统的企业评价主要基于企业的财务信息,借贷记录信息等来判断企业经营状况,以及是否可能违约等信用信息。对于财务健全、在传统银行借贷领域留有记录的大中型企业,这种评价方式无疑较为客观合理。然而,对于更大量的中小微企业,既无法公开获得企业真实财务信息,也无这些企业的公开信用信息,在强变量缺失的情况下,如何利用弱变量客观公正评价企业经营状况,正是本课题需要解决的主要问题。

p企业风险预测背景-2017-CCF-BDCI-Enterprise样本集是从全国2000多万企业抽取部分企业(脱敏后),提供企业主体在多方面留下的行为足迹信息数据

二、样本数据介绍

样本提供两种数据

1)企业身份信息(已脱敏)及企业在一定时间范围内的行为数据。该数据对训练集和评测集都是相同的。

2)目标数据。目标值为该企业在20178月时的经营状况:停业1,正常经营0

三、项目构建思路

AI工程的一般过程:

数据预处理——特征工程——模型训练——模型评估——提供服务/再次训练

四、数据清洗

1. 转化或者去掉数据中存在的中文字符
2. 针对性的填充空置,根据这个工作的类别的平均值,最大值和最小值进行填充,填充的时候考虑公司的注册的时间,
使用相近时间短的同类型的工司的数据进行填充,比如前后
3
3. 针对性的去掉重复的数据,数据本省的噪声,去掉完全相同的数据,比如投资数据出现两份
4. 如何处理异常值,针对有先验证知识的特征进行分组
五、 特征 选择
基础特征 : 添加的过程中进行特征选择和分组,进行多特征多模型训练
1. 直接使用原始数据的列作为特征,使用单个和分组统计的特征,
2. 分时间段记性统计特征
3. 统计特征,比如投资公司的个数,违约的个数等,在本省内的个数和本省外的个数,
4. 计算不同分组之间的统计值的特征
5. 单个数据的同大类别和小类别的公司的个数(已经排序 rank 特征)
6. 同(大、小)行业对根据年份归一化后的注册资本进行排序,得到不同排序次序特征
7. 对一些实数数据,进行取对数特征 变换
偏离值特征 :
1. 计算每一个个体与分组之间的偏离距离,计算分组的均值,得到与每个个体的分组
2. 添加聚类特征,计算单个个体与当年(全部或者 3 年),所有同大类型和同小类型公司的均值的偏差距离
交叉特征 :
1. 跨表时间交叉特征 : 使用不同的表的时间间隔得到特征 , 例如,第一次投资或违约时间和注册时间之间的差值
2. 加减乘除特征、多项式交叉特征,暴力特征,应该是暴力出奇迹
计算的使用进行特征筛选交叉,分别对积极特征和消极特征进行组合,
主管考虑正相关和负相关,比如,分公司的个数、投资公司数量、专利数都是正相关
失信此时、被执行案件此时都是负相关
3. one-hot 特征,将 one-hot 特征乘以某个其他特征
4. stacking 特征,使用树模型得到 stacking 特征
5. 企业关系特征,与这个企业有关系的事务的个数,可以构造一个有向图计算出度和入度
6. 注意时间衰减特征
六、 模型训练与评估
算法:xgboost
训练模型 :
在不同的特征集合上进行单模型调优和多模型融合
复赛的使用分省份预测,提高
结果
评价指标: AUC + F1

树模型有较强的可解释性,往往简单且高效;树模型对于异常值有较强的鲁棒性;树模型对特征处理的要求比较低,不需要对特征进行归一化与空值填充;多模型融合( blending(加权融合),还可以尝试的策略包括:stackingbagging 等)

七、 核心代码讲解 - 偏离值特征
dataset['MPNUM_CLASS'] = dataset['INUM'].apply(lambda x : x if x <= 4 else 5)  
dataset['FSTINUM_CLASS'] = dataset['FSTINUM'].apply(lambda x : x if x <= 6 else 7)  
dataset.fillna(value={'alt_count': 0, 'rig_count': 0}, inplace=True)  
for column in ['MPNUM', 'INUM', 'FINZB', 'FSTINUM', 'TZINUM', 'ENUM', 'ZCZB', 'allnum', 'RGYEAR', 'alt_count', 'rig_count']:  groupby_list = [['HY'], ['ETYPE'], ['HY', 'ETYPE'], ['HY', 'PROV'], ['ETYPE', 'PROV'], ['MPNUM_CLASS'], ['FSTINUM_CLASS']]  for groupby in groupby_list:  if 'MPNUM_CLASS' in groupby and column == 'MPNUM':  continue  if 'FSTINUM_CLASS' in groupby and column == 'FSTINUM':  continue  groupby_keylist = []  for key in groupby:  groupby_keylist.append(dataset[key])  tmp = dataset[column].groupby(groupby_keylist).agg([sum, min, max, np.mean]).reset_index()  tmp = pd.merge(dataset, tmp, on=groupby, how='left')  dataset['ent_' + column.lower() + '-mean_gb_' + '_'.join(groupby).lower()] = dataset[column] - tmp['mean']  dataset['ent_' + column.lower() + '-min_gb_' + '_'.join(groupby).lower()] = dataset[column] - tmp['min']  dataset['ent_' + column.lower() + '-max_gb_' + '_'.join(groupby).lower()] = dataset[column] - tmp['max']  dataset['ent_' + column.lower() + '/sum_gb_' + '_'.join(groupby).lower()] = dataset[column] / tmp['sum']  
dataset.drop(['MPNUM_CLASS', 'FSTINUM_CLASS'], axis=1, inplace=True)  

这段代码的意思是:

首先,根据分组字段对数据集进行分组

然后计算每个个体与分组的均值、最小值、最大值和求和值之间的偏离距离

这类特征对于这个比赛十分有效,是我分数大幅上升的一个原因。

案例4使用MRC技术完成事件抽取

案例分享:中国法研杯CAIL2019http://cail.cipsc.org.cn

案例代码:https://github.com/caldreaming/CAIL

数据集: sQUAD 2.0 ---公开数据集。 中文的是DoReader

一、项目架构

二、机器阅读流程

三、项目方案

案例5:基于法律领域的知识图谱

一、项目介绍

目前知识图谱在各个行业中应用逐步打开,尤其在金融,医疗,法律,旅游方面.知识图谱助力法律智能,能够在一定程度上利用现有大数据以及机器学习/深度学习与自然语言处理技术,提供一些智能的解决方案.本项目将完成两个大方向的工作:

1.罪名为核心,收集相关数据,建成基本的罪名知识图谱,法务资讯对话知识库,案由量刑知识库.

2. 分别基于步骤1的结果,完成以下四个方面的工作:

基于案由量刑知识库的罪名预测模型
基于法务咨询对话知识库的法务问题类型分类
基于法务咨询对话知识库的法务问题自动问答服务
基于罪行知识图谱的知识查询

二、罪名预测

'''''使用svm模型进行预测'''  def predict(self, sent):  model = joblib.load(self.model_path)  represent_sent = self.rep_sentencevector(sent, flag='noseg')  text_vector = np.array(represent_sent).reshape(1, -1)  res = model.predict(text_vector)[0]  label = self.id_dict.get(res)  return label  '''''基于wordvector,通过lookup table的方式找到句子的wordvector的表示'''  def rep_sentencevector(self, sentence, flag='seg'):  if flag == 'seg':  word_list = [i for i in sentence.split(' ') if i]  else:  word_list = self.seg_sent(sentence)  embedding = np.zeros(self.embedding_size)  sent_len = 0  for index, wd in enumerate(word_list):  if wd in self.embdding_dict:  embedding += self.embdding_dict.get(wd)  sent_len += 1  else:  continue  return embedding/sent_len  

三、法务咨询问题分类

问题分类代码 

'''''基于wordvector,通过lookup table的方式找到句子的wordvector的表示'''  
def rep_sentencevector(self, sentence):  word_list = self.seg_sent(sentence)[:self.max_length]  embedding_matrix = np.zeros((self.max_length, self.embedding_size))  for index, wd in enumerate(word_list):  if wd in self.embdding_dict:  embedding_matrix[index] = self.embdding_dict.get(wd)  else:  continue  len_sent = len(word_list)  embedding_matrix = self.modify_sentencevector(embedding_matrix, len_sent)  return embedding_matrix  
'''''对于OOV词,通过左右词的词向量作平均,作为词向量表示'''  
def modify_sentencevector(self, embedding_matrix, len_sent):  context_window = 2  for indx, vec in enumerate(embedding_matrix):  left = indx - context_window  right = indx + context_window  if left < 0:  left = 0  if right > len(embedding_matrix) - 1:  right = -2  context = embedding_matrix[left:right + 1]  if vec.tolist() == [0] * 300 and indx < len_sent:  context_vector = context.mean(axis=0)  embedding_matrix[indx] = context_vector  return embedding_matrix  

法务咨询自动问答代码

'''''基于ES的问题查询'''  def search_es(self, question):  answers = []  res = self.search_specific(question)  for hit in res:  answer_dict = {}  answer_dict['score'] = hit['_score']  answer_dict['sim_question'] = hit['_source']['question']  answer_dict['answers'] = hit['_source']['answers'].split('\n')  answers.append(answer_dict)  return answers  '''''计算问句与库中问句的相似度,对候选结果加以二次筛选'''  def similarity_cosine(self, vector1, vector2):  cos1 = np.sum(vector1*vector2)  cos21 = np.sqrt(sum(vector1**2))  cos22 = np.sqrt(sum(vector2**2))  similarity = cos1/float(cos21*cos22)  if similarity == 'nan':  return 0  else:  return  similarity  

案例【6】:基于医药领域的知识图谱

一、项目背景

从无到有搭建一个以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。

二、构建框架

三、实体、实体关系、属性类型 

四、问答框架

question_classifier.py:问句类型分类脚本
question_parser.py:问句解析脚本
chatbot_graph.py:问答程序脚本 = search_sqler

案例7:基于农业领域的知识图谱

一、项目背景

农业知识图谱是融合了农业地域性,季节性,多样性等特征后,利用农业领域的实体概念与关系,挖掘出农业潜在价值的智能系统

二、系统架构图

三、知识图谱存储

四、技术难点

1.技术难点——NER

2.技术难点——关系提取

3.技术难点——句法依存分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2809808.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

电路设计(30)——二进制转十进制电路的Multisim仿真

1.设计要求 输入8位二进制数据&#xff0c;输出三位十进制&#xff0c;将转换后的数据显示在数码管上。 2.电路设计 此时输入为0111_1111&#xff0c;结果为127&#xff0c;正确。 3.芯片介绍 74191芯片是一款4位二进制同步上升/下降计数器&#xff0c;它属于TTL&#xff08;…

线程普通任务执行流程

&#xff08;1&#xff09;先判断是否存在空闲线程&#xff0c;存在直接分配&#xff0c;不存在执行&#xff08;2&#xff09;&#xff1b; &#xff08;2&#xff09;判断工作线程数量小于核心数量&#xff0c;未超出创建核心线程执行线程任务&#xff0c;超出执行&#xff…

k8s笔记26--快速实现prometheus监控harbor

k8s笔记26--快速实现prometheus监控harbor 简介采集指标&配置grafana面板采集指标配置grafana面板 说明 简介 harbor是当前最流行的开源容器镜像仓库项目&#xff0c;被大量IT团队广泛应用于生产、测试环境的项目中。本文基于Harbor、Prometheus、Grafana介绍快速实现监控…

查看ubuntu系统的版本信息(3个方法)

查看发现版本信息 lsb_release -a发行版本&#xff1a;Ubuntu 16.04.6 LTS 查看内核和系统位数信息 uname -a内核信息&#xff1a;Linux prod.aixundian.gpu-0 4.4.0-151-generic系统位数&#xff1a;x86_64 查看内核和编译信息 cat /proc/version内核信息&#xff1a;Lin…

林浩然与杨凌芸的Scala编程历险记:变量与数据类型的魔法对决

林浩然与杨凌芸的Scala编程历险记&#xff1a;变量与数据类型的魔法对决 在Scala世界的梦幻殿堂中&#xff0c;两位英勇的程序员——林浩然和杨凌芸正准备开启一场代码之旅。这次&#xff0c;他们将深入探索Scala王国中的变量奥秘与数据类型丛林。 一、变量声明篇 &#xff0…

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…

2024国际生物发酵展览会独家解读-力诺天晟科技

参展企业介绍 北京力诺天晟科技有限公司&#xff0c;专业致力于智能仪器仪表制造&#xff0c;工业自动控制系统用传感器、变送器的研发、设计、销售和服务。 公司坐落于首都北京行政副中心-通州区&#xff0c;下设生产子公司位于河北香河经济开发区&#xff0c;厂房面积 300…

恢复软件哪个好用?记好这3个文件恢复宝藏!

“现在市面上的恢复软件太多啦&#xff01;哪款恢复软件比较好用呢&#xff1f;大家可以给我推荐几个靠谱的恢复软件或者方法吗&#xff1f;感谢&#xff01;” 在日常使用电脑的过程中&#xff0c;文件丢失或删除是一个常见的问题&#xff0c;而恢复软件成为解决这一问题的得力…

B端系统美观和易用上的缺失,该如何补位?

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;客户对B端系统的界面和体验要求越来越高&#xff0c;但是很多系统在上线之后有很多缺失&#xff0c;本文就列举缺失现象&#xff0c;给出一些补位策略&#xff0c;欢迎友友们支持关注我。 一、缺失的具体表现 在B端系统中…

matlab滤波器设计

1、内容简介 略 51-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab滤波器设计-butter、ellip、cheby1、cheby2_哔哩哔哩_bilibili 4、参考论文 略

【项目部署上线】宝塔部署前端Docker部署后端

【项目部署上线】宝塔部署前端&Docker部署后端 文章目录 【项目部署上线】宝塔部署前端&Docker部署后端1.安装依赖1.1 安装mysql1.2 安装Canal1.3 安装redis1.4 安装rabbitmq1.5 安装nacos 2. 部署前端3. 部署后端 1.安装依赖 1.1 安装mysql docker run -d -p 3306:3…

高效!中科院2区SCI,不到两个月录用!审稿人很给力!

【SciencePub学术】 JOURNAL OF ENVIRONMENTAL SCIENCES IF(2022)&#xff1a;6.9&#xff0c;JCR1区&#xff0c;中科院2区 数 期刊数据指标 ISSN&#xff1a;1001-0742 IF(2022)&#xff1a;6.9 自引率&#xff1a;4.30% 年发文量&#xff1a;300篇左右 国人占比&…

【其他】简易代码项目记录

1. KeypointDetection 1.1. CharPointDetection 识别字符中的俩个关键点。 1.2. Facial-keypoints-detection 用于检测人脸的68个关键点示例。 1.3. Hourglass-facekeypoints 使用基于论文Hourglass 的模型实现人体关键点检测。 1.4. Realtime-Action-Recognition containing:…

2024年2月16日优雅草蜻蜓API大数据服务中心v1.1.1大更新-UI全新大改版采用最新设计ui·增加心率计算器·退休储蓄计算·贷款还款计算器等数接口

2024年2月16日优雅草蜻蜓API大数据服务中心v1.1.1大更新-UI全新大改版采用最新设计ui增加心率计算器退休储蓄计算贷款还款计算器等数接口 更新日志 前言&#xff1a;本次更新中途跨越了很多个版本&#xff0c;其次本次ui大改版-同步实时发布教程《带9.7k预算的实战项目layuiph…

042 继承

代码实现 首先定义Person类&#xff08;人类&#xff09; /*** 人的基础特征** author Admin*/ public class Person {/*** 姓名*/String name;/*** 生日*/Date birthday;/*** 手机号码*/String tel;/*** 身份证号码*/String idCode;public Person() {}public Person(String …

计算机底层如何存储数据

文章目录 进制的分类二进制转十进制十进制转二进制二进制转八进制二进制转十六进制八进制十六进制转二进制各进制间的转换 计算机世界中只有二进制&#xff0c;所以计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制的分类 十进制&#…

如何绕过校园网?

最近可能没有什么好的话题了&#xff0c;会以笔记为主发博客 等我找到一些好的项目再发使用体验或教程吧 原文地址&#xff1a;如何绕过校园网&#xff1f; - Pleasure的博客 下面是正文内容&#xff1a; 前言 这应该是每一个大学生都会遇到的问题&#xff0c;宿舍中的校园…

搭建非maven spring boot项目 并且idea进行打包

1.所需jar包 2.搭建web项目 3 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class SpringBootTemplateApplications { public static void main(String\[\] ar…

超全的数据可视化图表组件,建议收藏!

直观的图表可以让受众理解复杂的数据&#xff0c;图表也分为很多种类&#xff0c;不同的图表的适用场合不同&#xff0c;小编对【派可数据 BI】的可视化组件进行梳理&#xff0c;根据使用场景&#xff0c;将可视化组件划分了以下几类&#xff1a;指标、趋势、比较、时序、空间、…

Java学习笔记------多态

什么是多态 同类型的对象&#xff0c;表现出的不同形态 多态的表现形式 父类类型 对象名称子类对象&#xff1b; 多态的前提 有继承关系 有父类引用指向子类对象 有方法重写 多态调用成员的特点 变量调用&#xff1a;编译看左边&#xff0c;运行也看左边 方法调用&am…