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

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

待解决的问题

生成PPT大纲是一种大模型在办公场景下应用的常见需求。

然而:

  • 目前直接让大模型生成大纲往往是非结构化的,输出格式多样,难以统一和规范,这使得大纲后续的分析与利用变得复杂。
  • 生成过程中的层级深度和每层的颗粒度无法灵活控制,导致生成内容有时过于简单,有时又过于复杂,缺乏可控性。
  • 由于大模型是基于自回归的,在生成细粒度大纲时首层大纲并没有生成完,和人类规划大纲自顶向下的方法不同,导致大纲的层级之间往往存在模糊和重叠,无法有效传达不同层次的重点内容。

为了解决上述问题,本文提出了一种递归结构化生成的方法,通过分层递归控制大模型生成大纲的过程,不仅能使大纲结构清晰,而且可以灵活控制各层的深度和颗粒度。这样生成的大纲不仅层次分明,内容也更加贴合实际应用需求,避免了层级模糊和内容重叠的现象。

本项目基于NVIDIA NIM平台,使用 LLaMA 3.1 70B 作为基座模型。NVIDIA NIM 平台提供了强大的自然语言处理等人工智能能力,能够方便、高效地调用各种预训练模型,甚至进行定制化的推理。

在这里插入图片描述

核心方案

该项目的核心是递归生成PPT大纲,逐层递进,确保大纲的层次清晰、内容具体,避免生成结果的模糊和重叠问题。核心流程如下:

  1. 第一层生成:首先,通过模型生成第一层的PPT大纲内容,确保初始大纲框架具有明确的层次。
  2. 递归生成:在生成初始层之后,递归生成每个子级的内容,逐层递进。每一级的生成都是基于上一层的大纲内容进行细化和补充,保证了层次结构的清晰和逻辑性。
  3. 递归终止条件:当生成到达指定的层级时,递归终止,输出完整的结构化大纲。

具体的 prompt 将在下一节讲解。

第一层大纲生成 (generate_first_level_outlines)

这个函数负责生成大纲的第一层内容,基于用户输入的主题调用大模型生成初始的大纲框架。

def generate_first_level_outlines(idea):first_level_template = FIRST_LEVEL_PROMPT.format(few_shot=FIRST_LEVEL_EXAMPLE,idea=idea,)response = client.chat.completions.create(model="meta/llama-3.1-70b-instruct",messages=[{"role": "user", "content": first_level_template}],temperature=0.7,max_tokens=1024,)return extract_outlines(response.choices[0].message.content.strip())

注意,调用模型后,通过extract_outlines函数对生成的结果进行处理,去掉不必要的空白行,得到大纲的第一层结构化内容。extract_outlines函数具体详见下一节。

递归生成下一级大纲 (generate_next_level_outline)

当生成了第一层的大纲后,系统需要递归生成各个子级内容。generate_next_level_outline函数根据上一层的大纲内容,生成当前层的细化内容。

模型生成后,如果当前层级达到了目标层(target_layer),则返回当前层的大纲内容。否则,函数将继续递归调用自己,为每个子项生成更深层的大纲内容,直到达到目标层。

def generate_next_level_outline(idea: str,current_level: int,previous_outline: str,previous_list: list[str],target_layer: int,
):formatted_previous_list = ', '.join(previous_list)next_level_template = NEXT_LEVEL_PROMPT.format(few_shot=NEXT_LEVEL_EXAMPLE,idea=idea,formatted_previous_list=formatted_previous_list,previous_outline=previous_outline,current_level=current_level,)response = client.chat.completions.create(model="meta/llama-3.1-70b-instruct",messages=[{"role": "user", "content": next_level_template}],temperature=0.7,max_tokens=1024,)outlines = extract_outlines(response.choices[0].message.content.strip())if target_layer == current_level:return outlineselse: return {text: generate_next_level_outline(idea, current_level + 1, text, outlines, target_layer) for text in outlines}

