怎么做自助购物网站海南网站建设推广公司
怎么做自助购物网站,海南网站建设推广公司,wordpress的方法,做微信公众号微网站零基础入门GTE中文文本嵌入#xff1a;手把手教你计算文本相似度
你是不是经常遇到这样的问题#xff1f;面对一堆文档#xff0c;想找出哪些内容相似#xff1b;或者开发一个智能客服#xff0c;需要快速匹配用户问题和知识库里的答案。以前#xff0c;你可能需要人工一…零基础入门GTE中文文本嵌入手把手教你计算文本相似度你是不是经常遇到这样的问题面对一堆文档想找出哪些内容相似或者开发一个智能客服需要快速匹配用户问题和知识库里的答案。以前你可能需要人工一条条比对费时费力。现在有了文本嵌入技术计算机可以像人一样“理解”文字的含义并自动计算它们之间的相似度。今天我们就来聊聊一个强大的中文文本嵌入模型——GTEGeneral Text Embedding。我会用最直白的方式带你从零开始一步步学会如何用它来计算文本相似度。即使你没有任何NLP自然语言处理基础也能轻松跟上。1. 什么是文本嵌入为什么需要GTE简单来说文本嵌入就是把一段文字比如一个句子、一段话变成一串数字也叫向量。这串数字不是乱码它神奇地“编码”了这段文字的语义信息。意思相近的文字它们的数字串在数学空间里的“距离”也会很近。想象一下我们把所有句子都映射到一个高维的“语义地图”上。在这个地图里“我喜欢吃苹果”和“苹果是一种水果”这两个点会靠得很近因为它们都关于“苹果”而“我喜欢吃苹果”和“今天天气真好”这两个点就会离得很远。文本嵌入就是绘制这张地图的工具。那么为什么是GTE呢专为中文优化GTE模型由阿里巴巴达摩院研发在超大规模的中文语料上训练对中文的语义、语法、甚至一些网络用语都有很好的理解能力。效果拔群它在权威的中文文本嵌入评测基准C-MTEB上表现优异。这个基准就像“高考”涵盖了分类、检索、相似度计算等各种题型能考上高分的模型在实际应用中通常也更可靠。即拿即用它基于成熟的BERT框架提供了开箱即用的预训练模型。你不需要从头训练直接调用就能获得高质量的文本向量。对于我们开发者来说GTE就像一个封装好的“语义理解”黑盒。你喂给它文字它吐出代表含义的向量我们再用这些向量去做搜索、推荐、聚类等有趣的事情。2. 环境准备两种方式快速启动GTE服务要使用GTE模型我们首先需要把它运行起来。这里给你介绍两种方法一种是使用现成的CSDN星图镜像最快1分钟部署另一种是传统的本地代码部署适合喜欢折腾的开发者。2.1 方法一一键部署推荐新手这是最省心的方法特别适合想快速体验和原型验证。获取镜像访问 CSDN星图镜像广场搜索“GTE中文文本嵌入模型”。一键部署点击该镜像选择“立即部署”。星图平台会自动为你配置好计算资源CPU/GPU和运行环境。访问服务部署成功后你会获得一个访问地址例如http://your-instance-ip:7860。在浏览器中打开它就能看到一个简洁的Web界面。这个界面已经集成了GTE模型的核心功能你可以直接在网页上输入文本进行计算无需编写任何代码。后台的服务程序就是下面方法二要做的所有事情已经为你准备好了。2.2 方法二本地代码部署如果你想深入了解或者需要在自有服务器上集成可以按照以下步骤操作。首先确保你的环境有Python建议3.8以上版本和pip。然后我们模拟镜像中的步骤来启动服务。步骤1准备模型和代码通常你需要从Hugging Face等平台下载GTE模型例如thenlper/gte-large-zh。但为了演示我们假设你已经有了一个包含如下文件的项目目录/root/nlp_gte_sentence-embedding_chinese-large/ ├── app.py # 基于Gradio的Web服务主程序 ├── requirements.txt # Python依赖包列表 ├── configuration.json # 模型配置文件 └── USAGE.md # 说明文档步骤2安装依赖打开终端进入项目目录安装所需的Python包。cd /root/nlp_gte_sentence-embedding_chinese-large pip install -r requirements.txt典型的requirements.txt会包含transformers,torch,gradio,sentencepiece等库。步骤3启动Web服务运行主程序启动一个本地Web服务。python app.py如果一切顺利终端会输出类似Running on local URL: http://0.0.0.0:7860的信息。步骤4体验功能在浏览器中访问http://localhost:7860你将看到服务界面。界面主要提供两大功能文本相似度计算输入一个源句子再输入多个待比较的句子每行一个点击按钮即可得到相似度分数。文本向量获取输入任意文本可以直接获取其对应的1024维向量。至此你的GTE服务就已经在本地跑起来了无论是方法一还是方法二我们最终都得到了一个可以提供API服务的后端。接下来我们看看怎么用它。3. 核心实战三种方式计算文本相似度服务跑起来了怎么用呢我为你介绍三种由浅入深的使用方式Web界面、Python API调用和直接使用模型库。你可以根据项目需求选择。3.1 方式一Web界面点点点最快验证这是最直观的方式适合快速测试模型效果。在浏览器打开你的服务地址如http://localhost:7860。找到“文本相似度计算”区域。在“源句子”框里输入一句话例如“深度学习是人工智能的一个重要分支。”在“待比较句子”框里每行输入一句你想比较的话例如机器学习需要大量的数据。 人工智能近年来发展迅速。 深度学习基于神经网络。点击“计算相似度”按钮。查看结果。系统会返回一个相似度分数列表数值在0到1之间越接近1表示语义越相似。你可能会看到“深度学习基于神经网络。”的分数最高因为它与源句子的语义关联最强。3.2 方式二Python API调用适合集成在真实的项目开发中我们通常通过代码调用服务。GTE的Web服务一般会提供一个API接口。import requests import json # 服务地址 server_url http://localhost:7860/api/predict # 准备数据计算相似度 # 数据格式通常是一个列表第一个元素是源句子第二个元素是用换行符连接的待比较句子字符串。 data_for_similarity { data: [ 苹果公司发布了新款iPhone。, 科技巨头苹果推出新手机。\n今天水果市场的苹果价格稳定。\n微软发布了新的操作系统。 ] } # 发送POST请求 response requests.post(server_url, jsondata_for_similarity) # 处理响应 if response.status_code 200: result response.json() print(相似度计算结果) # 假设返回格式是 {data: [相似度列表]} similarities result.get(data, []) for i, score in enumerate(similarities): print(f 与第{i1}句的相似度: {score:.4f}) else: print(f请求失败状态码{response.status_code}) # 准备数据获取文本向量 data_for_embedding { data: [这是一个获取向量表示的示例文本。, , False, False, False, False] # 参数需根据实际API调整 } response_vec requests.post(server_url, jsondata_for_embedding) if response_vec.status_code 200: vector response_vec.json().get(data, []) print(f\n文本向量维度{len(vector)}) # 应该是1024通过API你可以轻松地将文本相似度计算功能集成到你的爬虫、数据分析流水线或Web应用后台中。3.3 方式三直接使用Transformers库最灵活如果你需要更底层的控制或者不想启动Web服务可以直接使用transformers库加载GTE模型。这也是理解其原理的好方法。import torch import torch.nn.functional as F from transformers import AutoTokenizer, AutoModel # 1. 指定模型名称从Hugging Face加载 model_name thenlper/gte-large-zh # 如果你有本地模型路径也可以使用例如model_name /root/ai-models/iic/nlp_gte_sentence-embedding_chinese-large # 2. 加载分词器和模型 print(正在加载模型和分词器首次使用需要下载...) tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModel.from_pretrained(model_name) # 将模型设置为评估模式并移动到GPU如果可用 device torch.device(cuda if torch.cuda.is_available() else cpu) model.to(device) model.eval() print(f模型已加载到设备{device}) # 3. 准备要计算的句子 sentences [ 中国的首都是北京。, 北京是一座历史悠久的城市。, 熊猫是中国的国宝。 ] # 4. 分词并转换为模型输入 # paddingTrue: 将句子填充到同一长度 # truncationTrue: 过长句子截断到模型最大长度512 # return_tensorspt: 返回PyTorch张量 inputs tokenizer(sentences, max_length512, paddingTrue, truncationTrue, return_tensorspt) # 将输入也移动到相同设备 inputs {k: v.to(device) for k, v in inputs.items()} # 5. 模型推理获取隐藏状态 with torch.no_grad(): # 不计算梯度节省内存和计算资源 outputs model(**inputs) # outputs.last_hidden_state 的形状是 (batch_size, sequence_length, hidden_size) # 我们通常取每个句子第一个token[CLS]的隐藏状态作为整个句子的表示 embeddings outputs.last_hidden_state[:, 0, :] # 形状变为 (batch_size, hidden_size) # 6. 对向量进行归一化L2归一化这是计算余弦相似度的标准前置步骤 embeddings F.normalize(embeddings, p2, dim-1) # 7. 计算余弦相似度向量点积 # 矩阵 embeddings 乘以自身的转置对角线是自身相似度为1其他位置是两两相似度 similarity_matrix embeddings embeddings.T # 8. 打印结果 print(\n句子列表) for i, s in enumerate(sentences): print(f [{i}] {s}) print(\n相似度矩阵) print(similarity_matrix.cpu().numpy().round(4)) # 转移到CPU并转换为numpy数组打印 # 如果你想看句子0和句子1、2的详细相似度 print(f\n‘{sentences[0]}’ 与其它句子的相似度) for i in range(1, len(sentences)): sim_score similarity_matrix[0, i].item() print(f 与‘{sentences[i]}’ : {sim_score:.4f})运行这段代码你会看到模型输出了句子两两之间的相似度分数。你会发现“中国的首都是北京。”和“北京是一座历史悠久的城市。”的相似度会远高于它和“熊猫是中国的国宝。”的相似度。4. 实际应用场景与代码示例知道了怎么算相似度那它能用来做什么呢下面我举几个接地气的例子。4.1 场景一智能问答与知识库检索假设你有一个产品FAQ知识库用户问了一个问题你需要从知识库里找到最相关的答案。def find_most_relevant_answer(user_question, knowledge_base, tokenizer, model, device, top_k3): 在知识库中查找与用户问题最相关的答案。 Args: user_question: 用户问题字符串 knowledge_base: 列表包含所有知识库条目例如问题-答案对中的问题 top_k: 返回最相关的K个结果 # 1. 将用户问题和所有知识库问题组合成一个列表 all_texts [user_question] knowledge_base # 2. 获取所有文本的嵌入向量复用之前的代码逻辑 inputs tokenizer(all_texts, max_length512, paddingTrue, truncationTrue, return_tensorspt).to(device) with torch.no_grad(): outputs model(**inputs) embeddings outputs.last_hidden_state[:, 0, :] embeddings F.normalize(embeddings, p2, dim-1) # 3. 用户问题向量是第一个 user_embedding embeddings[0:1] # 形状 (1, hidden_size) kb_embeddings embeddings[1:] # 形状 (len(kb), hidden_size) # 4. 计算与知识库中每个问题的相似度 similarities (user_embedding kb_embeddings.T).squeeze(0) # 形状 (len(kb),) # 5. 获取相似度最高的top_k个索引 top_indices similarities.argsort(descendingTrue)[:top_k] # 6. 返回结果 results [] for idx in top_indices: results.append({ question: knowledge_base[idx], similarity_score: similarities[idx].item() }) return results # 模拟一个简单的知识库 kb_questions [ 如何重置路由器密码, 忘记Wi-Fi密码怎么办, 产品如何退货, 快递多久能到, 路由器信号不好如何解决 ] user_query 我忘了家里的无线网密码该怎么找回来 relevant_qa find_most_relevant_answer(user_query, kb_questions, tokenizer, model, device, top_k2) print(f用户问题‘{user_query}’) print(最相关的知识库问题) for item in relevant_qa: print(f - ‘{item[question]}’ (相似度: {item[similarity_score]:.4f}))在这个例子里模型应该能精准地把用户问题匹配到“忘记Wi-Fi密码怎么办”和“如何重置路由器密码”这两个知识库条目上。4.2 场景二文档去重与聚类当你从不同渠道收集了大量文章或评论想知道哪些内容是重复或高度相似的。def find_similar_documents(documents, threshold0.85): 找出相似度超过阈值的文档对用于去重。 # 获取所有文档的嵌入向量假设已有批量获取向量的函数 get_embeddings_batch embeddings get_embeddings_batch(documents, tokenizer, model, device) # 形状 (n_docs, hidden_size) embeddings F.normalize(embeddings, p2, dim-1) # 计算相似度矩阵 sim_matrix embeddings embeddings.T n len(documents) similar_pairs [] # 遍历上三角矩阵避免重复和自身比较 for i in range(n): for j in range(i1, n): if sim_matrix[i, j] threshold: similar_pairs.append((i, j, sim_matrix[i, j].item())) return similar_pairs # 模拟文档 docs [ 深度学习模型需要大量数据进行训练。, 训练AI模型离不开大数据。, 今天天气晴朗适合出游。, 阳光明媚是外出游玩的好日子。, 神经网络的结构有多层。 ] pairs find_similar_documents(docs, threshold0.8) print(发现以下高度相似的文档对) for i, j, score in pairs: print(f 文档{i}‘{docs[i]}’) print(f 文档{j}‘{docs[j]}’) print(f 相似度: {score:.4f}\n)这个功能可以帮你快速清理数据集避免重复内容影响分析结果或模型训练。4.3 场景三推荐系统内容相似推荐在新闻或博客网站根据用户正在阅读的文章推荐其他相似的文章。def recommend_similar_content(current_article_id, all_articles, article_embeddings, top_n5): 推荐与当前文章相似的其他文章。 Args: article_embeddings: 预计算好的所有文章嵌入向量矩阵 current_vec article_embeddings[current_article_id:current_article_id1] similarities (current_vec article_embeddings.T).squeeze(0) # 排除自己 similarities[current_article_id] -1 top_indices similarities.argsort(descendingTrue)[:top_n] recommendations [] for idx in top_indices: recommendations.append({ article_id: idx, title: all_articles[idx][title], # 假设文章数据包含标题 similarity: similarities[idx].item() }) return recommendations在实际应用中article_embeddings可以预先计算好并存入数据库或向量数据库如Milvus, Pinecone实现毫秒级的相似内容推荐。5. 总结通过这篇文章我们从“文本嵌入是什么”这个基本概念出发一步步完成了GTE中文模型的部署、调用和实际应用。让我们回顾一下关键点核心价值GTE模型将中文文本转化为富含语义的向量使计算机能够通过计算向量相似度来“理解”文本间的语义关系。快速启动对于初学者和快速验证场景使用CSDN星图镜像是最佳选择免去了复杂的环境配置。对于开发者可以通过Web服务、Python API或直接调用transformers库三种方式灵活集成。关键步骤使用模型时记住“分词 - 模型编码 - 取[CLS]向量 - L2归一化 - 计算余弦相似度”这个核心流程。应用广泛文本相似度计算是智能检索、问答系统、内容去重、个性化推荐等众多NLP应用的基石。掌握了GTE你就拥有了为这些应用注入“语义理解”能力的关键工具。最后实践出真知。我强烈建议你先用星图镜像或本地Web服务在界面上多试试不同的句子组合直观感受模型的语义理解能力。然后运行我提供的Python代码示例理解每一步在做什么。最后尝试将它应用到你的一个实际想法中比如整理你的个人文档库或是做一个简单的新闻推荐demo。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。