RAG:检索增强的前世今生 20240317 氢AI 大语言模型可以把大量的信息和知识压缩起来,提供一个友好但不精确的检索。出于神经网络的本质,... 

大语言模型可以把大量的信息和知识压缩起来,提供一个友好但不精确的检索。出于神经网络的本质,它经常可能把从语料中某个领域学来的“套路”应用到完全不相干的另一个领域,“他山之石可以攻玉”,故尔往往可以给出非常惊艳的答案。但正如一个硬币有正反两面,大语言模型的这个特点,往往也使得它会在某些场景突然“扑街”。因此,应用大语言模型,首先就要“驯服”大语言模型。

日前,创新学习辅助应用RemNote创始人、EmergentVentures风投基金合伙人MoritzWallawitsch发表了一篇博文,通过一系列极具代表性的科研项目详解了RAG技术的发展历程,最久的项目远追溯到2017年,最新的项目上个月才报道。

检索增强研究

2017-2024

本文的灵感来自DouweKiela的精彩讲座“StanfordCS25:V3IRetrievalAugmentedLanguageModels”,他与PatrickLewis、EthanPerez等人于2020年5月发明了RAG(氢AI注:并不是首次提出类似概念,而是首次提出RAG这个名字)。自2023年1月以来,RAG领域又发生了很多事情,因此本文试图综述该领域的研究。

对于RAG的定义,氢AI愿意引用上述论文(arXiv:2005.11401)的摘要,讲得很好:

大型预训练语言模型已被证明可以将事实知识存储在其参数中,并在对下游NLP任务进行精调时获得最好的结果。然而,它们访问和精确操作知识的能力仍然有限,因此在知识密集型任务中,它们的性能落后于面向特定任务的系统架构。此外,为它们的决定提供依据和方便地更新它们的世界知识仍然是悬而未决的研究问题。到目前为止,具有对显式非参数存储器的可微访问机制的预训练模型仅用于可提取的下游任务。我们探索了一种用于检索增强生成(RAG)的通用精调方法——该模型将预先训练的参数和非参数记忆相结合,用于语言生成。我们介绍了RAG模型,其中参数记忆是预训练的seq2seq模型,非参数记忆是维基百科的密集向量索引,由预训练的神经召回器访问。我们比较了两种RAG公式,一种是在整个生成序列中条件相同的检索段落,另一种是每个token可以使用不同的段落。我们在广泛的知识密集型NLP任务上对我们的模型进行了微调和评估,并在三个开放域QA任务上取得了Sota,优于(没采用RAG的)seq2seq模型和特定任务的检索和提取架构。对于语言生成任务,我们发现RAG模型生成的语言比最先进的仅参数seq2seq基线更具体、更多样、更真实。

RAG系统主要包括两个部分:检索器和生成器。其中生成器可以理解为就是大语言模型(货架商品或深度定制),而检索器有的是基于语言模型、有的是基于词频算法、有的是两者结合使用。围绕RAG系统的科学研究主要内容是系统架构、训练方法、技术组合和各类奇思妙想。下面,本文将从检索器开讲。

RAG代表性工作进化树(arXiv:2312.10997)

RAG术语表

1.检索(召回)

早在2017年,稀疏召回就被用于问答类RAG(当时Transformer还在襁褓中,使用LSTM作为生成器/读取器)系统的首批实例之一(arXiv:1704.00051)。

深度学习时代来临后,人们开始尝试将深层神经网络引入NLP领域。同“稀疏召回”一样,神经网络也是用高维向量来表征次词、词语、短语、句子、段落乃至文档。不同之处在于,深度神经网络可以把从大量训练预料中提取到的语义信息注入表征向量(提取表征的过程成为“嵌入「Embedding」”),从而使得语义相近的自然语言片段在高维表征空间中的几何距离也相近。这样一来,表征向量的信息含量就大了,也没有那么多“0”。因此,此类召回技术被称为“密集召回”。

下面,本文将通过ColBERT和FAISS两个项目展开讲解密集召回器。MORITZWALLAWITSCH在原文中还陈列了其他几个密集召回项目,不太想纠结于此的读者看过ColBERT和FAISS之后就可以进入下一大节“冻结和动态RAG”。

