文本挖掘知识图——超越文本挖掘


文本是用来储存关于我们生活的世界的大量科学知识的媒介。然而,随着其规模和吞吐量的不断增长,分析这种非结构化数据已经成为一项不可能完成的乏味任务。这导致了文本挖掘和自然语言处理技术和工具的兴起,成为检查和处理大量自然文本数据的工具。

文本挖掘是从非结构化机器可读文本中自动提取结构化语义信息。对这些显式概念和关系的识别和进一步分析有助于以一种可伸缩和高效的方式发现文本中包含的多种见解。

各种文本挖掘/自然语言处理技术包括:结构提取、标记化、首字母缩略词规范化、引理化、去复合以及识别语言、句子、实体、关系、短语和段落。

但是一旦我们有了所谓的“结构语义信息”,我们该怎么办?这些文本挖掘技术只是产生了我们试图揭示的见解吗?

嗯,没那么简单。即使从文本中提取了一些信息,要将这些信息首先转化为知识,然后转化为有价值的见解,还有很长的路要走。这种洞察力可能是一个新的发现,或者以在我们现有的关于我们领域的知识中创造新的联系的形式,确认和验证一个先前的假设。让我们看看为什么超越文本挖掘不是一件容易的事情。

超越文本挖掘的挑战是什么?

在使用许多自然语言处理工具时,我发现在文本挖掘/自然语言处理工具的输出和我所寻求的洞察力之间存在一些挑战。这些可以总结如下:

  1. 难以吸收和整合复杂的文本挖掘输出网络
    文本挖掘文本的单个实例很容易。我们也可以自己阅读文本并从中提取知识。然而,当我们的语料库中有数百、数千或数百万个独立的文本实例时,我们该怎么办。在这种情况下,发现和理解从每个文本中提取的知识(文本挖掘输出)之间的相互关系变得极其困难。为了能够进行这样的分析,我们需要将所有的输出整合到一个地方——这并不像听起来那么简单。
  2. 难以将从文本中提取的知识与现有知识联系起来
    其次,我们不仅想分析从文本中提取的知识,而且想超越这一点,看看提取的信息如何与我们拥有的所有其他数据相关联。这些数据将有自己的格式或结构;使得它不可能与我们最初的NLP输出进行比较。这导致难以将不同组的不同和异构数据之间的关系联系起来。
  3. 难以以可扩展且高效的方式调查见解
    最后,由于可以提取的文本量很大,以可伸缩的方式生成或研究见解变得极其繁琐。当然,对于单个文本实例,可以手动发现有价值的见解,但是这种方法不可能跨越数百万个文本实例。此外,在大多数情况下,手动操作几乎是不可能的。那我们该怎么办?

我们如何应对这些挑战?

考虑到这一点,我们可以想出应对这些挑战的潜在解决方案。基于我的研究,我建议采用以下方法:

  1. 将复杂的文本挖掘输出网络集成并摄取到一个集合中
    为了解决第一个挑战,我们需要一种方法来轻松地将文本挖掘的输出积累到一个集合中——换句话说,就是一个文本挖掘的集合knowledge graph
  2. 强加一个显式结构来规范化所有数据
    为了实现数据的智能分析和集成,同时保持数据的完整性,我们需要在所有我们想要分析的数据上强加一个明确的结构。这不仅有助于概念本身的语境化,也有助于它们之间的关系。这意味着拥有一个更高层次的数据模型来包含各种类型的数据,并巩固它们在知识图中的存在。这也将允许我们在摄取时验证数据。数据模型将充当所有数据类型的保护伞,允许我们将它们内部和之间的所有关系放在上下文中。
  3. 使用自动推理发现新见解
    为了从我们的知识图中提取或推断尽可能多的信息,我们需要某种automated reasoning在整个数据中传播我们的领域专业知识的工具。这将使我们能够从我们的知识图表中提出问题,并通过他们的解释得到正确的答案——这是其他传统方法无法做到的。

确定了前面列出的挑战的解决方案后,让我们使用Grakn来构建一个文本挖掘的知识图。

如果你不熟悉它,Grakn是一个智能数据库,以知识图的形式来组织复杂的数据网络。它包含一个knowledge representation基于的系统hyper-graphs;支持任何类型的复杂网络的建模。这个知识表示系统然后被自动推理引擎解释,该引擎实时执行推理。该软件以灵活且易于理解的查询语言的形式展示给用户Graql

