康奈尔大学之论文审稿模型Reviewer2及我司七月对其的实现(含PeerRead)

前言

自从我司于23年7月开始涉足论文审稿领域之后「截止到24年6月份,我司的七月论文审稿GPT已经迭代到了第五版,详见此文的8.1 七月论文审稿GPT(从第1版到第5版)」,在业界的影响力越来越大,所以身边朋友如发现业界有相似的工作,一般都会第一时间发给我,比如本部分要介绍的康奈尔大学的reviewer2

当然,我自己也会各种看类似工作的论文,毕竟同行之间的工作一定会互相借鉴的,我们会学他们,他们看到我们的工作后自然也会受到不小的启发,而

在大模型时代

  • 一个技术人保持竞争力的最佳方式就两点:保持对最新技术/paper的跟踪,每天各种大量实践/折腾/实验
  • ​对于一个组织也是如此,通过项目(整个小组 + 2-4人的小队伍双重协作),是提高组织战斗力的最佳方式,不然各自为战 ​​​

对于论文审稿,我司的思路是通过一系列paper-review对去微调一系列开源模型,而对于review数据的处理更多是把一篇篇paper的多个review做多聚一的摘要操作,且从中梳理出来4或7个要点,然后基于这4-7个要点让微调后的模型去自动生成一篇篇新paper的review

而这4-7个要点的定义就比较关键了

  • 一方面要尽可能涵盖所有论文的核心特征,这叫通用性
    比如斯坦福那篇论文让GPT4当审稿人,梳理出来4个方面的要点:重要性 新颖性、可能被接收的原因、可能被拒绝的原因、其他重要改进建议
  • 二方面 又要尽可能抓住每一篇具体paper的各自特色,这叫特异性
    比如马上要介绍的康奈尔大学的reviewer2

总之,这两方面在一定程度上是有点矛盾的,所以需要想尽办法做好平衡

第一部分 康奈尔大学之论文审稿模型Reviewer2的原理

1.1 整体训练流程、推理流程、数据集

1.1.1 Reviewer2的整体训练流程

24年2月,康奈尔大学的几个研究者Zhaolin Gao, Kianté Brantley, Thorsten Joachims​​​​​​​通过此篇论文《Reviewer2: Optimizing Review Generation Through Prompt Generation》,也提出了一个论文审稿模型Reviewer2,其整体流程为(注意,x表示review的prompt,y表示review本身,p表示论文)

  1. PGE方法从人工review中生成预设问题数据(相当于从review当中提炼审稿人针对一篇篇paper所对应的关注问题点),相当于paper =》 人工review =》通过PGE:即llama2 70B提炼预设问题 =》预设问题
    本质就是先构造出大量的review-prompt数据集,然后取出review-prompt数据集中的prompt,和review-prompt数据集中review所对应的paper,组合到一块成为[paper,prompt]数据

    使得接下来便可以使用 [paper, 预设问题] 数据训练得到一个能根据不同paper提出不同预设问题的模型M_p,相当于让模型A学会根据不同的paper提问(毕竟,每篇review的预设问题不太一样),毕竟提问是门艺术
    M_{p}: p \rightarrow\left\{x^{1}, \ldots, x^{k}\right\}
    即to produce a set of aspect prompts x1, ...xk for paper p that cover the aspects that a reviewer may comment on for this paper

    这里有比较重要的一点是,可能会有读者疑问,这个prompt到底是根据paper生成,还是根据review去生成,实际上可以这么理解,即prompt的ground truth是基于PGE方法从人工review当中生成的prompt,而训练模型M_p的时候(当然 更包括推理),M_p是根据paper去预测prompt
    可能又有读者疑问,那为何不人工根据一些paper标注其对应的「ground truth版的prompt」,然后再训练模型M_p去预测prompt呢?这点请读者先自行思考,^_^。至于什么是PGE,下文2.2节会重点阐述
  2. 使用 [paper + M_p产生的预设问题, review] 训练模型M_r
    M_{r}:(p, x) \rightarrow y
    a) 即先把不同的paper输入模型M_p来产生对应的预设问题(好引导或提示模型M_r去输出与paper息息相关的review)
    b) 然后再把paper和预设问题输入模型M_r来得到review
    c) 最终和人工review对比词的重叠度以不断迭代模型M_r

    且类似七月审稿GPT,其也基于longlora的S2-Attn和FlashAttention2把llama2 70B的上下文长度扩展到了32k

