代码编织梦想

知识图谱

实体识别

实体识别又称为实体抽取;主要目标是从文本中识别出代表实体的边界,并进一步判断类别。
传统的实体识别方法:CRF,基于深度学习的模型:BiLSTM+CRF

实体识别的方法:

1、定义模板或规则
通过定义正则表达式来描述这类规则。优点:抽取准确,有些实体识别也只能依据人工定义的规则来抽取
2、机器学习算法
实体识别任务可以定义为一个序列标注问题(给定一个句子,通过一个分类器给每个词打一个标签),通过机器学习训练一个分类算法,完成整个句子的序列标注。需要设计各种类型的特征来训练分类器,首先需要做的就是确定实体识别的标签体系。
*标签体系越复杂,语料标注成本越高 *

实体识别模型

基于CRF的实体识别

条件随机场模型(CRF):它以路径为单位,考虑的是路径的概率。

概念

1.随机场:含有多个位置,每个位置按某种分布随机赋予一个值,其全体就叫做随机场
2.马尔科夫随机场:假设随机场中某个位置的复制仅与它相邻位置的赋值有关,和不相邻位置的赋值无关。
3.条件随机场:加设马尔科夫随机场中只有X和Y两种变量,X一般是给定的,而Y一般是在给定X的条件下的输出。目标是求解P(Y|X)的最大值。

模型

对比一下普通的逐帧 softmax 和 CRF 的异同。
CRF 主要用于序列标注问题,可以简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将这个序列用 CNN 或者 RNN 进行编码后,接一个全连接层用 softmax 激活,如下图所示:
在这里插入图片描述
条件随机场
然而,当我们设计标签时,比如用 s、b、m、e 的 4 个标签来做字标注法的分词,目标输出序列本身会带有一些上下文关联,比如 s 后面就不能接 m 和 e,等等。逐标签 softmax 并没有考虑这种输出层面的上下文关联,所以它意味着把这些关联放到了编码层面,希望模型能自己学到这些内容,但有时候会“强模型所难”。 而 CRF 则更直接一点,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”
CRF在输出端显式地考虑了上下文关联
模型概要
假如一个输入有 n 帧,每一帧的标签有 k 中可能性,那么理论上就有k^n中不同的输入。我们可以将它用如下的网络图进行简单的可视化。在下图中,每个点代表一个标签的可能性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的一条完整的路径。
4tag分词模型中输出网络图
在序列标注任务中,我们的正确答案是一般是唯一的。比如“今天天气不错”,如果对应的分词结果是“今天/天气/不/错”,那么目标输出序列就是 bebess,除此之外别的路径都不符合要求。
换言之,在序列标注任务中,我们的研究的基本单位应该是路径,我们要做的事情,是从 k^n 条路径选出正确的一条,那就意味着,如果将它视为一个分类问题,那么将是 k^n 类中选一类的分类问题。
这就是逐帧 softmax 和 CRF 的根本不同了:前者将序列标注看成是 n 个 k 分类问题,后者将序列标注看成是 1 个 k^n 分类问题。
在 CRF 的序列标注问题中,我们要计算的是条件概率:

为了得到这个概率的估计,CRF 做了两个假设:
假设一:该分布是指数族分布。
这个假设意味着存在函数 f(y1,…,yn;x),使得:

其中 Z(x) 是归一化因子,因为这个是条件分布,所以归一化因子跟 x 有关。这个 f 函数可以视为一个打分函数,打分函数取指数并归一化后就得到概率分布。
假设二:输出之间的关联仅发生在相邻位置,并且关联是指数加性的。
这个假设意味着 f(y1,…,yn;x) 可以更进一步简化为:

这也就是说,现在我们只需要对每一个标签和每一个相邻标签对分别打分,然后将所有打分结果求和得到总分。
线性链CRF
尽管已经做了大量简化,但一般来说,(3) 式所表示的概率模型还是过于复杂,难以求解。于是考虑到当前深度学习模型中,RNN 或者层叠 CNN 等模型已经能够比较充分捕捉各个 y 与输出 x 的联系,因此,我们不妨考虑函数 g 跟 x 无关,那么:
这时候 g 实际上就是一个有限的、待训练的参数矩阵而已,而单标签的打分函数 h(yi;x) 我们可以通过 RNN 或者 CNN 来建模。因此,该模型是可以建立的,其中概率分布变为:

这就是线性链 CRF 的概念。
归一化因子
为了训练 CRF 模型,我们用最大似然方法,也就是用:
作为损失函数,可以算出它等于:

其中第一项是原来概率式的分子的对数,它目标的序列的打分,虽然它看上去挺迂回的,但是并不难计算。真正的难度在于分母的对数 logZ(x) 这一项。
归一化因子,在物理上也叫配分函数,在这里它需要我们对所有可能的路径的打分进行指数求和,而我们前面已经说到,这样的路径数是指数量级的(k^n),因此直接来算几乎是不可能的。
事实上,归一化因子难算,几乎是所有概率图模型的公共难题。幸运的是,在 CRF 模型中,由于我们只考虑了临近标签的联系(马尔可夫假设),因此我们可以递归地算出归一化因子,这使得原来是指数级的计算量降低为线性级别。
具体来说,我们将计算到时刻 t 的归一化因子记为 Zt,并将它分为 k 个部分:
分别是截止到当前时刻 t 中、以标签 1,…,k 为终点的所有路径的得分指数和。那么,我们可以递归地计算:它可以简单写为矩阵形式:
其中