注意,prompt 中会将上一级的内容和当前的层次信息整合,让模型有更充分的信息生成该层的大纲内容。

递归结构化大纲生成 (recursive_outline)

这个函数是整个递归生成过程的核心,通过逐层调用generate_next_level_outline函数,生成每一层的大纲,直到生成目标层的所有内容。

def recursive_outline(idea, target_layer: int):first_level = generate_first_level_outlines(idea)return {text: generate_next_level_outline(idea, 2, text, first_level, target_layer) for text in first_level}

实现细节

prompt

本项目的 prompt 明确告知模型生成PPT大纲的任务,提供主题信息(idea)和所需层级(layer),确保模型能够聚焦于特定主题,并生成相应层次的内容。此外,通过提供多个生成示例,向模型展示了预期的输出格式和内容结构。通过示例提供了明确的上下文,同时引入了对重复内容的避免,还引入了上一层的内容,帮助模型了解需要避免重复的信息。

BASE_PROMPT = """请你根据主题:“{idea}”生成{layer}层的PPT大纲:\n"""FIRST_LEVEL_EXAMPLE = """请你根据
技术是一把双刃剑,它既能推动社会向前发展,也可能因不当使用而造成伤害。比如数字鸿沟现象。
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:
<信息爆炸的时代>
<科技革命与产业变革>
<社会影响日益凸显>
<人类应未雨绸缪,趋利避害>
<发展趋势及前景,结论>请你根据
为什么我们要好好学习?在快速变化的世界中,持续学习是实现自我价值和社会贡献的关键。
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:
<引言>
<学习对个人成长的意义>
<学习对社会的责任>
<如何有效学习>请你根据
在单身的黄金年代我们如何面对爱情:要勇敢地去追求爱情
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:
<何为单身的黄金时代>
<爱情对人们的意义>
<目前人的生存和处境更加复杂>
<爱情存在肌无力>
<最温暖的东西是人和人之间的感情>
<要勇敢地追求爱情>
"""FIRST_LEVEL_PROMPT = """{few_shot}
上面是几个生成大纲第一层的例子。请你根据
{idea}
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:"""NEXT_LEVEL_EXAMPLE = """请你根据
技术是一把双刃剑,它既能推动社会向前发展,也可能因不当使用而造成伤害。比如数字鸿沟现象。
不要和上一层的 信息爆炸的时代, 科技革命与产业变革, 人类应未雨绸缪,趋利避害, 发展趋势及前景,结论 重复,
生成“社会影响日益凸显”下的大纲第2层内容,一行一个条目,生成在<>中,无需其他解释和内容:
<举例:数字鸿沟现象>
<各种问题普遍存在>
<对人类各方面产生深远影响>请你根据
在单身的黄金年代我们如何面对爱情:要勇敢地去追求爱情
不要和上一层的 何为单身的黄金时代, 爱情对人们的意义, 目前人的生存和处境更加复杂, 爱情存在肌无力, 最温暖的东西是人和人之间的感情 重复,
生成“要勇敢地追求爱情”下的大纲第2层内容,一行一个条目,生成在<>中,无需其他解释和内容:
<必须树立目标>
<提升心灵的力量>
<走合法的途径去获取>请你根据
为什么我们要好好学习?在快速变化的世界中,持续学习是实现自我价值和社会贡献的关键。
不要和上一层的 理解自己的权利与义务, 正确价值观和社会责任感 重复,
生成“知识是推动社会发展的关键力量”下的大纲第3层内容,一行一个条目,生成在<>中,无需其他解释和内容:
<科技创新与经济发展>
<社会治理与公共政策>
<文化传承与发展>
"""NEXT_LEVEL_PROMPT = """{few_shot}
上面是几个生成大纲具体层的例子。请你根据
{idea}
不要和上一层的 {formatted_previous_list} 重复,
生成“{previous_outline}”下的大纲第{current_level}层内容,一行一个条目,生成在<>中,无需其他解释和内容:
"""