1.1.2 Reviewer2的推理流程

推理的时候,在为新的论文 p'生成评论时,我们首先查询 M_p以获取review prompt x。 然后我们查询 M_r以为生成的方面提示生成review y

1.1.3 Reviewer2数据集的详细信息

如下图所示,对于Reviewer2的数据集,其来源于多个会议

  1. 来自PeerRead的CONLL-16和ACL-17
  2. 来自NLPeer的 COLING-20和 ARR-22
  3. 来自openreview的ICLR papers from 2017 to 2023
  4. 来自papers.neurips.cc的NeurIPS papers from 2016 to 2020
  5. 来自openreview的NeurIPS papers 2021 to 2022

综合3 4 5,则意味着包含了ICLR 17-23 and NeurIPS 16-22的paper

1.2 PGE:在上下文示例下基于Review生成prompt(含其评估)

为了给每个review生成相应的prompt,Reviewer2提出了带有评估的提示生成(Prompt Generation with Evaluatio,简称PGE)流程,包括生成步骤和评估步骤

具体来说,给定m篇论文P=\left\{p_{1}, p_{2}, \ldots, p_{m}\right\},和相应的人工reviewY=\left\{y_{i}^{n} \mid 1 \leq i \leq m, 1 \leq n \leq n_{i}\right\}其中n_i是论文i的review数量,即一篇paper一般都会有多个review,比如一篇论文5个review

  1. 该流程的目标是在上下文数百个review-prompt的示例下生成一组review的promptX=\left\{x_{i}^{n} \mid 1 \leq i \leq m, 1 \leq n \leq n_{i}\right\},其中一个prompt对应一个review,比如5个review则有5个对应的prompt
    对于reviewy_{i}^{n},生成步骤生成一个promptx_{i}^{n}
  2. 然后对生成的prompt进行评估,评估在上下文25个review-prompt-score的示例下且基于一个5分制度,完成对生成的prompt的打分(比如1-5分)
  3. 如果x_{i}^{n}得分为5,那么\left(x_{i}^{n}, y_{i}^{n}\right)对便存储在集合 S中,S=S \cup\left\{\left(x_{i}^{n}, y_{i}^{n}\right)\right\},否则重新生成提示

整个过程跟self-instruct还是有点类似的(至于什么是self-instruct,详见此文的2.1.2 什么是self-instruct方式:提示GPT3/GPT3.5/GPT4的API收集数据 ),下面更加细致的逐一阐述上述三个步骤

1.2.1 Prompt的具体生成:基于数百个示例

为了更好的根据review生成prompt,咱们总得有些示例 是不?那怎么构建review-prompt的示例呢,先机器生成然后人工注释,最后示例生成后便可以初始化S,具体而言

  1. 首先使用Llama-2-70B-Chat以zero-shot的方式为随机选择的100个review生成prompt「To construct these examples, we use Llama-2-70B-Chat (Touvron et al., 2023) to generate prompts for a randomly selected subset of 100 reviews in a zero-shot fashion 
  2. 然后,通过删除prompt中与review不相关的问题,且添加在review中涵盖但prompt中遗漏的问题,并以与实际review中蕴含问题的开放式格式对齐等这3种方式来手动优化review prompt(we manually refine the prompts by removing irrelevant questions, adding missing questions that are covered in the review, and refining to align with the open-ended format of review questions)
    以下便是一个review-prompt对的示例

这些示例之后将在prompt的生成过程中用作初始上下文示例「即We initialize S with human-annotated examples that will be used as initial in-context examples during generation,说白了,为了提高提示生成的性能,作者团队在review prompt生成的过程运用了上下文学习(in-context learning,简称ICL)

1.2.2 Prompt的具体评估:以25个人工review-prompt-score示例为参考基准

与生成类似,Reviewer2在评估步骤中也应用ICL

  1. 首先,使用Llama-2-70B-Chat根据5分制评估review-prompt对,每个分数从1到5都有五个上下文示例(相当于总计有25个评分示例)。注意,此处的上下文示例是手动构建的,并在所有评估中保持一致「We use Llama-2-70B-Chat to evaluate the review-prompt pair based on a 5-point scale with five in-context ex-amples for each score from 1 to 5. The in-context examples (shown in Appendix C) are manually constructed and remain consistent across all evalutions

    以下便是一个最终对所生成的review prompt评分为3分的示例(可想而知,这样评分为3分的示例有5个)

    且受到思维链提示的启发,还会提示LLM在生成最终分数之前为分数生成解释,以鼓励更准确的评估
  2. 其次,便可以基于一些评分示例作为上下文学习的数据,给新的review-prompt评分了(下图来自论文中附录A的第二part)