ColBERT虽然被MORITZWALLAWITSCH归为“稀疏-密集”混合召回。但氢AI认为,该项目最大的历史意义是第一次提出了上面论述过的“密集召回”的基本原理和工作流程思想——即目前普遍被称为“暹罗塔(SiamTower)或双塔”的双编码器架构以及在线-离线流程方法,如图所示。

ColBERT(arXiv:2004.12832)

最早建立在密集嵌入之上的问答系统之一是ORQA。它经过端到端的训练,只使用问答对来联合训练证据检索和回答。它将检索视为一个通过对“反向完形填空”任务(预测句子的周围上下文)进行预训练初始化的无监督的潜在变量。(氢AI注:名为问答系统,实际上就是个密集召回器,缺少后端的大语言模型。原作者陈列这个例子是为了说明密集召回器的训练方法)

ORQA(arXiv:1906.00300)

SPLADE(arXiv:2107.05720)

DRAGON(arXiv:2302.07452)

Structure-AwareDeNseReTrievAl(SANTA)解决了将查询与结构化外部文档对齐的挑战,尤其是结构化数据(如代码或产品规范)与非结构化数据(例如文本描述)之间的不够一致的问题。它通过以下两种预训练策略增强了检索器对结构化信息的敏感性:

1.利用结构化和非结构化数据之间的内在一致性,为结构化敏感预训练方案中的对比学习提供信息;

2.实现掩蔽实体预测(利用以实体为中心的掩蔽策略,鼓励语言模型预测和填充掩蔽实体,促进对结构化数据的更深入理解)。

SANTA(arXiv:2305.19912)

2.从冻结走向动态的RAG

我们知道,在做垂直业务落地的过程中,大语言模型可能是需要精调的。但是RAG系统中除了用于生成最终答案的大语言模型,还可能有别的语言模型结构——密集召回器。那么,RAG系统在客户侧落地过程中,到底要怎么精调呢?是精调其中之一?还是分别精调?或是联合精调呢?

理想情况下,在“全动态”模型中,损失函数的梯度将回流整个系统(端到端训练):检索器、生成器和文档编码器。然而,这在计算上具有挑战性,并且尚未成功完成。

In-ContextRALM(arXiv:2302.00083)

REPLUG的方法跟上面的差不多,它是将大语言模型视作黑盒,也即不限制大语言模型的品牌型号,并在其前端加一个Contriever检索模型。首先用对比大语言模型似然度和检索模型似然度的方式,训练检索模型,使其适应大语言模型的“偏好”。在推理时,先用检索模型检索出若干个片段,与原prompt组合在一起分别输入大语言模型推理,最后将多次推理的结果加总,选得分最高者作为最终答案。

REPLUG(arXiv:2301.12652)

DREditor项目只讲检索器。上面,不论是In-ContextRALM还是REPLUG,都是生成式大语言模型不用动,但检索器需要针对不同的任务(知识领域)做适配以进一步丰富大语言模型的提示,方法是模型精调(检索器本身也是个语言模型)。DREditor提出的方法是,检索器精调也省了。当RAG系统需要适配新的客户场景时,只需要观察一些检索器在新场景中的成功和失败的例子,用观测到的误差训练一个特殊的最小二乘算子直接调整检索模型生成的文档表征,从而强行适配。DREditor宣称可在精度持平或更高的基础上,让系统适配的效率提升100到300倍。

(氢AI注:感觉迷糊的同学,可以回顾一下上面的ColBERT项目。检索器,通常是一个双塔模型,一个塔计算检索查询的语义表征,另一个塔计算文档段落的语义表征,完后通过内积等算法判断两边表征的相似度,就可以把与查询有关的段落给摘出来。为什么要用两个模型塔?因为提问和回答的语义显然是不一样的,但我们可以训练模型故意让它们的表征内积大,因此两个模型肯定不一样。好,现在有一个这样的检索模型,它在一个领域比如说医学领域,通过精调,很有效。但如果把它放在电力领域,它可能一下子就失效了。怎么办呢?正规的办法是用电力问答对再精调它一下。但是DREditor的作者告诉你,不用那么费事,有一个办法,可以不动模型参数,直接调整模型输出的表征。不精调模型,而是训练一个简单的多的表征调整算法,重新让这个模型有效,但开销大大降低了!)

