用Qwen3-Embedding-0.6B做文本分类:实战教程与代码分享

news2026/4/9 11:48:02
用Qwen3-Embedding-0.6B做文本分类实战教程与代码分享1. 引言文本分类是自然语言处理中最基础也最实用的任务之一。无论是新闻分类、情感分析还是垃圾邮件识别都需要将文本准确地归入预定义的类别。传统的文本分类方法依赖人工特征工程而基于嵌入向量的方法则让机器自己学习文本的语义特征。今天要介绍的Qwen3-Embedding-0.6B是一个只有6亿参数的轻量级嵌入模型。别看它体积小在文本分类任务上的表现却相当出色。更重要的是它部署简单、推理速度快非常适合实际项目中使用。这篇文章不是理论讲解而是一份手把手的实战指南。我会带你从零开始用Qwen3-Embedding-0.6B搭建一个完整的文本分类系统。无论你是刚入门的新手还是想快速验证模型效果的开发者都能跟着教程一步步实现。2. 为什么选择嵌入模型做文本分类2.1 传统方法 vs 嵌入方法在深入代码之前我们先简单了解一下为什么用嵌入模型做文本分类是个好选择。传统的文本分类通常有两种方式基于规则的方法手动编写关键词规则比如包含优惠、打折就归为营销类基于统计的方法使用TF-IDF、词袋模型等提取特征然后用SVM、朴素贝叶斯等分类器这些方法都有明显的局限性规则方法维护成本高统计方法难以捕捉语义信息。嵌入模型的方法则完全不同语义理解将文本转换为高维向量相似的文本在向量空间中距离更近上下文感知能理解苹果手机和吃苹果中苹果的不同含义迁移学习预训练好的嵌入模型可以直接用于各种下游任务2.2 Qwen3-Embedding-0.6B的优势Qwen3-Embedding-0.6B在这个场景下有几个特别实用的优点轻量高效只有6亿参数在普通CPU上也能快速推理384维的向量输出存储和计算成本都很低支持批量处理一次可以处理多个文本多语言支持支持超过100种语言包括中文、英文、日文等在多语言文本分类任务上表现一致性好开箱即用不需要复杂的训练过程提供标准的API接口集成简单兼容OpenAI的调用方式现有代码几乎不用改3. 环境准备与模型部署3.1 快速部署Qwen3-Embedding-0.6B如果你已经有一个可用的Qwen3-Embedding-0.6B服务可以直接跳到下一节。如果没有这里提供两种快速部署方式。方式一使用SGLang一键启动这是最简单的方法只需要一条命令sglang serve --model-path /path/to/Qwen3-Embedding-0.6B --host 0.0.0.0 --port 30000 --is-embedding启动成功后你会看到类似这样的输出INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:30000方式二使用Docker容器如果你更喜欢用Docker可以这样操作# 拉取镜像 docker pull your-registry/qwen-embedding:latest # 运行容器 docker run -d --name qwen-embedding \ -p 30000:30000 \ -v /path/to/models:/models \ your-registry/qwen-embedding:latest \ sglang serve --model-path /models/Qwen3-Embedding-0.6B --host 0.0.0.0 --port 30000 --is-embedding3.2 验证服务是否正常部署完成后我们需要确认服务能正常工作。创建一个简单的测试脚本import openai # 配置客户端 client openai.Client( base_urlhttp://localhost:30000/v1, # 如果是远程服务器替换为实际地址 api_keyEMPTY # 本地部署不需要真正的API密钥 ) # 测试单个文本 response client.embeddings.create( modelQwen3-Embedding-0.6B, input今天天气真好适合出去散步 ) print(向量维度:, len(response.data[0].embedding)) print(前5个值:, response.data[0].embedding[:5])如果一切正常你会看到输出类似向量维度: 384 前5个值: [0.0234, -0.0456, 0.1289, -0.0678, 0.0345]4. 文本分类实战从数据到模型4.1 准备分类数据集我们用一个实际的例子来演示新闻文本分类。假设我们要把新闻分为4个类别体育、科技、财经、娱乐。首先准备一些示例数据# 示例数据集 news_data [ {text: 昨晚的足球比赛中主队以3:2逆转获胜, label: 体育}, {text: 新款智能手机发布搭载最新AI芯片, label: 科技}, {text: 股市今日大涨科技股领涨, label: 财经}, {text: 知名演员新电影票房突破10亿, label: 娱乐}, {text: 篮球联赛总决赛即将开打, label: 体育}, {text: 人工智能公司获得新一轮融资, label: 科技}, {text: 央行宣布降息刺激经济增长, label: 财经}, {text: 音乐节阵容公布多位明星加盟, label: 娱乐}, # 可以继续添加更多数据... ] # 转换为训练格式 texts [item[text] for item in news_data] labels [item[label] for item in news_data] # 查看数据分布 from collections import Counter print(各类别数量:, Counter(labels))在实际项目中你可能有几百甚至几千条标注数据。数据越多分类效果通常越好。4.2 生成文本嵌入向量有了数据之后我们需要把文本转换成嵌入向量。这是Qwen3-Embedding-0.6B的核心工作。import numpy as np from typing import List def get_embeddings(texts: List[str], batch_size: int 32) - np.ndarray: 批量获取文本的嵌入向量 Args: texts: 文本列表 batch_size: 批处理大小适当调整可以提高效率 Returns: numpy数组形状为 (文本数量, 384) embeddings [] # 分批处理避免一次性处理太多文本 for i in range(0, len(texts), batch_size): batch_texts texts[i:i batch_size] response client.embeddings.create( modelQwen3-Embedding-0.6B, inputbatch_texts ) # 提取嵌入向量 batch_embeddings [item.embedding for item in response.data] embeddings.extend(batch_embeddings) print(f已处理 {min(i batch_size, len(texts))}/{len(texts)} 个文本) return np.array(embeddings) # 生成所有文本的嵌入向量 print(开始生成嵌入向量...) embeddings get_embeddings(texts) print(f嵌入向量形状: {embeddings.shape}) # 应该是 (文本数量, 384)这里有几个实用技巧批量处理一次处理多个文本比一个个处理快得多进度显示在处理大量数据时显示进度方便监控错误处理实际项目中应该添加重试机制和错误处理4.3 训练分类器有了嵌入向量我们就可以训练一个分类器了。这里我推荐使用逻辑回归因为它简单、快速而且在小样本上效果不错。from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from sklearn.metrics import classification_report # 将标签转换为数字 label_encoder LabelEncoder() encoded_labels label_encoder.fit_transform(labels) print(类别映射:, dict(zip(label_encoder.classes_, range(len(label_encoder.classes_))))) # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split( embeddings, encoded_labels, test_size0.2, random_state42, stratifyencoded_labels ) print(f训练集大小: {len(X_train)}, 测试集大小: {len(X_test)}) # 训练逻辑回归分类器 print(开始训练分类器...) classifier LogisticRegression(max_iter1000, random_state42) classifier.fit(X_train, y_train) # 在测试集上评估 y_pred classifier.predict(X_test) print(\n分类报告:) print(classification_report(y_test, y_pred, target_nameslabel_encoder.classes_))如果数据量足够你可能会看到类似这样的结果precision recall f1-score support 体育 0.95 0.90 0.92 20 科技 0.88 0.93 0.90 15 财经 0.92 0.88 0.90 17 娱乐 0.90 0.95 0.92 19 accuracy 0.91 71 macro avg 0.91 0.91 0.91 71 weighted avg 0.91 0.91 0.91 714.4 保存和加载分类模型训练好的模型需要保存下来方便后续使用。import joblib import json from datetime import datetime def save_classification_model(model, encoder, feature_namesNone, metadataNone): 保存分类模型和相关配置 Args: model: 训练好的分类器 encoder: 标签编码器 feature_names: 特征名称可选 metadata: 元数据信息可选 # 创建保存目录 import os timestamp datetime.now().strftime(%Y%m%d_%H%M%S) save_dir fclassification_model_{timestamp} os.makedirs(save_dir, exist_okTrue) # 保存模型 model_path os.path.join(save_dir, classifier.pkl) joblib.dump(model, model_path) # 保存编码器 encoder_path os.path.join(save_dir, label_encoder.pkl) joblib.dump(encoder, encoder_path) # 保存配置信息 config { model_type: type(model).__name__, feature_dimension: embeddings.shape[1], classes: encoder.classes_.tolist(), created_at: timestamp, metadata: metadata or {} } config_path os.path.join(save_dir, config.json) with open(config_path, w, encodingutf-8) as f: json.dump(config, f, ensure_asciiFalse, indent2) print(f模型已保存到: {save_dir}) return save_dir # 保存模型 model_dir save_classification_model( modelclassifier, encoderlabel_encoder, metadata{ dataset: 新闻分类示例, embedding_model: Qwen3-Embedding-0.6B, num_samples: len(texts) } )5. 构建完整的分类系统5.1 创建分类管道现在我们把所有组件组合起来创建一个完整的分类管道。class TextClassifier: 文本分类器 def __init__(self, embedding_client, model_path, encoder_path, config_path): 初始化分类器 Args: embedding_client: OpenAI兼容的嵌入客户端 model_path: 分类模型路径 encoder_path: 标签编码器路径 config_path: 配置文件路径 self.client embedding_client self.classifier joblib.load(model_path) self.label_encoder joblib.load(encoder_path) with open(config_path, r, encodingutf-8) as f: self.config json.load(f) print(f加载分类器成功支持 {len(self.label_encoder.classes_)} 个类别) print(类别:, self.label_encoder.classes_) def predict(self, text: str, return_prob: bool False): 预测单个文本的类别 Args: text: 输入文本 return_prob: 是否返回概率 Returns: 预测结果 # 获取嵌入向量 response self.client.embeddings.create( modelQwen3-Embedding-0.6B, inputtext ) embedding np.array([response.data[0].embedding]) # 预测 if return_prob: probabilities self.classifier.predict_proba(embedding)[0] result { prediction: self.label_encoder.inverse_transform([self.classifier.predict(embedding)[0]])[0], probabilities: { cls: float(prob) for cls, prob in zip(self.label_encoder.classes_, probabilities) } } else: prediction self.classifier.predict(embedding)[0] result self.label_encoder.inverse_transform([prediction])[0] return result def predict_batch(self, texts: List[str], batch_size: int 32): 批量预测 Args: texts: 文本列表 batch_size: 批处理大小 Returns: 预测结果列表 all_predictions [] for i in range(0, len(texts), batch_size): batch_texts texts[i:i batch_size] # 批量获取嵌入 response self.client.embeddings.create( modelQwen3-Embedding-0.6B, inputbatch_texts ) batch_embeddings np.array([item.embedding for item in response.data]) # 批量预测 batch_predictions self.classifier.predict(batch_embeddings) batch_labels self.label_encoder.inverse_transform(batch_predictions) all_predictions.extend(batch_labels) return all_predictions # 使用示例 classifier TextClassifier( embedding_clientclient, model_pathf{model_dir}/classifier.pkl, encoder_pathf{model_dir}/label_encoder.pkl, config_pathf{model_dir}/config.json ) # 测试分类器 test_texts [ 人工智能技术快速发展改变各行各业, 篮球明星签约新球队合同金额创纪录, 电影票房再创新高观众评价两极分化, 央行货币政策调整影响金融市场 ] print(批量预测结果:) for text, pred in zip(test_texts, classifier.predict_batch(test_texts)): print(f文本: {text[:30]}...) print(f预测类别: {pred}) print(- * 50)5.2 添加缓存机制在实际应用中我们经常需要对相同的文本重复分类。添加缓存可以显著提高性能。from functools import lru_cache import hashlib class CachedTextClassifier(TextClassifier): 带缓存的文本分类器 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._cache {} self.cache_hits 0 self.cache_misses 0 def _get_text_hash(self, text: str) - str: 生成文本的哈希值用于缓存键 return hashlib.md5(text.encode(utf-8)).hexdigest() def predict(self, text: str, return_prob: bool False, use_cache: bool True): 带缓存的预测 Args: text: 输入文本 return_prob: 是否返回概率 use_cache: 是否使用缓存 if not use_cache: return super().predict(text, return_prob) text_hash self._get_text_hash(text) cache_key f{text_hash}_{return_prob} if cache_key in self._cache: self.cache_hits 1 return self._cache[cache_key] self.cache_misses 1 result super().predict(text, return_prob) self._cache[cache_key] result # 简单的缓存统计 if (self.cache_hits self.cache_misses) % 100 0: hit_rate self.cache_hits / (self.cache_hits self.cache_misses) * 100 print(f缓存命中率: {hit_rate:.1f}%) return result def get_cache_stats(self): 获取缓存统计信息 total self.cache_hits self.cache_misses hit_rate self.cache_hits / total * 100 if total 0 else 0 return { cache_hits: self.cache_hits, cache_misses: self.cache_misses, hit_rate: hit_rate, cache_size: len(self._cache) }5.3 创建Web API服务为了让其他系统也能使用我们的分类器我们可以创建一个简单的Web API。from flask import Flask, request, jsonify app Flask(__name__) # 全局分类器实例 classifier None def init_classifier(): 初始化分类器 global classifier # 这里应该是你的模型路径 model_dir your_model_directory classifier CachedTextClassifier( embedding_clientclient, model_pathf{model_dir}/classifier.pkl, encoder_pathf{model_dir}/label_encoder.pkl, config_pathf{model_dir}/config.json ) print(分类器初始化完成) app.route(/classify, methods[POST]) def classify_text(): 分类接口 try: data request.get_json() if not data or text not in data: return jsonify({error: 缺少text参数}), 400 text data[text] return_prob data.get(return_prob, False) result classifier.predict(text, return_probreturn_prob) response { text: text, prediction: result if not return_prob else result[prediction] } if return_prob and isinstance(result, dict): response[probabilities] result[probabilities] return jsonify(response) except Exception as e: return jsonify({error: str(e)}), 500 app.route(/classify_batch, methods[POST]) def classify_batch(): 批量分类接口 try: data request.get_json() if not data or texts not in data: return jsonify({error: 缺少texts参数}), 400 texts data[texts] if not isinstance(texts, list): return jsonify({error: texts必须是列表}), 400 predictions classifier.predict_batch(texts) results [] for text, pred in zip(texts, predictions): results.append({ text: text, prediction: pred }) return jsonify({results: results}) except Exception as e: return jsonify({error: str(e)}), 500 app.route(/health, methods[GET]) def health_check(): 健康检查接口 return jsonify({ status: healthy, model: Qwen3-Embedding-0.6B Classifier, cache_stats: classifier.get_cache_stats() if classifier else None }) if __name__ __main__: init_classifier() app.run(host0.0.0.0, port8080, debugFalse)启动服务后你就可以通过HTTP请求来使用分类器了# 单个文本分类 curl -X POST http://localhost:8080/classify \ -H Content-Type: application/json \ -d {text: 人工智能最新进展, return_prob: true} # 批量分类 curl -X POST http://localhost:8080/classify_batch \ -H Content-Type: application/json \ -d {texts: [体育新闻, 科技动态, 财经报道]}6. 实际应用中的优化技巧6.1 处理长文本Qwen3-Embedding-0.6B有上下文长度限制。如果文本太长我们需要进行分段处理。def process_long_text(text: str, max_length: int 512) - str: 处理超长文本 Args: text: 输入文本 max_length: 最大长度字符数 Returns: 处理后的文本 if len(text) max_length: return text # 简单的方法截断 # return text[:max_length] # 更好的方法按句子分割保留完整句子 import re # 按句子分割简单的中文句子分割 sentences re.split(r[。!?], text) sentences [s.strip() for s in sentences if s.strip()] # 选择前面的句子直到达到最大长度 selected_sentences [] current_length 0 for sentence in sentences: if current_length len(sentence) max_length: selected_sentences.append(sentence) current_length len(sentence) else: break return 。.join(selected_sentences) 。 # 或者使用滑动窗口的方法 def get_chunk_embeddings(text: str, chunk_size: int 500, overlap: int 50): 获取长文本的分块嵌入 Args: text: 长文本 chunk_size: 每个块的大小 overlap: 块之间的重叠长度 Returns: 各块的嵌入向量 chunks [] # 创建重叠的文本块 for i in range(0, len(text), chunk_size - overlap): chunk text[i:i chunk_size] if chunk: chunks.append(chunk) # 获取每个块的嵌入 if not chunks: return np.array([]) embeddings [] for i in range(0, len(chunks), 32): # 批量处理 batch chunks[i:i 32] response client.embeddings.create( modelQwen3-Embedding-0.6B, inputbatch ) embeddings.extend([item.embedding for item in response.data]) return np.array(embeddings) # 对长文本进行分类时可以取各块分类结果的众数 def classify_long_text(text: str, classifier: TextClassifier) - str: 对长文本进行分类 chunks [] # 分割文本这里用简单的按长度分割实际可以用更好的方法 chunk_size 400 for i in range(0, len(text), chunk_size): chunks.append(text[i:i chunk_size]) if not chunks: return 未知 # 对每个块进行分类 predictions classifier.predict_batch(chunks) # 取出现次数最多的类别 from collections import Counter most_common Counter(predictions).most_common(1) return most_common[0][0] if most_common else 未知6.2 提高分类准确率如果你的分类效果不够理想可以尝试以下方法1. 数据增强def augment_training_data(texts, labels, augment_factor2): 简单的数据增强 Args: texts: 原始文本列表 labels: 对应标签 augment_factor: 增强倍数 Returns: 增强后的文本和标签 augmented_texts texts.copy() augmented_labels labels.copy() # 这里可以添加各种数据增强方法 # 例如同义词替换、随机删除、随机交换等 # 简单的示例添加一些变体 for text, label in zip(texts, labels): # 可以添加文本的变体 if 。 in text: parts text.split(。) if len(parts) 1: # 改变句子顺序 new_text 。.join(parts[::-1]) augmented_texts.append(new_text) augmented_labels.append(label) return augmented_texts, augmented_labels2. 使用更复杂的分类器from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier from sklearn.neural_network import MLPClassifier def train_different_classifiers(X_train, y_train, X_test, y_test): 尝试不同的分类器 classifiers { 逻辑回归: LogisticRegression(max_iter1000), 支持向量机: SVC(probabilityTrue), 随机森林: RandomForestClassifier(n_estimators100), 神经网络: MLPClassifier(hidden_layer_sizes(100, 50), max_iter500) } results {} for name, clf in classifiers.items(): print(f训练 {name}...) clf.fit(X_train, y_train) accuracy clf.score(X_test, y_test) results[name] accuracy print(f{name} 准确率: {accuracy:.4f}) return results3. 特征工程def enhance_features(embeddings, texts): 增强特征结合嵌入向量和其他特征 Args: embeddings: 嵌入向量 texts: 原始文本 Returns: 增强后的特征 import numpy as np # 添加文本长度特征归一化 text_lengths np.array([len(text) for text in texts]).reshape(-1, 1) text_lengths (text_lengths - text_lengths.mean()) / text_lengths.std() # 添加关键词特征示例 # 这里可以根据你的领域添加特定的关键词 # 合并特征 enhanced np.hstack([embeddings, text_lengths]) return enhanced6.3 监控和评估在生产环境中我们需要持续监控分类器的表现。class ClassificationMonitor: 分类器监控器 def __init__(self): self.predictions [] self.true_labels [] self.confidence_scores [] def record_prediction(self, text, prediction, true_labelNone, confidenceNone): 记录预测结果 self.predictions.append({ text: text, prediction: prediction, true_label: true_label, confidence: confidence, timestamp: datetime.now().isoformat() }) if true_label is not None: self.true_labels.append(true_label) if confidence is not None: self.confidence_scores.append(confidence) def get_accuracy(self): 计算准确率需要有真实标签 if not self.true_labels: return None correct sum(1 for i, pred in enumerate(self.predictions) if pred[true_label] is not None and pred[prediction] pred[true_label]) total sum(1 for pred in self.predictions if pred[true_label] is not None) return correct / total if total 0 else 0 def get_confidence_stats(self): 获取置信度统计 if not self.confidence_scores: return None scores np.array(self.confidence_scores) return { mean: float(scores.mean()), std: float(scores.std()), min: float(scores.min()), max: float(scores.max()) } def find_low_confidence_samples(self, threshold0.7): 找出低置信度的样本 low_confidence [] for pred in self.predictions: if pred[confidence] is not None and pred[confidence] threshold: low_confidence.append(pred) return low_confidence def export_report(self, filepath): 导出报告 report { summary: { total_predictions: len(self.predictions), accuracy: self.get_accuracy(), confidence_stats: self.get_confidence_stats() }, predictions: self.predictions } with open(filepath, w, encodingutf-8) as f: json.dump(report, f, ensure_asciiFalse, indent2) print(f报告已导出到: {filepath})7. 总结通过这篇教程我们完成了一个完整的文本分类系统搭建过程。从Qwen3-Embedding-0.6B的部署到文本嵌入向量的生成再到分类器的训练和部署每一步都有详细的代码示例。7.1 关键要点回顾模型选择Qwen3-Embedding-0.6B虽然体积小但在文本分类任务上表现优秀特别适合资源有限或需要快速响应的场景。流程标准化我们建立了一个标准化的文本分类流程文本→嵌入向量→分类器→结果。这个流程可以复用到各种文本分类任务中。工程化考虑除了基础功能我们还考虑了缓存、批处理、错误处理、监控等工程化问题让系统更加健壮。可扩展性系统设计考虑了扩展性你可以轻松更换分类器、添加新的特征、或者集成到更大的系统中。7.2 下一步建议如果你已经完成了基础版本可以考虑以下进阶方向性能优化使用GPU加速嵌入生成实现异步处理提高并发能力添加更智能的缓存策略功能增强支持多标签分类一个文本属于多个类别添加不确定性估计当模型不确定时请求人工审核实现在线学习让模型能够持续改进系统集成将分类服务容器化使用Docker部署添加API认证和限流集成到现有的业务系统中领域适配在你的特定领域数据上微调嵌入模型针对领域特点设计专门的预处理和后处理逻辑建立领域特定的评估指标文本分类是一个看似简单但实际应用广泛的任务。通过Qwen3-Embedding-0.6B和合适的分类器组合你可以在很多场景中快速获得不错的效果。最重要的是开始实践在实际数据上测试和调整找到最适合你需求的方案。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2499316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…