而 G 是对 g(yi,yj) 各个元素取指数后的矩阵,即
而:
是编码模型(RNN、CNN等)对位置 t+1 的各个标签的打分的指数,即也是一个向量。式 (10) 中,ZtG 这一步是矩阵乘法,得到一个向量,而 ⊗ 是两个向量的逐位对应相乘。
归一化因子的递归计算图示。从t到t+1时刻的计算,包括转移概率和j+1节点本身的概率
动态规划
写出损失函数 −logP(y1,…,yn|x) 后,就可以完成模型的训练了,因为目前的深度学习框架都已经带有自动求导的功能,只要我们能写出可导的 loss,就可以帮我们完成优化过程了。
那么剩下的最后一步,就是模型训练完成后,如何根据输入找出最优路径来。跟前面一样,这也是一个从 k^n 条路径中选最优的问题,而同样地,因为马尔可夫假设的存在,它可以转化为一个动态规划问题,用 viterbi 算法解决,计算量正比于 n。
动态规划在本博客已经出现了多次了,它的递归思想就是:一条最优路径切成两段,那么每一段都是一条(局部)最优路径。在本博客右端的搜索框键入“动态规划”,就可以得到很多相关介绍了,所以不再重复了。

实现
经过调试,基于 Keras 框架下,笔者得到了一个线性链 CRF 的简明实现,这也许是最简短的 CRF 实现了。这里分享最终的实现并介绍实现要点。
实现要点
前面我们已经说明了,实现 CRF 的困难之处是 −logP(y1,…,yn|x) 的计算,而本质困难是归一化因子部分 Z(x) 的计算,得益于马尔科夫假设,我们得到了递归的 (9) 式或 (10) 式,它们应该已经是一般情况下计算 Z(x) 的计算了。
那么怎么在深度学习框架中实现这种递归计算呢?要注意,从计算图的视角看,这是通过递归的方法定义一个图,而且这个图的长度还不固定。这对于 PyTorch这样的动态图框架应该是不为难的,但是对于TensorFlow或者基于 TensorFlow 的 Keras 就很难操作了(它们是静态图框架)。
不过,并非没有可能,我们可以用封装好的 RNN 函数来计算。我们知道,RNN 本质上就是在递归计算:新版本的 TensorFlow 和 Keras 都已经允许我们自定义 RNN 细胞,这就意味着函数 f 可以自行定义,而后端自动帮我们完成递归计算。于是我们只需要设计一个 RNN,使得我们要计算的 Z 对应于 RNN 的隐藏向量。
这就是 CRF 实现中最精致的部分了。

CRF部分来自简明条件随机场CRF介绍 | 附带纯Keras实现 | 机器之心 https://www.jiqizhixin.com/articles/2018-05-23-3 (分享自 @机器之心Pro)
原文链接:https://www.jiqizhixin.com/articles/2018-05-23-3

基于深度学习的实体识别(BiLSTM+CRF模型)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41107671/article/details/127142290

知识图谱学习笔记(九)——知识图谱的存储与检索-爱代码爱编程

知识图谱的存储与检索 文章目录 知识图谱的存储与检索1. 概述2. 知识图谱的存储2.1 基于表结构的存储2.2 基于图结构的存储3. 知识图谱的检索3.1 关系数据库查询:SQL语言3.2 图数据库查询:SPARQL语言3.2.1 数据操纵 1. 概述 知识图谱中的知识表示:知识图谱中的知识是通过RDF的结构进行表示的,其基本构成单元是事

知识图谱学习笔记之知识图谱中的知识分类-爱代码爱编程

知识图谱中的知识分类 事实知识 事实知识是关于某个特定实体的基本事实,如(山东富士苹果,产地,山东)。事实知识是知识图谱中非常常见的知识类型。大部分的事实知识都是在描述实体的特定属性或关系,如“产地”。但是有些实体的相关事实未必存在典型的属性或者关系与之对应,需要通过复杂的文本来描述。如“孟子继承和发扬了孔子的儒家思想”,这一事实中,显示孔子和孟子之间

知识图谱学习笔记——知识抽取概述-爱代码爱编程

文章目录 0. 前言1. 实体抽取1.1 基于规则的方法1.2 基于统计模型的方法1.2.1 训练语料标注1.2.2 特征定义1.2.3 训练模型1.3 基于深度学习的方法2. 关系抽取2.1 基于模板的关系抽取方法2.2 基于监督学习的关系抽取方法2.3 基于弱监督学习的关系抽取方法3. 事件抽取 0. 前言 最近在看王昊奋老师的《知识图谱

知识图谱学习笔记(一)—— 知识图谱介绍-爱代码爱编程