DREditor(arXiv:2401.12540)

kNN-LM是一篇有趣的论文,作者试图从后端使大语言模型的输出更加可靠。为此,预先准备了一个Q-A知识对的向量数据库。当用户查询时,一方面通过大语言模型预测答案分布,一方面通过问题的语义表征到向量数据库里面找几个最临近项。通过矢量距离算出一个答案分布。把两边的答案分布结合起来得到最终答案。(氢ai注:看了这个方案,氢AI陷入了深深的思考,同学们,这个方案去掉大语言模型不行吗?有趣确实有趣)

kNN-LM(arXiv:1911.00172)

RAG就是本文开头提到的那篇确立了RAG概念的论文,是动态、端到端训练的RAG系统反向传播到检索器和生成器的想法的起源。RAG系统如果采用密集召回,则一共有三到四个Transformer堆叠。分别是:双塔型召回器的两个编码器——查询编码器、文档编码器,大语言模型的编码器(可选)和解码器。RAG项目四个都有。这里的“端到端”训练是指,在任务精调的时候,查询编码器和大语言模型联合训练,反向传播方向看下图箭头。RAG的训练过程使得查询编码器可以为任务更好地选择参考文档,而大语言模型则能更好地完成各类NLP任务。在推理时,召回器找到若干参考文档及其概率分布,把它们与原提示词拼接,逐次送入大语言模型的编码器,得到多个潜层表征。再把这些潜层表征与对应参考文档的概率分布求积之和,得到一个最终的潜层表征,送入解码器,生成答案。

RAG(arXiv:2005.11401)

在自回归的仅解码器架构走红之前,语言模型普遍采用的是编码器-解码器架构。这种架构将NLP任务抽象成从一个序列转变为另一个序列的任务,不论是问答、翻译等任务都是一样。其中编码器将输入序列映射成潜层表征,解码器再将这个表征映射成输出。因此编码器侧和解码器侧的模型架构和参数都很不一样。值得一提的是,本文介绍的ColBERT等基于语言模型的检索器,都是仅编码器架构。

FiD采用BM25、DRP等公版检索算法,先从外挂数据库中找到一些与检索查询有关的文档或片段,然后分别把它们与检索查询拼接起来。为了规避上下文窗口限制,FiD把这几个拼接分别送入编码器,逐个求出潜层表征,再把这些潜层表征给拼接起来,送入解码器,映射出最终的答案。FiD认为,这种方法有助于综合多段检索内容的意见,提升结果的准确率。FiD的整体思路跟上面REPLUG有相似之处。只不过REPLUG动解码器,FiD动模型;REPLUG的候选叠加是在最后做,而FiD则是在模型的潜层空间做。前一段,有人说OpenAISora最令人兴奋之处在于,它的很多操作是在浅层空间完成,看了FiD的方案,同学们会不会有一丝感觉?

FiD(arXiv:2007.01282)

1.结合WikiData和上下文相邻段落构建知识图谱

2.利用图神经网络(GNN)基于语义关系对段落迭代实施重排序

如此一来,将检索到的段落去粗取精,然后再与原提示词拼接起来喂给解码器,整个系统的解答就更精准了。

KG-FiD(arXiv:2110.04330)

SURGE(arXiv:2305.18846)

RETRO(2022)

3.全动态RAG

REALM(arXiv:2002.08909)

4.其他RAG研究

正常的RAG是接到一个查询,获取参考材料,生成最终答案的一过性过程。FLARE则对大语言模型还是不放心,它提出要把这个过程的颗粒度打散,每句话都要检索一次,以防答案中有个别表述不正确。(氢AI注:哭笑不得啊)

FLARE(arXiv:2305.06983)

人们表达出来的意思和内心真正的意思可能存在偏差。因此,HyDE提出来用大语言模型先发掘出提示词的真实含义,再把它交给召回器检索文档。(氢AI注:这不是RAG,这是GAR)

HyDE(arXiv:2212.10496)

