WebCPM:首个开源的交互式网页搜索中文问答模型

在这里插入图片描述

  论文题目:WEBCPM: Interactive Web Search for Chinese Long-form Question Answering
  论文日期:2023/05/23(ACL 2023)
  论文地址:https://arxiv.org/abs/2305.06849
  GitHub地址:https://arxiv.org/abs/2305.06849

文章目录

  • Abstract
  • 1. Introduction
  • 2. Related Work
    • 2.1 Retrieval and Synthesis in LFQA
    • 2.2 Comparison with WebGPT
    • 2.3 Tool Learning
  • 3. Web Search Environment
  • 4. Data Collection
    • 4.1 Question Creation
    • 4.2 Interactive Web Search
    • 4.3 Answer Annotation
    • 4.4 Quality Control
    • 4.5 Dataset Statistics
  • 5. Framework
    • 5.1 Search Model
      • 5.1.1 Action Prediction
      • 5.1.2 Search Query Generation
      • 5.1.3 Supporting Fact Extraction
    • 5.2 Synthesis Model

Abstract

  长文本问答(long-form question answering, LFQA)旨在用详细的、分段式的回应来回答复杂的、开放式的问题。LFQA的事实范式需要两个步骤:信息检索(information retrieval),搜索相关的支持事实,以及信息合成(information synthesis),将这些事实整合成一个连贯的答案。
  本文介绍了中国首个LFQA数据集WebCPMWebCPM的一个独特之处在于它的信息检索是基于交互式网络搜索的,它实时地与搜索引擎进行交互。仿照WebGPT,作者开发了一个网页搜索界面,招募一些标注员,使用这个界面搜索相关信息,然后回答问题。同时,标注员的网页搜索行为会被记录下来。作者总共收集了5500个高质量的问答对,以及15372个支持事实(supporting facts)125954个网页搜索行为。对预训练的语言模型进行微调,以模仿人类的网页搜索行为,并根据收集到的事实生成答案。LFQA pipeline建立在这些微调模型的基础上,在数据集WebCPMDuReader上分别有32.5%47.5%的情况下,生成的答案并不比人类编写的答案差。

1. Introduction

  LFQA的目标是用详细的、段落长度的回答回答复杂的、开放式的问题。当前的LFQA解决方案一般遵循retrieve-then-synthesize范式,该范式包括两个核心成分:(information retrieval)(information synthesis)。前者搜索外部知识源(e.g., the web)以获得多样性相关的支持性事实,后者将收集到的事实整合成一个连贯的答案。
  传统LFQA范式的一个缺陷是,它经常采用非交互式(non-interactive)检索方法,即使用原始问题作为查询来检索一堆未经整理的信息。相反,人类能够通过与搜索引擎实时互动来执行交互式网页搜索(interactive web search)。对于一个复杂的问题,人类倾向于将其分解为多个子问题,并依次提问。通过识别和浏览相关信息,人类可以提高对主题的理解,并通过提出后续问题或相关术语来完善搜索。这种迭代的过程能够扩大他们的搜索范围,并改善他们得到的结果。总的来说,交互式的网络搜索不仅提供了对多样化信息源的访问,而且反映了人类如何解决问题的认知过程,这就有了更好的可解释性。
  2021年底OpenAI发布的WebGPT是支持LFQA交互式网页搜索的先驱工作。作者首先构建了一个由Microsoft Bing支持的网页搜索界面,然后招募标注员使用该界面收集信息来回答问题之后,他们对GPT-3进行微调,以模仿人类的网页搜索行为,并将收集到的信息组织成答案。在实验中,WebGPTLFQA方面表现出了超群的能力,甚至超过了人类专家。尽管具有令人印象深刻的性能,但WebGPT对大部人研究员们来说依然是个黑盒模型。这是因为WebGPT的接口、数据集和训练模型都没有开源,而且其核心设计元素的内部工作也不透明。这些因素使得该领域研究员很难理解LFQA交互式网页搜索的挑战,也很难继续探索这一研究方向。
  鉴于此,作者认为迫切需要在这方面提供一个无障碍的平台和公众基准。为此,首先构建了一个界面(Figure 1)来记录人类收集长文本问题相关信息时的网络搜索行为。在界面中用户可以执行预定义的动作,进行多轮的搜索和浏览。当在网页上找到相关信息时,他们可以将其记录为支持事实。同时,他们的上网行为也会被记录下来。在收集到足够的信息后,用户可以完成网络搜索,并根据收集到的事实回答问题。

