【问题标题】:Normalizing a list of restaurant dishes规范化餐厅菜肴列表
【发布时间】:2015-11-21 00:04:55
【问题描述】:

我有一个大型餐厅菜肴数据集(例如,“Pulled Pork”、“Beef Brisket”...)

我正在尝试“规范化”(错误的词)菜肴。我希望“Pulled Pork”、“Pulled Pork Sandwich”和“Jumbo Pork Slider”都映射到一道菜“Pulled Pork”。

到目前为止,我已经开始使用 Python 进行 NLTK,并且在玩频率分布等方面获得了一些乐趣。

有没有人有解决这个问题的高级策略?也许我可以搜索一些关键字?

谢谢

【问题讨论】:

  • “拉肉”列表中的常见元素似乎是“猪肉”一词。我很想在菜的数据集中找到 n 个最常用的词(您可能想专门过滤掉名词),然后找到包含特定常用词的菜子集(可能重叠)。
  • 尝试hyponym生成,见alt.qcri.org/semeval2015/task17/和无耻插件:aclanthology.info/papers/…

标签: python machine-learning nlp nltk


【解决方案1】:

您可能需要查找TFIDFcosine similarity

不过,也有一些具有挑战性的案例。假设您有以下三道菜:

  • 手撕猪肉
  • 拉鸡蛋
  • 鸡蛋三明治

您要结合两者中的哪一个?

  • 猪肉拉蛋
  • 拉鸡蛋和鸡蛋三明治

使用TFIDF,您可以找到最代表的词。例如,sandwich 这个词可能碰巧出现在许多菜肴中,因此不太具有代表性。 (金枪鱼三明治、鸡蛋三明治、奶酪三明治等)合并金枪鱼三明治和奶酪三明治可能不是一个好主意。

获得 TFIDF 向量后,您可以使用余弦相似度(使用 TFIDF 向量)和静态阈值,您可以决定是否合并它们。

还有一个问题出现了:当你匹配时,你打算给他们取什么名字? (拉鸡蛋还是鸡蛋三明治?)

更新:

@alvas 建议在具有相似性/不相似性值之后使用聚类。我认为那将是个好主意。您可以首先使用与 TFIDF 向量的余弦相似度来创建您的nxn 距离/相似度矩阵。得到距离矩阵后,您可以使用聚类算法对它们进行聚类。

【讨论】:

  • 这是假设而不是真实的事实,当你做余弦相似时,你会面临更多的噪音,尤其是当你决定什么是“相似”以及你的金簇是什么的阈值时。聚类方法会更合适。
  • @alvas 我实际上同意这一点。 OP 似乎找到了解决这个问题的快速/临时解决方案,这就是我考虑静态阈值的原因。可能,对余弦相似度(相似度/距离矩阵)进行聚类会是一种更从前/更好的方法。让我更新我的答案。
  • 谢谢,伙计们。这似乎是一个很好的方法。
【解决方案2】:

听起来您正在有效地尝试对命名实体执行coreference resolution,其中实体是不同的菜肴。您可以查看 cortnltk-drt 等项目。

但是,从您的示例来看,有点不清楚为什么拉猪肉三明治应该被视为与拉猪肉相同的菜,因此您可能需要一种方法来提出自己的训练集(例如从谷歌挑选)来标记实体在您期望的公差范围内。

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多