企业网站建设webbj/合肥网站建设
本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。
01
什么是机器问答
机器问答,就是让计算机软件系统自动回答人类提出的描述性问题。例如问:“王小丫的主持的节目叫什么”,我们可以在百度搜索框里输入任意用自然语言描述的问题,并在搜索的首位结果中可以直接得相关答案,如下图所示:
区别于传统搜索引擎根据多个关键词反馈检索的网页链接,机器问答根据自然语言描述的问题直接获取答案,可以极大地提高大家获取信息的效率。机器问答在生活中无处不在,经统计,有约40%的搜索需求、约30%的对话需求都跟机器问答相关。
那么,百度搜索的机器问答应用现状如何?目前首条结果可以直接满足大部分的问答需求,并且,在百度搜索中,不限定用户问题领域,是一个开放式的问答系统,可以询问任何信息。
技术交流群
建了技术交流群!想要进交流群的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。
前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
方式①、添加微信号:mlc2060,备注:技术交流
方式②、微信搜索公众号:机器学习社区,后台回复:技术交流
1.1 机器问答的发展历程
机器问答的发展历程如下,与机器学习发展相吻合。
从模型方法的发展上看:
2013年以前,大家主要做一些特征工程相关工作,即给定一个问题和一些候选答案,设计多种字面匹配特征,并计算问题与答案之间词的匹配度,例如BM25等算法。
2014~2015年,随着深度学习的发展,大家会使用神经网络来计算问题和答案间表示的语义距离,例如CNN、RNN等。
2016~2017年,大家会使用Attention网络结构设计各类模型结构,进一步刻画问题和答案间的深层语义匹配关系。
2018~2021年,研究主要集中在训练模型上,会使用一些更大、效果更好的预训练模型来完成复杂的问答匹配任务。
自2022年开始,大家更多关注生成模型的应用。
从数据集的发展上看:
2013年,MCTest出现,以选择题和完形填空形式为主。
2016年,SQuAD诞生,这是第一个大型阅读理解数据信息,会根据用户问题从提供的一篇文章中进行答案抽取。
2017年,百度发布了DuReader数据集,这是首个中文的阅读理解的数据集。
2018年,HotputQA等发布,更加深入研究了多跳推理、常识推理等复杂的问答场景。
1.2 机器问答建模
目前的主流范式:Retriever + Reader
Retriever = 基于query查询候选。即给定一个query,获得该query的相关候选,可能是网页、视频、表格、知识图谱等。
Reader = 从给定候选中获取答案信息。即在给定候选的基础上,结合query进一步进行答案抽取。
百度搜索就是一个非常强的一个Retriever ,它可以提供相关候选查询,所以我们的研究工作更多集中在Reader上,即基于搜索结果如何更好地完成答案抽取。
早期的Reader,主要基于传统的特征工程方法,是一个很复杂的系统化pipeline流程:先分析query获得期望的答案类型、实体信息、问题类型等,并根据这些信息从候选库里检索若干候选,并设计复杂的匹配特征来计算query和候选的相关性打分,并设计排序函数进行排序,得到排序最高的答案,过程如下图。
这个流程是管道串联的,每一步都存在误差的积累,整个训练流程也不可整体迭代,维护成本较高。后来,大家希望找到一种更加端到端的方法来解决以上问题,机器阅读理解(Machine Reading Comprehension,MRC)被提出出来。
MRC的任务的定义是:输入Question+Document,直接用一个模型替代复杂流程,输出Answer。早期的MRC工作会设计一些比较复杂的网络结构,来对问题和答案之间的关系进行建模。一个比较经典的方法是BiDAF,它的输入层是对整个 document 和 query 分别映射到 enbedding 表示上,各自通过 LSTM 等网络来学习问题和文档上下文的表示,之后通过 Attention 交互层,采用双向注意力对 query 和 document的关系进行建模,在此基础上再通过 LSTM 网络获取更丰富的上下文表示,最终输出层预测每个位置作为答案开始和终止的概率,概率最高的片段被抽取作为答案。
早期的模型结构设计呈现百花齐放的状态,以期更好解决问题和答案的建模。
后来,预训练模型逐渐发展起来,大家意识到,复杂的模型结构设计并不太必要,transformer就是目前为止最好的模型结构,这样可以释放更多研究精力到预训练工作中,更多关注预训练的任务设计、 loss函数、预训练的数据等。
在这种情况下,产生了多种预训练模型,比如说最早的BERT和百度的ERNIE等,这些预训练模型会使MRC更加简单,大家会把query和document整体作为一个序列进行输入,query和document之间可以用一些特殊符号进行分割。经过预训练模型的语义表示建模,最后依旧预测答案开始和结束的位置并进行抽取。
GEEK TALK
02
生成式问答
近期生成式技术的发展非常火热,也有非常多的工作发表。
早期一个比较有代表性的生成式Reader,是2017年的S-NET,它是针对MS-MARCO数据集专门设计的,该数据集的特点是答案来自多篇文章并且与原文中词汇不一定相同。
针对这样的任务,很自然的想法是用生成的方式来解决这个问题。它设计了一套两阶段的流程,第一阶段是答案抽取模型,跟我们上面介绍的模型非常一致,并额外引入了passage排序任务对候选文章进行相关性排序。第二阶段是生成模型,输入得到抽取结果,生成答案的总结,如下图所示。
可以看出,早期的这些工作跟我们现在所使用的生成式问答流程非常相似,我们还会加一个检索模块,就是我们刚才最早提到的Retriever,然后就是候选抽取、排序、生成。但是,这个工作还是依赖于额外信息来做参考总结。大家会想,是不是可以有一个生成模型,直接生成答案,而不依赖于我们输入额外的信息知识?
2019年的T5模型首先解决了这个问题,当时它是采用了一种“预训练+迁移学习”的思路,将不同NLP任务统一到生成范式下,来统一完成问答、机器翻译、情感分析、对话等一系列任务,且通过百亿参数量的大模型(在当时算是比较大的规模)中存储的知识直接回答问题。它也验证了不同生成模型的结构,包括Encoder-Decoder方式的、Decoder-only的和混合式的。
但是,T5这类模型虽然可以完成一些简单问答,但还不足以达到可直接使用的商用状态,它的参数量及训练方式还存在改进空间,对于一些通用问题也不能直接取得非常好的效果。直到ChatGPT的出现,它会采用更大的参数规模(千亿级),并有更强的人类回复对齐能力,去理解用户指令,从而完成更加复杂的问答。可以说,ChatGPT是已达商用级别的对话和问答产品。
GEEK TALK
03
百度搜索的智能问答应用
百度搜索的问答场景是丰富多样的。答案抽取方式也有多种,比如说我们可以从百科或者网页通过信息抽取的方式得到一些知识图谱,在知识图谱上来进行答案提取;更通用的方式是从网页文本中,通过阅读理解直接抽取答案;还可以通过对一些半结构化的数据,比如表格,来进一步的提取信息,并组织成更结构化的方式展现。不止是文本,也包括对视频内容的理解和抽取。
面临着这样一个丰富多样的问答场景,我们会有哪些挑战呢?
挑战1:机器问答面临复杂语义理解、推理、上下文建模难点?
挑战2:面对搜索的高流量和机器问答对复杂模型的需求,如何实现快速响应?
挑战3:开放领域的搜索场景下网页数据非常复杂,答案质量参差不齐(错误、片面),如何提供正确且高质量的答案?
、
3.1 解决复杂语义理解、推理、上下文建模难点
比如最开始的这个例子,如下图所示,答案中提到一个“她”,就需要做指代消解、对上下文的理解,并且上下文篇幅可能很长,通过深层次的理解才能知道所需的是一个答题节目,而不是其他节目。这个问题的解决依赖一些很复杂的模型。
我们采用的解决方案是“大模型+预训练”。
在预训练中,我们会使用非常丰富的数据,包括几个阶段:
-
首先,用T级别通用文本进行Pretrain学习基础语言模型;
-
并且,使用百G级业务日志进行Post-pretrain实现领域和目标迁移;
-
此外,进行细致的数据挖掘,通过G级人工标注数据进行Finetune拟合业务效果;
-
最后,通过远程监督数据增强、标注数据质量识别、薄弱数据自动挖掘和定向标注、用户行为指引,实现数据和模型的闭环反馈。
而在大模型方面:
-
使用百亿级参数量模型,提升知识记忆和语言理解能力
-
通过长序列建模,充分理解上下文
例如,我们正在使用的一个模型,我们称之为 DocMRC 模型,它模拟人做阅读理解答题,阅读整个文章,逻辑如下图所示。
输入层支持长序列建模,将整个doc segment sents进行切分;特别的是,我们在每句话前插入token表示,CLS用来汇聚每个句子的表示,整体输入浅层词级模型结构来学习局部表示;基于这个表示经过层次化结构学习深层上下文关系;最后输出CLS特殊token表示标注,输出答案。
输出层会有两种输出:一种是针对问题输出偏摘要等多句话答案介绍,会使用句子层的输出,然后做序列标注的输出;另一种是强调答案中的关键内容,可能是几个实体,会将token表示做序列标注预测。
3.2 提升整体模型的速度,实现快速响应
搜索每天的用户流量非常大,前面也提到,我们需要用到较大或较复杂模型,整个模型的耗时以及资源消耗也是非常大的。那么,有没有其他方式来提升整体模型的速度,实现快速响应及资源平衡?
刚才介绍的层次化的建模,对模型结构的优化,是一种解决方案。
另外有一种通用的方式:知识蒸馏,知识蒸馏是将大模型的知识提炼给单个小模型,在效果接近的情况下提升推理速度。这里我们采用了一种“多teacher多阶段蒸馏”模式。
针对问答的业务场景,我们会训练多个不同的teacher,通过不同 teacher 的集成来提升学习目标的上限。然后对于多个teacher蒸馏,一种基线方案是将每个teacher的打分或loss加权直接做平均,让student拟合,但是我们认为这种方式可能并不能确保达到非常极致的效果。我们期望根据不同样本动态做出选择(因为不同teacher的侧重有差异),设计了一种多阶段蒸馏的模式,并在其中根据数据动态选择teacher,如下图所示。
第一阶段,Teacher模型训练,训练多teacher提升学习上限;
第二阶段,无监督蒸馏,无标数据很难判断teacher的好坏,所以采用 teacher 间投票的方式,依据梯度方向动态选择teacher,剔除可能的噪声teacher;
第三阶段,有监督蒸馏,依据标注样本对teacher动态赋权。
通过这样一种多阶段多teacher蒸馏的方式,我们最终得到一个效果非常好的student模型,甚至超过单个大模型效果。
3.3 如何提供正确且高质量的答案
搜索场景的问答数据非常复杂,答案质量也参差不齐,很多网页中可能存在一些错误信息或片面介绍,如何提供正确且高质量的答案是我们面临的第三个挑战。
如下图所示,是搜索中场景的复杂答案的例子。左侧是冗长答案,用户无法快速抓住重点,这种情况下需要一种方式进行总结,用户才能快速理解的答案关键信息,提升满足效率。抽取式答案提取方式已经无法满足,我们需要用生成技术对答案进行深层次压缩总结。
另外,对于单篇文章中提取的答案可能不够全面,我们需要从多篇网页中做答案总结,也需要生成模型,如下图所示。我们从多篇文章中总结答案,并在答案中标注来源,用户可以清晰看到答案出处。
综上,如果要生成全面、高效、正确的答案,就需要有一个更好的生成模型。目前的大语言模型非常多,但怎样的大语言模型才能完成搜索场景的问答任务呢?
GEEK TALK
04
检索增强生成
目前大语言模型直接做问答还有几个问题:
第一,大预言模型难以记住所有知识,对于一些偏长尾知识可能有错误或者不知道的情况;
第二,大语言模型的知识容易过时、更新困难,对于新知识无法及时感知;
第三,大语言模型的输出难以验证,目前用户的信赖感较差,我们无法完全信赖生成模型直接生成的答案。
所以在这种情况下,大家希望能有一些方式来进行一些辅助的答案验证。
4.1 检索增强生成流程
针对搜索问答场景,我们设计了检索增强生成方案,已在百度搜索落地。检索增强生成是基于搜索引擎补充相关信息,可有效缓解大模型幻觉,来提升答案的正确性、时效性以及可信度。整体流程分为几个阶段:
1、文档检索阶段,会检索得到多种参考来源;
2、答案抽取阶段,会把文章抽取关键信息,减轻生成模型负担;
3、prompt组成阶段,会根据获取的参考来源来回答问题,并提供具体要求,比如说在答案内容中序号标注来源;
4、答案生成阶段,将prompt输入生成大模型中,最终得到搜索结果。
如上图所示,可以看到右侧答案是总结了多篇文章的一个结果,并且也会在其中标注上参考来源,这就是我们期望给用户提供的答案。
4.2 生成大模型训练流程
我们生成大模型的训练流程分为四个阶段,如下图所示,前两个阶段跟目前主流的生成大模型训练比较接近,后两个阶段我们做了检索增强生成问答场景下的特殊适配。
第一阶段,通用预训练,我们会有一些通用的网页语料以及垂类语料,比如书籍、表格、对话等,来获得通用的预训练基础模型;
第二阶段,进行指令微调,我会提供一些通用的指令,使得模型拥有理解指令的能力;
第三阶段,标注业务指令,并用其做具体的微调,使其能理解搜索场景下的多结果组织的问答场景;
第四阶段,基于用户行为反馈做细致微调,以及通过强化学习等方式,提高生成答案的质量。
4.3 通过指令拆解,学习复杂指令
搜索的业务场景指令非常复杂,我们会提出非常具体的要求,并提供参考来源。那么如何让生成模型来理解这种复杂的指令?一种解决方案是标注很多这类复杂指令,并输入到生成模型中,但这种方式并不一定是最佳的。如果模型学习这类指令偏多了,反而无法达到更好泛化效果,造成模型效果下降。有没有其他的方式?
这里,我们借鉴推理链(CoT)的思想,提出通过指令拆解的方式,学习检索生成场景下复杂指令。
上述复杂指令通常可以通过三步简单步骤完成:
第一步,选择能用来回答问题的搜索结果;
第二步,根据选择的搜索结果进行答案的组织和生成;
第三步,用编号的形式,加上参考来源。
可以看出,对于很复杂的指令,我们可以通过多步拆解变成多个简单指令,我们会让模型先去学习并理解简单指令,之后可能不用太多复杂指令的数据,就能使模型在复杂指令上的表现达到一个非常好的水平。
4.4 推理加速及降低资源消耗
对于一些判别式模型,可以用蒸馏或一些其他的技术来做。但对于生成模型来说,模型尺寸小了对效果的影响较大,蒸馏并不特别适用,需要有一些其他的加速手段。近期业内有很多相关的工作研究,例如Inference with Reference,就是针对检索增强生成的业务场景,通过检测固定prefix,从参考中复制固定长度文本作为候选序列,验证如与模型输出一致则实现并行解码多步,如下图所示。
另外也有一些更加通用的生成加速的手段,例如可以用小模型快速生成多步,把小模型的预测结果直接输入大模型,大模型验证是否解码一致,类似前一个工作也可以实现加速,但要求是尽量使我们的小模型和大模型效果接近,预测准确的概率会更大,加速比就会更大。
相关文章:

大模型在百度智能问答、搜索中的应用
本文主要介绍了智能问答技术在百度搜索中的应用。包括机器问答的发展历程、生成式问答、百度搜索智能问答应用。欢迎大家加入百度搜索团队,共同探索智能问答技术的发展方向,文末有简历投递方式。 01 什么是机器问答 机器问答,就是让计算机…...

ARPG----C++学习记录01日志和调试
多人射击有点难,发现这个更加基础,先学习这个 显示日志 可以在代码中插入这样一行来打印日志,蓝图里的printstring会在屏幕和日志里都显示。可以使用%f,d等来获取后边的输入值。对于打映字符串变量,传入需要* UE_LOG…...

3302. 表达式求值, 栈的应用
3302. 表达式求值 - AcWing题库 给定一个表达式,其中运算符仅包含 ,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。 注意: 数据保证给定的表达式合法。题目保证符号 - 只作为减号出现&…...

论文写作框架示例:论软件系统建模方法及其应用
标题 前言题目要求写作框架(1)摘要(300~330字)(2)正文(2000~2500字,2200字左右为宜)(3)收尾(200字左右)前言 本章内容参考了51cto的薛老师的《软考论文高分特训与范文10篇》的内容,是帮助初学者打开写作思路的工具,而不是必须要遵循的模式。建议软考人多读多看…...

