语义相似性计算

文章讲解了如何使用SentenceTransformer库在NLP项目中进行基于SBERT的语义搜索和无监督训练,涉及模型创建、编码数据和相似度查询的过程。
摘要由CSDN通过智能技术生成

1、匹配内容较少(内存可以放下时)

参考:NLP实践——基于SBERT的语义搜索,语义相似度计算,SimCSE、GenQ等无监督训练-CSDN博客

sentencetransformer对应的git说明:GitHub - UKPLab/sentence-transformers: Multilingual Sentence & Image Embeddings with BERT

sentencetransformer的官方文档:Pretrained Models — Sentence-Transformers documentation 

 查询的代码:

from sentence_transformers import SentenceTransformer, util
# 【创建模型】
# 这里的编码器可以换成mpnet-base-v2等
# 模型自动下载,并在/root/.cache下创建缓存,若使用本地制定目录的模型,只需要修改为对应的模型目录即可。
# 如果是想加载本地的预训练模型,则类似于huggingface的from_pretrained方法,把输入参数换成本地模型的路径
encoder = SentenceTransformer('paraphrase-MiniLM-L12-v2')
# encoder = SentenceTransformer('path-to-your-pretrained-model/paraphrase-MiniLM-L12-v2/')

answer_list = []

def encoding_all_data():

    base_data_path =

    input_question_list = []

    with open(base_data_path,'r',encoding='utf-8') as fi:

        json_data = json.loads(fi.read())

        for each in json_data:

            input_data,output_data = each["input"],each["output"]

            input_question_list.append(input_data)

            answer_list.append( output_data)

    matrix =encoder.encode(input_question_list, convert_to_tensor=True)

    return matrix

matrix = encoding_all_data()

# 计算编码
def get_similar_query(query):

    sentence_vec = encoder.encode(query, convert_to_tensor=True)

    cos_scores = util.cos_sim(sentence_vec, matrix)

    max_score, max_index = torch.max(cos_scores, dim=1)

    index = max_index.cpu().numpy().tolist()[0]

    score = max_score.cpu().numpy().tolist()[0]

    return answer_list[index],score

if __name__ == '__main__':
    print("data ok")
    while True:
        print("begin compute sim")

        inputs = input()

        result = get_similar_query(inputs)

        print(result)

 

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会发paper的学渣

您的鼓励和将是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值