根据相似度对技能进行排名

数据挖掘 机器学习 分类 nlp 文本挖掘 相似
2022-01-29 17:07:55

我需要根据人类技能与输入技能的相似性对它们进行排名。所以如果我输入“荷兰语”,我想要这样的列表:

0.97 Dutch
0.86 Dutch lessons
0.55 Frisian
0.50 Flemish
0.27 German language

我有一个包含大约 4500 种人类技能的数据库(从“C 编程”到“烘焙杏仁蛋糕”),其中有 600 种是手动分类的。我已经可以在 BabelNet 上找到相应的文章并拉取域、类别和相关术语。

使用来自 BabelNet 的数据的示例技能:

name:"photography"
categories:
  0:"Photography"
  1:"French_inventions"
  2:"Optics"
  3:"1822_introductions"
manualCategory:"art & music"
domains:
   ART_ARCHITECTURE_AND_ARCHAEOLOGY:1
compounds:
  0:"digital_photography"
  1:"landscape_photography"
  2:"photographic_developing"
  3:"motion_photography"
  4:"nature_photography"
  ...
  48:"photographic_plates"
otherForms:
  0:"still_photography"
  1:"photo"
  2:"photos"
  3:"photographed"
  4:"photographers"
  ...
  20:"Photographer"

你能建议我的方法或至少引导正确的方向吗?

1个回答

很晚了,但我很惊讶这没有得到更多的回答。“余弦相似度”是一种很好的尝试技术,尽管简单地让用户使用硬字符串进行搜索然后按受欢迎程度排名并不是那么糟糕(例如,“dutch”会显示所有包含“dutch”的内容,尽管我会放弃 mid -word 匹配,因此“ball”不会返回“football”,但会返回“ball room dance”)。

我想说,在任何方法中,一个主要问题都是对用户之前的(非标准化)技能输入进行重复数据删除,这些技能输入还不是很标准化。您还可以尝试使用在搜索时替换了不同同义词的版本替换候选技能,例如,如果您的大部分内容来自欧洲人,“soccer coaching”也可能存储为“football coaching”。

不过,有时极高的准确性可能不是最好的目标……您可能想鼓励用户探索他们从未知道存在的新技能!不知道你的需求是什么...

无论您选择什么,都可能值得构建一个半手工的查询和相关结果测试集,以便您可以查看性能是否糟糕(Google 精确度和搜索结果上下文中的召回率)。