怎样建一个自己公司的网站成都app定制开发公司
怎样建一个自己公司的网站,成都app定制开发公司,有没有做那事的网站,外链网站推荐几个GTE-Chinese-Large基础教程#xff1a;余弦相似度与欧氏距离在业务中的选型
1. 引言#xff1a;为什么需要关注相似度算法#xff1f;
在日常业务中#xff0c;我们经常遇到这样的需求#xff1a;用户输入一段文字#xff0c;我们需要从海量内容中找到最相关的结果。比…GTE-Chinese-Large基础教程余弦相似度与欧氏距离在业务中的选型1. 引言为什么需要关注相似度算法在日常业务中我们经常遇到这样的需求用户输入一段文字我们需要从海量内容中找到最相关的结果。比如电商平台的商品搜索、内容平台的推荐系统、客服系统的问答匹配等。这时候文本相似度计算就成了核心技术。GTE-Chinese-Large作为阿里达摩院推出的中文专用文本向量模型能够将文本转换为高质量的1024维向量表示。但有了向量之后如何衡量两个向量的相似度这就是余弦相似度和欧氏距离要解决的问题。本文将带你从实际业务角度出发深入理解这两种相似度算法的区别并学会在不同场景下做出正确的选择。2. GTE-Chinese-Large模型快速入门2.1 模型核心特点GTE-Chinese-Large是专门为中文场景优化的文本嵌入模型具有以下特点向量维度1024维表达能力强大模型大小621MB部署相对轻量文本长度支持最长512个token加速支持支持GPU加速推理速度快2.2 快速部署与使用使用CSDN星图镜像可以快速部署GTE-Chinese-Large模型# 启动服务 /opt/gte-zh-large/start.sh # 访问Web界面 # 将端口替换为7860即可访问等待1-2分钟模型加载完成后就可以通过Web界面或API进行文本向量化和相似度计算了。3. 理解余弦相似度与欧氏距离3.1 余弦相似度关注方向一致性余弦相似度衡量的是两个向量在方向上的相似程度而不关心它们的绝对大小。其计算公式为cos(θ) (A·B) / (||A|| * ||B||)其中A·B表示向量的点积||A||和||B||表示向量的模长。简单理解就像比较两个文档的主题相似性不管文章长短只关心内容主题是否一致。3.2 欧氏距离关注绝对位置差异欧氏距离衡量的是两个向量在空间中的绝对距离计算公式为d √(Σ(A_i - B_i)²)简单理解就像测量两个地点之间的直线距离考虑的是绝对位置的差异。3.3 直观对比用生活例子理解假设我们要比较两个人的兴趣爱好余弦相似度关心兴趣爱好的类型是否相似都喜欢运动、音乐、读书欧氏距离关心兴趣爱好的投入程度每周运动5小时 vs 2小时4. 业务场景中的算法选型指南4.1 选择余弦相似度的场景适合场景文档检索和语义搜索内容推荐系统问答匹配和FAQ检索文本分类和聚类为什么适合这些场景更关注内容语义的相似性而不是文本长度或词频的绝对差异。实际案例# 文档检索示例 query 人工智能的发展现状 document1 AI技术最新进展报告 # 短文档 document2 关于人工智能从概念提出到当前发展状况的全面分析报告 # 长文档 # 使用余弦相似度两者都会得到较高分数 # 因为语义主题相似不受长度影响4.2 选择欧氏距离的场景适合场景异常检测和离群点分析基于绝对数值的匹配需要考虑幅度差异的场景为什么适合这些场景需要关注数值的绝对差异而不仅仅是方向一致性。实际案例# 用户行为分析示例 user1_behavior [5, 3, 2] # 每周5次购物、3次浏览、2次评论 user2_behavior [1, 1, 1] # 每周1次购物、1次浏览、1次评论 # 使用欧氏距离能明显区分活跃用户和非活跃用户4.3 混合使用的策略在实际业务中往往需要结合使用两种方法def hybrid_similarity(vec1, vec2, alpha0.7): 混合相似度计算 alpha: 余弦相似度的权重 cos_sim cosine_similarity(vec1, vec2) euclidean_dist euclidean_distance(vec1, vec2) # 将欧氏距离转换为相似度距离越小越相似 max_dist np.max(euclidean_dist) # 最大可能距离 euclidean_sim 1 - (euclidean_dist / max_dist) return alpha * cos_sim (1 - alpha) * euclidean_sim5. 实战基于GTE的相似度计算5.1 环境准备与模型加载首先确保GTE-Chinese-Large模型已经部署并运行from transformers import AutoTokenizer, AutoModel import torch import numpy as np from sklearn.metrics.pairwise import cosine_similarity # 加载模型模型路径根据实际部署调整 model_path /opt/gte-zh-large/model tokenizer AutoTokenizer.from_pretrained(model_path) model AutoModel.from_pretrained(model_path) # 移动到GPU加速如果可用 device torch.device(cuda if torch.cuda.is_available() else cpu) model model.to(device)5.2 文本向量化函数def get_embedding(text): 获取文本的向量表示 inputs tokenizer( text, return_tensorspt, paddingTrue, truncationTrue, max_length512 ) inputs {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): outputs model(**inputs) # 使用[CLS] token的表示作为整个文本的嵌入 return outputs.last_hidden_state[:, 0].cpu().numpy() # 示例使用 text 人工智能的发展与应用 embedding get_embedding(text) print(f向量维度: {embedding.shape}) # 输出: (1, 1024)5.3 相似度计算实现def calculate_similarities(text1, text2): 计算两种相似度 # 获取向量 vec1 get_embedding(text1) vec2 get_embedding(text2) # 余弦相似度 cos_sim cosine_similarity(vec1, vec2)[0][0] # 欧氏距离转换为相似度分数 euclidean_dist np.linalg.norm(vec1 - vec2) max_possible_dist np.linalg.norm(np.ones(1024) - (-np.ones(1024))) euclidean_sim 1 - (euclidean_dist / max_possible_dist) return { cosine_similarity: float(cos_sim), euclidean_similarity: float(euclidean_sim), recommendation: cosine if cos_sim 0.6 else euclidean } # 测试示例 text_a 机器学习算法 text_b 深度学习模型 result calculate_similarities(text_a, text_b) print(f余弦相似度: {result[cosine_similarity]:.4f}) print(f欧氏相似度: {result[euclidean_similarity]:.4f}) print(f推荐算法: {result[recommendation]})6. 业务案例深度解析6.1 电商搜索场景需求用户搜索轻薄笔记本电脑需要返回相关商品。分析商品标题长度差异大轻薄本 vs 2023新款超薄便携笔记本电脑更关注语义相似性而不是标题长度选择余弦相似度实现代码def search_products(query, product_list, top_k5): 商品语义搜索 query_vec get_embedding(query) product_vectors [get_embedding(product) for product in product_list] # 计算余弦相似度 similarities [] for i, product_vec in enumerate(product_vectors): sim cosine_similarity(query_vec, product_vec)[0][0] similarities.append((product_list[i], sim)) # 按相似度排序 similarities.sort(keylambda x: x[1], reverseTrue) return similarities[:top_k] # 使用示例 products [游戏本, 超薄笔记本电脑, 商务办公本, 二合一平板电脑] results search_products(轻薄笔记本电脑, products) for product, score in results: print(f{product}: {score:.4f})6.2 内容去重场景需求检测新闻文章中是否包含重复内容。分析需要同时考虑内容相似性和重复程度短时间大量发布的相似文章可能是垃圾内容混合使用两种算法实现代码def detect_duplicate_content(article1, article2, threshold0.8): 内容去重检测 vec1 get_embedding(article1) vec2 get_embedding(article2) cos_sim cosine_similarity(vec1, vec2)[0][0] euclidean_dist np.linalg.norm(vec1 - vec2) # 综合判断 if cos_sim threshold and euclidean_dist 1.0: return True, cos_sim, euclidean_dist else: return False, cos_sim, euclidean_dist # 使用示例 article_a 今天股市大涨科技股领涨... article_b 股市今日表现强劲科技板块涨幅居前... is_duplicate, cos_score, dist detect_duplicate_content(article_a, article_b) print(f是否重复: {is_duplicate}, 余弦相似度: {cos_score:.4f}, 欧氏距离: {dist:.4f})7. 性能优化与最佳实践7.1 批量处理优化当需要处理大量文本时使用批量处理可以显著提升性能def get_embeddings_batch(texts, batch_size32): 批量获取文本嵌入 all_embeddings [] for i in range(0, len(texts), batch_size): batch_texts texts[i:ibatch_size] inputs tokenizer( batch_texts, return_tensorspt, paddingTrue, truncationTrue, max_length512 ) inputs {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): outputs model(**inputs) batch_embeddings outputs.last_hidden_state[:, 0].cpu().numpy() all_embeddings.extend(batch_embeddings) return np.array(all_embeddings)7.2 相似度计算优化对于大规模相似度计算使用矩阵运算提升效率def batch_cosine_similarity(queries, candidates): 批量计算余弦相似度 query_embeddings get_embeddings_batch(queries) candidate_embeddings get_embeddings_batch(candidates) # 归一化向量 query_norm query_embeddings / np.linalg.norm(query_embeddings, axis1, keepdimsTrue) candidate_norm candidate_embeddings / np.linalg.norm(candidate_embeddings, axis1, keepdimsTrue) # 矩阵乘法计算相似度 similarity_matrix np.dot(query_norm, candidate_norm.T) return similarity_matrix7.3 缓存策略对于重复查询实现简单的缓存机制from functools import lru_cache lru_cache(maxsize1000) def cached_get_embedding(text): 带缓存的文本嵌入获取 return get_embedding(text) lru_cache(maxsize1000) def cached_cosine_similarity(text1, text2): 带缓存的相似度计算 vec1 cached_get_embedding(text1) vec2 cached_get_embedding(text2) return cosine_similarity(vec1, vec2)[0][0]8. 总结与建议8.1 核心要点回顾通过本文的学习你应该掌握余弦相似度更适合语义相关的场景不受文本长度影响欧氏距离更适合需要关注绝对数值差异的场景GTE-Chinese-Large提供了高质量的中文文本向量表示在实际业务中需要根据具体需求选择合适的相似度算法8.2 选型决策指南业务场景推荐算法原因语义搜索余弦相似度关注语义相关性而非文本长度内容推荐余弦相似度基于内容主题相似性异常检测欧氏距离需要检测数值异常用户聚类欧氏距离基于用户行为的绝对差异混合场景加权组合同时考虑语义和数值差异8.3 下一步学习建议深入理解嵌入模型学习不同嵌入模型的特点和适用场景探索高级相似度算法如曼哈顿距离、杰卡德相似系数等实践大规模相似度计算学习使用Faiss等库进行高效相似度搜索优化系统性能学习缓存、索引、分布式计算等优化技术记住没有绝对最好的算法只有最适合业务场景的算法。在实际应用中建议通过A/B测试来确定最适合的相似度计算方案。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。