1.2.3 Prompt的再生:基于人工评分基准评判下得分不够则重新生成

为了确保生成的prompt的质量,如果得分不是 5,则会重新生成prompt

由于生成prompt时的上下文示例是随机抽样而不是固定集合,重新生成步骤保证了与之前的生成相比,必会生成不同的prompt,从而减少冗余(Since the in-context examples for generation are randomly sampled rather than a fixed set, the regeneration step is guaranteed to generate a different prompt compared to the previ-ous generations, minimizing redundancy)

从而,每个review限制生成prompt 5次,并且如果超过限制,则不再生成。超过 90%的prompt在3次或更少的生成次数内达到 5分(We use a limit of 5 generations per review, and the review is excluded from further generation if it exceeds the limit. More than 90% of the reviews take less than or equal to 3 generations to reach a score of 5)

走完上面一个完整流程之后(先生成100个种子数据集,然后评分、筛选),便可以基于已有的review-prompt数据集,通过ICL的方式生成更多包含review-prompt数据集了,其中,有两个小细节

  1. 由于上下文示例是从S中随机抽样的(一开始S中虽然只有100个review-prompt示例,随着更多的prompt生成并保存到S中,可用示例的池也扩大了,即可以不断扩大到数百个示例),确保了prompt的多样性
    As more prompts are generated and saved to S, the pool of available examples also expands, ensuring the diversity of the prompts.
  2. 且总是在满足模型上下文长度约束的同时,采样最大可能数量的上下文示例
    We always sample the maximum possible number of in-context examples while satisfying the context length constraint

第二部分 我司七月对Reviewer2工作的实现

我司项目组一开始没找到康奈尔的这个reviewer2工作公开的数据集、代码(包括GitHub),所以我司七月审稿项目组决定自行实现下

由于实现思路是先训练可根据paper提出预设问题的模型,然后根据prompt生成review

2.1 先通过PGE的方式造大量的review-prompt数据

说干就干

  1. 第一步 人工造种子数据集
    120篇paper-review,总计六个人每人负责给20篇paper所对应的review,提示llama 3或GPT4-0409 生成prompt(问题)
    1 文弱,3
    2 三太子,3
    3 吴同学,4
    4 扶摇,3
    5 朝阳,4
    6 王同学,3
    最终通过GPT4-0409来评判
  2. 第二步 通过上面的种子数据,基于PGE扩大更多数据
  3. 第三步
    基于120篇paper让llama 3预测预设问题,然后通过[paper,第二步出来的预设问题]微调llama 3

2.1.1 先提示llama3或GPT4-0409生成prompt

给定的review数据均以csv文件格式进行存储,相关字段说明如下:

  1. b_forum:相关数据在paperreview网站中的id(相当于论文讨论页的id)
  2. b_title:Paper标题
  3. b_url:相关数据在paperreview网站中的链接
  4. c_content_list_of_str:由当前Paper对应的各个Reviews组成的列表
  5. c_content_str_joined_by_3lf:以3个换行符为间隔,由当前Paper对应的各个Reviews拼接成的字符串
  6. provided:该份数据所用于测试的模型
  7. bucket:该份数据所对应的序号信息

然后提示大模型生成对应review的预设问题,具体而言,有两种操作方式

  1. 针对每一篇paper的多个review依次去提出预设问题「比如一篇paper三个review则三段预设问题,如果每段预设问题是4个预设问题的话,三段则总计12个预设问题
  2. 把每一篇paper的所有review一次性给到大模型,让大模型一次性生成所有review所对应的全部预设问题

且让大模型针对review提出问题的时候,还让其说出依据以及出处,如下所示(至于完整代码,参见七月官网的大模型商用项目之审稿微调实战营)

template_prompt = \
"""
Analyzing the provided review, identify a set of questions that the reviewer is attempting to address regarding the paper without being too specific. 
You should generate some questions based on the provided review,for each question, provide the corresponding reasons and informations of the question in reviews.
The given reviews is between the "######".

######
{}
######
You should output according to the following json format:

{{
 List multiple items by using Dict, The key is a question of the item, and the value is a dict with 'reasons' and 'informations' including the corresponding reasons and informations of the question in reviews.
 }} 

"""