大纲文本提取

简单的提取方法,将模型输出按行分割并去除空白行和格式字符。

def extract_outlines(model_output: str):return [line.strip().strip('<').strip('>')for line in model_output.split('\n')if line.strip()]

baseline 对比、全局变量和简易用户界面

简易的 web 用户界面是基于 gradio 构建的。复现时记得更换为自己的NVIDIA_API_KEY

借助Gradio构建用户友好的交互界面,用户只需输入一个主题和层数,本项目会生成两个版本的PPT大纲,一个是直接生成的,一个是递归生成的,并将两者进行对比展示。

大纲生成的基本过程通过调用 nVidia NIM 平台 的接口,将主题与层级信息传入模型生成器,控制输出大纲的层级深度和层次内容。

import gradio as gr
from openai import OpenAIimport jsonclient = OpenAI(base_url="https://integrate.api.nvidia.com/v1",api_key=NVIDIA_API_KEY
)def generate_outline(input_text, layer: int):prompt = BASE_PROMPT.format(idea=input_text, layer=layer)completion = client.chat.completions.create(model="meta/llama-3.1-70b-instruct",messages=[{"role": "user", "content": prompt}],temperature=0.7,max_tokens=1024,)return completion.choices[0].message.content.strip()def compare_outlines(input_text, layers):direct = generate_outline(input_text, int(layers))recursive = recursive_outline(input_text, int(layers))return direct, json.dumps(recursive, ensure_ascii=False, indent=8)iface = gr.Interface(fn=compare_outlines,inputs=["text", gr.Number()],outputs=["text", "text"],title="PPT大纲生成对比",description="输入一个句子,比较直接生成和递归生成的PPT大纲效果。"
)iface.launch()

项目效果

运行后,在浏览器中打开项目前端,输入要生成的主题和期望的层数,可以得到普通方法生成和本方法生成的结果。

在这里插入图片描述
如图所示,递归结构化生成的效果不仅结构清晰、方便利用,而且相对于普通方法,生成了正确的层次深度,大纲对于主题的分析更加深入和全面,有更多的信息量和参考价值。

通过采用递归结构化生成的方法,本项目能够有效地解决传统PPT大纲生成中遇到的各种问题,为用户提供更清晰、有条理的内容。希望本项目的实践经验能够为更多相关应用的探索与优化提供启示和借鉴。

完整代码:


