当前位置: 首页 > news >正文

本地大模型编程实战(02)语义检索(1)

文章目录

    • 准备
    • 加载文档
    • 分割文档
    • 嵌入
    • 矢量存储
    • 查询矢量库
      • 检索
      • 返回评分
      • 先嵌入查询文本再检索
    • 检索器
    • 总结
    • 代码


我们在百度、必应、谷歌等搜索引擎中使用的检索都是基于字符串的:用户输入字符串后,搜索引擎先对搜索内容进行分词,然后在已经进行了倒排索引的巨大数据库中找出最符合用户要求的结果。
语义检索与其主要的区别是:它根据文本的真正含义进行搜索,其基本思路是将待检索的内容都转变成矢量(这个过程也叫做嵌入),转化矢量的基本原则是:语义相近的内容距离更近、相似性更高。
当用户输入检索内容时,也是先把检索内容变成矢量,然后去矢量数据库中找到最相似的文档。这样检索出来的结果并不依据字面的意思,而是依据语义的相似度。

本文描述了如何使用 langchain大语言模型 以及 矢量数据库 完成pdf内容的语义检索。
在对内容进行矢量化时使用了 nomic-embed-text,这个模型个头小,英文嵌入效果不错。
后面还将涉及到以下内容:

  • 文档和文档加载器
  • 文本分割器
  • 嵌入
  • 向量存储和检索器

准备

在正式开始撸代码之前,需要准备一下编程环境。

  1. 计算机
    本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:

    • CPU: Intel i5-8400 2.80GHz
    • 内存: 16GB
  2. Visual Studio Code 和 venv
    这是很受欢迎的开发工具,相关文章的代码可以在 Visual Studio Code 中开发和调试。 我们用 pythonvenv 创建虚拟环境, 详见:
    在Visual Studio Code中配置venv。

  3. Ollama
    Ollama 平台上部署本地大模型非常方便,基于此平台,我们可以让 langchain 使用 llama3.1qwen2.5 等各种本地大模型。详见:
    在langchian中使用本地部署的llama3.1大模型 。

加载文档

LangChain 实现了 Document 抽象,可以把pdf、csv、html等各种文件加载成为 Document。它具有三个属性:

  • page_content:表示内容的字符串;
  • metadata:包含任意元数据的字典;
  • id:(可选)文档的字符串标识符。
    metadata属性可以捕获有关文档来源、其与其他文档的关系以及其他信息的信息。请注意,单个 Document 不一定是加载前源文件的完整的段落,它通常只是其一部分。
    下面是加载pdf文档的代码:
def load_file(file_path):"""加载pdf文件"""    # Loading documentsfrom langchain_community.document_loaders import PyPDFLoaderloader = PyPDFLoader(file_path)docs = loader.load()print(f'加载文件成功,总文本数:{len(docs)}')# PyPDFLoader loads one Document object per PDF page. The first page is at index 0.print(f"page one:\n{docs[0].page_content[:200]}\n")print(f'page one metadata:\n{docs[0].metadata}')return docs

执行此方法后,我们可以看到已加载文档的基本结构:

page one:
Table of Contents
UNITED STATES
SECURITIES AND EXCHANGE COMMISSION
Washington, D.C. 20549
FORM 10-K
(Mark One)
☑  ANNUAL REPORT PURSUANT TO SECTION 13 OR 15(D) OF THE SECURITIES EXCHANGE ACT OF 1934
Fpage one metadata:
{'source': 'E:\\project\\my_opensource\\programming-with-local-large-language-model-gitee\\server\\services\\practice\\assert/nke-10k-2023.pdf', 'page': 0, 'page_label': '1'}

langchian 提供了大量的 Document Loader,详见:Document loaders 。

分割文档

