gte-base-zh实战:用Python代码调用API实现智能文本相似度计算
gte-base-zh实战用Python代码调用API实现智能文本相似度计算1. 认识gte-base-zh模型1.1 模型背景与特点gte-base-zh是阿里巴巴达摩院基于BERT框架训练的中文文本嵌入模型。这个模型在一个覆盖广泛领域和场景的大规模语料库上进行训练使其能够准确捕捉中文文本的语义信息。模型的核心能力是将文本转换为高维向量通常称为embedding这些向量能够很好地保留文本的语义特征。通过比较不同文本向量的相似度我们可以实现多种实用的NLP任务。1.2 主要应用场景语义相似度计算判断两段文本在语义上的相似程度信息检索构建基于语义而非关键词的搜索系统文本聚类将语义相近的文本自动归类问答系统匹配用户问题与知识库中的答案内容推荐根据用户历史兴趣推荐相关内容2. 环境准备与模型部署2.1 部署模型服务gte-base-zh模型已经预置在镜像中路径为/usr/local/bin/AI-ModelScope/gte-base-zh启动Xinference服务xinference-local --host 0.0.0.0 --port 9997然后启动模型服务python /usr/local/bin/launch_model_server.py2.2 验证服务状态检查模型是否启动成功cat /root/workspace/model_server.log当看到模型加载成功的提示信息后说明服务已就绪可以通过API进行调用。3. Python调用API实战3.1 获取文本嵌入向量首先我们来看如何通过Python代码获取单段文本的向量表示import requests import json def get_text_embedding(text, endpointhttp://localhost:9997/v1/embeddings, model_uidgte-base-zh): 获取单段文本的嵌入向量 :param text: 输入文本 :param endpoint: API端点地址 :param model_uid: 模型标识 :return: 文本向量(numpy数组) headers {Content-Type: application/json} payload { model: model_uid, input: text } try: response requests.post(endpoint, headersheaders, datajson.dumps(payload)) response.raise_for_status() embedding response.json()[data][0][embedding] return embedding except requests.exceptions.RequestException as e: print(f请求失败: {e}) return None # 示例使用 text 自然语言处理是人工智能的重要分支 embedding get_text_embedding(text) print(f文本向量维度: {len(embedding)}) print(f前5个维度值: {embedding[:5]})3.2 计算文本相似度有了文本向量后我们可以计算两段文本的语义相似度import numpy as np def cosine_similarity(vec_a, vec_b): 计算两个向量的余弦相似度 :param vec_a: 向量A :param vec_b: 向量B :return: 相似度分数(0-1) dot_product np.dot(vec_a, vec_b) norm_a np.linalg.norm(vec_a) norm_b np.linalg.norm(vec_b) return dot_product / (norm_a * norm_b) def text_similarity(text1, text2): 计算两段文本的语义相似度 :param text1: 文本1 :param text2: 文本2 :return: 相似度分数(0-1) vec1 get_text_embedding(text1) vec2 get_text_embedding(text2) if vec1 is not None and vec2 is not None: return cosine_similarity(vec1, vec2) else: return None # 示例使用 text_a 深度学习在计算机视觉领域有广泛应用 text_b AI技术在图像识别方面发挥着重要作用 text_c 今天天气真好适合出去散步 similarity_ab text_similarity(text_a, text_b) similarity_ac text_similarity(text_a, text_c) print(f{text_a} 和 {text_b} 的相似度: {similarity_ab:.4f}) print(f{text_a} 和 {text_c} 的相似度: {similarity_ac:.4f})4. 实际应用案例4.1 智能问答匹配# 准备问答知识库 qa_pairs [ {question: 如何重置密码, answer: 登录后进入账户设置点击修改密码选项}, {question: 忘记密码怎么办, answer: 在登录页面点击忘记密码按提示操作}, {question: 怎么联系客服, answer: 拨打400-123-4567或通过在线聊天联系} ] # 用户问题 user_question 我记不住密码了该怎么办 # 为知识库问题生成向量 for qa in qa_pairs: qa[embedding] get_text_embedding(qa[question]) # 获取用户问题的向量 user_embedding get_text_embedding(user_question) # 计算相似度并找到最匹配的问题 best_match None highest_score 0 for qa in qa_pairs: score cosine_similarity(user_embedding, qa[embedding]) if score highest_score: highest_score score best_match qa print(f用户问题: {user_question}) print(f最匹配问题: {best_match[question]}) print(f匹配分数: {highest_score:.4f}) print(f推荐答案: {best_match[answer]})4.2 文档相似度分析def document_similarity(doc1, doc2): 计算长文档的相似度分块处理 :param doc1: 文档1 :param doc2: 文档2 :return: 相似度分数 # 简单分句实际应用中可用更复杂的分块方法 sentences1 [s for s in doc1.split(。) if len(s) 5] sentences2 [s for s in doc2.split(。) if len(s) 5] # 获取各句向量 vecs1 [get_text_embedding(s) for s in sentences1] vecs2 [get_text_embedding(s) for s in sentences2] # 计算平均相似度 total_score 0 count 0 for v1 in vecs1: for v2 in vecs2: if v1 is not None and v2 is not None: total_score cosine_similarity(v1, v2) count 1 return total_score / count if count 0 else 0 # 示例文档 doc_a 人工智能是计算机科学的一个分支。它企图了解智能的实质并生产出一种新的能以人类智能相似的方式做出反应的智能机器。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。 doc_b 机器学习是人工智能的核心是使计算机具有智能的根本途径。它主要使用归纳、综合而不是演绎。深度学习是机器学习的一个分支它试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象。 similarity document_similarity(doc_a, doc_b) print(f文档相似度: {similarity:.4f})5. 性能优化与实用技巧5.1 批量处理提升效率def batch_embedding(texts, endpointhttp://localhost:9997/v1/embeddings, model_uidgte-base-zh): 批量获取文本嵌入 :param texts: 文本列表 :param endpoint: API端点 :param model_uid: 模型ID :return: 向量列表 headers {Content-Type: application/json} payload { model: model_uid, input: texts } try: response requests.post(endpoint, headersheaders, datajson.dumps(payload)) response.raise_for_status() return [item[embedding] for item in response.json()[data]] except requests.exceptions.RequestException as e: print(f批量请求失败: {e}) return None # 示例使用 text_list [ 人工智能改变世界, 机器学习算法应用, 今天的天气真不错 ] embeddings batch_embedding(text_list) for text, emb in zip(text_list, embeddings): print(f文本: {text[:20]}... 向量长度: {len(emb)})5.2 相似度计算优化from sklearn.metrics.pairwise import cosine_similarity as sklearn_cosine_sim import numpy as np def efficient_batch_similarity(texts1, texts2): 高效计算两组文本间的相似度矩阵 :param texts1: 第一组文本列表 :param texts2: 第二组文本列表 :return: 相似度矩阵 # 批量获取两组文本的嵌入 embs1 np.array(batch_embedding(texts1)) embs2 np.array(batch_embedding(texts2)) # 使用sklearn计算余弦相似度矩阵 sim_matrix sklearn_cosine_sim(embs1, embs2) return sim_matrix # 示例使用 group_a [深度学习框架, 神经网络结构, 计算机视觉] group_b [机器学习算法, AI技术应用, 图像处理] sim_matrix efficient_batch_similarity(group_a, group_b) print(相似度矩阵:) print(sim_matrix)6. 总结与扩展6.1 核心要点回顾通过本文的实践我们学习了如何部署gte-base-zh模型服务使用Python调用API获取文本嵌入向量计算文本间的语义相似度在实际场景中的应用方法性能优化的技巧6.2 扩展应用建议构建语义搜索引擎开发智能客服系统实现内容推荐功能创建文档去重工具开发问答匹配系统gte-base-zh作为一个强大的中文语义理解模型能够为各种NLP应用提供坚实的基础。通过API调用开发者可以轻松集成这些高级功能到自己的应用中。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。