WordNet有“层级”吗?(NLP)
比如说……
鸡是一个动物。
墨西哥卷饼是一个食物。
WordNet可以让你做“是一个”的分类,也就是它的层级功能。
但是,我怎么知道什么时候该停止往上走这个树状结构呢?我想要一个层级。
这个层级要保持一致。
举个例子,如果我有一堆单词,我希望WordNet能把它们分类,但要在某个层级上,这样就不会走得太远。把“墨西哥卷饼”分类为“东西”太宽泛了,而“墨西哥包裹的食物”又太具体。我想要在这个层级上往上或往下走,直到找到合适的层级。
5 个回答
为了获取不同的级别,你需要提前定义每个级别的内容。通常,一个本体(也就是一种知识结构)会把这些级别定义为某个特定概念的直接子类,但如果没有这样的定义,你就需要自己想办法来制定。
接下来的步骤是给每个概念设定一个优先级,这样你就可以为每个词只展示一个类别。设定优先级的方法有很多种,比如可以根据类别和词之间的“是一个”(IS_A)关系的数量来决定,或者手动为每个类别选择优先级。然后,对于每个词,你可以选择优先级最高的类别。举个例子,你可能希望“肉”被归类为“食物”,而不是“化学物质”。
你可能还想为一些词设定优先级变化的规则,比如如果某些化学物质同时也是食物,你希望它们被标记为化学物质,而其他的则仍然被标记为食物。
[请给Pete Kirkham一些认可,他最早提到SUMO,这可能正好能回答Alex提问的问题]
(我在这里提供一些补充信息;我开始是在评论区,但很快就没地方写了...)
Alex: SUMO大部分是科学或工程吗?它不包含像食物、人物、汽车、工作等日常用词吗?
Pete K: SUMO是一个高级本体。页面上列出的中级本体(你可以在“事物”和“牛肉卷”之间找到的概念)不包括食物,而是反映了资助该项目的组织类型。确实有一个关于人的中级本体。还有一个关于行业(因此也包括工作)的本体,包括食品供应商,但如果你搜索的话,牛肉卷是没有提到的。
我的看法
WordNet的100%(3.0版本,即最新版本,还有旧版本)是映射到SUMO的,这可能正是Alex需要的。与SUMO(或者说MILO)相关的中级本体实际上是在特定领域内,并且目前不包括食品,但因为WordNet确实包括(包括所有这些日常事物中的许多),所以你不需要依赖SUMO下面的任何正式本体,而是可以使用SUMO的WordNet映射(可能还可以结合WordNet使用,后者虽然不是本体,但它的非正式和松散的“层级”也可能有帮助)。
不过,可能会遇到两个方面的困难(还有其他一些;)):
- SUMO本体的“层级”可能不是你在特定应用中想要的层级。例如,“牛肉卷”在SUMO的顶层实体中带来了“食物”,而“鸡肉”则直接带来“鸡肉”,只有通过一长串的关系才能找到“动物”(具体来说是:鸡肉->家禽->鸟类->温血脊椎动物->脊椎动物->动物)。
- WordNet的覆盖范围和元数据非常出色,但在中级概念方面可能有点不一致。例如,“我们的”牛肉卷的上位词是“菜肴”,这给它提供了大约140种食物菜肴,包括“汤”或“砂锅菜”等通用名词,以及“鸡肉马伦戈”(但省略了“鸡肉卡恰托雷”)。
我提到这些问题并不是为了批评WordNet或SUMO及其相关本体,而是想简单说明构建本体时的一些挑战,特别是在中级层面。
尽管基于SUMO和WordNet的解决方案可能存在一些缺陷和不足,但务实地使用这些框架可能在85%的情况下“合适”。
WordNet 是一个词汇库,而不是一个本体,所以“层级”这个概念在这里并不适用。
如果你想要一个有方向性的结构而不是网络,可以看看 SUMO,它是一个上层本体,与 WordNet 有关系。
对于某些领域,SUMO 的中层本体可能是你想要查找的地方,但我不确定它是否包含“墨西哥卷饼”这种主题,因为它的大部分内容都是科学或工程方面的。
WordNet 的层级结构是
beef burrito < burrito < dish/2 < victuals < food < substance < entity.
实体是一个顶层概念,所以如果你从“物质”往下看,就会得到“卷饼是食物”。你可以根据这个来计算层级,但这可能没有 SUMO 一样一致,或者生成你自己一套有用的中层概念来结束。WordNet 中没有“墨西哥卷饼”这个步骤。