如果以 Document 作为矢量化的单位,往往粒度太粗糙,在问答等场景中,不容易找到理想的结果;下面将进一步将这些 Document 进行智能拆分,此过程将尽量确保每一部分的含义不被周围的文本”冲淡“。
下面我们使用 RecursiveCharacterTextSplitter ,它将使用常用分隔符(如换行符)递归拆分文档,直到每个块的大小合适。其中的参数含义如下:

  • chunk_size=1000
    chunk_size 参数指定了每个文本块的大小。这里设置为1000,意味着每个分割后的文本块的长度大约为1000个字符。
  • chunk_overlap=200
    chunk_overlap 参数指定了每个文本块之间的重叠字符数。这里设置为200,意味着相邻的两个文本块之间有200个字符是重叠的。这样做的目的是为了确保一些跨块的上下文信息不会丢失,有助于更好地理解和处理文本。
  • add_start_index=True
    add_start_index 参数是一个布尔值,当设置为 True 时,分割器会在每个文本块中添加一个起始索引,这个索引表示该文本块在原始文档中的起始位置。这对于后续的文本处理和引用非常有用,可以方便地定位每个文本块在原始文档中的位置。
def split_text(docs):"""分割文档"""from langchain_text_splitters import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200, add_start_index=True)all_splits = text_splitter.split_documents(docs)print(f"Number of splits: {len(all_splits)}")  return all_splits

嵌入

向量搜索是存储和搜索非结构化数据(如非结构化文本)的常用方法。其理念是存储与文本相关的数字向量。给定一个查询,我们可以将其嵌入为相同维度的向量,并使用向量相似度指标(如余弦相似度)来识别相关文本。
这里我们使用 Ollamanomic-embed-text 模型做嵌入。

langchian 支持很多模型做嵌入,详见:Embedding models .

from langchain_ollama.embeddings import OllamaEmbeddings
embeddings = OllamaEmbeddings(model="nomic-embed-text")

矢量存储

我们这里简单使用 InMemoryVectorStore,它把矢量存储在内存中。

当然,我们也可以把矢量物理存储在磁盘里,以后随时使用,后面的文章我们将用 Chroma 演示这个过程。

def get_vector_store():"""获取内存矢量数据库"""from langchain_core.vectorstores import InMemoryVectorStorevector_store = InMemoryVectorStore(embeddings)file_path = get_file_path()docs = load_file(file_path)all_splits = split_text(docs)_ = vector_store.add_documents(documents=all_splits)return vector_store

查询矢量库

具有相似含义的文本生成的向量在几何上接近。我们只需传入一个问题即可检索相关信息,而无需了解文档中使用的任何特定关键词。

检索

定义检索方法:

def similarity_search(query):"""内存矢量数据库检索测试"""vector_store = get_vector_store()results = vector_store.similarity_search(query)return results

测试检索:

results = similarity_search("How many distribution centers does Nike have in the US?")
print(f'similarity_search results[0]:\n{results[0]}')
similarity_search results[0]:
page_content='direct to consumer operations sell products through the following number of retail stores in the United States:
U.S. RETAIL STORES NUMBER
NIKE Brand factory stores 213
NIKE Brand in-line stores (including employee-only stores) 74
Converse stores (including factory stores) 82
TOTAL 369
In the United States, NIKE has eight significant distribution centers. Refer to Item 2. Properties for further information.
2023 FORM 10-K 2' metadata={'source': 'E:\\project\\my_opensource\\programming-with-local-large-language-model-gitee\\server\\services\\practice\\assert/nke-10k-2023.pdf', 'page': 4, 'page_label': '5', 'start_index': 3125}

返回评分

定义检索方法:

def similarity_search_with_score(query):"""内存矢量数据库检索测试返回文档评分,分数越高,文档越相似。"""vector_store = get_vector_store()results = vector_store.similarity_search_with_score(query)return results

测试检索:

results = similarity_search_with_score("What was Nike's revenue in 2023?")
doc, score = results[0]
print(f"Score and doc: {score}\n{doc}")
Score and doc: 0.800869769173528
page_content='UNITED STATES MARKET
For fiscal 2023, NIKE Brand and Converse sales in the United States accounted for approximately 43% of total revenues, compared to 40% and 39% for fiscal 2022 and
fiscal 2021, respectively. We sell our products to thousands of retail accounts in the United States, including a mix of footwear stores, sporting goods stores, athletic
specialty stores, department stores, skate, tennis and golf shops and other retail accounts. In the United States, we utilize NIKE sales offices to solicit such sales. During
fiscal 2023, our three largest United States customers accounted for approximately 22% of sales in the United States.
Our NIKE Direct and Converse direct to consumer operations sell our products to consumers through various digital platforms. In addition, our NIKE Direct and Converse
direct to consumer operations sell products through the following number of retail stores in the United States:
U.S. RETAIL STORES NUMBER
NIKE Brand factory stores 213' metadata={'source': 'E:\\project\\my_opensource\\programming-with-local-large-language-model-gitee\\server\\services\\practice\\assert/nke-10k-2023.pdf', 'page': 4, 'page_label': '5', 'start_index': 2311}

