对地理名称数据进行位置歧义消除的最佳方法是什么?

地名搜索有一些计分算法,但它们并未开源,因此我不确定它们是否非常复杂。 (即对于soma, ca,它返回甚至没有维基百科文章的Soma lake in Canada,而不是非常流行的Soma Neirbohood in san francisco)

我在Google学术搜索中也找到了一些作品,但它们似乎很浅薄,并且与我的启发式方法类似,例如按某项评分(log(population) + 1000*hasWikipedia(article)+ isCity100+isCapital(10))。

我在旅游文章中的专长,因此我的评分功能应该提供最可能的旅游景点(城市,名胜古迹(迪士尼乐园,体育馆,大本钟))。

您是否知道该领域的任何重要文章,或者Google map ,雅虎,必应甚至地理名称在生产中使用的算法?

最佳答案

@yura,这不是您想要的,但是我认为任何聪明的算法都无法始终如一地消除“soma ca”之类的查询是指旧金山的Soma还是加拿大的Soma Lake。问题不在于您的算法不够复杂。问题是查询“soma ca”中根本没有足够的信息。

我不知道如何清楚地表达它,但是这里有一个信息理论问题。就像随机数据无法无损压缩的方式一样:输入中没有足够的信息来计算所需的输出。

即使是人为手动解释您的查询,他们也不一定会理解“soma ca”应该表示SF中的Soma。也许对您来说,一个2字母的缩写,例如“ca”,“自然地”是指美国所在国而不是外国,但是从根本上讲该选择没有“正确”,并且不能使用纯逻辑推导出来。这是一个任意的,特定于域的即席规则,就像您提到的即席log(population)启发式一样。

一些可能的“解决方案”(除了设计可以阅读用户思想的心灵感应计算机之外):

  • 为用户提供每个查询可能匹配的列表。跟踪他们选择的查询,当其他用户以后键入相同的查询时,请按受欢迎程度对结果进行排序。
  • 或者,一旦您收集了大量关于查询结果受欢迎程度的数据,您甚至可以使用机器学习算法来挖掘数据,并从中获得更好的启发式方法。
  • 或者,在将应用程序投入生产使用之前,您可以首先编译一组伪查询,以及您认为算法应为每个此类查询产生的结果。然后在此上使用您的机器学习算法。
  • 编译大量假查询和所需的响应,或者从真实用户的选择中获取数据,然后使用该数据对手动设计和编码的排名启发法的准确性进行基准测试。不断发明新的启发式方法,直到找到一种可以在测试数据集上实现高精度的方法。
  • 10-08 16:06