【问题标题】:Item matching with domain knowlege与领域知识匹配的项目
【发布时间】:2012-06-26 08:36:34
【问题描述】:

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

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

除了名字,没有什么好匹配的了

我确实了解域,因此我可以(例如)手写以下事实:三键鼠标可能与中键鼠标相同。我也知道制造商(或者可以很好地猜测它们)。

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

【问题讨论】:

    标签: language-agnostic nlp string-matching


    【解决方案1】:

    “我确实知道域...”

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

    这种方法的优点:

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

    缺点:

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

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


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

    希望对您有所帮助。

    【讨论】:

    • 缺点是项目太多,而且变化太频繁,我懒得手动建立制造商项目的索引。单词的权重听起来是个好主意。我可以尝试使用该方法的实现。我会看看那本书。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      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(向量空间模型)会很好。 (每个单词都有一个权重,根据它们的判别值,这些权重被投影到一个多维空间中。之后你只需测量两个文本之间的角度)

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-20
          • 1970-01-01
          • 2022-09-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多