效果如下图所示

// 待更

2.1.2 对于大模型生成的prompt进行打分

如上面贴过的Prompt for Evaluation图(上文1.2.2节中的第二个图),我们可以基于以下标准给各个生成的prompt打分

Below is a set of questions and a candidate answer. Evaluate the quality of the questions. Are the questions a good match to the candidate answer?

Please assign a score using the following 5-point scale:
1: This score indicates that the response deviates significantly from the instruction, providing information or addressing aspects that were not required or specified.
2: This score suggests that the response is limited in scope, focusing on a small subset of the questions posed in the instruction. It does not comprehensively cover the entire set of questions.
3: This score indicates that the response covers a substantial portion of the questions outlined in the instruction but falls short of addressing all of them. It suggests a moderate level of completeness.
4: This score indicates that the response covers most of the questions. However, there is some irrelevant information in the answer that is not asked by any of the questions.
5: This score indicates that the response is comprehensive, addressing all questions in the instruction without any irrelevant information.

Here are some examples:
Questions
[EXAMPLE PROMPT]

Answer:
[EXAMPLE REVIEW]

Assessment:
[EXAMPLE ASSESSMENT]
Score: [EXAMPLE SCORE]

具体而言,按照reviewer2论文的方法,基于5分制,通过大模型或人工编写对Review-prompt的评估打分的例子,便于模型通过ICL方式对生成的prompt进行打分,以筛选分数较高(5分)的例子,放入种子集。其中,1,2,3,4,5每个分数给出5个例子,共计25个

  1. 对种子集进行精选,精选的过程来区别分数;
  2. 将筛选前的作为低质量样本;
  3. 根据论文中的规则,让模型给种子集数据打分

我司具体实现时,朝阳和文弱弄了163个评分例子

各个分数例子数量

1分

2分

3分

4分

5分

共计

朝阳

1

2

28

28

31

90

文弱

5

5

21

23

24

73

共计

6

7

49

51

55

163

其中1分例子主要特点为问题数量太少。2分例子主要特点为问题问的太细。

最终,从上述例子中,每个分数例子随机抽取了5个,共得到25个评分例子,另将5分的55个5分例子作为种子数据集

2.1.3 通过ICL方式根据review生成prompt并打分,能得5分者进入review-prompt数据集

接下来,便可以编写代码了(完整代码见七月官网的:大模型商用项目之审稿微调实战营)

  1. 实现通过ICL方式根据review生成prompt功能
    从已有的种子集中随机抽取5个例子,通过大模型生成prompt
  2. 实现通过ICL方式对生成的prompt进行打分的功能
    根据大模型或人工编写的评估打分的例子,通过大模型对生成的prompt打分
  3. 实现设置重新生成规则的功能
    每个review限制生成prompt 5次,并且如果超过限制,则不再生成(论文中超过 90%的prompt在3次或更少的生成次数内达到 5分)。同时,将达到5分的例子存入S数据集中

// 待更


附录 PeerRead:根据review给paper的各方面要点打分

昨晚在思考:如何评判一篇论文是否是好论文,或是否可以中稿顶会,然后无意中看到这篇论文:A Dataset of Peer Reviews (PeerRead): Collection, Insights and NLP Applications

接下来,咱们好好看下这篇论文

3.1 PeerRead的两个工作及对我司审稿GPT的启发

3.1.1 PeerRead的两个工作:预测论文是否能被接受、根据paper的review给paper打分

2018年,来自CMU、艾伦人工智能研究所等机构的研究者提出了同行评审数据集PeerRead,其对应论文为《A Dataset of Peer Reviews (PeerRead): Collection, Insights and NLP Applications》,对应的GitHub为:GitHub - allenai/PeerRead: Data and code for Kang et al., NAACL 2018's paper titled "A Dataset of Peer Reviews (PeerRead): Collection, Insights and NLP Applications"

