我想知道像 Open Calais 这样的语义服务如何从一段文本中找出公司或人员的名称、技术概念、关键字等。是因为他们有一个大型数据库来匹配文本吗?
例如,像 Zemanta 这样的服务如何知道向一段文本建议哪些图像?
来自 OpenCalais 的 Michal Finkelstein。
首先,感谢您的关注。我会在这里回复,但我也鼓励您在 OpenCalais 论坛上阅读更多信息;那里有很多信息,包括但不限于: http://opencalais.com/tagging-information http://opencalais.com/how-does-calais-learn也 可以随时在 Twitter 上关注我们(@OpenCalais ) 或发送电子邮件至 team@opencalais.com
现在回答:
OpenCalais 基于在自然语言处理和文本分析领域十年的研究和开发。
我们支持完整的“NLP 堆栈”(我们喜欢这样称呼它):从文本标记化、形态分析和 POS 标记,到浅层解析和识别名词和口头短语。
当我们寻找实体(又名实体提取,命名实体识别)时,语义就会发挥作用。为此,我们有一个复杂的基于规则的系统,它结合了发现规则和词典/字典。这种组合使我们能够识别公司/个人/电影等的名称,即使它们不存在于任何可用列表中。
对于最突出的实体(例如人、公司),我们还在文章级别执行回指解析、交叉引用和名称规范化/规范化,因此我们会知道“John Smith”和“Mr. 例如,史密斯可能指的是同一个人。因此,对您的问题的简短回答是 - 不,这不仅仅是与大型数据库匹配。
事件/事实真的很有趣,因为它们使我们的发现规则更深一层;我们找到实体之间的关系并用适当的类型标记它们,例如并购(两个或多个公司之间的关系)、就业变化(公司和个人之间的关系)等等。不用说,事件/事实提取对于仅基于词典的系统是不可能的。在大多数情况下,我们的系统被调整为以精度为导向,但我们总是试图在准确性和完整性之间保持合理的平衡。
顺便说一句,本月晚些时候将推出一些很酷的新元数据功能,敬请期待。
问候,
迈克尔
我不熟悉列出的具体服务,但自然语言处理领域已经开发了许多技术,可以从一般文本中提取这种信息。正如肖恩所说,一旦你有了候选词,用上下文中的一些其他实体搜索这些词并不难,然后使用搜索结果来确定你对提取的词是实际实体的信心兴趣。
如果您想尝试自然语言处理,OpenNLP是一个很棒的项目。您命名的功能可能最好使用命名实体识别器(NER)(通常定位专有名词的算法,有时也定位日期)和/或词义消歧(WSD)(例如:单词“bank”)根据上下文有不同的含义, 这在从文本中提取信息时非常重要. 给定句子: "the plane banked left", "the snow bank is high", and "they robbed the bank" 你可以看到如何消歧可以在语言理解中发挥重要作用)
技术通常相互依赖,而 NER 是更复杂的任务之一,因此要成功完成 NER,您通常需要准确的分词器(自然语言分词器,请注意——统计方法往往表现最好)、字符串词干分析器(将相似词与共同词根混为一谈的算法:因此,像informant 和informer 这样的词被平等对待),句子检测(“琼斯先生很高。”只有一个句子,所以你不能只检查标点符号),部分- 语音标注器(POS 标注器)和 WSD。
有一个名为 NLTK(http://nltk.sourceforge.net)的 OpenNLP(部分)python 端口,但我还没有太多经验。我的大部分工作都是使用 Java 和 C# 端口,它们运行良好。
当然,所有这些算法都是特定于语言的,它们可能需要很长时间才能运行(尽管它通常比阅读您正在处理的材料要快)。由于最先进的技术主要基于统计技术,因此还需要考虑相当大的错误率。此外,由于错误率会影响所有阶段,而像 NER 之类的东西需要许多处理阶段,(标记化 -> 句子检测 -> POS 标签 -> WSD -> NER)错误率复合。
Open Calais 可能使用语言解析技术和语言静态来猜测哪些单词或短语是名称、地点、公司等。然后,对这些实体进行某种搜索并返回元数据只是另一个步骤。
Zementa 可能会做类似的事情,但将短语与附加到图像的元数据进行匹配以获得相关结果。
这当然不容易。