我一直在使用Apache OpenNLP进行一些功能测试,它具有Sentence检测,Tokenization,Name实体识别功能。现在,当我开始查看UIMA文档时,它在UIMA主页上被提及 - “语言识别”=> “语言特定分段”=> “句子边界检测”=> “实体检测(人/地名等)”。
其中说我可以使用UIMA执行与OpenNLP相同的任务。增加了什么功能?我是这个领域的新手,请帮助我理解两者的用途和能力。
答案 0 :(得分:25)
据我所知,您要求Apache UIMA和Apache OpenNLP的功能集之间存在差异。他们的功能集几乎没有任何共同点,因为这两个项目的目标非常不同。
Apache UIMA 是 UIMA规范的开源实现。后者定义了一个概念框架,用于使用结构化元数据来增加非结构化信息(例如人类生成的自然语言),以便计算机可以使用它。
作为使用非结构化信息的应用程序的示例,让我们使用一个应用程序,该应用程序将自然语言文本作为输入并标记给定文本中的所有命名实体,例如。
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用语中称为 analytics )。可以想象,上面列出的许多管道组件可以用于其他任务,因此UIMA的架构设计强调组件的可重用性。
为避免混淆,UIMA标准本身不提供任何特定组件,而是为UIM(非结构化信息管理)应用程序定义基础设施,例如:工作流,数据类型,组件间通信等。
另一方面,Apache OpenNLP 正是如此,即提供处理非常特定任务(句子分割,POS标记等)的NLP算法的具体实现。您的困惑的根源可能是可以编写包含OpenNLP工具的Apache UIMA组件。 OpenNLP项目实际上提供了这样的组件。
是否要将UIMA框架用于UIM应用程序取决于项目的大小。如果它很小,我会没有UIMA直接使用OpenNLP,因为UIMA相当重,因此只会增加复杂性(对于小应用程序)不必要的开销。此外,由于其复杂性,需要花费大量时间来学习如何使用它。
总结一下,Apache UIMA和Apache OpenNLP解决了不同的问题,但由于两者都处理非结构化信息,因此可以合并利润。