PeerRea主要做了两个工作

  1. 给定论文,预测其是否会被某个会议接收(ground truth自然是该篇论文的实际中稿情况),用的模型有逻辑回归、SVM、神经网络二分类、随机森林等
  2. 给定论文的review,预测论文在某些方面的数值评分,比如新颖性能得几分,比如1-5分
    In the second task, given a textual review, we predict the aspect scores for the paper such as novelty, substance and meaningful comparison

    至于预测分值所参照的的「ground truth——人工评分」是怎么来的呢?具体步骤是
    a) 先爬取openreview上一篇篇paper和其对应的review(比如某paperreview上ICLR 2017的427篇paper及其对应的1304条review)
    b) 然后根据实际的review内容,给论文的各个要点人工打分(比如新颖性等各个方面均做对应评分:1-5分)

    当然 这第二个工作,最终本质是为了给定论文,然后评判其在某些要点方面的评分,但模型一开始时,直接根据论文给出各个方面的评分 还是相对困难的,而由于可以爬到论文的review,从而根据review去打出论文各个方面的评分 则相对容易些
    毕竟review有点类似对论文的摘要、或信息上的浓缩,且review通常涵盖很多主观上的喜好、优点 缺点,相对更容易打分

3.1.2 PeerRead的工作对我司审稿GPT的启发

首先,PeerRead的第一个工作,我们可能可以通过他们爬的的paper-review数据微调,以预测review,当然,我们要的是:他们的数据里面那些我们之前没有爬到的数据

其次,PeerRead的第二个工作——review打分模型,对我们的启发在于

  1. 借助18年「他们人工标注的review-review各方面要点的评分」的数据(但完整度 还有待查看,当然如果有的review不涉及某几个要点,而这也正常,毕竟不同的reviewer关注不同的要点,则可以尝试把所有review做下多聚一的摘要操作)

    \rightarrow  我们可以训练一个「新的review打分大模型」基于review给打分
    \rightarrow  也可以训练一个「新的大模型」,针对paper做各方面要点的打分预测「提示模型针对那7个要点进行预测评分,比如适当性、清晰度、原创性、准确性、有意义的比较、内容和影响等等当然,过程中可以通过爬到的paper-review数据(review需要根据把7个要点做下整理或多聚一的摘要操作),对该模型做下ICL学习甚至微调,以让模型根据paper生成那7个要点方面的review」,其ground Turth自然也是18年「他们人工标注的各方面要点的评分」的数据
  2. 有了上面那两个模型,最终 就可以做到:给定任意一篇论文,不但自动生成其对应的review,我们还能依次给review当中的比如7个要点 逐一打分
    然后每个要点的得分乘以各自不同的权重,得到该篇论文的最终总得分
    嗯,还是挺顺畅且理想化的

3.2 PeerRead论文解读

3.2.1 peerread数据集的构成

数据构成如下图所示

  1. peerread的作者们与Softconf会议管理系统和CoNLL 20162和ACL 20173会议的会议主席协调,允许作者和评审者选择加入他们的草稿和评审
    从而便导致CoNLL 2016的22个提交有39个评审,ACL 2017的137个提交有275个评审
  2. 2013年,NIPS会议开始将所有被接受的论文与匿名的文本review一起发布,还附带了1-3的置信度评级
    peerread因此收集了NIPS 2013-2017年间所有被接受的论文及其review,总共有9,152条review和2,420篇论文
  3. 此外,还收集了ICLR 2017会议的所有投稿,总共有1,304条官方匿名review,其中包括427篇论文(177篇被接受,255篇被拒绝)
  4. 至于arxiv上的11778篇论文,则均没带review

3.2.2 对review各个方面要点的评分

根据review的各个方面给paper评分,本质是一个多分类任务(The second task is a multi-class regression task to predict scores for seven review aspects)

  1. 至于哪七个方面呢?
    答案是他们为每个review注释了这七个方面:适当性、清晰度、原创性、准确性、有意义的比较、内容和影响(即‘impact’, ‘substance’, ‘appropriateness’, ‘comparison’, ‘soundness’, ‘originality’ and ‘clarity’,当然,对于这7个要点,可能大部分论文的review会涉及某个几个要点更多些,而某几个要点则在大部分review中讨论的比较少),具体操作时
    \rightarrow  对于每个方面,向注释者提供了ACL 2016评审人员针对该方面的指示。注释者的任务是阅读详细的评审文本(如论文原文所说,In order to increase the utility of the dataset, we annotated 1.3K reviews with aspect scores, based on the corresponding review text. Annotations were done by two of the authors最终,两位注释者完成了对1.3K也可能是1.5K个review在各个方面的评分,每个review平均几百个单词,并为每个方面选择1-5之间的分数 )
    比如,For this task, we use the two sections of PeerRead which include aspect scores: ACL 2017 and ICLR 2017
    顺道说一嘴,CoNLL 2016部分也包括方面得分,但对于训练来说太小了
    \rightarrow  当评审review没有涉及特定方面时,我们不为该方面选择任何分数,而是使用特殊的“未讨论”值
  2. 为了预测各个方面的分数,可以训练一个模型做多分类,每个分类得到的logits对应这个类别的被预测的分数(损失函数是预测分数与人工标注的真实分数之间的均方误差),他们选择了3种架构:CNN RNN DAN
    最终不单训练根据单纯review打分的模型,还训练了分别根据paper、paper+review打分的模型

    不足之处在于
    a) 用的18年或之前的模型 所以效果不会太好
    b) 更何况他们当时因为由于论文往往很长,所以只取了每篇论文和review的前1000和200个token,然后在模型同时考虑论文和review时将这两个部分连接起来

    Since scientific papers tend to be long, we only take the first 1000 and 200 tokens of each paper and review, respectively, and concatenate the two prefixes when the model conditions on both the paper and review text

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

