山东大学项目实训-灵思考评-语义相似度的应用

        比较两个知识点时,单独的文本相似度的比较不足以完整比较出两个文本的差别,所以我们要同时结合语义相似度的比较,语义相似度相比文本相似度的实现就较为困难了点。

        我们采用余弦相似度来比较语义,余弦相似度(是一种衡量两个向量方向相似程度的指标,广泛应用于自然语言处理(NLP)、信息检索、推荐系统等领域。其核心思想是:通过计算两个向量之间的夹角余弦值,判断它们在        语义或特征空间中的相似性,而不仅仅是数值上的接近程度。

        它的计算公式采用如下方式:

        

我们采用下面的具体方式来实现:

def cos_score(entity1,entity2):
embeddings1 = model.encode(entity1)
embeddings2 = model.encode(entity2)
score = cos_sim(embeddings1, embeddings2)
if score.shape[0] > 1:
# print(score)
score = torch.max(score)
return float(score)
  1. 文本向量化(Embedding)

    • 我们使用预训练的Bert模型,将输入的 entity1 和 entity2 转换为向量表示(embeddings1 和 embeddings2)。
  2. 计算余弦相似度

    • 使用 cos_sim() 计算两个向量的相似度,结果范围 [-1, 1](通常 0~1 表示相似性)。
    • 如果输入的是 多个句子(如 entity1 = ["A", "B"]),则 score 会是一个相似度矩阵,此时取最大值(torch.max(score))。
  3. 返回标量值

    • 最终返回一个 float 类型的相似度分数。

以下是它在我们代码里的具体应用:


def list_score(list1,list2):
    score1 = word_score(''.join(list1),''.join(list2))
    score2 = cos_score(list1,list2)
    res =(score1 + score2) / 2
    # print("得分:", res)
    return res

词重叠率(Jaccard相似度):
        将两个列表拼接成字符串,计算基于字符的 word_score(即 Jaccard 相似度)。
余弦相似度(cos_score):
        直接计算两个列表的向量余弦相似度(需确保 cos_score 已实现)。
综合得分:
        取 word_score 和 cos_score 的平均值作为最终相似度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值