Godot 官方2D C#重构(4):TileMap进阶使用
文章目录 前言完成内容项目节点结构TileMap设置图片资源备选图片添加物理碰撞添加y轴遮罩判断Y Sort Enable是干什么的? 脚本代码 前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 完成内容 项目节点结构 TileMap设置 图片资源 备选图…...

Ubuntu系统编译调试QGIS源码保姆级教程
在之前的文章中,我详细介绍了怎么在Windows下编译QGIS源码,也得到了不错的反馈。但是不足的是Windows下只能编译QGIS的Release模式和RelWithDebInfo模式,想要分析源码,“断点调试”肯定是少不了的,但是这两种模式虽然也…...

电源控制系统架构(PCSA)之系统控制处理器
安全之安全(security)博客目录导读 目录 一、系统控制处理器 1、服务 2、可信操作 一、系统控制处理器 SCP是一种基于处理器的能力,为提供电源管理功能和服务提供了一个灵活和可扩展的平台。 在移动系统中,SCP处理器一般是Cortex-M微控制器ÿ…...

深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
加我微信hezkz17进数字音频系统研究开发交流答疑群(课题组) 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署 项目一 科大讯飞经验 在Matlab平台上实现广义…...

Redis实现方式开启新篇章,解决分布式环境下的资源竞争问题,提升系统稳定性
前言 分布式锁一般有三种实现方式: 数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁 本篇博客将介绍第二种方式,基于Redis实现分布式锁。 虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实…...

