3

我有各种产品项目,我需要确定它们是否相同。一个简单的例子:

Microsoft RS400 mouse with middle button应该匹配Microsoft Red Style 400 three buttoned mouse但不匹配Microsoft Red Style 500 mouse

除了名称之外,我没有其他可以匹配的好东西,仅仅根据匹配词的比例来做还不够好(错误率太高了)

我确实知道域,所以我可以(例如)手写一个三键鼠标可能与带有中键的鼠标相同的事实。我也知道制造商(或者可以很好地猜测他们)。

到目前为止我唯一的想法是通过尝试使用手写规则来减小字符串的大小然后检查匹配的单词来匹配它们,但我想知道是否有人有任何想法进行这种匹配的最佳方法是使用更好的准确性和精确度(或从哪里开始寻找)以及是否有人知道在该领域所做的任何工作?(论文,例子等)。

4

4 回答 4

2

“我确实知道域……”

你对域名到底了解多少?如果您了解有关该域的所有信息,那么最好为您的所有制造商产品建立索引(基本上是制造商网页上的产品描述)。然后,不要尝试将您的描述相互匹配,而是将它们与您的产品索引匹配。

这种方法的优点:

  • 大概在产品描述中使用的所有词都在促销文献中的某个地方使用过
  • 如果在构建索引时您能够对某些信息(例如产品代码)进行加权,那么您可能会取得更大的成功

缺点:

  • 创建索引可能需要很长时间(尤其是手动完成时)

如果您对自己的域一无所知,那么您可能会考虑对非常常见的单词进行降级(您可以从互联网上获取常用单词列表),以及对字典中没有的数字和单词进行排序(您可以从互联网上获取单词列表/大多数 linux/unix 发行版都附带用于拼写检查)。


我不知道您对搜索了解多少,但过去我发现 W. Bruce Croft、Donald Metzler、Trevor Strohman 所著的“搜索引擎:实践中的信息检索”一书很有用。出版商网站上有一些示例章节会告诉您这本书是否适合您:pearsonhighered.com

希望有帮助。

于 2012-06-26T12:51:35.040 回答
1

只需标记化(您也应该在该步骤中将数字与字母分开,所以不仅仅是空格标记器),词干,过滤停用词和无趣的词,如鼠标。也许你应该有一个包含单词生产者的列表,并将所有非生产者和数字缩短到他们的第一个字母。(如果你这样做,你必须在标记器中分隔大写字母)

Microsoft RS400 mouse with middle button -> Microsoft R S 400
Microsoft Red Style 400 three buttoned mouse -> Microsoft R S 400
Microsoft Red Style 500 mouse -> Microsoft R S 500

如果你想要一个更好的解决方案 vsm (向量空间模型)来自抄袭检测会很好。(每个单词都有一个权重,根据它们的判别值,这些权重被投影到一个多维空间中。之后你只需测量两个文本之间的角度)

于 2012-06-26T12:57:11.077 回答
1

我会建议一些更普遍适用的东西。据我了解,您需要一些 nlp 处理来处理您识别为同义词的事物。我认为这是一个非常简单的实现。

如果我是你,我会创建一个关键字对象,其中包含同义词列表作为参数,然后编写一个脚本,该脚本将抓取你拥有的任何文本以获取仅偶尔出现的单词(有一些上限频率,关键字实际上被认为适用),然后添加关键字列表作为包含其同义词的每个关键字的参数。如果您愿意更进一步,我会在同义词列表上设置权重,以显示它们的相似程度。

对于这种 nlp 问题,您获得 100% 准确率的机会是 0,但您很可能会超过 90%,我建议添加一个元素,您可以通过该元素以自动方式调整权重。我必须在这里相当模糊,但在我的上一份工作中,我的任务是类似的问题,并且能够在 90 年代获得准确度。我的实现也可能比您需要的更复杂,但即使是简单的实现也应该会给您带来不错的回报,但是如果您不处理相当大的数据集(〜数百+),则可能不值得编写脚本。

快速示例,在您的示例中,可以非常准确地提取差异,只是说“中间”和“三”是同义词。如果需要,您可以变得更复杂,但这会匹配很多。

于 2012-06-26T15:21:48.490 回答
1

除了手写规则之外,您还可以尝试使用带有特征提取的监督学习。

让特征成为描述中的词,而不是将描述视为特征向量。在教授算法时,让它显示两个看起来相似的向量,如果是相同的项目,让算法改进这些词的权重。

例如,每对单词的权重可能比简单的比率更大,就像您所做的那样。

[3-button]    [middle]
[wheel]       [button]
[mouse]       [mouse]

通过您的算法,它将给出 1/3 的相似度比率。当您将其设置为“相同项目”时,算法应该为这对单词添加更多价值,当它下次到达它们时。

于 2012-06-26T11:49:17.983 回答