1.知识图谱的研究目标与意义 知识图谱(Knowledge Graph)以结构化的形式描述客观世界中概念、实体及其关系,将互联网的信息表达成更接近人类认知世界的形式,提供了一种更好地组织、管理和理解互联网海量信息的能力。 知识图谱技术是指知识图谱建立和应用的技术,是融合认知计算、知识表示与推理、信息检索与抽取、自然语言处理与语义 Web、数据挖掘与机器

知识图谱学习笔记二(知识图谱表示与建模)-爱代码爱编程

 1.知识图谱表示方法            两大派系: 基于离散符号的知识表示                               基于连续向量的知识表示          由于知识图谱是很多搜索、问答以及大数据分析系统的数据基础,基于向量的表示更易于和深度学习模型集成,基于向量的知识图谱越来越重视。 2.知识表示方法(人工智能,知识是智

知识图谱学习笔记三(知识存储)-爱代码爱编程

1. 两种主要的图数据模型: RDF图、属性图 2.查询语言:            RDF图:SPARQL               属性图:Cypher、Gremlin 3.知识图谱存储方法      a.基于关系型数据库的存储方案           存储结构:三元组表、水平表、属性表、垂直划分、六重索引、DB2RDF        

知识图谱学习笔记五(知识图谱融合)-爱代码爱编程

     知识图谱融合         它是解决知识图谱异构问题的有效途径,通过建立异构本体或异构实例之间的联系,使得异构的知识图谱相互沟通,实现它们之间的互操作。           知识图谱包含描述抽象知识的本体层和描述具体事实的实例层。           本体层:描述特定领域中的抽象概念、属性、公理;           实例层:描述具体的

知识图谱学习笔记七(语义搜索)-爱代码爱编程

语义搜索          背景:互联网从仅包含网页和网页之间超链接的文档万维网转变成包含大量描述各种实体与实体之间丰富关系的语义万维网。以谷歌为代表的各大搜索引擎公司通过构建知识图谱来改善搜索质量,从而开启了语义搜索之路。       文档检索与语义检索的不同:语义搜索是需要处理更细粒度的结构化语义数据。       语义搜索系统基本框架:查询构建

知识图谱学习笔记八(知识问答)-爱代码爱编程

知识问答         知识问答是一个拟人化的智能系统,接收使用自然语言表达的问题,理解用户的意图,获取相关的知识,通过推理计算形成相应的答案并反馈给用户。       知识问答的基本要素          1.问题,也就是问答系统的输入。(问句、选择、填空等)          2.答案,也就是问答系统的输出。          3.智能体,

知识图谱学习笔记(一) —— 知识图谱介绍-爱代码爱编程

一.知识图谱的简介 1.1引言 2012年,谷歌发布"知识图谱"的新一代"智能"搜索功能,初中是优化搜索引擎返回的结果,增强用户搜索质量以及体验。现在的聊天机器人,证券投资,智能医疗,自适应教育,推荐系统,无一不跟知识图谱相关,在技术领域的热度也在逐年上升。 1.2概念 知识图谱是一种典型的多边关系图,由节点(实体)和边(实体之间的关系)组成,本质

知识图谱学习笔记(一)-爱代码爱编程

知识图谱学习笔记(一) 仅记录个人学习历程,内容来源于网络及书籍,侵删 关于知识图谱: 知识图谱的概念: 知识图谱(Knowledge Graph)又称为科学知识图谱,在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互

知识图谱学习笔记1-爱代码爱编程

参考  https://blog.csdn.net/pelhans/category_7607589.html 知识图谱-给AI装个大脑 - 知乎 知识图谱的定义 "A knowledge graph consists of a set of interconnected typed entities and their attributes

【知识图谱学习笔记】知识图谱概述-爱代码爱编程

#知识图谱# 知识图谱综述 2022年4月9日 一、概念: 所有用图表示实体与实体见的关系(新的知识工程)知识图谱涵盖很多领域:数据库、机器学习、自然语言处理、知识工程 知识工程:知识库和推理引擎 领域本体的构建:面向特定领域的形式化地对于共享概念体系的概念的描述 知识抽取:从海量数据中通过信息抽取方式获取知识 知识融合:通过对多个相关的知

知识图谱学习笔记(1)_qq_52055614的博客-爱代码爱编程

(1)知识图谱概述 知识图谱的发展史    Cyc,常识知识库,由术语和断言组成,术语包括概念,关系和实体。断言包括事实和规则    Schema.org 提供一个词语本体,用来描述语义标签。包括600多个类和900多个关系,包括个人,组织结构,地点,时间,医疗,商品企业联系方式     知识图谱相关技术   主要数据模型RDF图和属性图   查

知识图谱学习笔记-知识图谱价值和发展历程_jly19970726的博客-爱代码爱编程

一:知识图谱的价值: 1.辅助搜索 传统搜索引擎依靠网页之间的超链接实现网页的搜索,而语义搜索是直接对事物进行搜索,如人物、机构、地点等。这些事物可能来自文本、图片、视频、音频、IoT 设备等各种信息资源。而知识图谱和语义技术提供了关于这些事物的分类、属性和关系的描述,使得搜索引擎可以直接对事物进行索引和搜索 2.辅助问答 典型的基于知识图谱的问答