该项目检索的“文档”不是来自于外挂数据库,而是来自于大语言模型的多次生成,本质上等于大语言模型多次生成结果选优。首先让大语言模型生成多段答案,然后用BM25粗排,再用密集召回细排,返回最佳结果。

MuGI(arXiv:2401.06311)

QueryRewritingforRetrieval-AugmentedLargeLanguageModels(arXiv:2305.14283)

LostintheMiddle(arXiv:2307.03172)

SILOLanguageModels(arXiv:2308.04430)

提出了一种当召回文档质量不高时,提高RAG系统鲁棒性的方法,提出以下措施:

1.使用置信度评分

2.评估检索到的文档质量,为不准确的检索启动网络搜索

CRAG提高了RAG在不同数据集的短格式和长格式生成任务中的性能,展示了其可推广性和稳健性。

CRAG(arXiv:2401.15884)

WebGPT(arXiv:2112.09332)

Toolformer是对增强生成思想的推广。它提供了一个解决方案,允许LLM通过简单的API调用外部工具。论文中显示的工具使用包括计算器、问答系统、搜索引擎、翻译系统和日历。步骤概括如下:

1.作者注释了一个大型文本数据集,并对文本中工具API调用可能有用的潜在位置进行了采样

2.在每个位置,它们生成对不同工具的可能的API调用

4.检查添加应用程序调用是否能降低了LM预测的困惑度,如果可以就保留

5.将上述步骤得到的数据用于对原始LM实施精调

该系统有许多局限性,例如无法组合使用工具、交互性使用工具,或考虑工具使用成本。

WebGPT(arXiv:2302.04761)

Toolformer的一个局限性是,会使用的工具太少。相比之下,本文的作者开发了一种基于检索的微调策略来训练一种名为Gorilla的大语言模型,使其可以使用1600多种不同的深度学习模型API(例如,来自HuggingFace或TensorFlowHub)来解决问题。首先,它下载各种工具的API文档。然后,它使用这些数据创建问答对数据集(使用自指令)。最后,以检索感知的方式在此数据集上对7B模型进行精调。

Gorilla(arXiv:2305.15334)

Self-RAG(arXiv:2310.11511)

解决了Self-RAG提出的类似问题,同时具有很强的性能。作者通过生成式指令精调训练单个大语言模型来执行文本生成和嵌入任务。换句话说,GRIT的模型架构允许它处理输入文本、创建嵌入和生成输出文本。

除了有条件的工具使用功能外,还可以通过复用来进一步提高性能:首先,将查询的向量表征用于检索和生成;其次,复用文档键-值存储(基本上是原始检索的向量数据库数据)进行生成。

GRIT在海量文本嵌入基准(MTEB)和各种其他评估基准上的生成和嵌入任务性能超出了所有其他同等尺寸的模型,从而树立了一个新的基准。(氢AI注:GRIT实际上是将召回器和生成器集成到一个模型里面了)

GRIT(arXiv:2402.09906)

5.小结

我们每天使用的产品,如Intercom的AI聊天机器人、Perplexity.AI、You.com、phind.com、Komo.AI或集成在Bing中的ChatGPT,都是基于某种冻结或不太动态的RAG架构。

上面总结的许多研究都处于休眠状态,应用很少。如果有企业能将这些安全、高性能的技术商业落地,实现更快、更可靠的知识访问,将非常令人兴奋。