示例:推荐一个应用Adorner做的通知和提示消息对话框

一、目的:在开发过程中,增加一些提示消息可以很好的提高用户体验,下面介绍一个用于增加提示消息的库 二、效果如下 可以看到右侧顶端弹出提示消息,消息间隔3s自动退出 三、环境 VS2022 Net7 四、使用方式 安装nuget包&#xff…

SLAM Paper Reading和代码解析

最近对VINS、LIO-SAM等重新进行了Paper Reading和代码解析。这两篇paper和代码大约在三年前就读过,如今重新读起来,仍觉得十分经典,对SLAM算法研发具有十分重要的借鉴和指导意义。重新来读,对其中的一些关键计算过程也获得了更新清…

【QT】

通信服务端实现 widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTcpServer>//服务器类 #include <QMessageBox>//消息 #include <QTcpServer> #include <QList> #include <QTcpSocket> QT_BEGIN_NAMESPAC…

一、企业级架构设计-archimate基础概念

目录 一、标准 二、实现工具 1、Archimate 1、Archimate 基本概念 1、通用元模型 2、结构关系 3、依赖关系 1、服务关系 2、访问关系 3、影响关系 1、影响方式 2、概念 3、关系线 4、案例 4、关联关系 4、动态、节点和其他关系 1、时间或因果关系 2、信息流 …

JavaScript的学习之旅之初始JS

目录 一、认识三个常见的js代码 二、js写入的第二种方式 三、js里内外部文件 一、认识三个常见的js代码 <script>//写入js位置的第一个地方// 控制浏览器弹出一个警告框alert("这是一个警告");// 在计算机页面输入一个内容&#xff08;写入body中&#xff…

运算放大器(运放)低通滤波反相放大器电路和积分器电路

低通滤波反相放大器电路 运放积分器电路请访问下行链接 运算放大器(运放)积分器电路 设计目标 输入ViMin输入ViMax输出VoMin输出VoMaxBW&#xff1a;fp电源Vee电源Vcc–0.1V0.1V–2V2V2kHz–2.5V2.5V 设计说明 这款可调式低通反相放大器电路可将信号电平放大 26dB 或 20V/…

关于电机PWM到达50%以后才会启动的问题解决

问题描述&#xff1a; 基于野火电机F407骄阳开发板&#xff0c; 利用例程&#xff0c;有刷直流电机按键控制 电驱&#xff1a;TB6612模块 电机&#xff1a;某直流减速有刷电机 发现PWM 到达50%之后 电机 才会开始旋转 。前50%电机不旋转 问题解决分析与过程&#xf…

Ocam:高效录屏,屏幕录制最佳?

名人说&#xff1a;&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、Ocam2、核心特点 二、下载安装1、下载2、安装 三、使用方法 很高兴你…

Node.js 系列之 Express 框架入门实战教程

目录 1 Node.js是什么2 Express初体验3 Express 路由3.1 什么是路由3.2 路由的使用3.3 获取路由参数 4 常见响应设置4.1 express 响应方法4.2 原生响应方法 5 express 中间件5.1 中间件作用5.2 中间件类型5.3 全局中间件5.4 路由中间件 6 获取请求体数据7 路由模块化 1 Node.js…

【LocalAI】(13):LocalAI最新版本支持Stable diffusion 3,20亿参数图像更加细腻了,可以继续研究下

