当前位置:   article > 正文

python短文本相似度计算_预训练Bert句向量_flask_python bert-base-chinese 文本相似度

python bert-base-chinese 文本相似度

1. 任务介绍(预训练模型sentence_transformers来做文本相似度匹配任务)

从一堆候选短文本数据集中筛选出与输入问句最相似的短文本(即短文本相似度匹配)

1.1 首先输入比如是:“我要出国”

1.2 候选数据集有10条短文本,如下:

候选文本数据
外国人出入境证签发
新增年生产能力500万吨及以上煤矿项目核准
对完成关系国家利益或者公共利益并有重大应用价值的植物新品种育种的单位或者个人的奖励
法律职业资格认定
戒毒医疗机构或医疗机构从事戒毒治疗业务许可
城乡居民基本养老保险关系转移接续申请
涉及敏感国家和地区、敏感行业的境外投资项目核准
外国人对国家重点保护陆生野生动物进行野外考察或野外拍摄电影、录像审批
广播电台、电视台设立、终止审批
普通高等学校教师资格认定
法律职业资格认定

1.3 最终输出相似度最高的文本,如下:

外国人出入境证签发

附录一:代码实现:

  1. from sentence_transformers import SentenceTransformer, util
  2. import pandas as pd
  3. from flask import Flask, request, jsonify
  4. import json
  5. import numpy as np
  6. import time
  7. app = Flask(__name__)
  8. model = SentenceTransformer('bert-base-chinese')
  9. model.eval()
  10. content = pd.read_table("data.txt", header=None)[0].values.tolist()
  11. passage_embedding = model.encode(content, convert_to_numpy=True)
  12. def cosine_similarity(x, y):
  13. num = x.dot(y.T)
  14. denom = np.linalg.norm(x) * np.linalg.norm(y, axis=1)
  15. return num / denom
  16. def sim(ask, level):
  17. time1 = time.time()
  18. ask = model.encode([ask])
  19. time2 = time.time()
  20. spend_time = time2 - time1
  21. print(spend_time)
  22. cos_matrix = cosine_similarity(ask, passage_embedding)[0]
  23. index = np.argsort(-cos_matrix)[level]
  24. return [content[index], cos_matrix[index]]
  25. @app.route('/top_ask', methods=['GET', 'POST'])
  26. def get_synonyms():
  27. json_data = request.get_data()
  28. comment_json = json.loads(json_data)
  29. ask = comment_json['ask']
  30. json_data = sim2(ask, 0)
  31. return jsonify({"text": str(json_data[0]), "相似度": str(json_data[1])})
  32. if __name__ == '__main__': #
  33. app.run(host="0.0.0.0", port=1089, debug=True)

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号