我正致力于创建一个电子通信产品价格比较工具(在python中),它有点类似于camelcamelcamel.com,既有趣又有利可图。当我想要使用搜索字词从各个网站收集的列表中的相同项目进行匹配时,我面临困难。我使用余弦相似性并考虑使用 Levenshtein 的算法进行产品匹配,以匹配各个项目的标题相互匹配相同的项目。
例如,我有以下项目及其价格值,
{
product_0: {
title: "Apple MacBook Air MMGF2HN/A 13.3-inch Laptop (Core i5/8GB/128GB/Mac OS X/Integrated Graphics)",
price: "xxxx",
},
product_1: {
title: "Apple MacBook Air MMGF2HN/A 13.3-inch Laptop (Core i5/8GB/128GB/Mac OS X/Integrated Graphics) cover",
price: "xyzy"
},
product_2: {
title: "Apple Macbook Air MMGF2HNA Notebook (Intel Core i5- 8GB RAM- 128GB SSD- 33.78 cm(13.3)- OS X El Capitan) (Silver)"
price: "xxyy"
},
product_3: {
title: "....",
price: "...."
},
...
product_99: {
// product title and price
}
}
当我在上面的项目列表(数据)中使用余弦相似度时,值如下
cosine(product_0 * product_1) = 0.973328526785
cosine(product_0 * product_2) = 0.50251890763
但实际上product_0
和product_1
是两个不同的项目,但它们的相似性值表明项目是相同的; product_0
和product_2
来自同一实体,但其余弦值表示它们是两个不同的项目。
我一直在努力自己解决这个问题,以为我可以在stackoverflow中询问一些建议/建议。我是否正确使用余弦相似性来匹配项目的相似性?如果没有,请告诉我正确的方向。
我的基本想法是对相同的项目进行价格比较,即各种类似产品的语义分析。
感谢您的时间。
答案 0 :(得分:1)
您可以在产品标题上训练word2vec。使用the Python word2vec wrapper时生成的代码看起来像这样,使用Gensim's model.word2vec时略有不同但类似:
indexes, metrics = model.cosine(normalized_phrase)
model.generate_response(indexes, metrics)
生成的响应将是按降序余弦相似度排序的标题向量。