import gradio as gr
from openai import OpenAIfrom __env import NVIDIA_API_KEY
import jsonclient = OpenAI(base_url="https://integrate.api.nvidia.com/v1",api_key=NVIDIA_API_KEY
)BASE_PROMPT = """请你根据主题:“{idea}”生成{layer}层的PPT大纲:\n"""FIRST_LEVEL_EXAMPLE = """请你根据
技术是一把双刃剑,它既能推动社会向前发展,也可能因不当使用而造成伤害。比如数字鸿沟现象。
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:
<信息爆炸的时代>
<科技革命与产业变革>
<社会影响日益凸显>
<人类应未雨绸缪,趋利避害>
<发展趋势及前景,结论>请你根据
为什么我们要好好学习?在快速变化的世界中,持续学习是实现自我价值和社会贡献的关键。
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:
<引言>
<学习对个人成长的意义>
<学习对社会的责任>
<如何有效学习>请你根据
在单身的黄金年代我们如何面对爱情:要勇敢地去追求爱情
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:
<何为单身的黄金时代>
<爱情对人们的意义>
<目前人的生存和处境更加复杂>
<爱情存在肌无力>
<最温暖的东西是人和人之间的感情>
<要勇敢地追求爱情>
"""FIRST_LEVEL_PROMPT = """{few_shot}
上面是几个生成大纲第一层的例子。请你根据
{idea}
生成大纲第1层,一行一个条目,生成在<>中,无需其他解释和内容:"""NEXT_LEVEL_EXAMPLE = """请你根据
技术是一把双刃剑,它既能推动社会向前发展,也可能因不当使用而造成伤害。比如数字鸿沟现象。
不要和上一层的 信息爆炸的时代, 科技革命与产业变革, 人类应未雨绸缪,趋利避害, 发展趋势及前景,结论 重复,
生成“社会影响日益凸显”下的大纲第2层内容,一行一个条目,生成在<>中,无需其他解释和内容:
<举例:数字鸿沟现象>
<各种问题普遍存在>
<对人类各方面产生深远影响>请你根据
在单身的黄金年代我们如何面对爱情:要勇敢地去追求爱情
不要和上一层的 何为单身的黄金时代, 爱情对人们的意义, 目前人的生存和处境更加复杂, 爱情存在肌无力, 最温暖的东西是人和人之间的感情 重复,
生成“要勇敢地追求爱情”下的大纲第2层内容,一行一个条目,生成在<>中,无需其他解释和内容:
<必须树立目标>
<提升心灵的力量>
<走合法的途径去获取>请你根据
为什么我们要好好学习?在快速变化的世界中,持续学习是实现自我价值和社会贡献的关键。
不要和上一层的 理解自己的权利与义务, 正确价值观和社会责任感 重复,
生成“知识是推动社会发展的关键力量”下的大纲第3层内容,一行一个条目,生成在<>中,无需其他解释和内容:
<科技创新与经济发展>
<社会治理与公共政策>
<文化传承与发展>
"""NEXT_LEVEL_PROMPT = """{few_shot}
上面是几个生成大纲具体层的例子。请你根据
{idea}
不要和上一层的 {formatted_previous_list} 重复,
生成“{previous_outline}”下的大纲第{current_level}层内容,一行一个条目,生成在<>中,无需其他解释和内容:
"""def generate_outline(input_text, layer: int):prompt = BASE_PROMPT.format(idea=input_text, layer=layer)completion = client.chat.completions.create(model="meta/llama-3.1-70b-instruct",messages=[{"role": "user", "content": prompt}],temperature=0.7,max_tokens=1024,)return completion.choices[0].message.content.strip()def extract_outlines(model_output: str):# 简单的提取方法,将模型输出按行分割并去除空白行return [line.strip().strip('<').strip('>')for line in model_output.split('\n')if line.strip()]def generate_first_level_outlines(idea):first_level_template = FIRST_LEVEL_PROMPT.format(few_shot=FIRST_LEVEL_EXAMPLE,idea=idea,)response = client.chat.completions.create(model="meta/llama-3.1-70b-instruct",messages=[{"role": "user", "content": first_level_template}],temperature=0.7,max_tokens=1024,)return extract_outlines(response.choices[0].message.content.strip())def generate_next_level_outline(idea: str,current_level: int,previous_outline: str,previous_list: list[str],target_layer: int,
):formatted_previous_list = ', '.join(previous_list)next_level_template = NEXT_LEVEL_PROMPT.format(few_shot=NEXT_LEVEL_EXAMPLE,idea=idea,formatted_previous_list=formatted_previous_list,previous_outline=previous_outline,current_level=current_level,)response = client.chat.completions.create(model="meta/llama-3.1-70b-instruct",messages=[{"role": "user", "content": next_level_template}],temperature=0.7,max_tokens=1024,)outlines = extract_outlines(response.choices[0].message.content.strip())if target_layer == current_level:return outlineselse: return {text: generate_next_level_outline(idea, current_level + 1, text, outlines, target_layer) for text in outlines}def recursive_outline(idea, target_layer: int):first_level = generate_first_level_outlines(idea)return {text: generate_next_level_outline(idea, 2, text, first_level, target_layer) for text in first_level}def compare_outlines(input_text, layers):direct = generate_outline(input_text, int(layers))recursive = recursive_outline(input_text, int(layers))return direct, json.dumps(recursive, ensure_ascii=False, indent=8)iface = gr.Interface(fn=compare_outlines,inputs=["text", gr.Number()],outputs=["text", "text"],title="PPT大纲生成对比",description="输入一个句子,比较直接生成和递归生成的PPT大纲效果。"
)iface.launch()