在这里插入图片描述
  在界面的基础上,选择中文作为测试平台构建WebCPM,重点研究中文预训练模型的交互式Web搜索。WebCPM是第一个涉及交互式网络搜索的公共QA数据集,也是第一个针对中国LFOA的数据集。WebCPM包含5500个问答对,15372个支持事实和125954个网络搜索动作。下表()总结了WebCPM和相关QA数据集之间的差异。在现有的中文QA数据集中WebCPM拥有最长的问题、支持事实和答案这表明问题的复杂性和注释答案的丰富性。

在这里插入图片描述
  然后,提出了一个通用框架,包括:
  (1) 一个模仿人类网页搜索行为的搜索模型(search model),用于信息检索。具体来说,搜索模型包含三个模块,在界面上执行一系列预定义的动作:一个动作预测模块(action prediction module),一个搜索查询生成模块(search query generation module)和一个支持事实提取模块(supporting fact extraction module)
  (2) 一个合成模型(synthesis model),用来将收集到的事实为条件,生成连贯的答案。
  作者选择了8个具有代表性的预训练语言模型(PLMs),参数规模高达10B,并评估了它们的交互式web搜索和信息合成能力。作者发现,扩展模型大小对实现更好的性能至关重要。通过为搜索和合成模型选择性能最好的骨干PLM,将它们组合成一个整体的LFQA pipeline,并将其能力与人类进行比较。人工评估显示,LFQA pipelineWebPCM测试集上有32.5%的情况下生成的答案不逊于人类。当应用于百度的DuReader数据集(标注答案超过400个汉字的问题)时,LFQA pipeline在47.5%的情况下生成的答案优于黄金标注的答案,显示出令人满意的分布外泛化性能。实验还表明,作者的搜索模型超越了传统的非交互式检索方法。

2. Related Work

2.1 Retrieval and Synthesis in LFQA

  对于信息检索,之前的工作通常求助于本地存储库(如维基百科)。最近,人们对利用整个网络作为知识源的兴趣激增,这不仅拓宽了信息源的范围,而且使最新知识的实时覆盖成为可能。另一方面如何将检索到的事实组织成LFQA的合理而微妙的答案仍有待探索。一些人研究了人类如何制造复杂的答案,要么通过研究长文本答案的功能结构,要么探索如何在答案中组合例证,其他人则重新审视现有的LFQA评估指标。

2.2 Comparison with WebGPT

  作者在很大程度上遵循了WebGPT,并提出了改进的设计元素(appendix E),包括:
  (1) interface: 修改了WebGPT定义的动作,使其更容易模型学习,更方便用户使用;
  (2) framework:web搜索分解为3个子任务并实现模块化搜索模型。此外,还探索了如何教合成模型忽略无关事实并生成新颖内容;
  (3) evaluation and analysis: 除了评估WebGPT之后的整个pipeline外,还评估每个单独的模块。这种细粒度的评估帮助我们更好地理解这个框架的核心设计元素,以及模型学习到的人类行为。

2.3 Tool Learning

  最近的研究表明,PLMs具有操作工具的潜力,即工具学习(tool learning)PLMs可以在复杂的交互环境中做出顺序决策,例如机器人任务的规划,操纵搜索引擎,在电子商务网站上购物等。通过利用在预训练期间学到的丰富世界知识,PLMs可以执行与现实世界交互的基础操作。作者设想将这个基准作为未来在这一领域探索的测试平台。