先嵌入查询文本再检索

定义检索方法:

def embed_query(query):"""嵌入查询测试"""embedding = embeddings.embed_query(query)vector_store = get_vector_store()results = vector_store.similarity_search_by_vector(embedding)return results

测试检索:

results = embed_query("How were Nike's margins impacted in 2023?")
print(f'embed_query results[0]:\n{results[0]}') 
embed_query results[0]:
page_content='and 18% of total NIKE Brand footwear, respectively. For fiscal 2023, four footwear contract manufacturers each accounted for greater than 10% of footwear production
and in the aggregate accounted for approximately 58% of NIKE Brand footwear production.
As of May 31, 2023, our contract manufacturers operated 291 finished goods apparel factories located in 31 countries. For fiscal 2023, NIKE Brand apparel finished goods
were manufactured by 55 contract manufacturers, many of which operate multiple factories. The largest single finished goods apparel factory accounted for approximately
8% of total fiscal 2023 NIKE Brand apparel production. For fiscal 2023, factories in Vietnam, China and Cambodia manufactured approximately 29%, 18% and 16%
2023 FORM 10-K 3' metadata={'source': 'E:\\project\\my_opensource\\programming-with-local-large-language-model-gitee\\server\\services\\practice\\assert/nke-10k-2023.pdf', 'page': 5, 'page_label': '6', 'start_index': 3956}

检索器

LangChain VectorStore 对象不属于 Runnable 的子类。LangChain RetrieverRunnable,因此它们实现了一组标准方法(例如:同步和异步调用和批处理操作)。把VectorStore转换成Retriever 以后,对矢量数据库的处理就可以添加到LangChain的链里面,在实现RAG(Retrieval-Augmented Generation)等功能时很方便。

from typing import Listfrom langchain_core.documents import Document
from langchain_core.runnables import chain@chain
def retriever(query: str) -> List[Document]:vector_store = get_vector_store()return vector_store.similarity_search(query, k=1)def retriever_batch_1(query:List[str]):r = retriever.batch(query)return r

我们来测试一下:

query = ["How many distribution centers does Nike have in the US?","When was Nike incorporated?",
]results = retriever_batch_1(query)
print(f'retriever.batch 1:\n{results}')
retriever.batch 1:
[[Document(id='a26e4349-108c-4988-8502-ff9cce20cdf3', metadata={'source': 'E:\\project\\my_opensource\\programming-with-local-large-language-model-gitee\\server\\services\\practice\\assert/nke-10k-2023.pdf', 'page': 4, 'page_label': '5', 'start_index': 3125}, page_content='direct to consumer operations sell products through the following number of retail stores in the United States:\nU.S. RETAIL STORES NUMBER\nNIKE Brand factory stores 213 \nNIKE Brand in-line stores (including employee-only stores) 74 \nConverse stores (including factory stores) 82 \nTOTAL 369 \nIn the United States, NIKE has eight significant distribution centers. Refer to Item 2. Properties for further information.\n2023 FORM 10-K 2')], [Document(id='872d6f81-3aa1-4aaa-ba2d-2d4eac29e661', metadata={'source': 'E:\\project\\my_opensource\\programming-with-local-large-language-model-gitee\\server\\services\\practice\\assert/nke-10k-2023.pdf', 'page': 3, 'page_label': '4', 'start_index': 714}, page_content='and sales through our digital platforms (also referred to as "NIKE Brand Digital"), to retail accounts and to a mix of independent distributors, licensees and sales\nrepresentatives in nearly all countries around the world. We also offer interactive consumer services and experiences through our digital platforms. Nearly all of our\nproducts are manufactured by independent contractors. Nearly all footwear and apparel products are manufactured outside the United States, while equipment products\nare manufactured both in the United States and abroad.\nAll references to fiscal 2023, 2022, 2021 and 2020 are to NIKE, Inc.\'s fiscal years ended May 31, 2023, 2022, 2021 and 2020, respectively. Any references to other fiscal\nyears refer to a fiscal year ending on May 31 of that year.\nPRODUCTS\nOur NIKE Brand product offerings are aligned around our consumer construct focused on Men\'s, Women\'s and Kids\'. We also design products specifically for the Jordan')]]

