如何查询以获取每个 freebase 类型的实例计数列表?

How to query to get the list of instance count of every freebase types?

我想使用 freebase 类型来注释语料库。但几乎 freebase 中的每个实例都有几种类型。所以我决定选择最常见的类型作为实例的类型。有没有办法获取实例计数列表?我找到了这个查询,但它似乎不正确,因为结果只有 400 种类型。但我认为真正的类型远不止于此。

[{
  "id": null,
  "name": null,
  "type": "/freebase/type_profile",
  "/freebase/type_profile/instance_count": []
}]

我质疑这个前提,但我们在回答完你的问题之后再谈这个。

这是(接近)正确的查询。当我通过添加 "return" : "count" 来询问计数时,我得到 17,972,这听起来不错。也许您的查询框架正在以某种方式添加 "limit" : 400

既然你想要最常见的,我们为什么不修改查询来对它们进行排序。由于排序中的一个怪癖,空值排在最后(或在我们的反向排序中排在第一位),因此我们还将添加一个限定符来过滤掉它们。我们可以使用 >0,但由于您可能对低频类型不感兴趣,所以我们使用 >1000 代替。

最终查询如下所示:

[{
  "id": null,
  "name": null,
  "type": "/freebase/type_profile",
  "instance_count>": 1000,
  "instance_count": null,
  "sort": "-instance_count"
}]

这将 return 849 种类型的有序列表,按实例计数降序排列。

您可能需要对结果列表进行一些手工整理,以消除 /common/topic/common/document/book/isbn/book/pagination 等内容。 Mediator 类型不会也有 /common/topic,因此您可以先对其进行过滤(但根据语料库中事物的类型,它们可能都是主题(即实体)开始。

现在回到最频繁==最好的前提。根据您的应用程序,您实际上可能需要更具体(通常意味着频率更低)的类型,而不是更广泛的高频类型。例如,死者而不是人,或政治家、作家或运动员,而不是人。您可能需要考虑使用 least 频繁类型(至少使用一些阈值次数)。您可能想要做的另一件事是黑名单非公共类型(即植根于 /base/.../user/... 的类型),这些类型尚未经过精心策划。

编辑 - 警告词:

这些计数最后一次更新是在 2012 年。对于像这样的练习来说应该没问题,您只需要粗略排序,但如果您需要当前统计信息,则需要计算 Freebase 数据转储中的出现次数或者找出我不确定的单独统计数据 API public/documented http://freebase-site.googlecode.com/svn/trunk/www/lib/queries/stats.sjs