3. Web Search Environment

  仿照WebGPT,作者构建了一个纯文本界面以记录人类在为长文本问题收集相关信息时的网页搜索行为。该界面由Bing Search API支持,支持10种主流的网页搜索动作,如(Figure 1)所示。当一个动作被执行时,这个界面会在窗口中做出响应。
  当执行Search动作时,界面进入search mode (Figure 1),它显示Bing为特定查询<query>推荐的链接。每个链接由一个标题和一个特定网页的简短快照组成。每个窗口一次显示三个链接,通过执行Scroll Down动作可以访问更多链接。
  当在当前窗口中找到第i个相关链接时,用户可以执行Load Page <i> 动作。界面将进入浏览模式(browsing mode) (Figure 6),并呈现从第<i>个网页的HTML中清理出来的文本。用户在窗口中一次可以查看的内容被限制在500个汉字以内,通过Scroll动作可以访问更多的内容。用户可以利用Quote动作提取当前窗口中连续的句子作为支持事实。为了能够提取横跨两个窗口的文本,Merge动作旨在将最后两个事实合并为一个事实。同时还为用户展示了所有现有的提取出来的支持事实。
  在浏览第i个页面后,用户可以使用Go Back动作返回到以前的搜索模式来访问其他链接。同时,可以随时发送精细化的查询。一般来说用户可以多次自由地与界面进行交互直到执行Finish动作或触发最大动作数量(例子中是100个)。该界面将自动记录在网页搜索过程中有意义的行为和观察。由于Bing系统的多语言特性,虽然本工作的重点是中文,但这个界面也可以灵活地适应其他语言。有关更多技术细节,请参阅appendix A

4. Data Collection

  作者雇佣了23位来自不同行业的标注员,他们都有丰富的搜索引擎使用经验。要求他们回答长文本问题,首先使用这个界面搜索相关信息,然后写出正确且合理的答案。在质量控制方面,聘请了8名熟悉QA研究的专家作为质量检验员。接下来,介绍数据集的构建过程,详细的注释指南留在appendix B

4.1 Question Creation

  在没有任何参考的情况下从零开始创建新的长文本问题代价较大,因此转向公共QA论坛作为问题来源。具体来说,让标注员参考英语QA论坛Reddit上的问题,然后用中文编写新的问题。这个创建过程的细节在附录appendix C中详细阐述。从经验上发现,以这种方式创建的问题往往需要多轮搜索和浏览,以收集足够的信息。

4.2 Interactive Web Search

  给定一个问题,要求标注员使用这个界面从可信来源搜索准确和相关的信息。这个过程可能包括多次Bing应发送精炼的查询,以及探索他们认为相关的各种网页。要求标注员在提取信息作为支持事实之前仔细判断信息的事实准确性,直到收集到足够的支持事实,搜索过程才结束。在创建的问题中,有26.2%是无法回答的,最终被丢弃,因为标注员无法找到足够的有用信息。

4.3 Answer Annotation

  在收集到足够的支持事实后,标注员会根据他们收集的信息写出合理的答案。作者为他们提供答案注释的指导,包括编写与问题相关且内容丰富的答案,保持逻辑的一致性、清晰性和连贯性,并以公正的方式提供观点。

4.4 Quality Control

  每个标注实例在被选择为最终数据集之前都要经过质量检查员的检查和批准。首先,检查人员将手动检查界面上记录的动作序列,并丢弃低质量的动作序列(例如,在其发出的查询中有明显的书写错误的那些);其次,他们将仔细检查收集到的支持事实,如果这些事实显然不足以回答问题,或与问题无关,或者事实不正确,相应的行动序列就会被放弃,上述程序会移除25%收集到的实例。对于剩余的实例,检查人员会仔细检查他们带注释的答案。如果一个答案与上述说明相矛盾,检查人员会将其返回给标注员,并指出哪个要求不满足。标注员可能会多轮修改他们的答案,直到修改后的答案达到标准。

4.5 Dataset Statistics

  最终,作者收集到了5500个实例,每个实例格式化为元组(question, web search behavior, supporting fact, answer),还记录了每个动作执行时的观察结果。在(Figure 2)中展示了一个示例以供参考,其中呈现了以下内容原始的问题、简化的动作序列、收集到的支持事实以及标注的答案。将数据集划分为{4700,400,400},作为训练、开发和测试集。平均来说,每个问题涉及执行22.9个搜索动作,发送2.5个查询,加载3.3个网页。每个动作的详细比例可视化图可参见(Figure 7)

在这里插入图片描述
在这里插入图片描述

5. Framework