Vectorstores 实现了一个 as_retriever 方法,该方法将生成一个 Retriever。我们可以用下面的代码实现与上述retriever_batch_1同样的功能:

def retriever_batch_2(query:List[str]):vector_store = get_vector_store()retriever = vector_store.as_retriever(search_type="similarity",search_kwargs={"k": 1},)r = retriever.batch(query)return r

总结

总的来说,分词检索更注重词语的表面匹配,而语义检索更注重对查询意图和文档内容的深层次理解。随着技术的发展,语义检索在处理复杂查询和提供更精准的信息方面显示出更大的优势。
langchian 像胶水,可以轻松的把矢量数据库以及大语言模型的能力整合在一起,快速形成稳定的应用。


代码

本文涉及的所有代码以及相关资源都已经共享,参见:

  • github
  • gitee

🪐祝好运🪐

相关文章:

本地大模型编程实战(02)语义检索(1)

文章目录 准备加载文档分割文档嵌入矢量存储查询矢量库检索返回评分先嵌入查询文本再检索 检索器总结代码 我们在百度、必应、谷歌等搜索引擎中使用的检索都是基于字符串的:用户输入字符串后,搜索引擎先对搜索内容进行分词,然后在已经进行了倒…...

使用 Redis 实现分布式锁的基本思路

使用 Redis 实现分布式锁的基本思路 在分布式系统中,多个进程或服务可能会同时访问共享资源(如数据库、缓存、文件等),这可能会导致数据不一致或并发冲突。Redis 由于其高性能和单线程模型,是实现分布式锁的一个常见选…...

SQL-leetcode—1193. 每月交易 I

1193. 每月交易 I 表:Transactions ---------------------- | Column Name | Type | ---------------------- | id | int | | country | varchar | | state | enum | | amount | int | | trans_date | date | ---------------------- id 是这个表的主键。 该表包含…...

【MYSQL】mysql 常用命令

文章目录 1. 数据库管理命令2. 表管理命令3. 数据操作命令4. 数据查询进阶5. 用户与权限管理6. 使用脚本操作数据库 1. 数据库管理命令 -- 查看所有数据库 SHOW DATABASES;-- 创建数据库 CREATE DATABASE 数据库名;-- 选择数据库 USE 数据库名;-- 删除数据库 DROP DATABASE 数…...

linux 内核学习方向以及职位

### 学习路径 1. 基础阶段: - C语言高级特性 - 指针和内存管理 - 数据结构实现 - 位操作 - 多线程编程 - Linux系统编程 - 文件I/O操作 - 进程管理 - 信号处理 - IPC机制 - Socket编程 - 必备知识 - 操作系统原理 - 计算机体系结构 - …...

DeepSeek火爆,参数量、激活参数 和 预训练 token 量 是什么?

最近DeepSeek火爆,爆出了几个关键参数,分别是参数量、激活参数 和 预训练 token 量。 这里用通俗的语言给大家解释一下~ 首先要知道1B 是 Billion(十亿)的缩写 参数量:671B(6710 亿) 想象你…...

设计新的 Kibana 仪表板布局以支持可折叠部分等

作者:来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能,同时为新的高级仪表板功能奠定了基础。 我们正在开…...

vscode如何安装vue语法支持

在VSCode中安装Vue语法支持非常简单。1、你需要安装“Vetur”扩展,这是一个专门为Vue.js开发设计的扩展;2、你可以通过VSCode的扩展市场轻松找到并安装它;3、安装完成后,你还可以根据需要进行一些配置,以优化你的开发体…...

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集(关键)!4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…...

easyexcel-导入(读取)(read)-示例及核心部件

