我正在开发一个电商产品价格比较工具(使用Python),这个工具与camelcamelcamel.com有些相似,既是为了乐趣也是为了盈利。我在尝试从多个网站使用搜索词收集的列表中匹配相同商品时遇到了困难。我目前使用的是余弦相似度,并且考虑使用莱文斯坦算法来进行产品匹配,通过比较各个商品的标题来找出相同的商品。
例如,我有以下商品及其价格值,如下所示:
{ 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.973328526785cosine(product_0 * product_2) = 0.50251890763
但实际上,product_0
和product_1
是两种不同的商品,但它们的余弦相似度值显示它们是相同的商品;而product_0
和product_2
来自同一实体,但它们的余弦值显示它们是两种不同的商品。
我一直试图自己解决这个问题,我想在这里的stackoverflow上寻求一些建议/意见。我使用余弦相似度来匹配商品的相似性是否正确?如果不是,请指导我正确的方向。
我的基本想法是针对相同商品进行价格比较,即对各种相似产品进行语义分析。
感谢您的宝贵时间。
回答:
您可以对商品标题进行word2vec训练。使用Python的word2vec封装器时,结果代码看起来会像这样,而使用Gensim的model.word2vec时会略有不同但相似:
indexes, metrics = model.cosine(normalized_phrase)model.generate_response(indexes, metrics)
生成的响应将是按降序余弦相似度排序的标题向量。