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

Day10【基于encoder- decoder架构实现新闻文本摘要的提取】

实现新闻文本摘要的提取

      • 1. 概述与背景
      • 2.参数配置
      • 3.数据准备
      • 4.数据加载
      • 5.主程序
      • 6.预测评估
      • 7.生成效果
      • 8.总结

1. 概述与背景

新闻摘要生成是自然语言处理(NLP)中的一个重要任务,其目标是自动从长篇的新闻文章中提取出简洁、准确的摘要。近年来,基于深度学习的摘要生成方法已成为主流,尤其是采用 Encoder-Decoder 架构的模型。这个架构在机器翻译、文本摘要、文档标注、多模态交互等领域取得了显著的效果。

本文基于现有数据集,先将输入的新闻文本数据和对应的标题摘要在已知词表上序列化,然后将序列化后的输入索引数据(作为输入文本数据)和标签索引数据(作为生成式文本摘要标签)共同输入到Encoder-Decoder模型架构中得到输出预测的文本摘要数据,之后将输出的预测文本摘要数据以及另一份标签索引数据(作为真实的文本标签)两者使用交叉熵损失函数计算loss,最后反向传播更新梯度。

2.参数配置

config.py

# -*- coding: utf-8 -*-"""
配置参数信息
"""
import os
import torchConfig = {"model_path": "output","input_max_length": 120,"output_max_length": 30,"epoch": 200,"batch_size": 32,"optimizer": "adam","learning_rate":1e-3,"seed":42,"vocab_size":6219,"vocab_path":"vocab.txt","train_data_path": r"sample_data.json","valid_data_path": r"sample_data.json","beam_size":5}

3.数据准备

词表文件vocab.txt词表文件
新闻文本数据训练和验证数据

4.数据加载

loader.py

# -*- coding: utf-8 -*-import json
import torch
from torch.utils.data import DataLoader
"""
数据加载
"""class DataGenerator:def __init__(self, data_path, config, logger):self.config = configself.logger = loggerself.path = data_pathself.vocab = load_vocab(config["vocab_path"])self.config["vocab_size"] = len(self.vocab)self.config["pad_idx"] = self.vocab["[PAD]"]self.config["start_idx"] = self.vocab["[CLS]"]self.config["end_idx"] = self.vocab["[SEP]"]self.load()def load(self):self.data = []with open(self.path, encoding="utf8") as f:for i, line in enumerate(f):line = json.loads(line)title = line["title"]content = line["content"]self.prepare_data(title, content)return#文本到对应的index#头尾分别加入[cls]和[sep]def encode_sentence(self, text, max_length, with_cls_token=True, with_sep_token=True):input_id = []if with_cls_token:input_id.append(self.vocab["[CLS]"])for char in text:input_id.append(self.vocab.get(char, self.vocab["[UNK]"]))if with_sep_token:input_id.append(self.vocab["[SEP]"])input_id = self.padding(input_id, max_length)return input_id#补齐或截断输入的序列,使其可以在一个batch内运算def padding(self, input_id, length):input_id = input_id[:length]input_id += [self.vocab["[PAD]"]] * (length - len(input_id))return input_id#输入输出转化成序列def prepare_data(self, title, content):input_seq = self.encode_sentence(content, self.config["input_max_length"], False, False) #输入序列output_seq = self.encode_sentence(title, self.config["output_max_length"], True, False) #输出序列gold = self.encode_sentence(title, self.config["output_max_length"], False, True) #不进入模型,用于计算lossself.data.append([torch.LongTensor(input_seq),torch.LongTensor(output_seq),torch.LongTensor(gold)])returndef __len__(self):return len(self.data)def __getitem__(self, index):return self.data[index]def load_vocab(vocab_path):token_dict = {}with open(vocab_path, encoding="utf8") as f:for index, line in enumerate(f):token = line.strip()token_dict[token] = indexreturn token_dict#用torch自带的DataLoader类封装数据
def load_data(data_path, config, logger, shuffle=True):dg = DataGenerator(data_path, config, logger)dl = DataLoader(dg, batch_size=config["batch_size"], shuffle=shuffle)return dl

输入数据和标签的编码主要通过 encode_sentence 方法实现。具体来说,输入数据(如新闻内容)和标签(如新闻标题)都需要转化为对应的索引序列,以便供模型进行训练。编码过程如下:

  1. 输入数据(content)编码encode_sentence 方法将新闻内容转换为词汇表中的索引序列。首先,如果需要,添加 [CLS] 标记作为序列的开始,然后遍历文本中的每个字符,将其映射为词汇表中的索引,如果词汇表中没有该字符,则使用 [UNK](未知词)表示。最后,如果需要,添加 [SEP] 标记作为序列的结束。生成的索引序列会通过 padding 方法填充或截断至预设的最大长度。

  2. 标签数据(title)编码:标签(即标题)也会通过 encode_sentence 方法进行编码,步骤与输入数据类似,因为标题是需要预测生成表示要输出的序列,因此会包含 [CLS] 标记作为开头,不包含 [SEP],以区分输入和输出。

  3. 计算损失的 gold 序列:在训练中,为了计算损失,gold 序列会与输出序列相似,作为真实的标签,在它后面包含 [SEP] 标记和输出序列对齐,作为模型训练时的目标序列。

  4. 生成解码过程:模型训练完毕后,Decoder会根据输入的Encoder编码向量及输出序列的第一个标记CLS输出第一个预测的token,根据输入的Encoder编码向量及输出序列(第一个标记CLS+生成的前一个token)输出第二个预测token,之后再根据输入的Encoder编码向量及输出序列(第一个标记CLS+生成的前2个token)输出第三个预测token,以此类推。直到输出最后一个预测的tokenSEP时,生成解码过程结束。

  5. 在这里插入图片描述
    通过这样的编码方式,输入数据和标签数据被转化为整数索引序列,并进行填充或截断,以确保它们具有相同的长度,从而可以批量处理并输入到模型进行训练。

5.主程序

# -*- coding: utf-8 -*-
import sys
import torch
import random
import os
import numpy as np
import time
import logging
import json
from config import Config
from evaluate import Evaluator
from loader import load_data#这个transformer是本文件夹下的代码,和我们之前用来调用bert的transformers第三方库是两回事
from transformer.Models import Transformerlogging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)"""
模型训练主程序
"""# seed = Config["seed"]
# random.seed(seed)
# np.random.seed(seed)
# torch.manual_seed(seed)
# torch.cuda.manual_seed_all(seed)def choose_optimizer(config, model):optimizer = config["optimizer"]learning_rate = config["learning_rate"]if optimizer == "adam":return torch.optim.Adam(model.parameters(), lr=learning_rate)elif optimizer == "sgd":return torch.optim.SGD(model.parameters(), lr=learning_rate)def main(config):#创建保存模型的目录if not os.path.isdir(config["model_path"]):os.mkdir(config["model_path"])#加载模型logger.info(json.dumps(config, ensure_ascii=False, indent=2))model = Transformer(config["vocab_size"], config["vocab_size"], 0, 0,d_word_vec=128, d_model=128, d_inner=256,n_layers=1, n_head=2, d_k=64, d_v=64,)# 标识是否使用gpucuda_flag = torch.cuda.is_available()if cuda_flag:logger.info("gpu可以使用,迁移模型至gpu")model = model.cuda()#加载优化器optimizer = choose_optimizer(config, model)# 加载训练数据train_data = load_data(config["train_data_path"], config, logger)#加载效果测试类evaluator = Evaluator(config, model, logger)#加载lossloss_func = torch.nn.CrossEntropyLoss(ignore_index=0)#训练for epoch in range(config["epoch"]):epoch += 1model.train()if cuda_flag:model.cuda()logger.info("epoch %d begin" % epoch)train_loss = []for index, batch_data in enumerate(train_data):if cuda_flag:batch_data = [d.cuda() for d in batch_data]input_seq, target_seq, gold = batch_datapred = model(input_seq, target_seq)loss = loss_func(pred, gold.view(-1))train_loss.append(float(loss))loss.backward()optimizer.step()optimizer.zero_grad()logger.info("epoch average loss: %f" % np.mean(train_loss))evaluator.eval(epoch)model_path = os.path.join(config["model_path"], "epoch_%d.pth" % epoch)torch.save(model.state_dict(), model_path)returnif __name__ == "__main__":main(Config)

主程序主要实现了基于Transformer架构的模型训练过程。在训练过程中,首先通过配置文件Config获取相关参数,并根据配置创建一个Transformer模型。训练过程在指定的轮次(epoch)内进行,每一轮开始时,首先设定模型为训练模式。接着,对于每个训练批次,输入数据(input_seq)、目标序列(target_seq)和真实标签(gold)被送入模型中进行前向传播,计算出模型预测值(pred)。通过交叉熵损失函数(CrossEntropyLoss)与真实标签进行对比,得到当前批次的损失。损失值会被累积并进行反向传播(loss.backward()),优化器更新参数(optimizer.step()),并清空梯度缓存(optimizer.zero_grad())。每一轮训练结束后,打印出平均损失值并进行模型效果评估。

6.预测评估

evaluate.py

# -*- coding: utf-8 -*-
from loader import load_data
from collections import defaultdict
from transformer.Translator import Translator"""
模型效果测试
"""class Evaluator:def __init__(self, config, model, logger):self.config = configself.model = modelself.logger = loggerself.valid_data = load_data(config["valid_data_path"], config, logger, shuffle=False)self.reverse_vocab = dict([(y, x) for x, y in self.valid_data.dataset.vocab.items()])self.translator = Translator(self.model,config["beam_size"],config["output_max_length"],config["pad_idx"],config["pad_idx"],config["start_idx"],config["end_idx"])def eval(self, epoch):self.logger.info("开始测试第%d轮模型效果:" % epoch)self.model.eval()self.model.cpu()self.stats_dict = defaultdict(int)  # 用于存储测试结果for index, batch_data in enumerate(self.valid_data):input_seqs, target_seqs, gold = batch_datafor input_seq in input_seqs:generate = self.translator.translate_sentence(input_seq.unsqueeze(0))print("输入:", self.decode_seq(input_seq))print("输出:", self.decode_seq(generate))breakreturndef decode_seq(self, seq):pre_seq = []for idx in seq:if idx < 6 :continuechar = self.reverse_vocab[int(idx)]pre_seq.append(char)return "".join(pre_seq)

在模型的评估过程中,验证集数据被加载并逐批传入模型进行推理。每一批数据中的输入序列通过 Translator 进行翻译,生成相应的预测输出。预测过程通常涉及使用模型的前向传播,将输入序列转化为目标语言的输出。为了评估模型效果,生成的输出是通过索引序列的方式进行表示,而这些索引随后会被映射回具体的词汇,通过反向词汇表解码为可读的文本。每次翻译后,模型的输入和生成的输出都会被打印出来,以便进行直观的对比。通过反复的测试与评估,能够逐步提高模型的准确性和生成质量。

7.生成效果

训练200轮效果:

2025-04-19 12:44:56,206 - __main__ - INFO - epoch 200 begin
2025-04-19 12:44:57,086 - __main__ - INFO - epoch average loss: 0.416101
2025-04-19 12:44:57,086 - __main__ - INFO - 开始测试第200轮模型效果:
输入: 阿根廷布宜诺斯艾利斯省奇尔梅斯市一服装店,8个月内被抢了三次。最后被抢劫的经历,更是直接让老板心理崩溃:歹徒在抢完不久后发现衣服“抢错了尺码”,理直气壮地拿着衣服到店里换,老板又不敢声张,只好忍气吞声。(中国新闻网)
输出: 阿根廷歹徒抢服装尺码不对拿回店里换
输入: 就俄罗斯免费医疗话题,国家卫生计生委国际司司长任明辉表示,真正的免费医疗制度不存在。或由税收支持,或个人和企业支付的医疗保险社会保险解决。免费医疗国家的患者看病不花钱,费用在各种税收或缴纳的保险中体现了。(网图)
输出: 卫生计生委国际司司长:真正的免费医疗不存在
输入: 6月合格境外机构投资者(QFII)加快入市步伐。据中登公司发布的20136月份统计月报显示,QFII基金6月份在沪深两市分别新增开户1415个A股股票账户,这29个账户让QFII在沪深两市的总账户数达到465个。
输出: 6月QFII积极入市新增开户户9户
输入: 路透社消息,一艘从利比亚横渡地中海开往意大利的偷渡船倾覆,约400人身亡。船上载有550多名偷渡客,许多是年轻人和儿童,大部分来自撒哈拉以南非洲地区。事发后意大利海防部队展开搜救,获救的150人被送往意大利南部港口。
输出: 从利比亚开往意大利:400偷渡客沉船身亡

8.总结

本文实现了一个基于 Transformer Encoder-Decoder 架构的新闻摘要生成系统。通过使用词汇表将输入数据和目标输出数据转化为索引序列,并通过交叉熵损失函数训练模型,模型通过 Beam Search 解码生成摘要。训练过程中使用了多轮的模型评估和优化,使得最终模型能够生成简洁、准确的新闻摘要。

相关文章:

Day10【基于encoder- decoder架构实现新闻文本摘要的提取】

实现新闻文本摘要的提取 1. 概述与背景2.参数配置3.数据准备4.数据加载5.主程序6.预测评估7.生成效果8.总结 1. 概述与背景 新闻摘要生成是自然语言处理&#xff08;NLP&#xff09;中的一个重要任务&#xff0c;其目标是自动从长篇的新闻文章中提取出简洁、准确的摘要。近年来…...

深度解析算法之二分查找(2)

17.二分查找 题目链接 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target…...

前端工程化之自动化测试

自动化测试 自动化测试为什么需要测试&#xff1f;什么时候需要考虑测试测试类型前端测试框架单元测试Jest 重点掌握项目示例package.jsonsrc/utils/math.tssrc/utils/math.test.ts进行测试jest.config.js覆盖率直观看覆盖率coverage/lcov-report/index.html src/main.test.tst…...

CANFD技术在新能源汽车通信网络中的应用与可靠性分析

一、引言 新能源汽车产业正处于快速发展阶段&#xff0c;其电子系统复杂度不断攀升&#xff0c;涵盖众多传感器、控制器与执行器。高效通信网络成为确保新能源汽车安全运行与智能功能实现的核心要素。传统CAN总线因带宽限制&#xff0c;难以满足高级驾驶辅助系统&#xff08;A…...

【机器学习】朴素贝叶斯算法:原理剖析与实战应用

引言 朴素贝叶斯算法就像是一位善于从经验中学习的侦探&#xff0c;根据已有的线索来推断未知事件的概率。这是一种基于概率论的分类算法&#xff0c;以贝叶斯定理为基础&#xff0c;却做了一个"朴素"的假设&#xff1a;认为所有特征彼此独立。虽然这个假设在现实中…...

【更新完毕】2025妈妈杯C题 mathercup数学建模挑战赛C题数学建模思路代码文章教学:音频文件的高质量读写与去噪优化

完整内容请看文章最下面的推广群 我将先给出文章、代码、结果的完整展示, 再给出四个问题详细的模型 面向音频质量优化与存储效率提升的自适应编码与去噪模型研究 摘 要 随着数字媒体技术的迅速发展&#xff0c;音频处理技术在信息时代的应用愈加广泛&#xff0c;特别是在存储…...

UI键盘操作

1、Selenium中send_keys除了可以模拟键盘输入之外&#xff0c;还有些时候需要操作键盘上的按键&#xff0c;甚至是组合键&#xff0c;比如CTRLA,CTRLC等&#xff0c; 所以我们需要代码操作键盘。使用的是send_keys里的Keys的类。 from selenium.webdriver.common.keys import …...

【正则表达式】正则表达式使用总结

正则表达式除了匹配普通字符外,还可以匹配特殊字符,这些特殊字符被称为“元字符”。‌ 特殊字符(元字符) ‌限定符‌:用于指定正则表达式中某个组件的出现次数。常见的限定符包括: *:0次或多次 +:1次或多次 ?:0次或1次 {n}:恰好n次…...

Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门

一、前言 在推流领域&#xff0c;尤其是监控行业&#xff0c;现在主流设备基本上都是265格式的视频流&#xff0c;想要在网页上直接显示监控流&#xff0c;之前的方案是&#xff0c;要么转成hls&#xff0c;要么魔改支持265格式的flv&#xff0c;要么265转成264&#xff0c;如…...

Spring Boot 中基于 Reactor 的服务器端事件(SSE)推送机制实践

Spring Boot 3.0 中基于 Reactor 的服务器端事件(SSE)推送机制实践 在现代 Web 应用开发中,实时数据交互越来越成为刚需,从股票行情的实时更新到社交平台的消息即时推送,服务器端事件(Server-Sent Events,简称 SSE)作为一种高效的单向数据传输技术,正发挥着重要作用。…...

CRC实战宝典:从原理到代码,全面攻克循环冗余校验

CRC实战宝典&#xff1a;从原理到代码&#xff0c;全面攻克循环冗余校验 github开源&#xff1a;CRC软硬件协同测试项目 CRC 简介 CRC&#xff08;循环冗余校验&#xff09;是一种强大的错误检测技术&#xff0c;广泛应用于数字网络和存储系统。它是确保数据完整性的重要方法…...

【愚公系列】《Python网络爬虫从入门到精通》056-Scrapy_Redis分布式爬虫(Scrapy-Redis 模块)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

ZLMediaKit 和 SRS的区别,哪个更好用?

ZLMediaKit 和 SRS&#xff08;Simple RTMP Server&#xff09;是两个主流的开源流媒体服务器框架&#xff0c;各自在功能、性能、适用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 一、核心差异对比 协议支持 ZLMediaKit&#xff1a;支持更广泛的流媒…...

【PyTorch】colab上跑VGG(深度学习)数据集是 CIFAR10

跑得结果是测试准确率10%&#xff0c;欠拟合。 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter from torchvision import datasets, transformstransform tran…...

pytorch 51 GroundingDINO模型导出tensorrt并使用c++进行部署,53ms一张图

本专栏博客第49篇文章分享了将 GroundingDINO模型导出onnx并使用c++进行部署,并尝试将onnx模型转换为trt模型,fp16进行推理,可以发现推理速度提升了一倍。为此对GroundingDINO的trt推理进行调研,发现 在GroundingDINO-TensorRT-and-ONNX-Inference项目中分享了模型导出onnx…...

编程语言基础 - C++ 面试题

C++ 面试题 tags: c++ 文章目录 C++ 面试题关键字1. const2. static3. this 指针4. inline 内联函数5. volatile6. struct, class7. enum关键字 1. const 修饰变量:该变量不能被改变 修饰指针: 指针常量: 指针本身是常量 TYPE* const pContent;指向常量的指针:指针所指向…...

JVM笔记【一】java和Tomcat类加载机制

JVM笔记一java和Tomcat类加载机制 java和Tomcat类加载机制 Java类加载 * loadClass加载步骤类加载机制类加载器初始化过程双亲委派机制全盘负责委托机制类关系图自定义类加载器打破双亲委派机制 Tomcat类加载器 * 为了解决以上问题&#xff0c;tomcat是如何实现类加载机制的…...

Python----深度学习(全连接与链式求导法则)

一、机器学习和深度学习的区别 机器学习&#xff1a;利用计算机、概率论、统计学等知识&#xff0c;输入数据&#xff0c;让计算机学会新知 识。机器学习的过程&#xff0c;就是训练数据去优化目标函数。 深度学习&#xff1a;是一种特殊的机器学习&#xff0c;具有强大的能力和…...

基于SpringBoot的网上找律师管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

《目标检测双雄:YOLO与Faster R-CNN,谁主沉浮?》

在计算机视觉的广阔天地里&#xff0c;目标检测技术宛如一颗璀璨的明星&#xff0c;照亮了无数应用场景。从安防监控中对行人与车辆的精准识别&#xff0c;到自动驾驶领域对道路障碍物的快速判断&#xff0c;再到工业生产里对产品缺陷的严格检测&#xff0c;目标检测无处不在&a…...

CUDA编程中影响性能的小细节总结

一、内存访问优化 合并内存访问&#xff1a;确保相邻线程访问连续内存地址&#xff08;全局内存对齐访问&#xff09;。优先使用共享内存&#xff08;Shared Memory&#xff09;减少全局内存访问。避免共享内存的Bank Conflict&#xff08;例如&#xff0c;使用padding或调整访…...

C#学习第17天:序列化和反序列化

什么是序列化&#xff1f; 定义&#xff1a;序列化是指把对象转换为一种可以轻松存储或传输的格式&#xff0c;如JSON、XML或二进制格式。这个过程需要捕获对象的类型信息和数据内容。用途&#xff1a;使得对象可以持久化到文件、发送至网络、或存储在数据库中。 什么是反序列…...

kafka的零拷贝技术

在 Kafka 中&#xff0c;高性能数据传输依赖于操作系统提供的 零拷贝&#xff08;Zero-Copy&#xff09; 技术&#xff0c;主要包括 sendfile 和 mmap 两种实现方式。它们的核心目标是减少数据在用户态和内核态之间的拷贝次数&#xff0c;从而提升 I/O 效率。下面详细解析它们的…...

从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程

PostgreSQL数据库安装 PostgreSQL官网 【PostgreSQL官网】 | 【PostgreSQL安装官网_Windows】 安装步骤 step1&#xff1a; 选择与电脑相对应的PostgreSQL版本进行下载。 step2&#xff1a; 双击打开刚才下载好的文件。 step3&#xff1a; 在弹出的setup窗口中点击 …...

MySQL中常用函数的分类及示例

概述 以下是 MySQL 中常用函数的分类及示例&#xff0c;涵盖字符串处理、数值计算、日期操作、条件判断等常见场景&#xff1a; 一、字符串函数 1. CONCAT(str1, str2, ...) 拼接字符串。 SELECT CONCAT(Hello, , World); -- 输出: Hello World2. SUBSTRING(str, start,…...

【论文阅读21】-PSOSVM-CNN-GRU-Attention-滑坡预测(2024-12)

这篇论文主要提出并验证了一种新型的混合智能模型&#xff08;PSOSVM-CNN-GRU-Attention&#xff09;&#xff0c;用于准确预测滑坡的点位移&#xff0c;并构建可靠的位移预测区间。通过对Baishuihe滑坡和Shuping滑坡的案例分析&#xff0c;展示了该模型的出色性能。 [1] Zai D…...

Shiro-550 动调分析与密钥正确性判断

一、Shiro 简介 Apache Shiro是一个开源安全框架&#xff0c;用于构建 Java 应用程序&#xff0c;提供身份验证、授权、加密和会话管理等功能。 二、Shiro-550&#xff08;CVE-2016-4437&#xff09; 1、漏洞原理 Shiro 在用户登陆时提供可选项 RememberMe&#xff0c;若勾选…...

Codeforces Educational Round 177 Div. 2 【B题,C待补

B 二分 题意 样例 5 3 10 3 4 2 1 512 找最右边的L下标即可 思路 二分最靠右的L端点&#xff0c;R端点取最右端(n*k处)&#xff0c;找到后&#xff0c;答案就是L的位置(pos)&#xff0c;&#xff08;因为如果pos满足&#xff0c;则pos左边的所有下标都满足 代码 const in…...

【Lua语言】Lua语言快速入门

初始Lua Lua是一种轻量小巧的脚本语言&#xff0c;他使用标准C语言编写并以源代码形式开放。这意味着Lua虚拟机可以很方便的嵌入别的程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能。同时&#xff0c;在目前脚本引擎中&#xff0c;Lua的运行速度占有绝对优势。 变…...

Matlab画海洋与大气变量的时间序列并带标记面的三维折线图--来源粉丝

Matlab画带标记面的三维折线图–来源粉丝 图片 目标图&#xff1a; 图片 复现&#xff1a; 图片 细节可在代码中更改&#xff1a; 数据构造 clear;clc;close all; % 数据构造 X1 1:8;Y1ones(length(X1),1); X2 X1;Y22*ones(length(X1),1); X3 X1;Y33*ones(length(X1),1); …...

NestJS——多环境配置方案(dotenv、config、@nestjs/config、joi配置校验)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

RAGFlow在Docker中运行Ollama直接运行于主机的基础URL的地址

基础Url http://host.docker.internal:11434...

python 库 下载 ,整合在一个小程序 UIUIUI

上图 import os import time import threading import requests import subprocess import importlib import tkinter as tk from tkinter import ttk, messagebox, scrolledtext from concurrent.futures import ThreadPoolExecutor, as_completed from urllib.parse import…...

【MySQL】数据库约束

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 ✨一、数据库的约束 &#x1f31f;二、数据库约束的分类 &#x1f30d; 1.非空约束&#xff08;NOT NULL&#xff09; 1.定义 2.格式 3.示例&#xff1a; 列的信息可…...

Firewalld防火墙

目录 Firewald 防火墙概述 Firewalld 简介 firewalld 与 iptables service的区别 Firewalld 网络区域 Firewalld 防火墙图形配置方法 服务选项 端口号 协议选项 源端口选项 伪装选项 端口转发 ICMP过滤器 防火墙的配置运行状态 运行时和永久有什么区别 Firewalld 防火墙 firewa…...

使用 TensorFlow 和 Keras 构建 U-Net

U-Net是图像分割领域中最为著名的架构之一。U-Net 因其形状而得名&#xff0c;它是一种全卷积架构&#xff0c;首先将图像收缩&#xff0c;然后将其扩展为输出结果。虽然这种收缩路径构建了一个学习特征的层次结构&#xff0c;但跳过连接有助于在扩展路径中将这些特征转换回相关…...

【网络篇】TCP vs UDP底层区别+网络编程概念

大家好呀 我是浪前 今天讲解的是网络篇的第三章&#xff1a;网络编程概念和TCP&UDP的区别 网络编程概念TCP和UDP的区别 跨主机通信:网络编程插座&#xff1a;网络编程的本质&#xff1a; 网络编程的重要概念&#xff1a;客户端和服务器&#xff1a; 客户端和服务器的交互模…...

如何保存服务器mysql数据库的数据到本地文件

打开mysql命令行如图1 图1 mysql命令行 修改文件保存路径。 在mysql安装目录下&#xff0c;找到my.ini文件&#xff0c;找到secure-file-priv变量配置的地方&#xff0c;修改对应的值&#xff0c;然后重启mysql&#xff0c;此时把文件放到指定路径&#xff0c;再执行导入导出…...

Flutter学习 滚动组件(2):ListView进阶使用

目录 前言&#xff1a;一、实现复杂的ListView列表&#xff1a;1.1 Item布局封装1.2 ListView的使用1.3 增加分割线 二、实现ListView下拉刷新&#xff1a;三、实现上拉加载更多&#xff1a;四、实现下拉刷新、上拉加载更多&#xff1a;五、ListView滚动方向和控制&#xff1a;…...

linux oracle 19c 静默安装

oracle数据库有个比较很抓瞎的事情&#xff0c;不同的版本搭建的大致流程是一样的&#xff0c;但是在实操细节上会有不同&#xff0c;比如操作的脚本位置和配置项等等&#xff0c;这些会变&#xff0c;所以需要时常积累不同版本的文档 这里有一点要说明&#xff0c;之所以使用…...

中间件--ClickHouse-11--部署示例(Linux宿主机部署,Docker容器部署)

一、Linux宿主机部署 1、环境准备 操作系统&#xff1a;推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04。硬件要求&#xff1a; 至少 2 核 CPU 和 4GB 内存。足够的磁盘空间&#xff08;根据数据量评估&#xff09;。CPU需支持SSE4.2指令集&#xff08;可通过以下命令检查&#…...

AI调试工具有哪些?

一、深度学习框架专用调试工具 TensorBoard • 功能&#xff1a;实时监控训练指标&#xff08;损失值、准确率&#xff09;、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架&#xff1a;TensorFlow、PyTorch&#xff08;通过插件&#xff09; • 特点&#xff1a;支持…...

Warcraft Logs [Classic] [WCL] BOSS ID query

Warcraft Logs [Classic] [WCL] BOSS ID query 所有副本BOSSID查询 https://wowpedia.fandom.com/wiki/DungeonEncounterID#Retail IDNameMapInstanceIDPatch227High Interrogator GerstahnBlackrock Depths230228Lord RoccorBlackrock Depths230229Houndmaster GrebmarBlackro…...

MySQL——事务

一、什么是事务&#xff1f; 事务&#xff08;Transaction&#xff09; 是数据库操作的最小逻辑单元&#xff0c;它由一组不可分割的SQL操作组成。事务的核心目标是确保多个操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而维护数据的完整性。例如&#xff0c;银行转…...

spring Ai---向量知识库(一)

在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用&#xff0c;就无法直接使用chatGPT。 这个时候&#xff0c;向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义&#xff1a;将文档向量化&#xff0c;保证内容越相似的文本&#xff0c;…...

MACOS 上的 快捷指令怎么用,有哪些分享资源可以用

一、快捷指令的基本概念与历史 快捷指令(Shortcuts)是苹果生态中的自动化工具,最初以第三方应用Workflow(2014年推出)的形式出现,2017年被苹果收购后更名为Shortcuts,并深度集成到iOS、iPadOS和macOS系统中。从macOS Mojave(10.14)开始,快捷指令正式登陆Mac平台,并…...

最长子序列长度(LIS)--个数遍历的二分+贪心优化

B3637 最长上升子序列 - 洛谷 #include<bits/stdc.h> #include<string> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n; int g[N]; int dp[N]; int ma0; int main() { cin>>n; memset(g,0x3f,sizeo…...

RenderStage::runCameraSetUp

文章目录 RTTosg::Camera::_bufferAttachmentMapRenderStage::BufferComponent和RenderStage::_bufferAttachmentMapCamera::attach(BufferComponent buffer, GLenum internalFormat)Camera::attach(BufferComponent buffer, osg::Texture* texture.....Camera::attach(BufferC…...

突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限?

突破速率瓶颈&#xff1a;毫米波技术如何推动 5G 网络迈向极限&#xff1f; 引言 5G 网络的普及&#xff0c;已经让我们告别了“加载中”时代&#xff0c;实现了更快的数据传输、更低的延迟和更高的设备连接密度。而在 5G 技术的核心中&#xff0c;毫米波&#xff08;mmWave&…...

前端面试真题集合(一)

一、Vue的响应式原理 Vue的响应式系统通过数据劫持和依赖追踪实现,核心流程如下: 数据劫持 • Vue 2.x:使用Object.defineProperty递归遍历数据对象,将属性转换为getter/setter,拦截属性的读取和修改操作。 • Vue 3.x:改用Proxy代理对象,支持动态属性添加和数组变化监听…...