apache UIMA 与 Apache Opennlp 有何不同

How apache UIMA is different from Apache Opennlp

我一直在用 Apache OpenNLP 做一些能力测试,它有句子检测、标记化、名称实体识别的能力。现在,当我开始查看 UIMA 文档时,UIMA 主页上提到了它 - "language identification" => "language specific segmentation" => "sentence boundary detection" => "entity detection (person/place names etc.)"。

也就是说我可以使用 UIMA 来完成与 OpenNLP 相同的任务。两者都有什么附加功能?我是这个领域的新手,请帮助我了解两者的用途和功能。

据我了解,您是在询问 Apache UIMA 和 Apache OpenNLP 的功能集之间的差异。他们的功能集几乎没有任何共同点,因为这两个项目的目标截然不同。

Apache UIMAUIMA 规范 的开源实现。后者定义了一个概念框架,用于使用结构化元数据增强非结构化信息(例如人类产生的自然语言),以便计算机可以使用它。

作为处理非结构化信息的应用程序示例,让我们以一个将自然语言文本作为输入并标记给定文本中的所有命名实体的应用程序为例,例如

Input text = "Bob's cat Charlie is chasing a mouse."
Result = "<NE>Bob</NE>'s cat <NE>Charlie</NE> is chasig a mouse."

要识别此示例中的命名实体(即 BobCharlie),必须执行几个自然语言处理步骤。无需详细说明每个步骤的作用,假设的命名实体识别系统可能涉及以下步骤:

  1. 资料准备
  2. 分句
  3. 代币化
  4. 令牌词形还原
  5. 词性标注
  6. 短语检测
  7. 是否将短语分类为命名实体

如您所见,此类应用程序可以非常直观地建模为组件序列,而这正是 UIMA 所做的。它将处理非结构化信息的应用程序建模为 管道 组件(在 UIMA 术语中称为 analytics)。可以想象,上面列出的许多管道组件都可以用于其他任务,因此 UIMA 的架构设计强调组件的可重用性。

为避免混淆,UIMA 标准本身不提供任何特定组件,但定义了 UIM(非结构化信息管理)应用程序的基础结构,例如工作流、数据类型、组件间通信等。

另一方面,

Apache OpenNLP 正是这样做的,即提供处理非常具体任务(句子拆分、POS 标记等)的 NLP 算法的具体实现。您感到困惑的原因可能是编写包装 OpenNLP 工具的 Apache UIMA 组件是可能的。 OpenNLP项目实际上提供了这样的组件。

是否要为您的 UIM 应用程序使用 UIMA 框架取决于项目的大小。如果它很小,我会不使用 UIMA 而直接使用 OpenNLP,因为 UIMA 相当重量级,因此只会增加复杂但(对于小型应用程序)不必要的开销。此外,由于其复杂性,学习如何使用它需要花费大量时间。

总而言之,Apache UIMA 和 Apache OpenNLP 解决了不同的问题,但由于两者都处理非结构化信息,因此可以将它们结合起来获利。