Go命令行参数操作:os.Args、flag包
Go命令行参数操作:os.Args、flag包 最近在写项目时,需要用到命令行传入的参数,正好借此机会整理一下。 1 os.Args:程序运行时,携带的参数(包含exe本身) package mainimport ("fmt"&q…...

在Go中处理时间数据
获取时间 这可能是软件包中最常用的方法。我们如何知道当前的时间呢?像这样: t : time.Now() fmt.Println(t)ini复制代码2023-04-16 23:54:45.924965 0800 CST m0.000152293这就是当前的时间。这是很麻烦的,所以我将把它分解成几个部分。 …...

SOLIDWORKS PDM 2024数据管理5大新功能
1. 改进的视觉内容 • 通过装配体可视化功能,在 SOLIDWORKS 中以图形方式查看零部件数据,如工作流程状态。• 使用特定图标迅速识别焊件切割清单零部件。 优点:重要数据和系统信息一目了然。 2.增强的数据保护和跟踪功能 •保护“包含”和…...

5G与医疗:开启医疗技术的新篇章
5G与医疗:开启医疗技术的新篇章 随着5G技术的快速发展和普及,它已经在医疗领域产生了深远的影响。5G技术为医疗行业提供了更高效、更准确、更及时的通信方式,从而改变了医疗服务的模式和患者的体验。本文将探讨5G技术在医疗领域的应用场景、优…...

Linux云服务器限制ip进行ssh远程连接
对Linux云服务器限制IP进行SSH远程连接的原因主要有以下几点: 增加安全性:SSH是一种加密的网络传输协议,可以保护数据的机密性和完整性。通过限制SSH连接的IP地址,可以防止未经授权的访问和数据泄露。只有拥有访问权限的IP地址才…...

【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码
目录 1. 分类数据的可视化 1.1 类别散点图(Categorical Scatter Plot) 1.2 类别分布图(Categorical Distribution Plot) 1.3 类别估计图(Categorical Estimate Plot) 1.4 类别单变量图(Cat…...

(二开)Flink 修改源码拓展 SQL 语法
1、Flink 扩展 calcite 中的语法解析 1)定义需要的 SqlNode 节点类-以 SqlShowCatalogs 为例 a)类位置 flink/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCatalogs.java 核心方法: Override pu…...

