文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
大家好,我是微学AI,今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架,我们提供了样例代码,以帮助读者更好地理解和实践。该系统具有广泛的适用性,可应用于文献检索、短视频推荐、站内搜索等多个场景,为用户提供高效准确的检索服务。本文旨在为相关领域的研究者和开发者提供一个实用的教程,助力他们在文本语义检索领域取得更好的成果。
文章目录
- 一、文本语义检索系统概述
- 1.1 文本语义检索系统概念
- 1.1.1 重要性与应用价值
- 1.1.1.1 文献检索
- 1.1.1.2 短视频推荐
- 1.1.1.3 站内搜索
- 1.2 与传统检索系统的区别
- 1.3 搭建文本语义检索系统的需求背景
- 二、召回系统详解
- 2.1 召回系统在文本语义检索中的作用
- 2.1.1 基本原理与目标
- 2.1.2 召回策略分析
- 2.2 如何搭建召回系统
- 2.2.1 抽取向量进行检索
- 2.2.2 使用Milvus搭建召回系统
- 2.2.2.1 Milvus简介
- 2.2.2.2 具体步骤
- 2.2.2.3 关键要点
- 2.3 代码实现
- 三、排序系统解析
- 3.1 排序系统的核心地位
- 3.2 核心排序算法与技术
- 3.2.1 基于向量空间模型的排序
- 3.2.2 学习到的排序模型
- 3.2.3 LambdaMART与梯度提升树
- 3.3 优化排序结果的策略
- 3.3.1 特征工程
- 3.3.2 在线学习与反馈机制
- 3.3.3 多任务学习与跨域适配
- 3.4 结论
- 四、代码示例与实践
- 4.1 使用PyTorch构建文本嵌入模型
- 4.1.1 文本预处理
- 4.1.2 构建BERT模型进行嵌入
- 4.2 召回系统实现
- 4.2.1 数据准备与索引构建
- 4.2.2 召回逻辑
- 4.3 排序系统实现
- 4.4 实践案例:文献检索系统
- 五、应用场景与未来展望
- 5.1 文献检索
- 5.2 短视频推荐
- 5.3 站内搜索
- 5.4 未来展望与改进方向
- 5.4.1 高级语义理解
- 5.4.2 多模态融合
- 5.4.3 实时性与效率
- 5.4.4 用户隐私保护
- 5.4.5 可解释性
一、文本语义检索系统概述
在信息爆炸的数字化时代,有效、快速地从海量数据中获取所需信息成为一项至关重要的能力。文本语义检索系统正是在此背景下应运而生的关键技术,它通过深入理解文本的含义而非简单匹配关键词,极大地提升了信息检索的准确性和效率。本文将深入探讨文本语义检索系统的概念、重要性及其与传统检索系统的本质区别,并阐述其在多场景应用中的价值。
1.1 文本语义检索系统概念
文本语义检索系统是一种高级的信息处理技术,它利用自然语言处理(NLP)、深度学习和机器学习算法来理解文本的深层意义,而不仅仅是基于关键词的匹配。这种系统能够识别语境、理解词汇的多重含义、捕捉文本间的关系,从而提供更加精准和人性化的搜索结果。与之相对的是传统检索系统,后者主要依赖于关键词匹配、布尔逻辑或词频-逆文档频率(TF-IDF)等方法,往往忽视了语句的真实意图和上下文关联。
1.1.1 重要性与应用价值
1.1.1.1 文献检索
在学术研究领域,文本语义检索系统能够帮助研究人员快速定位到相关度极高的论文和资料,即便是面对复杂的学术术语和概念也能准确理解,极大提高了科研效率和知识发现的广度与深度。
1.1.1.2 短视频推荐
社交媒体和视频平台上,文本语义检索技术被用于理解视频标题、描述以及用户评论,以此为基础进行个性化内容推荐,确保内容与用户兴趣高度匹配,增强用户体验,同时提升平台的用户黏性和活跃度。
1.1.1.3 站内搜索
电商平台、新闻网站及企业内部知识库等广泛采用文本语义检索系统优化站内搜索功能,使用户能更快找到想要的产品、文章或信息,提升转化率和用户满意度。
1.2 与传统检索系统的区别
传统的信息检索系统基于关键词匹配,易受噪声干扰,对同义词、多义词处理不足,往往导致检索结果宽泛且不精确。相比之下,文本语义检索系统通过深度学习模型(如BERT、Transformer)对文本进行嵌入表示,捕捉词汇之间的语义关系和上下文依赖,从而能够提供更精确、贴近用户需求的结果。此外,语义检索系统还能适应用户的模糊查询,理解查询背后的真正意图,提升了交互体验。
1.3 搭建文本语义检索系统的需求背景
随着互联网数据的指数级增长,信息过载问题日益严重,用户越来越期望能够得到即时且高度相关的搜索反馈。传统检索系统因技术局限难以满足这一需求,促使技术革新,推动了文本语义检索系统的快速发展。此外,人工智能与大数据技术的成熟为语义理解提供了坚实基础,使得构建高精度、高效能的文本语义检索系统成为可能。为了在激烈的市场竞争中保持优势,无论是学术机构、互联网公司还是传统行业,都迫切需要搭建并不断优化文本语义检索系统,以提升服务质量和用户满意度。
文本语义检索系统不仅在技术层面上代表了信息检索领域的重大进步,也在应用层面展现了其无可比拟的价值和潜力,成为连接人与信息的桥梁,深刻影响着我们的生活与工作方式。随着技术的持续演进和应用场景的不断拓展,文本语义检索系统的未来无疑将更加广阔且充满无限可能。
二、召回系统详解
在文本语义检索系统中,召回系统(Recall System)扮演着至关重要的角色,其核心任务是尽可能全面地从大规模数据库中筛选出与用户查询最相关的候选文档集。召回阶段的高效与精准直接关系到后续排序环节的效果及最终用户的检索体验。本部分将深入探讨召回系统的工作原理、常见策略,以及利用Milvus搭建召回系统的实践路径。
2.1 召回系统在文本语义检索中的作用
2.1.1 基本原理与目标
召回系统的主要目标是在确保高召回率的同时,尽可能降低误召回,即在初次筛选中不遗漏任何潜在相关文档。它通过快速检索技术,依据查询与文档间的相似度评估,从海量文档库中提取出一个初步的候选集。在这个过程中,语义理解成为关键,系统需能理解查询的真正意图并映射到文档空间中,这通常涉及深度学习模型来提取文本特征,转化为高维向量表示。
2.1.2 召回策略分析
召回策略多种多样,常见的有布尔模型、向量空间模型、概率模型及近年来兴起的基于深度学习的语义匹配模型。
- 布尔模型:简单直观,但难以处理模糊查询和语义匹配问题。
- 向量空间模型:将文档和查询映射到同一向量空间,通过计算向量间距离衡量相似度,适用于表达文档主题的检索。
- 概率模型:如BM25,通过统计方法估计文档与查询的相关性概率。
- 深度学习模型:如BERT、Transformer等,通过预训练模型理解文本的深层语义,提升召回精度。
2.2 如何搭建召回系统
2.2.1 抽取向量进行检索
构建召回系统的核心在于高效准确地将文本转换为高维向量,这一步骤通常涉及以下流程:
- 特征提取:使用NLP模型(如BERT)对文档和查询进行编码,得到语义丰富的向量表示。
- 索引构建:将提取的向量存储至高性能的向量搜索引擎中,以支持快速近似最近邻(ANN)检索。这里,Milvus作为一个开源的向量数据库,因其强大的向量存储与检索能力而备受青睐。
2.2.2 使用Milvus搭建召回系统
2.2.2.1 Milvus简介
Milvus 是一款专为大规模向量数据设计的分布式搜索引擎,支持PB级数据存储与毫秒级检索速度。它提供了灵活的API接口,便于开发者集成到现有系统中,实现高效的向量相似性搜索。
2.2.2.2 具体步骤
- 环境准备:安装Python环境与Milvus服务,确保依赖库已就绪。
- 数据预处理:对原始文本进行清洗,利用预训练模型提取文本特征,转化为向量。
- 创建集合:在Milvus中创建一个集合以存储文档向量,定义好向量维度、主键等属性。
- 插入向量:将处理好的向量数据批量插入到Milvus集合中。
- 构建索引:选择合适的索引类型(如IVF_FLAT、IVF_SQ8等)加速检索过程。
- 执行查询:接收用户查询,同样转换为向量后,调用Milvus的搜索接口获取最相似的文档ID列表。
- 结果返回:根据返回的文档ID,从原始数据库中取出对应文档,作为召回结果。
2.2.2.3 关键要点
- 性能调优:根据数据规模和查询需求,合理选择索引类型和参数,平衡内存使用与检索速度。
- 数据更新:设计机制处理文档增删改,确保检索结果的新鲜度。
- 分布式部署:针对大规模数据应用,考虑Milvus的分布式部署,提升系统稳定性与扩展性。
2.3 代码实现
首先,确保已经安装了pymilvus库,这是Milvus的官方Python SDK。可以通过pip安装:
pip install pymilvus
接着,我们可以开始编写代码来实现上述的功能:
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility# 1. 连接到Milvus服务
connections.connect("default", host="localhost", port="19530")# 2. 定义集合模式
field_id = FieldSchema(name="id", dtype=DataType.INT64, descrition="int64", is_primary=True, auto_id=True)
field_vector = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, descrition="float vector", dim=128)
schema = CollectionSchema(fields=[field_id, field_vector], description="collection description")# 3. 创建集合
collection_name = "my_collection"
if not utility.has_collection(collection_name):collection = Collection(name=collection_name, schema=schema)# 4. 插入向量数据
import numpy as np
num_vectors = 1000
vectors = [[np.random.random(128) for _ in range(num_vectors)]]
collection.insert([vectors])# 5. 构建索引
index_param = {"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 128}}
collection.create_index(field_name="embedding", index_params=index_param)# 6. 执行查询
query_vector = [np.random.random(128).tolist()]
search_param = {"data": query_vector, "anns_field": "embedding", "param": {"metric_type": "L2", "params": {"nprobe": 10}}, "limit": 10}
result = collection.search(**search_param)# 7. 处理查询结果
for hits in result:for hit in hits:print(f"Found vector: {hit.entity.get('embedding')}, with distance: {hit.distance}")
这段代码实现了与Milvus的基本交互,包括连接服务、创建集合、插入数据、建立索引以及执行查询等操作。在实际应用中,你还需要根据具体的业务场景调整数据处理逻辑、优化索引配置等。
三、排序系统解析
在文本语义检索系统中,排序系统扮演着至关重要的角色,它直接决定了用户获取信息的效率与满意度。排序系统负责在召回阶段产生的候选文档中,依据相关性对这些文档进行精细排序,以确保最相关的文档出现在结果的最前端。本文将深入探讨排序系统的工作机制、核心算法技术及优化策略,从而揭示其如何助力提升检索准确度。
3.1 排序系统的核心地位
排序系统是连接用户查询与检索结果的桥梁,它基于复杂的算法逻辑,对召回阶段产生的大量文档进行二次筛选和排序。与召回系统的广撒网策略不同,排序系统追求的是精确制导,通过深入分析文档内容与查询意图的匹配程度,确保最终展示的文档既全面又精准。在信息过载的时代,高效的排序机制能显著提升用户体验,降低用户找到所需信息的成本。
3.2 核心排序算法与技术
3.2.1 基于向量空间模型的排序
向量空间模型(VSM)是一种经典方法,它将文档和查询转换为高维向量空间中的点,通过计算两点间的距离(如余弦相似度)来衡量相关性。VSM简单直观,但面对大规模数据集和复杂语义时,效果受限。
3.2.2 学习到的排序模型
近年来,机器学习尤其是深度学习技术的发展,为排序系统带来了革命性的改变。如深度神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN)及变换器(Transformer)等模型被用于学习查询与文档之间的复杂关系。这些模型能够捕捉词汇的上下文信息,理解语义,从而在更高层次上进行相关性评估。
3.2.3 LambdaMART与梯度提升树
LambdaMART是一种基于梯度提升决策树的排序算法,广泛应用于信息检索领域。它通过优化预测的排序列表与真实排序列表之间的损失函数(如NDCG),不断迭代学习排序模型。LambdaMART的优势在于能处理特征间的非线性关系,提供更细腻的排序结果。
3.3 优化排序结果的策略
3.3.1 特征工程
特征是排序模型的基石。有效的特征工程包括选择、构造与组合特征,如查询词频、文档长度、点击率等。合理的特征设计能显著增强模型的表达能力,提高排序精度。
3.3.2 在线学习与反馈机制
在线学习允许排序系统根据用户行为(如点击、停留时间等)动态调整模型权重,实现自我优化。结合实时反馈机制,系统可以快速响应用户需求的变化,持续提升检索质量。
3.3.3 多任务学习与跨域适配
在多任务学习框架下,排序系统不仅能优化主要的检索任务,还能学习辅助任务(如分类、情感分析)的知识,促进模型泛化能力。此外,跨域适配技术帮助模型在不同数据域之间迁移学习,提高在新场景下的表现。
3.4 结论
排序系统作为文本语义检索的“精炼厂”,其效能直接关乎整个检索体系的成败。通过不断演进的算法技术与优化策略,如深度学习模型的应用、精细化的特征工程、实时反馈学习机制等,我们可以不断提升检索的准确性与用户体验。未来,随着AI技术的持续突破,排序系统将更加智能化、个性化,更好地服务于多元化信息检索场景。
四、代码示例与实践
本部分我们将深入代码层面,通过一个实用的示例展示如何利用PyTorch框架实现一个文本语义检索系统。此系统将涵盖召回和排序两个核心环节,旨在通过实际操作加深对前文理论的理解,并为读者提供可直接应用于项目的代码模板。
4.1 使用PyTorch构建文本嵌入模型
4.1.1 文本预处理
在开始编码之前,首先进行文本预处理。这一步骤涉及分词、去除停用词、词干提取等操作。为了简化示例,我们假设文本已经经过了基础预处理,直接进入特征提取阶段。
4.1.2 构建BERT模型进行嵌入
import torch
from transformers import BertModel, BertTokenizertokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')def get_text_embedding(text):inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True)with torch.no_grad():embeddings = model(**inputs)['pooler_output']return embeddings.numpy()
这段代码展示了如何使用Hugging Face的transformers库加载BERT模型,并通过它将文本转化为语义向量。get_text_embedding
函数接收文本输入,返回其对应的语义嵌入。
4.2 召回系统实现
4.2.1 数据准备与索引构建
假设我们有一批预处理好的文档集合,接下来构建召回系统的核心——索引库。这里使用Milvus作为向量数据库,存储文档的嵌入表示。
from pymilvus import connections, Collectionconnections.connect("default", host="localhost", port="19530")# 假设documents是文档列表,每个元素是一个字符串
documents_embeddings = [get_text_embedding(doc) for doc in documents]# 创建Milvus集合用于存储文档向量
collection_name = "text_embedding_collection"
fields = [{"name": "id", "type": "int64", "is_primary": True},{"name": "embedding", "type": "float_vector", "dim": 768}, # BERT的嵌入维度
]
collection = Collection(name=collection_name, fields=fields)# 插入文档向量
entities = [{"id": i, "embedding": emb} for i, emb in enumerate(documents_embeddings)]
collection.insert(entities)
collection.create_index("embedding", index_params={"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 1024}})
4.2.2 召回逻辑
接下来,实现基于用户查询的文档召回逻辑。
def recall(query_text, top_k=10):query_embedding = get_text_embedding(query_text).reshape(1, -1)results = collection.search(query_embedding, top_k=top_k, metric_type="L2")return [hit.id for hits in results[0] for hit in hits]
此函数接收查询文本,计算其嵌入,并在Milvus中执行最近邻搜索,返回最相关的文档ID列表。
4.3 排序系统实现
召回之后,我们需要进一步排序以提升结果的相关性。这里采用余弦相似度作为排序依据。
from scipy.spatial.distance import cosinedef rerank(query_text, candidate_ids):query_emb = get_text_embedding(query_text)scores = []for doc_id in candidate_ids:doc_text = documents[doc_id] # 假设documents是一个包含所有文档的列表doc_emb = get_text_embedding(doc_text)similarity = 1 - cosine(query_emb, doc_emb)scores.append((doc_id, similarity))# 按相似度降序排序sorted_scores = sorted(scores, key=lambda x: x[1], reverse=True)return [item[0] for item in sorted_scores]
4.4 实践案例:文献检索系统
设想一个学术文献检索场景,用户希望通过关键词快速找到与其研究主题相关的论文。利用上述代码框架,我们可以快速搭建一个原型系统。首先,对数据库中的每篇文献提取摘要或全文的语义嵌入并存储至Milvus。当用户提交查询时,系统执行召回,获取最接近的文档ID列表,再通过rerank函数进行精细排序,最终呈现给用户最相关的结果。
此实例不仅验证了代码实现的有效性,也展示了文本语义检索技术在提高信息检索效率和精度方面的潜力。
通过本节的代码示例与实践分析,读者应能理解如何将理论知识转换为实际应用,为进一步探索和优化文本语义检索系统奠定坚实基础。
五、应用场景与未来展望
文本语义检索系统作为信息时代的一项关键技术,其应用领域广泛且深远。本部分将深入探讨该系统在多个场景中的具体应用,并对未来的趋势与研究方向进行展望。
5.1 文献检索
在学术界与教育领域,文本语义检索系统对于提升文献检索效率与精确度具有重要意义。传统的关键词匹配检索往往因词汇多义性导致检索结果泛滥或遗漏关键文献。而语义检索技术通过深度理解查询意图与文献内容,能有效解决此问题。例如,利用BERT等预训练模型抽取文档及查询的语义表示,即便查询表述不完全精确,系统也能推荐高度相关的研究成果。未来,随着跨语言检索技术的进步,学者们将能更便捷地跨越语言障碍,获取全球范围内的学术资源。
5.2 短视频推荐
在短视频平台中,文本语义检索系统为个性化内容推荐提供强大支撑。系统不仅分析视频标题、描述等元数据,还能深入理解视频语音转文字内容及画面语义,综合用户行为数据构建个性化推荐模型。这种深度语义理解能力使得推荐更加精准,提升了用户体验和平台粘性。未来的研究可进一步探索情感分析、时序内容理解等高级特性,使推荐系统更懂用户的即时情绪与长期兴趣偏好。
5.3 站内搜索
电商、新闻门户等网站利用文本语义检索系统优化站内搜索体验,实现从“找到内容”到“找到正确内容”的转变。系统通过理解用户查询背后的真正需求,精确匹配商品描述、新闻报道等,即便用户输入的是非正式语言或模糊描述,也能返回满意结果。未来,结合用户画像与情境感知,站内搜索将进一步智能化,提供情景化搜索建议,预测并满足用户的潜在需求。
5.4 未来展望与改进方向
5.4.1 高级语义理解
随着人工智能技术的发展,文本语义检索系统将更加注重深层次语义理解与推理,如篇章理解、常识知识图谱融入等,以应对复杂查询和深层次信息挖掘的需求。
5.4.2 多模态融合
未来系统将不仅仅局限于文本,而是走向多模态融合检索,即整合文本、图像、音频等多种信息源,为用户提供全方位的信息检索服务。这要求算法在跨模态表示学习方面取得突破。
5.4.3 实时性与效率
面对海量数据,提升检索速度与处理实时数据的能力成为关键。采用更为高效的索引结构、分布式计算架构及硬件加速技术将是未来研究的重点。
5.4.4 用户隐私保护
在数据驱动的检索系统中,如何在保障用户隐私的同时提供个性化服务,是未来必须面对的挑战。研究如何在加密数据上进行有效检索、发展差分隐私等技术将是研究热点。
5.4.5 可解释性
提升系统的可解释性,让用户理解推荐或检索结果背后的逻辑,增强用户信任,也是未来发展的一个重要方向。这要求算法设计时不仅要追求性能,也要考虑透明度与可解释性。文本语义检索系统的应用场景广泛且不断拓展,其未来的发展将围绕更深层次的语义理解、多模态融合、高效处理与保护隐私等方向进行。随着这些技术的成熟与创新,文本语义检索系统将持续推动信息检索领域的进步,为用户提供更加智能、个性化的信息服务体验。
相关文章:

文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容
大家好,我是微学AI,今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架,我们提供了样例代码,以帮助读者更好地理解和实践。该系统具有广…...

redis在项目中运用(基础)
mysql学完命令之后,学过jdbc。 redis也要使用Java连接redis数据库 1.Jedis 2.RedisTemplate[重点] 1、Jedis【了解】 jedis是redis的java版本的客户端实现,jedis中提供了针对redis命令的操作 1.1导入jar文件 Maven方式 <dependency><group…...

libaom 源码分析系列:svc_encoder_rtc.cc 文件
源码函数关系 文件功能:实现 AV1 svc 编码的 RTC 功能 demo文件位置:libaom/examples/svc_encoder_rtc.cc文件内函数关系图: 结构体 AppInput:svc_encoder_rtc.cc 所属 demo 的结构体,作为从命令行接受参数的结构体;AvxVideoWriter:输出视频写入结构体;aom_codec_enc_c…...

MySQL备份和还原,用mysqldump、mysql和source命令来完成
MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成的。 mysqldump命令使用方法 1运行 | cmd |利用 cd C:\Program Files\MySQL\MySQL Server 9.0\bin”命令进入bin文件夹 2输入命令 mysqldump -h127.0.0.1 -P3306 -uroot -pQWERTY zssjkcf>d:123.sql mysqldump -…...

MySQL Server、HeidiSQL(MySQL 数据库工具)
目录 一、MySQL Server (一)官网下载 (二)安装与配置 二、HeidiSQL软件 (一)安装 1. 官网下载 2. 打开 3. 使用 (1)打开服务 (2)新增数据库 ÿ…...

矩阵相关算法
矩阵旋转90度 给定一个 n n 的二维矩阵 matrix 表示一个图像,请你将图像顺时针旋转 90 度。 #include <iostream> #include <vector>using namespace std;void rotate(vector<vector<int>>& matrix) {int n matrix.size();// 第一步…...

微信小程序-封装通用模块
文章目录 微信小程序-封装通用模块封装toast和modal封装storage封装网络请求 微信小程序-封装通用模块 封装toast和modal /** 提示消息框 */ function toast({title "数据加载中",icon "none",duration 2000,mask true, }) {wx.showToast({title,ico…...

Modnet 人像抠图(论文复现)
Modnet 人像抠图(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 Modnet 人像抠图(论文复现)论文概述论文方法复现WebUI部署 论文概述 人像抠图(Portrait matting)旨在预测一个精确的 alpha 抠图,可以用…...

利用session机制造测试账号,无需前端也可以测试后端接口
适用场景:我们在测试的时候经常会遇到前端还没有开发完毕,后端已经结束开发了,但是后端的有些接口是需要特定的账号身份调用才会生效,此时因为前端未开发完毕,所以我们不能通过web页面进行登录,那么如何解决…...

JAVA_18
JAVA_18 1.IO流2.JAVA_IO流3.标准输入输出4.对象序列化5.字符编码与字符集6.异常处理和资源关闭 1.IO流 IO流(Input/Output stream)是用于在程序和外部设备(如文件、网络等)之间进行数据传输的机制。它是Java中处理输入和输出操作的一种抽象方式。概念: 输入流(Input Stream):…...

Linux升级openssl版本
Linux升级openssl版本 服务器编译依赖库检查 $ yum -y install gcc gcc-c make libtool zlib zlib-devel版本检测 $ openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 $ ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013下载openssl 地址:https://www.o…...

多态对象的存储方案小结
某个类型有几种不同的子类,Jackson中的JsonTypeInfo 和JsonSubTypes可以应对这种情形,但有点麻烦,并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。用过一次这种方案后边就不想再用了。 …...

Linux 之 nano 编辑器
使用git提交的时候,发生冲突或要记录相关信息时会弹出nano这个编辑器。 nano [选项] [[行,列] 文件名]... nano[必要参数][选择参数][文件] 命令行白的部分是组合键,后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键,(M)表示…...

zipkin启动脚本并指定mysql数据存储
#!/bin/bash# 配置部分 ############################################################## Zipkin JAR 文件的名称 # 这里指定了 Zipkin 的可执行 JAR 文件,确保该文件在当前目录中可用。 ZIPKIN_JAR"zipkin-server-2.23.2-exec.jar"# PID 文件的位置 # 该…...

超越GPT-4的视觉与文本理解能力,开源多模态模型领跑者 - Molmo
Molmo是由艾伦人工智能研究所(Ai2)发布的一系列多模态人工智能模型,旨在提高开放系统在性能上与专有系统(如商业模型)之间的竞争力。以下是对Molmo的详细总结: Molmo是什么: Molmo是基于Qwen2和…...

输入输出--I/O流【C++提升】()
1.1基础知识: 在C中,输入输出(IO)流是通过标准库中的 <iostream> 头文件来处理的。C 提供了几种基本的输入输出流类,最常用的有以下几种: std::cin:用于输入。std::cout:用于…...

Maven 中央仓库地址推荐
目录 Maven 中央仓库地址推荐 Maven Maven 中央仓库概述 什么是 Maven 中央仓库? 中央仓库的作用 常用的 Maven 中央仓库地址 官方 Maven 中央仓库 阿里云 Maven 中央仓库镜像 腾讯云 Maven 中央仓库镜像 网易 Maven 中央仓库镜像 华为云 Maven 中央仓库…...

Fastgpt本地化部署 - 以MAC为例
1.认识fastgpt 2.私有化部署 MongoDB:用于存储除了向量外的各类数据PostgreSQL/Milvus:存储向量数据OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验) (1&a…...

SpringBoot框架下购物推荐网站的设计模式与实现
3系统分析 3.1可行性分析 通过对本东大每日推购物推荐网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本东大每日推购物推荐网站采用JAVA作为开发语言&…...

Apache Flink 和 Apache Kafka
Apache Flink 和 Apache Kafka 都是大数据生态系统中非常重要的工具,但它们的作用和应用场景有所不同。下面将分别介绍两者的主要特性和它们之间的异同点。 Apache Kafka 作用: 消息队列:Kafka 主要作为消息队列使用,用于解耦生…...

Excel中Ctrl+e的用法
重点:想要使用ctrle,前提是整合或拆分后的结果放置的单元格必须和被提取信息的单元格相邻,且被提取信息的单元格也必须相连。 下图为错误示例 这样则可以使用ctrle 1、信息整合 2、提取信息 3、添加符号 4、信息顺序调换 5、数字提取 crtle还…...

07-Cesium动态处理线条闪烁材质的属性
这段代码定义了 LineFlickerMaterialProperty 类,用于管理线条闪烁材质的属性。构造函数接收颜色和速度作为选项,类包含动态属性 isConstant 和 definitionChanged,以及获取材质类型和当前属性值的方法。getValue 方法返回颜色和速度的当前值,equals 方法用于比较两个实例是…...

postgresql16分区表解析
PostgreSQL 16 引入了对分区表的多项改进,增强了其性能和可用性。本文介绍PostgreSQL 16 中分区表功能,包括基本概念、创建方法、管理技巧以及一些最佳实践。 分区表的基本概念 分区表是一种将大表物理分割成更小、更易管理的部分的技术。每个部分称为…...

文字识别解决方案-OCR识别应用场景解析
光学字符识别(Optical Character Recognition, OCR)技术是一种将图像中的文字转换为可编辑和可搜索的数据的技术。随着人工智能和机器学习的发展,OCR技术的应用场景越来越广泛,为文字录入场景带来了革命性的变革,下面以…...

Qt 每日面试题 -9
81、请写一个调用消息对话框提示报错的程序 QMessageBox::waring(this,tr("警告"), tr("用户名或密码错误!"),QMessageBox::Yes)82、Qt都提供哪些标准对话框以供使用,他们实现什么功能? Qt提供9个标准对话框: QColorDialog 颜色对话框&…...

K8s环境下使用sidecar模式对EMQX的exhook.proto 进行流量代理
背景 在使用emqx作为mqtt时需要我们需要拦截client的各种行为,如连接,发送消息,认证等。除了使用emqx自带的插件机制。我们也可以用多语言-钩子扩展来实现这个功能,但是目前emqx仅仅支持单个grpc服务端的设置,所以会有…...

Dirble:一款高性能目录扫描与爬取工具
今天给大家介绍的是一款名叫Dirble工具,它是一款易于使用的高性能网站目录扫描工具。该工具针对Windows和Linux平台设计,在Dirble的帮助下,广大安全研究人员可以快速对目标站点进行目录扫描和资源爬取。 工具安装 广大研究人员可以使用下列…...

C#语言基础
GitHub - babbittry/Csharp-notes: C# 课程笔记https://github.com/babbittry/Csharp-notes?tabreadme-ov-file#net%E6%98%AF%E4%BB%80%E4%B9%88 C# 数据类型 | 菜鸟教程 (runoob.com)https://www.runoob.com/csharp/csharp-data-types.html 语法基础 一、命名空间、类、方…...

网络分析仪——提升网络性能的关键工具
目录 什么是网络分析仪? 1. 实时流量监控 2. 历史数据回溯分析 3. 网络性能关键指标监测 4. 可视化界面与报告生成 总结 在当今的数字化世界,网络的稳定性和性能直接影响企业的运营效率。网络拥堵、延迟和丢包等问题会导致用户体验的下降ÿ…...

简单认识Maven 1
1.基本概念 Maven 是一个开源的项目管理和构建工具,主要用于 Java 项目,但也支持其他基于 JVM(Java Virtual Machine)的项目,如 Scala、Groovy 等。它基于项目对象模型(Project Object Model,P…...