相关文章:

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

大模型生成PPT大纲优化方案&#xff1a;基于 nVidia NIM 平台的递归结构化生成 待解决的问题 生成PPT大纲是一种大模型在办公场景下应用的常见需求。 然而&#xff1a; 目前直接让大模型生成大纲往往是非结构化的&#xff0c;输出格式多样&#xff0c;难以统一和规范&#…...

MRSO算法(JCR2区)

原论文摘要&#xff1a;智能技术的快速发展促使利用自然行为来解决复杂问题的优化算法得以发展。其中&#xff0c;鼠群优化算法&#xff08;Rat Swarm Optimizer&#xff0c;RSO&#xff09;受老鼠的社会和行为特征启发&#xff0c;在各个领域已展现出潜力&#xff0c;但其收敛…...

最新Spring Boot3框架入门教程,基础知识讲解(参考官方文档),同时基于MybatisPlus+MYSQL搭建后台管理系统基础流程(附源码)

本文所涉及的代码以及相关文件均上传至仓库:GitHub - yang66-hash/XDPropertyManagementSystemDemo: This is a demo template based on SpringBoot3 in the background of property management system. Spring Boot 是由 Pivotal 团队开发的一款开源框架&#xff0c;它可以帮助…...

导数的概念及在模型算法中的应用

一. 导数概念与计算 1. 导数的物理意义&#xff1a; 瞬时速率。一般的&#xff0c;函数yf(x)在x处的瞬时变化率是 2. 导数的几何意义&#xff1a; 曲线的切线&#xff0c;当点趋近于P时&#xff0c;直线 PT 与曲线相切。容易知道&#xff0c;割线的斜率是当点趋近于 P 时&…...

获取首日涨停封盘后第二次交易日上涨/下跌的概率

有许多投资者喜欢在股票涨停封盘后&#xff0c;跟进买入。普通股民会认为一个能在今日涨停封盘的股票&#xff0c;证明其上市公司正有十分重大的利好信息&#xff0c;只需要跟进购买便可以获取短期利益。 我们用数据来看一下在当日涨停封盘后&#xff0c;第二次交易日是上涨还…...

shell $ 用法

Shell脚本中$符号的几种用法小结_linux shell_脚本之家 Shell 传递参数 | 菜鸟教程 $ 符号说明$0Shell 的命令本身1到9表示 Shell 的第几个参数$?显示最后命令的执行情况$#传递到脚本的参数个数$$脚本运行的当前进程 ID 号$*以一个单字符串显示所有向脚本传递的参数$!后台运行…...

如何用支付宝实现靠脸吃饭

还记得上学时&#xff0c;每当下课铃声响起&#xff0c;我们就会像一群脱缰的野马一样&#xff0c;浩浩荡荡地冲向食堂。最令人崩溃的时刻莫过于终于到达打饭窗口前排时&#xff0c;却发现饭卡忘带了&#xff01;但现在&#xff0c;这种情况将不再发生。许多学校食堂已经配备了…...

Visual Studio的实用调试技巧总结

对于很多学习编程的老铁们来说&#xff0c;是不是也像下面这张图一样写代码呢&#xff1f; 那当我们这样编写代码的时候遇到了问题&#xff1f;大家又是怎么排查问题的呢&#xff1f;是不是也像下面这张图一样&#xff0c;毫无目的的一遍遍尝试呢&#xff1f; 这篇文章我就以 V…...

graphrag学习总结