java中spi与api的区别
近期看了很多开源组件的源码,发现很多地方地方用到了 spi 的功能,开始思考 spi 与 api 的区别 发现 spi 侧重于抽象层次的概念,目前接触到的就是 java 里大量用到了这个,通过定义的接口来抽象通用的功能,然而 api 是不…...

【Android知识笔记】插件化专题(二)
在上一篇专题【Android知识笔记】插件化专题(一) 中详细介绍了Android三种插件化方案的实现以及它们的优缺点对比总结等。这一篇中主要来看一下一些插件化开源框架的实现原理,当然市场上的插件化框架有很多,层出不穷,如 DiDi VirtualApk、360 Replugin 等。本人在过去的工…...

赶紧收藏!史上最全IDEA快捷键大全
参考 IntelliJ IDEA 的官网,列举出了IntelliJ IDEA(Windows 版)的所有快捷键。 建议收藏,有需要的时候根据关键字来查找! idea专业版获取 kdocs.cn/l/ctYoaM6evJkl 该快捷键共分 16 类,可以方便的按各类…...

IntelliJ IDEA 把package包展开和压缩
想要展开就把对勾取消,想要压缩就勾上...

Python——自动创建文件夹
文章目录 前言一、判断文件夹或者文件是否存在二、创建一级文件夹三、创建多级文件夹四、代码封装前言 利用 Python编程语言实现自动创建文件夹,程序以函数形式封装,直接按要求传参即可调用。 在python中没有直接针对文件夹的操作方法,可以借助模块os,os.path和shutil来操作…...

