如何解决基于标签的网站的语义问题

时间:2020-03-05 18:41:49  来源:igfitidea点击:

基于标签的网站通常会遭受诸如同义词,同名异义等语言的精致问题。对于正在寻找信息的程序员来说,例如在Stack Overflow上,具体示例如下:

  • Subversion或者SVN(或者svn,带有区分大小写的标签)
  • .NET或者Mono
  • [将添加更多]

问题是我们确实想保留语言的精致性,并让机器尽可能好地处理它。

像del.icio.us这样的网站发现其标签库增长很多,因此可能会妨碍其使用或者搜索。搜索与SVN相关的条目可能会列出带有subversion和svn标签的大多数条目,但是我可以想到三个问题:

  • 搜索不完整,因为许多条目可能没有两个标签(它们是"同义词")。
  • 搜索的用处不大,因为"问/答"经常导致更多的"问"!特别是针对给定主题的新手。
  • 标记问题(注:或者单独回答,听起来很有用)变得具有哲学意义:"我标记了正确的方式吗?"

解决这些问题的一种方法是在标签之间创建语义链接,以使Subversion和SVN由系统自动绑定,而不是由不良用户绑定。

这听起来不错/可行/有吸引力/有用吗?如何有效实施?

解决方案

回答

在blogspot.com上安装软件的方式是,在包装盒上写下ajax-autocomplete-thingie,在其中写下标签名称。这会在我们以前的所有帖子中搜索以相同字母开头的标签。至少以这种方式,我们可以捕获不同的大小写和拼写(但不能包含同义词)。

回答

我完全同意。当前具有的标签数量。我不参与其他基于标签的网站。但是,具有标记层次结构将非常有帮助,而不是使用ruby rails ruby​​-on-rails ruby​​onrails等。

回答

系统如何知道要语义链接的标签?它会保留不断增长的标签图吗?我看不到有效果。如果有人键入sbversion怎么办?那将如何链接?

我认为询问用户何时提交标签是可行的。例如,"我们输入了以下标签:sbversion,pascal和bindings。我们是说," Subversion"," Pascal"和" Bindings"吗?

显然,该系统必须具有相当智能的匹配系统才能正常工作。这样做会给用户带来额外的输入(可能会打扰他们),但是如果正确完成,人工输入将减少重复的标签。

实际上,综上所述,系统可以将用户输入的结果用作自动标签匹配的基础。在前面的示例中,有人创建了" sbversion"的标签,当系统提示将其更改为" Subversion"时,系统可以了解该信息并在下次自动执行。

回答

基本上,标签是我们承认搜索算法的不足之处。如果我们可以使计算机足够智能以识别标记为" Subversion"的事物与标记为" svn"的事物具有相似的内容,则可以解析内容,那么为什么不完全跳过标记,并将搜索字词直接与内容(即自动标记,基本上就是将关键字映射到结果)?

回答

问题是要使搜索引擎使用" subversion"和" svn"与它们表示相同"事物"的观点非常相似的事实。

计算基于频率的标记之间的简单相似性可能很有吸引力:" subversion"和" svn"经常一起出现,因此请求" svn"将返回与SVN相关的问题,但罕见的问题仅标记为" subversion"(反之亦然)。但是," java"和" c#"也经常出现在一起,但是原因却非常不同(它们不是同义词)。因此,基于频率的相似性就消失了。

这个问题的答案可能是各种机制的混合,如此Q / A线程中所建议的那样:

  • 当用户输入错字时通过建议标签来过滤掉错字。
  • 维护用户生成的同义词映射。如果仅以同义词为目标,则该地图可能不会太大。
  • 允许多标签搜索,以便用户可以在搜索框中输入" subversion svn"或者" subversion && svn"(从程序员到程序员)。这将是非常实用的,因为许多用户在不知道哪个术语最有意义时可以实际尝试这种方法。

@尼克:同意。这个问题并不意味着要反对标签。标签具有巨大的潜力,但如果人们无法搜索"跨"标签,用户将面临越来越多的问题。

@Steve:维护不断增长的标签图绝对是不切实际的。随着SO积累的标签袋越来越多,我们如何才能方便地在此袋上打上一些阴影,以使对Q / A标签的搜索更加有用?

@Espo:创建问题时,显然可以在SO上使用基于现有标签的" Ajax驱动"标签建议。顺便说一下,这对于选择标签和适当的拼写非常有帮助(避免了Steve的" subversion"和" sbversion"问题)。

回答

识别同义词和语义联系是人类擅长的事情;通过找到一种将匹配结果留给人类的方法,可以很好地解决组织像SO所具有的特征的开放式分类法的解决方案。

一种通用方法:某人(或者某些团队)每天检查新标签。新的同义词将添加到同义词组。搜索命中的同义词组(或者更细微的选择,根据用户喜好命中文字匹配或者同义词组匹配)。

这需要在后端支持同义词组(开发团队的工作)。它需要一个标签争吵者或者10个(负责人或者受信任用户的工作)。它不需要恒定的缩放比例,尽管总的标记池增长的速度很可能会(在公开测试版最初的"这里来了每个人"之后)随时间而降低,就像任何有机词典的增长率一样。

同义词使我成为热门话题。层次映射是一个雄心勃勃且更为复杂的问题。这也许是值得的,也可能不是,但鉴于定义层次结构的相对复杂性,最好将其作为任何潜在的同义词项目的第1阶段的第2阶段。

回答

我们正在查看的部分问题是英语中充斥着同义词的单词有以下不同:生成管理,Subversion,CVS,源代码控制?

也许吧,也许不是。拥有一个系统(例如SO上正在使用的系统)可以显示我们可能想要的标签,这将非常有帮助。但这并不能阻止人们在标记过程中大肆宣传。

也许我们可以在没有用户交互的情况下拒绝接受"新"标签?在我们让"厌恶"进入之前,强制进行拼写检查吗?

这绝对是一个有趣的问题。去年,我在博客上提出了一个与此类似的公开问题。几个回复非常有见地。