1

我需要在源(输入)和目标(数据库记录)之间找到匹配对。我正在使用具有余弦相似度的 tf-idf 来计算匹配项。

但是,即使正确匹配对的常用词比其他词多,我得到的分数也更少,在其他少数情况下,我得到的余弦分数超过 10-12 对,这是所有分数中最高的

例如:

**source**
S1: FEBCO 905532 1/2 - 1 860-AG METAL

**Target**
T1: febco® 601-m lead free air gap drain for use with 860/lf860 860u/lf860u series 1/2 to 1 in reduced pressure assemblies
.
.
.
.
.
.
Tn: watts radiant™ 81008809 tape mat, 13 ft - 4 in l x 3 ft w, 40 sq-ft coverage, 240 vac watts radiant™ tape mat, 3 ft width, 13 ft - 4 in length, 40 sq-ft coverage, 240 vac, orange

以下是我正在遵循的步骤

  1. 读取源和目标数据
  2. 预处理源数据和目标数据(小写,用单词去除标点符号)
  3. 对于每个源数据,我采用一个源数据并与目标数据连接。为源-目标语料库构建 tf-idf 矩阵,将源描述中的描述作为词汇表

下面是代码

def check_similarity(data,vocab):
    vectorizer = TfidfVectorizer(token_pattern=r'\S+',vocabulary=set(vocab),lowercase=False)
    print("vectorizer defined:\n")
    tf_idf_matrix  = vectorizer.fit_transform(data['productdescriptionSource_processed'])
  allpair_similarityVector=cosine_similarity(tf_idf_matrix[0,],tf_idf_matrix[1:tf_idf_matrix.shape[0],])
    desired_similarityVector=np.argsort(allpair_similarityVector)
    similarityVector=allpair_similarityVector.shape[1]
    desired_similarityVector=np.argsort(allpair_similarityVector)
    similarityVector=allpair_similarityVector.shape[1]
    matchedtargetindex=desired_similarityVector[0,similarityVector-4:similarityVector-1]
    cosinescore=allpair_similarityVector[0,matchedtargetindex]
    matchedtargetindex=matchedtargetindex+1
    return matchedtargetindex 

在上面的代码中:数据:源-目标语料库

vocab:words 仅在源描述中

我得到的结果是

输出 1 : 对于源-目标对 :FEBCO 905532 1/2 - 1 860-AG 金属 目标:febco® 601-m 无铅气隙漏极,用于 860/lf860 860u/lf860u 系列 1/2 至 1 减压组件

我得到余弦分数 0.409562707 (这是正确的一对)

output2: 但我得到的最高余弦分数为0.5

来源:FEBCO 905532 1/2 - 1 860-AG METAL 目标:watts radiant™ 81008809 胶带垫,13 英尺 - 4 英寸 lx 3 英尺宽,40 平方英尺的覆盖面积,240 VAC 瓦特 radiant™ 胶带垫,3 英尺宽, 13 英尺 - 4 英寸长,40 平方英尺的覆盖范围,240 VAC,橙色

问题:是否有任何其他术语权重指标可以让我获得正确匹配对的最高余弦分数?

4

0 回答 0