我在products_a
数组和products_b
数组中都有类似的产品数据:
products_a = [{color: "White", size: "2' 3\""}, {color: "Blue", size: "5' 8\""} ]
products_b = [{color: "Black", size: "2' 3\""}, {color: "Sky blue", size: "5' 8\""} ]
我希望能够准确地说出两个数组中颜色之间的相似性,分数在0
和1
之间。例如,比较"Blue"
和"Sky blue"
应该在1.00
附近评分(可能类似于0.78
或类似)
我尝试使用spacy
来解决这个问题:
import spacy
nlp = spacy.load('en_core_web_sm')
def similarityscore(text1, text2 ):
doc1 = nlp( text1 )
doc2 = nlp( text2 )
similarity = doc1.similarity( doc2 )
return similarity
是的,当"Blue"
对"Sky blue"
传球时,得分为0.6545742918773636
。好的,但是当针对"Black"
传入"White"
时会发生什么?分数是0.8176945362451089
。。。正如斯帕西所说"White"
与"Black"
的比例约为81%相似!当试图确保产品颜色不相似时,这是一个失败
我试着用这个来{
# remove punctuation and lowercase all words function
def simplify_text(text):
for punctuation in ['.', ',', '!', '?', '"']:
text = text.replace(punctuation, '')
return text.lower()
# Jaccard function
def jaccardSimilarity(text_a, text_b ):
word_set_a, word_set_b = [set(self.simplify_text(text).split())
for text in [text_a, text_b]]
num_shared = len(word_set_a & word_set_b)
num_total = len(word_set_a | word_set_b)
jaccard = num_shared / num_total
return jaccard
我不能接受在{
我发现了一些可能有用的方法。我是编程新手,所以不知道如何实现数据集。还是想和大家分享
此代码表示两个字符串之间的相似性为:0.666666。我试着用同样的代码写黑白。它说两个字符串之间的相似性是:0.0
注: 我认为Sklearn模块亲和力传播和Levenstein距离可能会有所帮助。但我不知道如何将它们应用到你的问题中
Gensim有一个Word2Vec的Python实现,它提供了单词相似性
如果您的实际目标是处理产品描述上的颜色,您应该将其视为一个分类问题,不过请注意,对于短文本来说,这将非常困难。幸运的是,大多数物品都应该使用普通的颜色,所以不难获得良好的覆盖率。我怀疑挑选12种左右的颜色并将其分类比制作好的颜色名称嵌入要容易
我会而不是使用像Jaccard distance这样的字符串距离度量。它们只是告诉你两个字符串之间有多少字母或词块是相同的,它们没有任何意义
正如评论中提到的,普通的词向量不会为你找到相反的词。你可以阅读更多关于为什么这很难的内容。使用颜色名称词嵌入的建议非常好,是获得相似性分数的最佳方法
相关问题 更多 >
编程相关推荐