文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象,new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler&…...

10 Hyperledger Fabric 介绍

简介 HypeLedger(超级账本)是由Linux基金会2015年创建的首个面向企业应用场景的开源分布式账本平台。 HypeLedger Fabric是HypeLedger种的区块链项目之一HypeLedger Fabric引入权限管理在架构设计上支持可插拔、可扩展是首个面向联盟链场景的开源项目 …...

第28章 测试驱动开发模式:深入绿条模式及相关技术

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...

PTMD2.0-疾病相关的翻译后修饰数据库

翻译后修饰(PTMs,post-translational modifications)通过调节蛋白质功能参与了几乎所有的生物学过程,而 PTMs 的异常状态常常与人类疾病相关。在此,PTMD 2.0展示与疾病相关的 PTMs 综合数据库,其中包含 93 …...

gradle生命周期钩子函数

文章目录 0. 总结表格1. 构建初始阶段gradle.settingsEvaluated()gradle.projectsLoaded() 2. 配置阶段gradle.beforeProject()gradle.afterProject()gradle.projectEvaluated()gradle.afterEvaluate()gradle.taskGraph.whenReady 3. 执行阶段gradle.taskGraph.beforeTaskgradl…...

操作系统(Linux Kernel 0.11Linux Kernel 0.12)解读整理——内核初始化(main init)之内存的划分

前言 MMU:内存管理单元(Memory Management Unit)完成的工作就是虚拟地址到物理地址的转换,可以让系统中的多个程序跑在自己独立的虚拟地址空间中,相互不会影响。程序可以对底层的物理内存一无所知,物理地址可以是不连续的&#x…...

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…...

C++红黑树详解