学习视频&#xff1a;b站链接 项目链接 GraphRAG 的基本概念 Document&#xff08;文档&#xff09;&#xff1a;系统中的输入文档。这些文档要么代表CSV中的单独行&#xff0c;要么代表单独的txt文件。 TextUnit&#xff08;文本块&#xff09;&#xff1a;要分析的文本块。…...

专题:贪心算法(已完结)

1.分发饼干 方法一&#xff1a;用最大的胃口 找到最大的饼干&#xff08;先遍历胃口&#xff09; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 主要思路 用最大的饼干找最大的胃口sort(g.begin(),g.end());so…...

Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式

单机模式 单机模式是Hadoop最简单的运行模式。在单机模式下&#xff0c;所有Hadoop组件都运行在单个机器上&#xff0c;包括HDFS、MapReduce等。由于只有一个节点参与计算&#xff0c;单机模式适用于开发和测试阶段&#xff0c;不适合用于处理大规模数据。在单机模式下&#xf…...

JavaScript将array数据下载到Excel中

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…...

【前端】Bootstrap:快速开始

Bootstrap 是一个功能强大且易于使用的前端框架&#xff0c;专门用于创建响应式和移动优先的网页。学习Bootstrap不仅可以帮助你快速构建现代网页&#xff0c;还可以提升你对前端开发流程的理解。本教程将从基础概念开始&#xff0c;逐步引导你掌握Bootstrap&#xff0c;并通过…...

文献阅读(222) VVQ协议死锁

题目&#xff1a;VVQ: Virtualizing Virtual Channel for Cost-Efficient Protocol Deadlock Avoidance时间&#xff1a;2023会议&#xff1a;HPCA研究机构&#xff1a;KAIST request-reply协议死锁如下图所示&#xff0c;每个node收到request之后发送reply&#xff0c;但是想…...

Node.js管理工具NVM

nvm&#xff08;Node Version Manager&#xff09;是一个用于管理多个 Node.js 版本的工具。以下是 nvm 的使用方法和一些常见命令&#xff1a; 一、安装 nvm 下载 nvm&#xff1a; 地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases访问 nvm 的 GitHub 仓…...

云原生后端

云原生后端&#xff08;Cloud-Native Backend&#xff09;是指在云计算环境中&#xff0c;利用云原生技术&#xff08;如容器、微服务、服务网格等&#xff09;构建和部署后端应用程序的一种方法。以下是对云原生后端的详细讲解&#xff1a; 1. 定义 云原生是一种设计和构建应…...

充电宝哪个品牌值得买?2024年五款靠谱充电宝推荐

哪个品牌充电宝值得买&#xff1f;用过这么多款充电宝&#xff0c;个人还是觉得充电快、小巧便携的充电宝使用会更加的方便&#xff01;在当今快节奏的生活中&#xff0c;手机已成为我们不可或缺的伙伴。然而&#xff0c;随着智能手机功能的日益强大&#xff0c;电池续航问题也…...

YOLOv11对比YOLOV8网络结构变化分析,帮助你真正的理解和学习yolo框架

本文在大佬的文章YOLOv11 | 一文带你深入理解ultralytics最新作品yolov11的创新 | 训练、推理、验证、导出 &#xff08;附网络结构图&#xff09;基础上做了一些补充。 一、YOLOv11和YOLOv8对比 二、YOLOv11的网络结构图 下面的图片为YOLOv11的网络结构图。 三、YOLOv11…...

弃用RestTemplate,RestClient真香!

在Spring框架的发展历程中&#xff0c;RestTemplate作为发起HTTP请求的同步API&#xff0c;曾经扮演着举足轻重的角色。然而&#xff0c;随着技术的不断进步和微服务架构的普及&#xff0c;RestTemplate的局限性逐渐显现&#xff0c;尤其是在处理高并发和异步请求时。因此&…...

electron-vite_10electron-updater软件更新