5.1 Search Model

  将web搜索划分为3个子任务:action predictionsearch query generationsupporting fact extraction。每个任务都被转换为text-to-text的格式,使用生成式PLM训练3个单独的模块。通过组合这3个模块,构建了搜索模型,该模型执行一系列动作来收集相关信息。action prediction模块决定每一步执行哪个动作,如果该模块预测SearchQuote为当前动作,然后它调用其他两个模块来生成查询的内容或支持事实。
  每个模块根据时间步长 t t t 时接口的当前状态 S t \mathcal S_t St来执行推理。 S t \mathcal S_t St 包含原始问题 Q 0 \mathcal Q_0 Q0,当前搜索的查询 Q t \mathcal Q_t Qt,过去的动作序列 A t − 1 = { a 1 , … , a t − 1 } \mathcal A_{t-1} = \{a_1, \dots, a_{t-1}\} At1={a1,,at1},上一个和当前窗口中显示的内容 W t − 1 \mathcal W_{t-1} Wt1 W t \mathcal W_t Wt,当前支持事实 F t = { f 1 , … , f ∣ F t ∣ } \mathcal F_t = \{f_1, \dots, f_{|\mathcal F_t|}\} Ft={f1,,fFt},以及剩余动作数。如果执行一个动作,则 S t S_t St 的组件将被更新, W \mathcal W W 可以是搜索模式(search mode)下的三个链接,也可以是(browsing mode)下的特定页面内容,只保持最近的两个观察结果 W t − 1 \mathcal W_{t-1} Wt1 W t \mathcal W_t Wt 显示在窗口中,而不是将所有过去的观察结果串联起来,因为后者可能超过PLM的输入长度限制。

5.1.1 Action Prediction

  这个模块预测接下来要执行的动作。由于总共有10个可能的动作,动作预测可以被视为10类别的分类任务。以Search动作为例,用 { x 1 , … , x n } \{x_1, \dots, x_n\} {x1,,xn} 表示作为Search动作的标记化序列,其中 x ∗ x* x 表示一个特定的标记(token)Search的概率可以用公式表示为 P ( S e a r c h ∣ S t ) = P ( x 1 ∣ S t ) × ∏ i = 2 N P ( x i ∣ S t , x 1 , . . . , x i − 1 ) \mathcal P(Search | \mathcal S_t) = \mathcal P(x_1 | \mathcal S_t) \times \prod _{i=2} ^N \mathcal P(x_i | \mathcal S_t, x_1, ..., x_{i−1}) P(SearchSt)=P(x1St)×i=2NP(xiSt,x1,...,xi1)  在推理过程中,选择具有最高概率的动作在界面上执行。

5.1.2 Search Query Generation

  这个模块生成一个查询 Q t + 1 = { q 1 , … , q n } \mathcal Q_{t+1} = \{q_1, \dots, q_n\} Qt+1={q1,,qn}来进行Bing搜索,也可以用下述公式表示 P ( Q t + 1 ∣ S t ) = P ( q 1 ∣ S t ) × ∏ i = 2 ∣ Q t + 1 ∣ P ( q i ∣ S t , q 1 , . . . , q i − 1 ) \mathcal P(Q_{t+1} | \mathcal S_t) = \mathcal P(q_1 | \mathcal S_t) \times \prod _{i=2} ^{|Q_{t+1}|} \mathcal P(q_i | \mathcal S_t, q_1, ..., q_{i−1}) P(Qt+1St)=P(q1St)×i=2Qt+1P(qiSt,q1,...,qi1)

5.1.3 Supporting Fact Extraction

  假设在browsing mode下,当前窗口的内容是 W t = { w 1 , … , w ∣ W t ∣ } \mathcal W_t = \{w_1, \dots, w_{| \mathcal W_t|}\} Wt={w1,,wWt}。目的是从 W t \mathcal W_t Wt 中提取一个支持事实 f = { w i , … , w j } f = \{w_i, \dots, w_j\} f={wi,,wj},其中 1 ≤ i ≤ j ≤ ∣ W t ∣ 1 \leq i \leq j \leq | \mathcal W_t| 1ijWt。虽然一个朴素的解决方案是直接自动回归生成 f f f 的所有token,但这种解决方案在实践中存在推理速度慢的问题。作为一种替代方案,只生成给定 S t \mathcal S_t St 的前几个和最后几个token,形式上,最大化 P ( [ s ] , w i , … , w i + N f − 1 , [ e ] , w i + N f + 1 , … , w j ∣ S t ) \mathcal P ( [s], w_i, \dots, w_{i+N_f -1}, [e], w_{i+N_f +1}, \dots, w_j | \mathcal S_t) P([s],wi,,wi+Nf1,[e],wi+Nf+1,,wjSt),其中 [ s ] [s] [s] [ e ] [e] [e] 表示事实 f f f 的开始和结束的特殊token。在推理过程中,在解码开始和结束标记后,可以通过文本匹配在 W t \mathcal W_t Wt 中找到所需的序列。如果起始/结束token出现在 W t \mathcal W_t Wt 的多个位置,则总是从 W t \mathcal W_t Wt 中提取最长的序列,一个大的 N f N_f Nf 可以降低这种多位置问题的频率。注意,可以通过连续执行多个Quote动作来提取 W t \mathcal W_t Wt 中的不相交跨度。