构建文本挖掘知识图

但是我们实际上如何使用Grakn构建一个文本挖掘的知识图呢?

步骤1:识别文本

首先,我们需要知道我们正在挖掘并想要存储的文本。在这篇文章中,我想特别关注生物医学数据。因此,我看到的非结构化文本数据类型包括:

  1. Medical Literature
  2. Diagnostic Test报告
  3. Electronic Health Records
  4. Patient Medical History
  5. Clinical Reports

从上面列出的文本语料库中,我选择了专门研究医学文献。具体来说,PubMed文章摘要。

步骤2:识别文本挖掘/自然语言处理工具

当我观察这个空间时,我发现它很容易整合Stanford's CoreNLP允许我训练和挖掘文本。挖掘文本的脚本可以在我们的GitHub报告中找到here。可以替代使用的其他工具包括:NLTK,TextBlob,gensim,spaCy,IBM Watson NLU,PubTator,LitVar,NegBio,OpenNLP,和BioCreative

步骤3:为你的数据建模

多亏了CoreNLP,我们现在有了原始的文本挖掘数据,我们可以进行数据建模了。为此,Grakn利用了entity-relationship model将每个概念分成实体、属性或关系。这意味着我们所要做的就是将每个概念映射到一个schema concept type并认识到它们之间的关系。让我们看一个例子来演示我们将如何着手做这件事。

为了开始对我们的CoreNLP输出进行建模,我们首先需要知道它实际上是什么样子的。最基本的挖掘从正文中提取句子。这些句子有情感、标记(组成句子)和某些标记之间的关系。我们还获得了工具识别的每种类型的置信度度量。这方面的视觉表现如下所示:

正如我们所看到的,我们的输出结构已经像图形一样了。传统的方法努力将这些丰富的信息封装到表格中,然而,这种方法剥离了信息的整个维度,并且产生了相反的效果。保持这种类似图形的结构来构建我们从文本语料库中提取的所有内容的集成复杂知识图感觉更自然。

我们可以轻松地将输出映射到Graql


我们首先认识到mined-text,sentence,和token作为实体,具有如下属性text,sentiment,lemma,和type。我们还可以看到他们在我们接下来要定义的关系中扮演的角色。

我们可以确定两种关系。一个是containing事物之间的关系contained这就是container。我们可以看到实体mined-text实体播放container对于一个sentence,asentence播放contained关于mined-text,并且作为container关于atoken。最后,是token只播放contained关于sentence

第二个关系是mined-relation,它与tokens如同objects或者subjects也有contained显示哪个的关系sentencemined-relation是从。关系mined-relation也有一个属性type来表示关系的类型。

最后,我们还需要指定我们定义的每个属性的数据类型,这可以通过上面模式的最后四行来完成。

架构:Link to code

步骤4:迁移到Grakn

现在我们已经有了数据,以及强加在这些数据上的结构,下一步就是将这些数据移植到Grakn中,并将其转化为知识。请注意,有许多不同的方法来进行迁移,但在这里我想具体谈谈我们将如何使用Java,NodeJS,和Python

为此,我们可以轻松地使用这些语言中的任何一种来插入符合我们建模的模式的提取信息的实例。下图描述了如何插入的单个实例token带着lemmatype使用这三种语言中的任何一种:

要了解更多信息migrating data进入Grakn,确保阅读this article

第五步:发现并解读新见解

迁移后,我们可以开始发现新的见解。发现真知灼见是指发现对我们努力实现的目标有价值的新数据。为了做到这一点,我们需要首先寻找或要求一些东西。换句话说,我们从一个问题开始。这些问题的范围可以从在文本中提问,甚至是关于其他数据的更复杂的问题,这些数据被文本挖掘的输出所扩充。

让我们看一些例子,看看我们的文本挖掘知识图如何为它们提供答案:

问题1:从一篇公共医学文章中提取了什么知识?

Graql查询1

回答1:

反应的视觉表现

