Apache UIMA和Apache OpenNLP有什么不同?

15

我一直在进行Apache OpenNLP的能力测试,它具有句子检测、分词和命名实体识别的功能。现在当我开始查看UIMA文档时,在UIMA首页上提到了“语言识别”=>“语言特定分割”=>“句子边界检测”=>“实体检测(人名/地点等)”。

这意味着我可以使用UIMA来执行与OpenNLP相同的任务。它们都有哪些附加功能? 我是新手,请帮助我理解两者的用途和能力方面。


乍一看,UIMA似乎使用OpenNLP提供了一个框架来管理许多不同种类的资源,包括图像、音频和视频,而OpenNLP的重点显然是包含人类语言的文本文件。 - tripleee
1个回答

30

据我理解,您是在询问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."
为了在这个例子中识别出所列明的命名实体(即“Bob”和“Charlie”),需要执行几个自然语言处理步骤。一个假想的命名实体识别系统可能涉及以下步骤:数据准备、句子拆分、标记化、标记化单词还原、词性标注、短语检测、将短语分类为命名实体或非命名实体。可以看到,这种应用程序可以非常直观地建模为组件序列,这正是 UIMA 所做的。它将处理非结构化信息的应用程序建模为组件(在 UIMA 术语中称为“分析器”)的管道。正如您所想象的那样,上面列出的许多管道组件可用于其他任务,因此 UIMA 的架构设计强调组件的可重用性。为了避免混淆,UIMA 标准本身不提供任何特定的组件,但定义了 UIM(非结构化信息管理)应用程序的基础设施,例如工作流程、数据类型、组件间通信等等。另一方面,Apache OpenNLP 正是提供处理非常具体任务(如句子拆分、词性标注等)的 NLP 算法的具体实现。你可能感到困惑的源头可能是可以编写包装 OpenNLP 工具的 Apache UIMA 组件。实际上,OpenNLP 项目提供了这样的组件。是否要为 UIM 应用程序使用 UIMA 框架取决于项目的规模。如果它很小,我会不使用 UIMA,直接使用 OpenNLP,因为 UIMA 很笨重,在小应用程序中只会增加复杂但(对于小应用程序)不必要的开销。此外,由于其复杂性,学习如何使用它需要相当长的时间。总之,Apache UIMA 和 Apache OpenNLP 解决不同的问题,但由于两者都处理非结构化信息,因此它们可以被有益地结合使用。

你的回答非常到位,让我对此有了更深刻的理解。除了UIMA和OpenNLP之外,在构建NLP流水线和提供NLP算法的具体实现方面,还有哪些其他工具可用?谢谢。 - Andy Dufresne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接