1. 任务介绍(预训练模型sentence_transformers来做文本相似度匹配任务)
从一堆 候选短文本数据集中筛选出与输入问句最相似的短文本(即短文本相似度匹配)
候选文本数据外国人出入境证签发新增年生产能力500万吨及以上煤矿项目核准对完成关系国家利益或者公共利益并有重大应用价值的植物新品种育种的单位或者个人的奖励法律职业资格认定戒毒医疗机构或医疗机构从事戒毒治疗业务许可城乡居民基本养老保险关系转移接续申请涉及敏感国家和地区、敏感行业的境外投资项目核准外国人对国家重点保护陆生野生动物进行野外考察或野外拍摄电影、录像审批广播电台、电视台设立、终止审批普通高等学校教师资格认定法律职业资格认定
1.3 最终输出相似度最高的文本,如下:
外国人出入境证签发
附录一:代码实现:
from sentence_transformers import SentenceTransformer, util
import pandas as pd
from flask import Flask, request, jsonify
import json
import numpy as np
import time
app = Flask(__name__)
model = SentenceTransformer('bert-base-chinese')
model.eval()
content = pd.read_table("data.txt", header=None)[0].values.tolist()
passage_embedding = model.encode(content, convert_to_numpy=True)
def cosine_similarity(x, y):
num = x.dot(y.T)
denom = np.linalg.norm(x) * np.linalg.norm(y, axis=1)
return num / denom
def sim(ask, level):
time1 = time.time()
ask = model.encode([ask])
time2 = time.time()
spend_time = time2 - time1
print(spend_time)
cos_matrix = cosine_similarity(ask, passage_embedding)[0]
index = np.argsort(-cos_matrix)[level]
return [content[index], cos_matrix[index]]
@app.route('/top_ask', methods=['GET', 'POST'])
def get_synonyms():
json_data = request.get_data()
comment_json = json.loads(json_data)
ask = comment_json['ask']
json_data = sim2(ask, 0)
return jsonify({"text": str(json_data[0]), "相似度": str(json_data[1])})
if __name__ == '__main__': #
app.run(host="0.0.0.0", port=1089, debug=True)
Original: https://blog.csdn.net/qq_28905087/article/details/122964819
Author: dunwuh
Title: python短文本相似度计算_预训练Bert句向量_flask
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/530123/
转载文章受原作者版权保护。转载请注明原作者出处!