5.2 Synthesis Model

  信息合成任务学习将一系列支持性事实组织成一个连贯的答案。然而,训练好的搜索模型并不像人类那样完美,它偶尔会收集不相关的噪声,这会影响生成答案的质量。为了补救这一点,通过引入噪声来破坏合成模型的训练数据中收集的事实。具体来说,给定一系列人类提取的事实 { f 1 , … , f N } \{f_1, \dots, f_N\} {f1,,fN},随机从其他训练实例中选取了一些不相关的事实 { f 1 ′ , … , f N ′ ′ } \{f_1', \dots, f_{N'}'\} {f1,,fN},将所有事实随机打乱后,将它们连接起来作为最终的输入。在训练过程中,对模型进行优化,以生成基于错误支持事实的人工注释答案,即最大化 P ( A n s w e r ∣ Q 0 , f 1 , … , f N , f 1 ′ , … , f N ′ ′ ) \mathcal P (Answer | \mathcal Q_0, f_1, \dots, f_N, f_1', \dots, f_{N'}') P(AnswerQ0,f1,,fN,f1,,fN) 。由于注释的答案不包含 f ∗ ′ f_*' f的信息,模型学会忽略无关的事实,只关注重要的事实进行生成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGpt 使用fetch-event-source实现sse流式处理

microsoft/fetch-event-source 是一个由微软提供的库&#xff0c;用于在客户端和服务器之间建立基于 EventSource 的连接。EventSource 是一种 HTTP 协议&#xff0c;允许服务器向客户端推送实时事件流。该库提供了对 EventSource 协议的封装&#xff0c;使得在前端 JavaScript…

【北京迅为】《iTOP-3588开发板网络环境配置手册》第1章 网络基础知识学习

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

RabbitMQ服务启动失败

报错信息&#xff1a; 在服务中启动RabbitMQ服务显示&#xff1a; RabbitMQ 服务正在启动 . RabbitMQ 服务无法启动。 系统出错。 发生系统错误 1067。 进程意外终止 报错原因&#xff1a; 1.Erlang与RabbitMQ是否匹配 2.Erlang与RabbitMQ安装路径是否存在中文或空格 3.电…

Tomcat服务部署优化

目录 一.Tomcat的基本内容 1.概念 2.构成 &#xff08;1&#xff09;web容器 &#xff08;2&#xff09;servlet容器&#xff08;catalina&#xff09; &#xff08;3&#xff09;JSP容器 3.Tomcat顶层架构 &#xff08;1&#xff09;Tomcat中最顶层的容器是Server&…

type may not be empty [type-empty]

Git提交失败原因分析 原因是使用了规范commit信息的工具&#xff0c;你的提交信息不符合规范&#xff0c;所以被拒绝了 commit规范工具 commitlinthusky 我这个项目使用husky&#xff0c;提交规范比较严格。 解决方式一&#xff1a; 修改提交信息&#xff0c; 使其符合规范…

说一说kong日志级别

Kong官网&#xff1a;The Platform Powering the API World | Kong Inc. Kong Gateway&#xff1a;Kong Gateway | Kong Docs Kong Admin API&#xff1a;Admin API - Kong Gateway - v3.4.x | Kong Docs Kong 企业版社区&#xff1a;API Community for Developers and Industr…

vue js计时器

需求即是&#xff0c;点击了某人话机进行通讯&#xff0c;当获取通讯接口成功后开始计算通话时长。 代码如下

有效果的新闻软文推广都是怎么做的?

新闻软文推广能够在短时间内提高产品知名度&#xff0c;塑造品牌的美誉度与公信力&#xff0c;并且效果不是短期的&#xff0c;有一定的持续性&#xff0c;是数字化时代下品牌进行宣传的主要方式之一&#xff0c;受到很多企业的青睐&#xff0c;今天媒介盒子就来和大家聊聊&…