最新版本v2.17.1 https://github.com/mudler/LocalAI/releases Stable diffusion 3 You can use Stable diffusion 3 by installing the model in the gallery (stable-diffusion-3-medium) or by placing this YAML file in the model folder: Stable Diffusion 3 Medium 正…

Android AOSP 6(1)

mkdir android-6.0.1_r72 cd android-6.0.1_r72 2.下载相应版本的源码 先查询设备支持的版本&#xff0c;你要下载那个版本的源码&#xff0c;科学上网查看source.android.com/source/buil…。表格如下格式&#xff0c;查询对应设备的相应分支。 BuildBranchVersionSupporte…

Python与Java实现SM2互调

文章目录 一、项目背景二、环境极其依赖三、具体功能1.Python生成密钥对2.java生成密钥对3.Python加签验签4.java加签验签 四、遇到的问题五、解决方案 一、项目背景 Python对接Java接口互相SM2加签验签 二、环境极其依赖 python环境 pip3 install gmssljava环境 <depen…

字符串根据给定关键词进行高亮显示

问题 一般使用搜索引擎的时候我们会发现,搜索出来的内容都对我们搜索的关键词进行了高亮显示, 这样我们能很直观的看出是不是我们想要的结果, 最近我也遇到了类似的功能, 因为关于舆情的系统使用到了ES, 一开始心想ES本身就有支持的API实现起来不难, 但我这里的需求还不太一样…

2023-2024 学年第二学期小学数学六年级期末质量检测模拟(制作:王胤皓)(90分钟)

word效果预览&#xff1a; 一、我会填 1. 1.\hspace{0.5em} 1. 一个多位数&#xff0c;亿位上是次小的素数&#xff0c;千位上是最小的质数的立方&#xff0c;十万位是 10 10 10 和 15 15 15 的最大公约数&#xff0c;万位是最小的合数&#xff0c;十位上的数既不是质数也…

【Kubernetes】集群学习

常见的 Kubernetes 集群类型 Kubernetes 集群可以根据不同的标准进行分类&#xff0c;但通常我们根据其部署环境和用途来区分集群类型。以下是几种常见的 Kubernetes 集群类型&#xff1a; 开发集群&#xff08;Development Cluster&#xff09;&#xff1a; 用于开发和测试环…

Linux 特殊变量 $?

一. 说明 在 Linux 和其他类 Unix 系统中&#xff0c;$? 是一个特殊的变量&#xff0c;用于获取上一个命令的退出状态码。 退出状态码是一个整数值&#xff0c;通常用来表示命令的执行结果。 ⏹退出状态码的含义 0&#xff1a;命令成功执行。0以外的数字&#xff1a;命令执…

上市公司澄清公告数据库(2001-2023)

数据来源&#xff1a;中国上市公司澄清公告数据来自深交所上市公司公告板块https://www.szse.cn/disclosure/listed/notice/index.html、上交所上市公司公告板块https://www.sse.com.cn/disclosure/listedinfo/announcement/和部分受上市公司委托发布的财经媒体如新浪财经、东方…

一小时搞定Git(含盖IDEA使用)

文章目录 1. git基本概念1.1版本控制1.1.1 版本控制软件 2. 命令的使用2.1 Linux命令2.2 git基础指令2.2.1 设置用户2.2.2 初始化本地仓库2.2.3 查看本地仓库状态2.2.4 添加暂存区域2.2.5 提交本地库2.2.6 切换版本 2.3 分支操作2.3.1 分支基本操作2.3.2 合并操作2.3.4 分支开发…

想更好应对突发网络与业务问题?您需要一款“全流量”

全流量分析&#xff0c;能为我做什么&#xff1f; 在生活中遇到问题&#xff0c;我们的第一反应可能是拿出手机拍照记录&#xff0c;方便后续处理。这些问题是临时的、突发的。 流量分析&#xff0c;就是网络中的“手机”&#xff0c;针对突发的网络故障和安全事件&#xff0…

【bug】配置SpringCloudAlibaba AI的maven依赖问题

问题描述 尝鲜alibaba的ai模块&#xff0c;maven依赖一直报找不到包&#xff0c;报错如下 Unresolved dependency: org.springframework.ai:spring-ai-core:jar:0.8.1原因分析&#xff1a; 由于是按照官方文档配置的&#xff0c;所以检查了很多遍maven配置&#xff0c;加上去…