Leetcode—21.合并两个有序链表【简单】
2023每日刷题(十三) Leetcode—21.合并两个有序链表 直接法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* list1, struct…...

数据链路层和DNS之间的那些事~
数据链路层,考虑的是两个节点之间的传输。这里面的典型协议也很多,最知名的就是“以太网”。我们本篇主要介绍的就是以太网协议。这个协议规定了数据链路层,也规定了物理层的内容。 目录 以太网帧格式 帧头 载荷 帧尾 DNS 从输入URL到…...

Spring-声明式事务
声明式事务 一、简介1、准备工作2、测试 二、声明式事务概念1、编程式事务2、声明式事务3、基于注解的声明式事务1.测试无事务情况2.加入事务①Transactional注解标识的位置②事务属性:只读③事务属性:超时④事务属性:回滚策略⑤事务属性&…...

腾讯云轻量服务器地域选择教程,一篇文章就够了
腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置,如上海、广州和北京等地域,如何选择地域?腾讯云百科txybk.com建议地域选择遵循就近原则,用户距离轻量服务器地域越近,网络延迟越低,速度就越…...

【斗罗二】王东升级三环,戴华斌挑衅,雨浩单手接鼎订下赌约
【侵权联系删除】【文/郑尔巴金】 深度爆料,《绝世唐门》第20集,一场瞩目的战斗即将爆发。王冬,这位一年级的强攻系班长,将与戴华斌进行一场激烈的较量。王冬拥有三大武魂,其中最为人们所熟知的是那光明女神蝶&#x…...

洛谷 B2135:单词替换
【题目来源】https://www.luogu.com.cn/problem/B2135【题目描述】 输入一个字符串,以回车结束(字符串长度 ≤200)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换…...

IDEA中application.properties文件中文乱码
现象: 原因: 项目编码格式与IDEA编码格式不一致导致的 解决办法: 在File->Settings->Editor->File Encodings选项中,将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致&a…...

Rust 模块系统
文章目录 模块系统crate包cargo 创建库库的使用 模块系统 Rust的{模块系统|the module system},包括: * 包(Packages): Cargo 的一个功能,它允许你构建、测试和分享 crate。 * Crates :一个模…...

面向服务架构-架构师(六十四)
SOA概述和发展、参考架构、协议和规范、标准和原则、设计模式、构件和实施。 SOA概述和发展 服务指系统对外提供的功能,SOA是一种应用框架。 微服务去掉了ESB企业服务总线,SOA集中式,SOA和微服务的区别: 微服务更加精细。服务…...