外汇天眼:Sumsub推出播客,讨论最新的欺诈威胁

Sumsub&#xff0c;一家全球验证平台&#xff0c;今天宣布推出自己的播客&#xff0c;名为《什么是欺诈&#xff1f;》。节目将邀请来自各行各业的专业嘉宾&#xff0c;包括人工智能、网络安全、金融科技、加密货币和互联网游戏等领域的专家。对话将集中讨论数字欺诈如何影响企…

C/C++ 迷宫游戏

游戏介绍 这个迷宫探险游戏有以下功能&#xff1a; 探险&#xff1a;选择该选项后&#xff0c;玩家会进入地下迷宫进行探险。在随机事件中&#xff0c;可能会遇到陷阱、发现金币或者什么都没有发生。陷阱会使玩家失去一定的生命值&#xff0c;金币可以增加玩家的金币数量。 休…

浅谈XSS简单漏洞xss-labs-master(初级)

一、环境以及xss漏洞简介 网上很多gethub自己下就行 XSS简介&#xff1a; 当用户访问被XSS注入的网页&#xff0c;XSS代码就会被提取出来。用户浏览器就会解析这段XSS代码&#xff0c;也就是说用户被攻击了。 用户最简单的动作就是使用浏览器上网&#xff0c;并且浏览器中有J…

git忽略某些文件(夹)更改说明

概述 在项目中,常有需要忽略的文件、文件夹提交到代码仓库中,在此做个笔录。 一、在项目根目录内新建文本文件,并重命名为.gitignore,该文件语法如下 # 以#开始的行,被视为注释. # 忽略掉所有文件名是 a.txt的文件. a.txt # 忽略所有生成的 java文件, *.java # a.j…

力扣-H指数

问题 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09…

Qt 简约美观的加载动画 小沙漏风格 第六季

这次和大家分享一个沙漏风格的加载动画 效果如下: 这是本系列的第六季了, 本次内容的关键在于cubicTo函数的使用, 在这里分享一个非常好用的网站https://www.desmos.com/calculator/cahqdxeshd 在这上面可以手动拖动贝塞尔曲线的控制点, 并且显示了起终点和两个控制点的精确坐…

Linux中如何在创建子线程的时候设置为分离属性

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<unistd.h> #include <pthread.h> void *mythread(void *arg) {printf("id[%ld]\n",pthread_self()); } int main() { //定义pthread_…

ulimit命令

ulimit命令 ulimit 命令用于查看和设置 shell 运行时的资源限制。它可以控制各种资源&#xff0c;如文件打开数量、堆栈大小、CPU 时间等。ulimit 命令通常用于限制 shell 启动的进程的资源使用量&#xff0c;以防止系统资源被耗尽。ulimit命令的主要作用是提高系统的性能和稳…

智能水表预付费管理系统

智能水表预付费管理系统是当前智能水表技术的重要应用之一&#xff0c;结合了智能化管理和预付费功能&#xff0c;为水务公司和用户提供了便捷、高效的用水管理解决方案。该系统利用先进的科技手段&#xff0c;实现了水表抄表、计费和管理的自动化&#xff0c;为用户带来更便捷…

【粉丝福利第一期】小 明

Q1 - 能否自我介绍下&#xff1f; 嗨&#xff0c;大家好&#xff0c;我是 小 明 &#xff08;小明java问道之路&#xff09;&#xff0c;互联网大厂后端研发专家&#xff0c;2022博客之星TOP3/博客专家/CSDN后端内容合伙人、InfoQ(极客时间)签约作者、阿里云签约博主、全网5万…

PBM学习——从基础到精通!!!

本专栏着重讲解PBM学习所得,学习笔记、心得,并附有视频素材资料,视频详细目录如下: PBM相关参数解释1 PBM相关参数解释2 PBM相关案例实践1 PBM相关案例实践2 PBM相关案例实践2 PBM相关案例实践3 PBM多相流中次相界面设置1 PBM多相流中次相界面设置2 欧拉多相流曳力1 欧拉多…

make/makefile

首先什么是make和makefile呢&#xff1f;先简单说&#xff0c;make是一条命令&#xff0c;makefile是一个文件&#xff0c;这个文件中存的是依赖关系和依赖方法&#xff0c;那么为什么会有这两个东西呢&#xff1f; 首先我们知道在VS2019中&#xff0c;我们可以直接创建一个工程…