第一天
概述
知识图谱是一种新型的数据库,是一种基于图的数据结构。每个结点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。以下为知识图谱的几点作用: - 从“关系”分析问题 - 把不同种类的信息连接在一起 - 一个关系网络
学习知识图谱首先得掌握以下几种技能: 1. 基础知识:自然语言处理、图数据库操作知识、基本编程能力:Python、SQL; 2. 领域知识:知识图谱构建方法、知识图谱推理方法; 3. 行业知识
现在知识图谱领域中比较火热的是:风控。企查查可以查询企业的状态。 知识图谱核心技术可分为(大致就是一本书的目录): 1. 知识图谱的架构与设计 2. 知识图谱核心技术-知识源数据的获取 3. 知识图谱核心技术-信息抽取-关键词抽取(属性与数值) 4. 知识图谱核心技术-信息抽取-实体识别(深度学习+经典方案) 5. 知识图谱核心技术-信息抽取-关系抽取(深度学习+经典方案) 6. 知识图谱核心技术-信息抽取-事件抽取(深度学习+经典方案) 7. 知识图谱核心技术-知识融合概述 8. 知识图谱核心技术-知识融合-实体链接-实体统一(深度学习+经典方案) 9. 知识图谱核心技术-知识融合-实体链接-实体消岐(深度学习+经典方案) 10. 知识图谱核心技术-知识融合-知识合并 11. 知识图谱核心技术-知识加工概述 12. 知识图谱核心技术-知识加工-本体构建 13. 知识图谱核心技术-知识存储与检索 14. 知识图谱核心技术-知识加工-知识推理 15. 知识应用-智能问答,风控,营销.... 16. 知识图谱核心技术-知识加工-知识更新 17. 知识图谱核心技术-知识加工-质量评估
基本任务和主要研究方向: - 机器翻译 - 自动摘要 - 文本分类与信息过滤 - 信息检索 - 信息抽取与文本挖掘 + 实体抽取:命名体识别 + 关系抽取:关系抽取算法 + 事件抽取 * 地区、时间、过程 * 文本分类(为事件分类) - 情感分析 - 自动问答 - ……
自然语言处理与知识图谱的处理步骤: 0. 分词、语料库、文本分类、文本聚类、文本词性分析。。。 1. 信息抽取 2. 知识融合阶段 - 实体统一 - 实体消歧
分词
分类算法中的流程: (自然语言处理与知识图谱)-->分词-->(自然语言处理,与,知识,图谱,知识图谱)-->去停词-->(自然语言处理,知识,图谱,知识图谱)-->建立索引-->(1,2,3,432,66)-->one hot-->word2vec-->
语料库
jieba 分词同时基于一些语料库和手写的规则(如隐马尔科夫模型)。 如果想要加入自己的语料库可以使用下面的代码,语料库的格式可在 github jieba 上找到。 1
2
3jieba.load_userdict('/home/python/dictionary.txt')
seg_list = jieba.cut(text, cut_all=True)
print(' '.join(seg_list))
- 词库
- 医药知识图谱
- 语料库(网上有现成的,不用自己爬,如:医药行业专业词典)
- 医院的名称
- 疾病的名称
- 语料库(网上有现成的,不用自己爬,如:医药行业专业词典)
- 医药知识图谱
文本特征提取
文本数据的表示模型: - 布尔模型(boolean model) - 向量空间模型(vector space model) - 概率模型(probabilistic model) - 图空间模型(graph space model)等
以下为几种主要的模型,它们的目标都是:建立文档的向量(矩阵)模型。加粗代表是现在常用的模型 1. TF-IDF 2. LDA 3. LSA/LSI 4. Word2Vec 5. one-hot 6. BERT 7. ...
TF-IDF
TF:词频 IDF:逆文档频率。 权重 = TF * IDF TF-IDF 可能会漏掉一些词。比如一篇文章只出现一次“周杰伦”,但是它已经表示了这篇文章的主旨。可是 TF-IDF 无法为该词分配较高的权重。 另外 jieba 中其实可以直接使用 TF-IDF。导入jieba.analyse
即可使用。(TF-IDF 其实就是提取句子的标签) 1
2import jieba.analyse as ja
ja.extract_tags(sentence, topK=3,withWeight=False, allowPOS=())
word2vec
TF-IDF 只考虑单个文字,忽略了句子中的上下文信息。而word2vec 考虑了上下文,输入值为某个单词的前几个单词、后几个单词和其本身。 word2vec 现成的工具包有:1)gensim;2)tensorflow;3)keras。 另外 QA 系统等应用可能不适合使用 word2vec 训练出来的单词。因为它训练出来的词向量没有捕获到太多的上下文信息。众所众知,QA 系统和对话系统等应用需要经常使用到很多上下文信息。
汉语处理的难点
NLP 工具包
- 中文分词工具(粗体推荐使用,其他随意)
- jieba:下载地址。分词、ti-idf、标注。。。
- 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 精确模式:试图将句子最精确地切开,适合文本分析;
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
- snownlp:下载地址。这个有点慢
- Hanlp:下载地址。功能较多,比如:
- 中文分词
- 词性标注(pos)
- 命名实体识别(ner)
- 关键词提取
- 自动摘要
- 短语提取
- 拼音转换
- 简繁转换
- 依存句法分析
- word2vec
- pkuseg:下载地址。支持细领域分词,比如海洋、新闻、医药等。MIT 许可证,所以不可商用
- THULAC:下载地址
- fudannlp:不怎么更新了
- fastNLP:复旦新开发的一个工具,做了很多模型的集成,如 BERT。
- jieba:下载地址。分词、ti-idf、标注。。。
- 英文分词工具
- gensim:分词、主题分析等
- spaCy:文档
NER
所谓的命名体(named entity)就是人名、机构名、地名以及其他所有以名称为标识的实体。更广泛的实体还包括数字、日期、货币、地址等等。 难点:1)同义词、歧义词等;2)未登录词判定。 一般流程:1)基于规则的方法;2)基于模型的方法,常见的序列标注模型包括 HMM(Hidden Markov Model)、CRF(Conditional random field)、RNN。不过虽然基于模型的方法技术比较新颖,但是由于太过复杂以及太难解释,所以公司还是用基于规则的方法比较多。
序列标注
要做命名体识别,首先要做序列标注的任务。目前国家有以下几种标注体系: - 基于HMM - 基于CRF
上课的时候没听明白。
第二天
医疗命名体识别
使用 BIO 标注体系。 命名体识别模型训练步骤: 1. 准备数据:原始数据,即自然语言语句 1. 定义大类,如 BODY、SIGN、DISEASE。使用数据抽样的方法,2-3 周 2. 对原始数据进行标注:对原始数据进行人工标注,如右髋部 21 23 身体部位
、疼痛 27 28 症状和体征
。data_orign 文件夹中有 *.txt 和 *.txtoriginal.txt 文件。其中 *.txtoriginal.txt 文件中是医生诊断的原始数据,*.txt 中是将原始数据中的特征标注出来(此步骤是人工操作。不过如果有很多数据,其实可以偷个懒,因为有些特征差不多,在一份病历中标注一次就够了。比如风寒会出现很多次,其实只要在一份病历中标注一次,之后就可以被程序识别到了,当然多标注几份也行),如果已经有字典,比如网上下载的,可以不进行此步。 3. 设置标注格式:如 IO、BIO、BMEWO 等体系。 4. 编写转换程序:将所有标注的病历数据按标注体系转换,并且合并在一份文件中。如:肺 DISEASE-B
、炎 DISEASE-I
。详见:transfer_data.py。在 data/train.txt中。注:此标注方法不需要进行分词,因为它以字为级别。 5. 算法模型:LSTM 和 CRF 如何结合?请看下图。不管多大项目,词向量一般选 300 维 - LSTM - CRF 6. 算法预测:预测结果较差,可能是因为数据较少。
CRF 并不擅长提取属性,比如病人的受伤面积,可以使用正则表达式。 端到端训练就是一个模型到另一个模型的训练,比如LSTM + CRF。
中国人物关系图谱
讲到的技术
- 命名体识别
- 关系抽取
第三天
实体分词
重要内容提示:●交易简要内容:中海(海南)海盛船务股份有限公司将散货船“百花山”轮作为废钢船出售给江门市银湖拆船有限公司,出售价格为人民币17,183,633.49元。 ----分词为----> 重要内容, 提示, 交易, 简要内容, 中海, 海南, 海盛船务股份有限公司, 。。。 ## 命名体识别 识别所有命名体。 ### 企业实体识别 利用 foolnltk 工具包,对每个新闻做命名实体识别,并对企业命名实体做实体统一,最后将每个新闻中的企业实体替换为统一的企业实体。
实体统一/实体对齐
对同一实体具有多个名称的情况进行实体统一,将多个名称统一替换成一个命名实体。比如,“河北银行股份有限公司”和“河北银行”可以统一成“河北银行”。 大致来说这个应用是使用规则来做实体统一。目前(2019 年 7 月)来说,基于规则的做法大概能解决 70% 左右的问题。还可以使用余弦相似度,分类等算法进行融合使用。 - 分离出地名,比如河北,北京 - 去除后缀,比如有限公司,集团 - 提取经营范围,比如医疗,化学 - 剩余部分为中间字段 - 最后选择以上四个部分的某些部分进行拼接,成为一个唯一的命名实体,如果有中间字段,则仅使用中间字段即可,并对某些特殊的经营范围做补充,比如银行;否则,优先使用地名加经营范围,其次是地名加后缀。
更新命名体
在做完实体统一之后,将原数据中的实体进行替换即可。
特征工程(关系抽取)
- 文本特征提取,采用 tf-idf
- 关键字抽取,比如转让,收购,整合等等
- 句法特征提取,主要是与核心词之间的关系,包括企业实体本身和前后词与核心词之间的关系,距离等。即抽取(实体,关系,实体)三要素特征
- 依存句法分析
- 依存树,demo
- CCG
- 分类器
- 依存句法分析
- 拼接三要素 + tf-idf 特征
训练
将特征工程提取到的特征做 onehot 编码(不一定要是 onehot),利用随机森林进行模型拟合。使用贝叶斯超参数调优,调优参数为【决策树数量,决策树的最大深度,随机数生成器】。或者可以使用深度学习的算法,如神经网络。
补充
实体消歧
中文的不怎么好做,主要运用规则。
知识融合
实体扩充(融合外部知识图谱或者数据)。阿里巴巴实体链接框架
知识图谱构建步骤总结
- 数据收集(持续收集与更新)(关键词抽取、命名体识别、关系抽取、事件抽取)
- 原始数据,通常可能是一篇文章
- 爬虫技术
- 垂直爬虫
- 搜索引擎相关的爬虫
- 爬虫技术
- 语料数据,通常词库,词典,同义词
- 开源的第三方知识图谱,例如搜狗人物关系图
- 开源的训练好的词向量(word2vec)模型,tfidf
- 原始数据,通常可能是一篇文章
- 图谱设计
- 实体定义(本体) 实体:实体类型
- 属性 例如,手(长度,面积),类别:身体器官
- 属性定义
- 关系定义
- 关系也需要定义类别
- 需要评估关系可以覆盖的数据量,一般服从28 原则,20%的关系,覆盖80%数据
- 实体定义(本体) 实体:实体类型
- 知识清洗
- 实体消歧
- 实体统一
- 知识融合(实体链接)
- 实体与关系的融合
- 实体扩充(融合外部知识图谱或者数据)(知识合并)
- 知识存储-图数据库
前三天的总结
- 知识图谱的架构与设计
- 知识图谱核心技术-知识源数据的获取
- 知识图谱核心技术-信息抽取-关键词抽取(属性与数值)
- 知识图谱核心技术-信息抽取-实体识别(深度学习+经典方案)
- 目的:抽取数据中的实体信息,例如人名
- 方法:
- 规则:(正则等)
- 模型:传统方法CRF,深度学习BiLSTM+CRF
- 过程:
- 按照CRF要求定义好实体的分类与标注体系
- 标注训练数据
- 编写BiLSTM+CRF模型
- 使用模型预测
- 组合预测的结果
- 纠错预测的结果
- 知识图谱核心技术-信息抽取-关系抽取(深度学习+经典方案)
- 目的:抽取实体与实体间的关系,例如:出生于
- 方法:
- 规则,例如:通过关键词,进行匹配
- 模型
- 传统
- 分类
- 基于CRF+LSTM,需要将实体标签变成关系类别的标签,进行预测
- 基于语法树
- 依托于语法规则,识别关系属于哪两个实体,要求是句子结构要短一点,如果很长,规则不好定义
- BootStrapping
- 分类
- 深度学习
- 传统
- 知识图谱核心技术-信息抽取-事件抽取(深度学习+经典方案)
- 目的:抽取内容中的事件,以及他们的关系
- 事 件关系的类型:
- 因果事件 某一事件导致某一事件发生 A导致B
- 事件预警 因果溯源 由因求果 <地震,房屋倒塌> 条件事件 某事件条件下另一事件发生 如果A那么B
- 事件预警 时机判定 <限制放宽,立即增产> 反转事件 某事件与另一事件形成对立 虽然A但是B 预防不测 反面教材 <起步晚,发展快>
- 顺承事件 某事件紧接着另一事件发生 A接着B 事件演化 未来意图识别 <去旅游,买火车票>
- 主要的方法:
- 规则
- 知识图谱核心技术-知识融合概述
- 目的:将信息抽取中,抽取的实体与关系,进行融合 例如,(曹操,父子,曹丕) (曹操,父子,曹植)
- 融合的层次-实体链接
- 实体与实体的融合
- 实体与外部数据的融合
- 知识图谱与知识图谱的融合
- 知识图谱核心技术-知识融合-实体链接-实体统一(深度学习+经典方案)
- 目的:统一实体的名称,例如杭州阿里巴巴集团,阿里巴巴
- 统一的方法:
- 规则:例如去掉杭州阿里巴巴集团的集团,与地区,比较与简称的差距
- 基于模型:如入A与B,判断是否为一个实体
- 基于文本相似度:例如使用余弦定理,
- 知识图谱核心技术-知识融合-实体链接-实体消岐(深度学习+经典方案)
- 目的:消除实体间的歧义
- 方法:
- 结合语境, 例如该文章类别如果是3c数码类文章,那么小米指的是小米 然后进行实体补全
- 知识图谱核心技术-知识融合-知识合并
- 实体与实体的融合
- 实体与外部数据的融合
- 知识图谱与知识图谱的融合
- 知识图谱核心技术-知识加工概述
- 知识图谱核心技术-知识加工-本体构建
- 知识图谱核心技术-知识存储与检索 - Neo4j create
- (:Movie {title:"驴得水",released:2016}) return p;
- (p1:Person {name:'Alice'}) -[:KNOWS][->(p2:Person {name:'Bob'})
- 知识图谱核心技术-知识加工-知识推理
- 知识应用-智能问答,风控,营销....
- 智能问答应用 1. 如何实现基于知识图谱的智能问答?
- 对用户输入的问题进行语义分析
- 问题分类
- 问题的类型分类:例如,冬天下雨怎么办,是咨询类问题
- 问题的问形式上的分类,例如,怎么办,如何办,去哪办
- 问句解析
- 实体提取,例如,中国移动真不错,提取了中国移动实体
- 意图的预测,例如,万达怎么去,预测客户是想买东西
- 问题补全,例如,周末去哪吃比较好---->周末去哪(万达附近)吃饭比较好
- 其他重要词汇识别
- 将解析过的语句,转换成:cql等图数据查询语句
- 将查到的结果,结合之前的问题分类与模版,进行模板填充,反馈给客户
- 风控
- 营销
- 亲人圈发现
- 朋友圈发现
- 知识图谱核心技术-知识加工-知识更新
- 知识图谱核心技术-知识加工-质量评估
第四天
等于没学。搞了一天的环境配置。
第五天
图谱构建流程在第十五讲 PPT。
第六天
第十六讲实验步骤。