网很多electron-updater更新文章&#xff0c;这里只简单写一下演示代码&#xff1b; 为什么选择 electron-updater插件可以自动更新应用程序,同时支持多个平台;比官方要强; 官方的autoUpdater仅支持macOS 和 Windows 自动更新; 注意是自动&#xff0c;直接更新那种; 脚手架中是…...

React native之全局变量存储AsyncStorage

AsyncStorage是React native中对变量&#xff0c;对象进行全局存储&#xff0c;读取的异步使用对象。以key值进行存储。但是只能存储字符串数据&#xff0c;想存储对象&#xff0c;可把对象JSON进行序列化存储&#xff0c;读取的时候再转成JSON对象。 AsyncStorage.getItem()-…...

获取vue实例

需要注意的是&#xff0c;无论通过哪种方式获取元素&#xff0c;如果元素为 vue 组件&#xff0c;则需要在子组件中使用 defineExpose 进行暴露。 在父组件中&#xff0c;我们静态绑定 childRef&#xff1a; 在子组件中&#xff0c;我们需要通过defineExpose函数&#xff0c;手…...

基于Python实现电影推荐系统

电影推荐系统 标签&#xff1a;Tensorflow、矩阵分解、Surprise、PySpark 1、用Tensorflow实现矩阵分解 1.1、定义one_batch模块 import numpy as np import pandas as pddef read_and_process(filename, sep ::):col_names [user, item, rate, timestamp]df pd.read_cs…...

【linux】进程理解

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.进程的基本概念进程的组成部分进程的特性进程的状态 02.PCBPCB的组成部分task_structtask_struct 的主要组成部分 03.进程属性查看进程 04.通过系统调用创建进程-fork初识工作…...

文件IO练习1

题目一&#xff1a; 1、使用fread和fwrite完成两个文件的拷贝&#xff0c;要求源文件和目标文件由外界输入 实现代码&#xff1a; #define LEN_BUF 256int main(int argc, const char *argv[]) {if(argc ! 3){fprintf(stderr,"程序入参输入有误\n");return -1;}FILE…...

c++ std::future 和 std::promise 的实现工作原理简介

为了便于理解 std::future 和 std::promise 的实现工作原理&#xff0c;我们可以创建一个简化的版本。这包括共享状态、Promise 设置值、Future 获取值的核心机制。我们的示例代码将实现 SimplePromise 和 SimpleFuture 两个类&#xff0c;二者通过一个共享状态实现线程间的通信…...

MATLAB(Octave)混电动力能耗评估

&#x1f3af;要点 处理电动和混动汽车能耗的后向和前向算法模型(simulink)&#xff0c;以及图形函数、后处理函数等实现。构建储能元数据信息&#xff1a;电池标称特性、电池标识符等以及静止、恒定电流和恒定电压等特征阶段。使用电流脉冲或要识别的等效电路模型类型配置阻抗…...

opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用

BPHFaceRecognizer_create算法 在OpenCV中&#xff0c;cv2.face.LBPHFaceRecognizer_create()函数用于创建一个局部二值模式直方图&#xff08;Local Binary Patterns Histograms&#xff0c;简称LBPH&#xff09;人脸识别器。LBPH是一种用于人脸识别的特征提取方法&#xff0…...

HTML+CSS总结【量大管饱】

文章目录 前言HTML总结语义化标签常用标签H5新的语义元素H5的媒体标签\<embed> 元素&#xff08;少用&#xff09;\<object>元素&#xff08;少用&#xff09;\<audio>\<video> 元素包含关系iframe元素嵌入flash内容常用表单inputselect CSS总结权重样…...

Android开发之Broadcast Receive(广播机制)其实开发如此简单

什么是BroadcastReceiver BroadcastReceiver&#xff08;广播接收器&#xff09;用于响应来自其他应用程序或者系统的广播消息。这些消息有时被称为事件或者意图。本质上来讲BroadcastReceiver是一个全局的监听器&#xff0c;隶属于Android四大组件之一。 使用场景 1、 不同…...