我们得到的答案是从我们感兴趣的PubMed文章的摘要中挖掘出的各种概念。上图显示了一个例子,其中提取的实体是:

  1. 基因——BRAF
  2. 药物—曲马替尼
  3. 药物—Dabrafenib
  4. 疾病——黑素瘤
  5. 蛋白质—MEK
    我们还可以看到一些挖掘出来的关系:
  6. 抑制—介于BRAFDabtrafenib
  7. 抑制—介于MEK曲马替尼
  8. 治疗—介于Dabtrafenib黑素瘤
  9. 治疗—介于曲马替尼黑素瘤

这些实体和关系是在我们的CoreNLP工具上进行的培训中提取的。关于这方面的更多信息可以找到here

现在让我们试着问一个更难的问题:

问题2:哪篇公共医学文章提到了黑色素瘤和基因BRAF?

Graql查询2

回答2:

反应的视觉表现

我们从Grakn那里得到的答案是符合所提供条件的所有PubMed文章的列表。这种查询的一个很好的应用可以在精确医学领域中提出,在该领域中,我们希望将个体患者链接到与其个人生物医学病例相关的医学文献。如果你对精确医学和知识图表感兴趣,看看这个article

这些查询是有用的,但是现在它回避了一个问题——它如何利用我们的文本挖掘知识图来扩充我们现有的知识?我们如何利用我们所挖掘的东西来扩展我们的洞察力,并将它们应用到生命科学的其他领域?下一个问题展示了这一点:

问题3:哪种药物与黑色素瘤相关?

Graql查询3

回答3:

反应

尽管格拉克恩给了我们一个正确的答案,但是这个数据实际上从未被格拉克恩接受——疾病和药物之间不存在联系。那么,我们是如何得到这个相关答案的呢?

简而言之,Grakn的自动推理机通过automated reasoning。由于这种类型的推理是完全可以解释的,我们可以解释任何推断出的概念来理解它是如何被推断/创造出来的。在下面,您可以看到这个解释在中的样子Workbase。在下一节中,我将深入探讨我们是如何创建允许Grakn推断这些关系的逻辑和规则的。

说明

解读我们的答案

我们上面看到的关系是一阶逻辑的产物。这可以建模为当...的时候然后场景。

论证

当...的时候在这种情况下,指的是我们的文本挖掘知识图的一个子图,也就是说,每当找到像左边这样的子图时,右边的关系就会被创建。

这个逻辑在整个知识图中传播,创建新的有价值的连接,这是通过用Graql编写的规则来完成的。我用于上述推论的规则如下:

规则:治疗规则

上述规则规定当...的时候

  1. 有一篇PubMed文章每篇100美元,摘要每篇100美元
  2. 摘要中有一句话
  3. 存在从句子$s中提取的具有“处理”类型的挖掘关系
  4. 参与挖掘关系的标记有引理
  5. 这些旅鼠具有与药物和疾病相同的价值

如果这是真的,然后在药物和疾病之间建立治疗关系。我们也可以从上面的规则看出,它对疾病或药物是不可知的;因此在每种药物和疾病之间建立了符合给定条件的治疗关系。

应该注意的是,上面的规则演示了如何使用自动推理来创建复杂见解的高级抽象,这些见解可以在数据中扩展。它决不能与最终用户应用程序的完整实现相比。

如何在一个架构中把所有的部分组合在一起?

现在,让我们后退一步,看看构建文本挖掘知识图的所有组件是如何拼凑在一起的。

我们从文本开始,它可以来自多种来源和各种格式。一个自然语言处理工具被用来挖掘文本并产生某种带有结构的输出。该结构用于创建schema(高级数据模型)在原始NLP输出上实施结构。一旦完成,我们使用Grakn's clients将NLP输出的实例迁移到Grakn,确保每次插入都符合模式。Grakn将这些信息存储在它的知识表示系统中,可以通过查询这些信息来发现复杂的概念,甚至检验假设。这些见解可能已经在图表中,或者甚至在查询时由推理引擎创建;例如,发现基因簇鉴定、蛋白质相互作用、基因-疾病关联、蛋白质-疾病关联、药物-疾病关联、患者匹配,甚至用于临床决策支持。

结论

所以,我们知道文本挖掘在几个领域都非常有前途,在这篇文章中,我们特别关注了生物医学领域。我们知道,从从文本中提取信息到真正发现有用的东西,需要做很多工作。我希望已经展示了一个解决方案来帮助弥合这一差距。