THE END
1.据悉互联网前10大企业排行榜1:字节跳动,毫无疑问处于独一12月21日,抗癌博主湘妹子去世瘦成皮包骨,电影制暴包贝尔迅雷下载,《我家浴缸的二三事动漫》在线观看/下载_2014日本喜,榴莲视频app下载安装无限看-丝瓜安卓七客,《侏罗纪世界3》高清在线观看-免费下载-6080电影,“fulao2国内下载点安卓轻量版v1.1.4 安卓-fula,2023已经更新黄色软件app3.0.3免费vivo版,管家http://www.hubeipuqi.com/?id=VqsaiE5720241220.shtml
2.最新超算排名全球超级计算机最新榜单揭晓聚焦热点技术升级,性能更强 随着我国超级计算机技术的不断发展,未来国产超算的性能将得到进一步提升。预计在未来几年内,我国将有望推出性能更强大的超级计算机。 应用拓展,助力产业升级 随着国产超算技术的成熟,其在各领域的应用将更加广泛。未来,国产超算将助力我国产业升级,为经济社会发展提供强大动力。 https://good.zhiri0930.cn/post/1292.html
3.2024专业大型网站建设公司top10:谁家实力最强?高超界面设计各位网络探险家们,是时候打开你的电脑,泡上一杯咖啡,准备迎接一场网站的盛宴了!2024年大型网站建设公司哪家强?今天咱们就揭开这个神秘的面纱,看看谁家实力最强。 1.互橙文化 首先得说说这位“网红”选手,互橙文化。他们家网站建设,就像是一道美味的大餐,色香味俱佳。从界面设计到功能实现,每一个细节都让人惊叹不https://www.163.com/dy/article/JJS2H4HP0556ABQ1.html
4.Web2月入2万+现在的90后“钞能力”真是太强了Web2月入2万+ 现在的90后“钞能力”真是太强了 。 币界网报道: 这段时间休假,见了不少亲戚朋友,也从亲戚朋友口中知道到各家亲戚优秀的“后生”们,颇有感慨。 初晓链在加密市场做自媒体内容创作2年多,看到群友们的十倍和百倍似乎很容易。 偶尔是这个群友的100倍PEPE,或者是那个群友的万倍ORDI,或者是这个https://www.528btc.com/news/116118104.html
5.云风的BLOG:杂记Archives另外,最近间歇性的出过 web 访问无法返回的现象。经过排查,是原来用的一个 wiki 系统的某个 bug 导致的死锁。那个系统虽然是开源的,但早就无人维护了,这几年我试着修过几个 bug ,这次真的懒得修了,直接把链接从首页去掉。 最后一个问题是 blog 的留言处理的很慢(导致很多同学多次提交),不知道是不是数据太https://blog.codingnow.com/ooc/
6.WebStorm强大的调试前端项目功能经过WebStorm版本的更迭,现在已经经过WebStorm版本的更迭,现在已经可以非常方便的使用它来调试前端项目,无论是Vue还是React项目,都可以使用它进行调试,还不需要做任何的配置! 2. 启动调试 其实平时在使用WebStorm的时候,启动项目时是会提示你如何进入调试模式,但可能很多人都没有注意。 https://juejin.cn/post/7057070180089724959
7.目前我国互联网总市值101177亿元,其中排名来自老鬼逻辑目前我国互联网总市值101177亿元,其中排名第一的是腾讯,市值37459亿元;排名第二的是阿里巴巴,市值19044亿元;排名第三的竟然是我们平时看不起的拼多多,市值13180亿元。而当年和腾讯、阿里巴巴并驾齐驱的百度,目前仅剩2671亿元的市值,已经完全不是一个梯队的了。但这只是上市公司的统计数据,其实很多大企业都不屑于上市的https://weibo.com/6510323344/P5TDWEEc0
8.国内网络购物的现状通过对“http://www.world68.com/shopping.asp”网站上公布的32家综合网络购物平台进行调查分析和研究相关行业报告及文献, 并融合Web 2.0环境下互联网出现的新特点及人们购物观念和方式的变化, 发现我国网络购物平台建设存在以下几个方面的问题: (1) 平台界面个性化不强。除了一些大型的网络购物平台, 比如淘宝、易趣https://www.360wenmi.com/f/files0ccmimf.html
9.布罗格登:目前东部比西部强4年前骑士是乐透队&现在东部前6直播吧10月16日讯 近日,凯尔特人球员布罗格登在采访中谈到了东部和西部。 布罗格登表示:“到目前为止,东部是比西部更强的分区。几年前人们会说西部更强,但是现在东部更强,东部现在的天赋更高。3、4年前人们认为骑士是乐透球队,但现在骑士是东部前6,他们肯定是季后赛球队。所以,这对我们、雄鹿、76人等队来说变得https://m.zhibo8.cc/news/web/nba/2022-10-16/634b6b7435714.htm
10.前端工作总结(通用12篇)在运维中心工作期间,我工作认真,具有较强的责任心和进取心,极富工作热情,确实完成上级交付的工作,善于与他人沟通,和公司部门同事之间能够通力合作,关系相处融洽而辑穆,配合各部分负责人成功的完成各项工作,具有很强的团队合作精神。注重自己的个人发展,不断努力学习系统、网站架构知识。所以我现在已经能够纯熟维护公司的https://www.ruiwen.com/gongwen/gongzuozongjie/555535.html
11.前端面试笔试题总结持续更新~江阴雨辰互联19.说说如何借助webpack来优化前端性能 20. 说说React中setState执行机制? 21.说说react的事件机制 22.说说你对fiber架构的理解?解决了什么问题? 是什么? 如何解决? 23.什么是强缓存和协商缓存 24.如何使用css实现一个三角形 transparent 25.说说webpack中常见的loader?解决了什么问题 https://www.yc00.com/news/1702616044a1238032.html
12.Android开源项目和文章集合(更新:2022.03.21)安卓项目1.下拉刷新、上拉加载、二级刷新、淘宝二楼、RefreshLayout、OverScroll,Android智能下拉刷新框架,支持越界回弹、越界拖动,具有极强的扩展性,集成了几十种炫酷的Header和 Footer。 https://github.com/scwang90/SmartRefreshLayout#1 2.多图片选择器 https://github.com/LuckSiege/PictureSelector https://blog.csdn.net/z979451341/article/details/78864907
13.ComponentOne2023破解版ComponentOneStudiov2023在2020 v1中,这些Web API已经过测试版,支持.NET Core 2.0及更高版本。我们还添加了许多平台示例,这些示例演示了如何从WinForms,JavaScript(使用TypeScript)和MVC应用程序中使用这些API。 另外,新的Mac版C1ControlPanel意味着您现在可以在Mac上安装ComponentOne Web API组件。 七、Xamarin增强功能2020 v1 1、FlexGridhttp://www.sd173.com/soft/8836.html
14.最新互联网前10大企业排行榜1:字节跳动,毫无疑问处于独一12月22日,刘畊宏帮女儿追星贺峻霖,「御宅屋高辣」御宅屋高辣免费在线阅读第39章她第一,我的美艳的岳第66部分我的美艳的岳第66部分全,《五十公里桃花坞第三季》高清免费无广告免费观看,不能说的秘密2高清完整版在线观看-三明影视,推荐几个黄油网站:游戏爱好者必备,校园狂少2txt全集下载,《你是我的姐妹》http://www.lieren2000.com/wap/colormethod_view.asp?/www/windows/26750_20241221.shtml
15.大连职业技术学院2、配备专职及兼职指导教师队伍。从企业调入或聘请实践能力强的实训指导教师;选派专业教学到企业挂职锻炼,强化专业教学的双师能力。 3、专职管理及维修维护人员。保证实训设备设施的正常使用。 4、对校外实训实行全程指导和督导。 5、施行实践教学的奖励机制,鼓励广大专业教师积极参与实践教学工作。 https://zzb.dlvtc.edu.cn/web/guest/detail?articleId=93F1A4D0-7578-5378-0D01-0E4E79AF8AD1
16.2022年春招,Java后端最全面试攻略,吃透25个技术栈31、用最有效率的方法算出2乘以8等于几? 32、String 和 StringBuilder、StringBuffer 的区别? 33、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)? 34、一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? https://maimai.cn/article/detail?fid=1693041914&efid=0wLQeU_zXMLDQKbP5PYRMg
17.推荐几款强大流行的BI系统腾讯云开发者社区企业在日常运营过程中,需要根据公司实时经营数据来做未来决测或者发现经营中的问题,在此过程中离不开对数据的分析,而平常利用 excel 等方式极大的提高了领导层快速做出决测的成本,所以市面上出现很多商业智能的需求也即是 BI 的出现,极大的方便了企业通过可视化在只管的数据展示中快速做出判断与决测,这里推荐几款 https://cloud.tencent.com/developer/article/1988880
18.Web3.0到底是什么?为何它很重要?以上是Web3.0是什么的详细介绍。Web3.0时代的到来将引领产业和商业模式走向新的变革。在未来,我们或许可以像现在使用互联网一样,通过电脑、智能手机、电视等设备体验Web3.0,甚至可能通过元宇宙的VR头盔直接感受其魅力。当然,无论是Web3.0还是元宇宙的发展,都还需要历经长时间的探索和实践。与此同时,我们也应警惕市场热点https://www.mimajike.com/web3/13.html
19.专科医师数据检索PubMed与WebofScience哪家强而Web of Science是科学界最经典权威的引文数据库,其核心数据库为科学引文索引扩展版(Science Citation Index Expanded,就是目前通俗说的SCI.如果有人问SCI和SCIE有什么区别,我在这里简要回答一下:“现在没区别”)。那么,这两个数据库在检索方面,哪家强呢?下面进行逐条比较。https://www.med66.com/zhuankeyishipeixun/zh1704078961.shtml
20.freemarker定义变量循环赋值freemarker循环map<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 注:这里我把struts-tags.tld放在WEB-INF下面 4.现在我们可以在FreeMarker模板中使用标签了。 --- 测试 1. 2. 3. 4. 5. 6. 7. list索引_index <#list list as city> city{city_indexhttps://blog.51cto.com/u_16099242/11273005
21.FreeMarker的基础语法使用&&心得和技巧javaeyeFreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图) FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件。 https://www.iteye.com/blog/mxdxm-2407315
22.郑州“千年难遇”的强降雨:被困在车里24小时,把坐垫拆下来盖在持续了近一周的雨在7月20日达到峰值,郑州遭遇的这场极端的强降雨,被认为“千年难遇”。 暴雨淹没了道路、涵洞,积水,阻挡了人们上班、回家的路。突如其来的暴雨彻底打乱了人们的正常生活。我们找到了郑州的一些普通人,他们有的在暴雨中冒险蹚水回家,有的被困在公司一夜,有的留在学校里待命。以下是他们的自述:https://web.shobserver.com/staticsg/res/html/web/newsDetail.html?id=387924
23.Web版Photoshop来了,用到了哪些前端技术?本文就来看看 Photoshop 所使用的 Web 能力、进行的性能优化以及未来可能的发展方向。愿景:在浏览器中使用 Photoshop Adobe 的愿景就是将 Photoshop 带到浏览器中,让更多的用户能够方便地使用它进行图像编辑和平面设计。过去几十年,Photoshop一直是图像编辑和平面设计的黄金标准,但它只能在桌面上运行。现在,通过将它https://www.imooc.com/article/337119
24.我在中东搞科创:疫情后涌入很多华人,不讲好本地故事难成功讲一个插曲,我在阿联酋总理办公室工作时做了一个区块链政策,从立项到正式公布花了4个月时间。他们的政策更新速度快,试错态度强,小国家的政策错了也没事,及时调整过来就行。阿联酋敢快速试错,它把政府当创业公司一样运营,同时又按照非常现代的金融监管方式监管Web 3.0。 https://www.thepaper.cn/newsDetail_forward_25528125
25.salvo:Salvo是一个极其简单易用却又功能强大的RustWeb后端框架Salvo(赛风) 是一个极其简单且功能强大的 Rust Web 后端框架。仅仅需要基础 Rust 知识即可开发后端服务。 中国用户可以添加我微信 (chrislearn), 拉微信讨论群或者直接加入 QQ 群:823441777. 功能特色 基于Hyper 1,Tokio开发; 支持HTTP1, HTTP2 和HTTP3; https://gitee.com/salvo-rs/salvo
26.中国共产党威海市委员会组织部经验交流PPT演示文稿的基本操作这后,在PowerPoint中就出现了Web工具栏,只要在地址栏中键入站点的URL地址,回车,系统就会启动IE,并连接到相应的网站。 35.用超级链接做目录 在PowerPoint中,可以对文字做一些超级链接,从而建立很实用的目录。只是要注意的是,在设置超级链接时,不要选中文字,而要选中文字所在的文本框,这样可避免字带有下划线的问题:先http://www.whzzb.gov.cn/art/2014/7/15/art_34385_941618.html