浅试一下SBERT

sentence transformer试调

需求:测试HK与GB文档数据相似性问题,实现HK中单个数据对应GB中相似度前五的数据,形成一对前五相似度数据文档。

import pandas as pd

# 查看当前编码方式
# import sys
# print(sys.stdout.encoding)

# 修改文档编码utf-8问题,python3默认为utf-8(调试)
# import importlib,sys
# importlib.reload(sys)

# import sys
# import codecs
# sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

#采用 paraphrase-multilingual-mpnet-base-v2 预训练模型
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('paraphrase-multilingual-mpnet-base-v2')

def cos_sim_val(embedding_1,embedding_2):
    cos_sim = []
    # for index in range(len(sentence_2)):
    cos_sim_single = util.cos_sim(embedding_1, embedding_2)
    return cos_sim_single

if __name__ == '__main__':
        f1 = open('HK3_7.txt', 'r', encoding='utf-8')
        f2 = open('GB3_1.txt', 'r', encoding='utf-8')
        line1 = f1.readlines()
        line2 = f2.readlines()
        f1.close()
        f2.close()
        sentence_1 = []
        PROBLEM_KEY_1 = []
        DEPT_NAME_1 = []
        PROBLEM_KEY_2 = []
        DEPT_NAME_2 = []
        sentence_2 = []
        for seq1 in line1:
            PROBLEM_KEY1 = seq1.split('\t')[1]
            DEPT_NAME1 = seq1.split('\t')[2]
            sentence1 = seq1.split('\t')[0]
            sentence_1.append(sentence1)
            PROBLEM_KEY_1.append(PROBLEM_KEY1)
            DEPT_NAME_1.append(DEPT_NAME1)
        for seq2 in line2:
            sentence2 = seq2.split('\t')[1]
            PROBLEM_KEY2 = seq2.split('\t')[0]
            DEPT_NAME2 = seq2.split('\t')[2]
            sentence_2.append(sentence2)
            PROBLEM_KEY_2.append(PROBLEM_KEY2)
            DEPT_NAME_2.append(DEPT_NAME2)
        print("sentence_1:", sentence_1)
        print("sentence_2:", sentence_2)

        #Encode all sentences
        embedding_1 = model.encode(sentence_1)
        embedding_2 = model.encode(sentence_2)

        #Compute cosine similarity between all pairs
        cos_sim = cos_sim_val(embedding_1,embedding_2)

        '''多对多排序输出结果'''
        realist = [['HK_PROBLEM_KEY', 'HK_PROBLEM_NMAE',"HK_DEPT_NAME",
                    'GB_PROBLEM_KEY', 'GB_PROBLEM_NMAE',"GB_DEPT_NAME"]]
        for i in range(len(embedding_1)):
            all_sentence_combinations_single = []
            count = 0
            for j in range(len(embedding_2)):
                all_sentence_combinations_single.append([cos_sim[i][j], i, j])
                # print("all_sentence_combinations_single:", all_sentence_combinations_single)
                # 按最高余弦相似度得分排序列表
                all_sentence_combinations = sorted(all_sentence_combinations_single, key=lambda x: x[0], reverse=True)
                # print("all_sentence_combinations:", all_sentence_combinations)
                count+=1
                # print("Top-5 most similar pairs:")
                for score, i, j in all_sentence_combinations[0:5]:
                    if count==len(embedding_2):
                        realist.append([PROBLEM_KEY_1[i],sentence_1[i],DEPT_NAME_1[i],
                                        PROBLEM_KEY_2[j],sentence_2[j],DEPT_NAME_2[j]])
                        # print("{} \t {} \t {:.4f}".format(sentence_1[i], sentence_2[j], cos_sim[i][j]))
                df = pd.DataFrame(realist)

                df.to_excel(fr'./hk-gb_data_pmmbv_result/HK_GB_result.xlsx', index=False,
                                header=False, encoding='utf-8')

预训练模型选取参考依据:
参考依据:选取测试模型依据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sbert-base-chinese-nli是一种基于中文的预训练模型,用于处理中文自然语言推理(Natural Language Inference)任务。该模型基于Sentence-BERT(SBERT)架构,在大规模的中文文本数据上进行了预训练。 SBERT模型是采用Transformer网络结构的句子嵌入模型,通过预训练将句子映射到一个高维空间中的向量表示。sbert-base-chinese-nli是其中的一个中文版本,被训练用于判断两个句子之间的关系,包括蕴含、中立和矛盾三种情况。 sbert-base-chinese-nli的输入是一对中文句子,输出是一个向量,表示这对句子之间的关系。该模型通过学习句子之间的语义信息和相似性,在句子级别上进行推理。 sbert-base-chinese-nli的应用非常广泛。例如,在问答系统中,可以使用这个模型判断用户提问和文档中的答案之间的相关程度。在文本分类任务中,可以使用该模型对文本进行分类。在信息检索领域,可以使用它来进行相似文档的匹配。 这个模型的好处是,它可以捕捉到句子之间更深层次的语义关系,而不仅仅是基于表面上的字词相似性。这使得它在处理含有歧义或隐含信息的句子时表现更好。 总结来说,sbert-base-chinese-nli是一个基于中文的预训练模型,用于处理中文自然语言推理任务。它通过学习句子之间的语义信息和相似性,可以判断句子之间的关系,并在问答系统、文本分类和信息检索等任务中有广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值