文章目录 红黑树概念规则为什么最长路径不超过最短路径的二倍?红黑树的时间复杂度红黑树的结构插入叔叔节点情况的讨论只变色(叔叔存在且为红)抽象的情况变色单旋(叔叔不存在或叔叔存在且为黑)变色双旋(叔叔不存在或叔叔存在且为黑…...

【经验分享】ARM Linux-RT内核实时系统性能评估工具

【经验分享】ARM Linux-RT内核实时系统性能评估工具 前言下载和编译方法常用工具介绍总结 前言 最近在研究Linux-RT实时系统,介绍下常用的实时系统的性能评估工具。 下载和编译方法 用git下载 git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.…...

【kong gateway】5分钟快速上手kong gateway

kong gateway的请求响应示意图 安装 下载对应的docker 镜像 可以直接使用docker pull命令拉取,也可以从以下地址下载:kong gateway 3.9.0.0 docker 镜像 https://download.csdn.net/download/zhangshenglu1/90307400, postgres-13.tar http…...

Vue入门(Vue基本语法、axios、组件、事件分发)

Vue入门 Vue概述 Vue (读音/vju/,类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三…...

【可实战】Linux 系统扫盲、 Shell扫盲(如何写一个简单的shell脚本)

一、Linux系统扫盲 1.Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议 2.Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。 目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等…...

【深入理解SpringCloud微服务】Sentinel源码解析——DegradeSlot熔断规则

Sentinel源码解析——DegradeSlot熔断规则 断路器原理复习DegradeSlot熔断规则原理源码解析DegradeSlot#entry()DegradeSlot#exit(Context, ...)ResponseTimeCircuitBreakerExceptionCircuitBreaker 断路器原理复习 断路器一般有三个状态:关闭、打开、半开&#xf…...

电脑系统bcd文件损坏修复方法:小白也会的修复方法

电脑系统bcd文件损坏怎么办?当电脑开机时出现bcd文件损坏,一般情况是由于电脑系统的引导坏了,需要进行修复。现在越来越多的小伙伴遇到电脑引导丢失或者安装后无法正常引导的问题,我们现在一般是pe下进行修复引导,那么电脑系统bc…...

链式存储结构

不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。 结点 结点由数据域、指针域组成。 头结点、头指针和首元结点 头指针:一个和结点类型相同的指针,它的特点是:永远指向链表中的第一个结点。上文提到过&#xf…...

Oracle 创建用户和表空间

Oracle 创建用户和表空间 使用sys 账户登录 建立临时表空间 --建立临时表空间 CREATE TEMPORARY TABLESPACE TEMP_POS --创建名为TEMP_POS的临时表空间 TEMPFILE /oracle/oradata/POS/TEMP_POS.DBF -- 临时文件 SIZE 50M -- 其初始大小为50M AUTOEXTEND ON -- 支持…...

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量,大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中,不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些?就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法:通过type函数返回数值的类型,然后通过setValue来构造一个QVariant类型的返回值。 函数: QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…...

3.4 Go函数作用域(标识符)

作用域标识符 简单来说,作用域指的是标识符可以起作用的范围,即其可见范围。将标识符的可见性限制在一定范围内,这个范围就是作用域。 把标识符约束在一定的可见范围内,这个范围就是作用域。 1. 宇宙块 特点:预定义…...

搭建Spring Boot开发环境

JDK&#xff08;1.8及以上版本&#xff09; Apache Maven 3.6.0 修改settings.xml 设置本地仓库位置 <localRepository>D:/repository</localRepository> 设置远程仓库镜像 <mirror><id>alimaven</id><name>aliyun maven</name&…...

洛谷 P5709:Apples Prologue / 苹果和虫子

【题目来源】 https://www.luogu.com.cn/problem/P5709 【题目描述】 小 B 喜欢吃苹果。她现在有 m&#xff08;1≤m≤100&#xff09;个苹果&#xff0c;吃完一个苹果需要花费 t&#xff08;0≤t≤100&#xff09;分钟&#xff0c;吃完一个后立刻开始吃下一个。现在时间过去了…...

PyTorch张量操作reshape view permute transpose

1. reshape() 和 view() view和reshape都用于改变张量的shape view是reshape的一个特例&#xff0c;view要求张量在内存中是连续的&#xff0c;否则会抛出错误&#xff0c;view只能用于contiguous的张量 reshape会自动处理contiguous的情况&#xff0c;如果张量是contiguous…...

JAVAweb学习日记(八) 请数据库模型MySQL

一、MySQL数据模型 二、SQL语言 三、DDL 详细见SQL学习日记内容 四、DQL-条件查询 五、DQL-分组查询 聚合函数&#xff1a; 分组查询&#xff1a; 六、DQL-分组查询 七、分页查询 八、多表设计-一对多&一对一&多对多 一对多-外键&#xff1a; 一对一&#xff1a; 多…...

【ElasticSearch】 Java API Client 7.17文档

​ 本文章内容根据 Elastic Search Java API Client 7.17 版本官方文档 内容翻译而来&#xff0c;用于方便后续学习翻阅 序言 这是适用于 Elasticsearch 的官方 Java API Client 文档。该客户端针对所有 Elasticsearch API 提供强类型的请求和响应。 功能 所有 Elasticsearc…...

Python “字典” 实战案例:5个项目开发实例

Python “字典” 实战案例&#xff1a;5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是&#xff1a; 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统&#xff08;LRU 缓存&#xff09; 以上每一个实例均有完整的程序代…...

Qt中Widget及其子类的相对位置移动

Qt中Widget及其子类的相对位置移动 最后更新日期&#xff1a;2025.01.25 下面让我们开始今天的主题… 一、开启篇 提出问题&#xff1a;请看上图&#xff0c;我们想要实现的效果是控件黄色的Widge&#xff08;m_infobarWidget&#xff09;t随着可视化窗口&#xff08;m_glWidge…...

4.flask-SQLAlchemy,表Model定义、增删查改操作

介绍 SQLAlchemy是对数据库的一个抽象 开发者不用直接与SQL语句打交道 Python对象来操作数据库 SQLAlchemy是一个关系型数据库 安装 flask中SQLAlchemy的配置 from flask import Flask from demo.user_oper import userdef create_app():app Flask(__name__)# 使用sessi…...

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架&#xff0c;专为高并发、低延迟的场景设计。它基于 Go 语言开发&#xff0c;结合了字节跳动在微服务架构中的实践经验&#xff0c;旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…...

Effective C++ 规则51:编写 new 和 delete 时需固守常规

1、背景 在 C 中&#xff0c;如果你需要为类自定义 new 和 delete&#xff0c;必须遵循一些约定和规则&#xff0c;以确保内存管理的一致性、可维护性和安全性。当我们使用 new 和 delete 操作时&#xff0c;C 编译器会&#xff1a; 调用全局或类特定的 operator new 来分配内…...

[RoarCTF 2019]Easy Calc1

题目 查看页面源代码 <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div class"alert alert-success">…...

【Bug 记录】el-sub-menu 第一次进入默认不高亮

项目场景&#xff1a; 项目场景&#xff1a;el-sub-menu 第一次进入默认不高亮 问题描述 例如&#xff1a;sub-menu 的 index 后端默认传过来是 number&#xff0c;我们需要手动转为 string&#xff0c;否则会有警告&#xff0c;而且第一次进入 sub-menu 默认不高亮。 解决方…...

自然语言处理——从原理、经典模型到应用

1. 概述 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是一门借助计算机技术研究人类语言的科学&#xff0c;是人工智能领域的一个分支&#xff0c;旨在让计算机理解、生成和处理人类语言。其核心任务是将非结构化的自然语言转换为机器可以…...

Linux——冯 • 诺依曼体系结构

目录 一、冯•诺依曼体系结构原理二、内存提高冯•诺依曼体系结构效率的方法三、当用QQ和朋友聊天时数据的流动过程四、关于冯诺依曼五、总结 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 流程&#…...

【FISCO BCOS】二十四、通过Java SDK对FISCO BCOS进行压力测试

Java SDK Demo是基于Java SDK的基准测试集合,能够对FISCO BCOS节点进行压力测试。Java SDK Demo提供有合约编译功能,能够将Solidity合约文件转换成Java合约文件,此外还提供了针对转账合约、CRUD合约以及AMOP功能的压力测试示例程序。本篇我们来讲讲使用java SDK压力测试的操…...

Gurobi基础语法之字典

Python中的字典&#xff1a;dict 我们先来介绍一下Python语法中的 dict 类型, 字典中可以通过任意键值来对数据进行映射&#xff0c;任何无法修改的python对象都可以当作键值来使用&#xff0c;这些无法修改的Python对象包括&#xff1a;整数(比如&#xff1a;1)&#xff0c;浮…...

汽车OEMs一般出于什么目的来自定义Autosar CP一些内容

汽车OEMs在使用AUTOSAR CP(Classic Platform)协议时,可能会根据自身的特定需求对标准协议进行修改,形成自己的企业标准(企标)。这种修改通常是为了满足特定的硬件平台、功能需求、安全要求或优化性能。以下是一些常见的修改场景和例子: 1. 硬件平台适配 企业可能会根据…...

设计模式的艺术-享元模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 在享元模式中&#xff0c;存储这些共享实例对象的地方称为享元池&…...

Java使用FFM API调用SDL

首发于Enaium的个人博客 首先我们需要创建一个Gradle项目&#xff0c;之后设置项目的JDK版本&#xff0c;设置为22及以上版本。 plugins {kotlin("jvm") version "2.1.0" }group "cn.enaium" version "1.0-SNAPSHOT"repositories {…...

bash: ./xxx: No such file or directory

问题现象 在使用开源或他人可执行文件的时候&#xff0c;可能会遇到 bash: ./squashfs2sparse: No such file or directory 的报错&#xff1b;实际测试发现该文件存在&#xff0c;并且有可执行权限&#xff1b; 问题分析 通过对报错文件的分析 1&#xff1a;文件具有可执行…...

Linux(Centos 7.6)命令详解:wc

1.命令作用 打印文件的行数、单词数、字节数&#xff0c;如果指定了多个文件&#xff0c;还会打印以上三种数据的总和(Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified) 2.命令语法 Usage: wc [OPTION]... [FIL…...

PHP EOF (Heredoc) 详解

PHP EOF (Heredoc) 详解 PHP 中的 EOF(End Of File)是一种非常有用的语法特性,允许开发者创建多行字符串。它特别适合于创建格式化文本,如配置文件、HTML 模板等。本文将详细讲解 PHP EOF 的用法、优势以及注意事项。 什么是 EOF? EOF 是一种特殊的字符串定义方式,它允…...