[论文笔记]Making Large Language Models A Better Foundation For Dense Retrieval

news2024/12/23 21:00:15

引言

今天带来北京智源研究院(BAAI)团队带来的一篇关于如何微调LLM变成密集检索器的论文笔记——Making Large Language Models A Better Foundation For Dense Retrieval。

为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。

密集检索需要学习具有区分性的文本嵌入,以表示查询和文档之间的语义关系。考虑到大语言模型(LLM)在语义理解方面的强大能力,它们可能会对密集检索有所裨益。然而,LLM 是通过文本生成任务进行预训练的,其工作方式与将文本表示为嵌入的方式完全不同。因此,研究如何适当地调整 LLM,以使其能够有效地初始化为密集检索的主干编码器,是至关重要的。

在本文中,我们提出了一种新方法,称为 LLaRA(LLM Adapted for dense Retrieval),该方法作为对 LLM 进行后处理适应以用于密集检索应用。LLaRA 包含两个前置任务:EBAE(Embedding-Based Auto-Encoding)和 EBAR(Embedding-Based Auto-Regression),其中 LLM 的文本嵌入分别用于重构输入句子的词元和预测下一个句子的词元。

模型在仓库: https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_reranker 中进行公开。

1. 总体介绍

密集检索是深度神经网络带来的信息检索(IR)新范式。与传统的 IR 方法不同,密集检索学习将查询和文档表示为同一潜在空间中的嵌入,其中查询和文档之间的语义关系可以通过嵌入相似性反映出来。

密集检索的质量受到其主干编码器能力的严重影响。在过去几年中,预训练语言模型被广泛应用于查询和文档的表示。实证研究发现,模型规模和训练规模的扩大可以显著提高密集检索的准确性和泛化能力。

最近,大语言模型(LLMs)已被微调作为许多经典 NLP 任务的通用解决方案。考虑到 LLM 在语义理解方面的优越能力,利用这些强大的模型进行密集检索也具有很大潜力。事实上,已有一些开创性的努力在这一方向上进行,其中 LLM 被提示或微调以生成具有区分性的嵌入,从而促进密集检索(Muennighoff;Neelakantan;Ma;Zhang)。

尽管已有初步进展,但要充分发挥大语言模型在密集检索中的潜力仍然面临挑战。特别是,LLMs 是通过文本生成任务进行预训练的,其嵌入的学习目标是为了预测下一个词元。因此,LLMs 的输出嵌入主要集中于捕捉上下文的局部和近期语义。然而,密集检索需要的嵌入应该能表示整个上下文的全局语义。这种大的差异将严重限制 LLMs 在密集检索中的直接应用。

Refer to caption

图 1:LLaRA 框架。LLM 被提示生成两个文本嵌入。一个用于 EBAE(绿色),其任务是预测原始句子。另一个用于 EBAR(蓝色),其任务是预测下一个句子。

为了解决这个问题,我们提出了一种新方法 LLaRA(见图 1),它作为 LLMs 的后处理适应,旨在提高其在密集检索中的可用性。LLaRA 可以被视为无监督生成预训练的扩展训练阶段。通过精心设计的前置任务,LLaRA 旨在增强 LLMs 生成文本嵌入的能力,以便更好地表示全局上下文的语义。

具体来说,LLaRA 引入了两个前置训练任务:EBAE(Embedding-Based Auto-Encoding)和 EBAR(Embedding-Based Auto-Regression)。在 EBAE 中,LLM 被提示生成可以用来预测输入句子自身词元的文本嵌入。而在 EBAR 中,LLM 被提示生成可以用来预测下一个句子词元的文本嵌入。通过学习这些前置任务,LLM 的文本嵌入可以从局部语义表示(即预测下一个词元)调整为全局语义表示(即预测句子级特征)。借助这两种不同的提示模板,LLM 的嵌入能力可以被区分,以处理各种语义匹配场景,例如相似性搜索(使用 EBAE 的提示)和问答(使用 EBAR 的提示)。

在 LLaRA 中,句子级特征的预测是通过对 LLM 输出嵌入进行线性投影完成的,不需要额外的解码组件。因此,LLaRA 可以直接在现有的生成预训练流程上实现,具有极高的训练效率。此外,因为 LLaRA 完全基于原始语料库进行操作,所以不需要收集任何标注数据。

总结来说,我们在本工作中做出了以下技术贡献:

  1. 我们提出了 LLaRA,这是首个将 LLM 适应于密集检索应用的研究工作。
  2. LLaRA 设计简单但有效,通过对未标注数据执行两个前置任务,显著提升了 LLM 的检索能力。
  3. 预训练和微调 LLM 需要巨大的成本。为了促进该领域未来的研究,公开发布模型和源代码。

2. 相关工作

密集检索是将查询和文档表示为同一潜在空间中的嵌入,在此空间中,可以基于嵌入的相似性检索相关文档。密集检索的准确性由嵌入的质量决定,其中主干编码器是学习区分性嵌入的决定性因素。在过去几年中,预训练语言模型被广泛用于查询和文档的编码。得益于大规模预训练和基于变换器的架构,PLMs 能够为输入文本生成细粒度的语义表示。

沿着相同的思路,利用 LLMs 进行主干编码器的持续扩展是自然的选择。LLMs 在许多方面具有前景,尤其是其强大的语义理解能力可以显著改善复杂查询和文档的建模。此外,考虑到 LLMs 显著扩展的上下文长度,它为构建文档级检索器提供了直接基础。由于 LLMs 的前所未有的普适性和指令跟随能力,它们也有助于多任务嵌入模型的学习。最近,有几项工作对将 LLMs 作为密集检索的主干编码器进行了初步尝试(Muennighoff;Neelakantan;Ma;Zhang)。然而,现有方法仅仅是直接使用 LLMs,由于文本生成任务和文本嵌入任务之间的巨大差异,LLMs 的潜力可能没有得到充分发挥。实际上,如何将 LLM 适应为密集检索应用的更好基础模型仍需进一步研究。

3. 方法

3.1 前置知识

密集检索利用文本嵌入模型生成查询和文档的嵌入: e q e_{q} eq e d e_{d} ed。查询和文档的相关性通过它们的嵌入相似性来反映: ⟨ e q , e d ⟩ \langle e_{q}, e_{d} \rangle eq,ed。因此,可以通过在嵌入空间内进行近似最近邻(ANN)搜索来检索与查询相关的文档 D q D_{q} Dq D q ← Top– k ( { d : ⟨ e q , e d ⟩ ∣ D } ) D_{q} \gets \text{Top}–k(\{d : \langle e_{q}, e_{d} \rangle | D\}) DqTopk({d:eq,edD})

预训练语言模型曾被用作嵌入模型的主干编码器。以 BERT 为例,输入文本被标记化为序列 T : [ C L S ] , t 1 , . . . , t N , [ E O S ] T: [CLS], t1, ..., tN, [EOS] T[CLS],t1,...,tN,[EOS]。然后,标记化的序列由 BERT 编码,输出的嵌入被整合为文本嵌入。执行整合的两种常见选项是:[CLS] 或均值池化:

e t ← BERT ( T ) [ CLS ] (1) e_{t} \leftarrow \text{BERT}(T)[\text{CLS}] \tag 1 etBERT(T)[CLS](1)

e t ← AVG ( BERT ( T ) ) (2) e_{t} \leftarrow \text{AVG}(\text{BERT}(T)) \tag 2 etAVG(BERT(T))(2)

当使用大语言模型(LLMs)作为主干编码器时,文本嵌入需要以不同的方式生成。鉴于现有的 LLMs 主要采用仅解码器架构,全局上下文只能通过输入序列末尾的词元来获取。因此,关于特殊词元 ⟨ \ s ⟩ \langle \backslash \text{s} \rangle \s [ E O S ] [EOS] [EOS] 的输出嵌入被用作文本嵌入。以 LLaMA 为例,我们有以下更新后的文本嵌入形式:
e t ← LLaMA ( T ) [ ⟨ \ s ⟩ ] . (3) e_{t} \gets \text{LLaMA}(T)[\langle \backslash \text{s} \rangle]. \tag 3 etLLaMA(T)[⟨\s⟩].(3)

3.2 LLaRA

尽管在 LLM 中最后一个词元可以关注整个上下文,但其输出嵌入并不是输入文本的最佳表示。这是因为 LLM 是通过文本生成任务进行预训练的,其中每个词元的嵌入用于预测下一个词元。换句话说,LLM 的输出嵌入主要关注捕捉局部和未来的语义,而不是全局上下文的语义。

目标:为了解决上述问题,我们提出了 LLaRA,用于检索导向的 LLMs 适应。通过适应过程,LLM 的文本嵌入预计实现两个属性:

  • 文本嵌入需要表示全局上下文的语义。
  • 全局上下文表示应促进查询和文档之间的关联。

前置任务:为实现上述两个目标,我们引入了两个前置(pretext)任务。第一个是 EBAE,在这个任务中,文本嵌入 e t e_{t} et 被用于预测输入文本本身。具体来说,如果 e t e_{t} et 能预测原始输入文本,那么 e t e_{t} et 必须完全编码输入文本的全局语义。第二个任务是 EBAR,在这个任务中,文本嵌入 e t e_{t} et 被用于预测输入文本的下一句。知道相关文档是查询的可能下一句(例如,问题的答案或对话上下文的回应),可以通过为这种语义建立表示来建立查询和文档之间的关联。

文本嵌入:LLM 使用两个不同的模板生成 EBAE 和 EBAR 的文本嵌入(图 1)。对于 EBAE,LLM 由模板提示:[Placeholder for input]<space>The original sentence:<space><\s> (<space>表示一个空白符),文本嵌入生成如下:
e t α ← LLaMA ( T , SELF, ⟨ \ s ⟩ ) [ − 1 ] . (4) e_{t}^{\alpha} \gets \text{LLaMA}(T, \text{SELF,}\langle\backslash\text{s}\rangle)[-1]. \tag 4 etαLLaMA(T,SELF,\s⟩)[1].(4)

这里,SELF代表 EBAE 的提示:The original sentence:

对于 EBAR,LLM 由模板提示:[Placeholder for input]<space>The next sentence:<space><\s> ,文本嵌入生成如下:
e t β ← LLaMA ( T , NEXT , ⟨ \ s ⟩ ) [ − 1 ] . (5) e_{t}^{\beta} \gets \text{LLaMA}(T, \text{NEXT}, \langle\backslash\text{s}\rangle)[-1]. \tag 5 etβLLaMA(T,NEXT,\s⟩)[1].(5)

这里,NEXT 代表 EBAR 的提示:The next sentence:

图2: LLaRA的注意力掩码

直接计算 e t α e_{t}^{\alpha} etα e t β e_{t}^{\beta} etβ 会导致大量成本浪费,因为输入文本 T T T 被处理了两次。为了解决这个问题,我们提出在一次处理过程中计算 e t α e_{t}^{\alpha} etα e t β e_{t}^{\beta} etβ。具体来说,将 EBAE 和 EBAR 的提示合并为一个联合提示:[Placeholder for input]<space>SELF<space><\s><space>NEXT<space><\s>。由于两个文本嵌入需要独立计算,我们修改了传统的因果语言建模的注意力掩码,其中SELF<space><\s> NEXT<space><\s> 是相互不可见的(图 2)。现在,第一和第二个 ⟨ \ s ⟩ \langle\backslash\mathbf{s}\rangle \s 词元的输出嵌入分别用于 e t α e_{t}^{\alpha} etα e t β e_{t}^{\beta} etβ。由于输入文本 T T T 将占用联合提示的大部分长度,这种处理方式比直接计算节省了大约 50% 的成本。

训练目标:如前所述,LLaRA 的文本嵌入旨在捕捉输入文本本身和下一句的全局语义。在此基础上,我们提出了一个简单但有效的训练目标,将文本嵌入转化为全局语义表示者。从理论上讲,我们认为,如果一个嵌入能够准确预测特定上下文的所有词元,则该嵌入必须是对应上下文全局语义的强表示者。

基于这一基本原则,文本嵌入的训练被表述为多类别分类问题,其中文本嵌入经过线性投影用于预测目标上下文中的词元。上述问题的目标函数如下:

min ⁡ ∑ t ∈ T exp ⁡ ( e T W t ) ∑ v ∈ V exp ⁡ ( e T W v ) . (6) \operatorname*{min} \sum_{t \in \mathcal{T}} \frac{\exp{\left(e^{T} \pmb{W}_{t}\right)}}{\sum_{v \in V} \exp{\left(e^{T} \pmb{W}_{v}\right)}}. \tag 6 mintTvVexp(eTWv)exp(eTWt).(6)

其中 W ∈ R ∣ V ∣ × d W \in \mathbb{R}^{|V| \times d} WRV×d 是线性投影矩阵, V V V 是词汇空间。 T \mathcal{T} T 代表输入文本本身或下一句的词元集合,具体取决于 e t α e_{t}^{\alpha} etα e t β e_{t}^{\beta} etβ 的处理。这一训练目标简单但有效,可以轻松实现于现有的语言建模训练流程之上。

4. 实验

4.1 设定

image-20240906080655226

实验研究旨在验证 LLaRA 的有效性,特别是其在微调后的检索准确性和在不同场景中的泛化能力。为此,我们使用 MS MARCO作为微调数据集,对段落检索和文档检索任务进行评估。为了评估模型的泛化能力,我们还利用了 BEIR 基准,该基准涵盖了各种检索场景,如问答、事实验证、实体检索、重复检测等。来自 MS MARCO 的微调模型直接用于 BEIR 的0-shot 评估。

image-20240906080901053

训练:LLaRA 应用于 LLaMA-2-7B(base)模型。训练基于由 DPR整理的未标注的维基百科语料库。我们总共进行 10000 步的 LLaRA 适应,批量大小为 256,序列长度为 1024,学习率为 1e-5。LLaRA 的微调遵循 RepLLaMA提出的程序:利用 LoRA进行高效的 LLM 参数训练,并使用 ANN 硬负样本进行嵌入模型的对比学习。

image-20240906080915442

4.2 分析

关于 MS MARCO 的段落和文档检索,以及 BEIR 基准上的0-shot 检索的评估结果分别展示在表 1、表 2 和表 3 中。我们与多种基准方法进行了比较,包括基于预训练语言模型的代表性密集检索器,如 ANCE、RocketQA、GTR、RetroMAE、SimLM以及传统的基于 BM25 的稀疏检索器。我们还引入了最新的利用 LLM 作为骨干编码器的方法,包括 CPT、SGPT、RepLLaMA。

主要观察结果如下。首先,LLaRA 在每个评估场景中都取得了最好的检索性能。

对每个具体场景的观察结果如下。首先,MS MARCO 段落检索(表 1)曾是信息检索领域最广泛引用的基准之一。值得注意的是,LLaRA 仅通过硬负样本进行微调。如果未来可以利用更先进的微调方法,报告的性能可能会进一步提高。与基于 BERT 的替代方法(如 RetroMAE 和 SimLM)相比,切换骨干编码器带来了近 + 4 % +4\% +4% 的 MRR @10 增益。这一显著提升表明了应用 LLM 进行密集检索的巨大潜力。

在 MS MARCO 的文档检索任务中(表2),相同的观察结果也得到了验证。基于 LLM 的检索器带来了优越的经验性能。实际上,文档检索直接受益于使用 LLM 作为骨干编码器,鉴于 LLM 显著扩展的上下文长度,例如 LLaMA-2 的 4K 长度。

根据 BEIR 基准上的0-shot 评估结果,检索器的泛化能力是使用 LLM 作为骨干编码器的另一个明显优势。在 BEIR 基准的许多评估任务中,基于 BERT 的方法甚至比简单的 BM25 基于稀疏检索器表现更差。然而,通过切换到基于 LLM 的骨干编码器,密集检索器的0-shot 性能可以显著提升。值得注意的是,随着模型规模的大幅扩展,所有大型基准能够在大多数情况下超越 BM25。此外,与 BERT 基准相比,LLaRA 在每个单独任务中的表现都要好得多,这最终带来了在平均性能上 + 16 % +16\% +16% 的 NDCG@10 显著提升。

5. 结论

在本文中,我们提出了 LLaRA,这是一种新颖的方法,旨在通过提高文本嵌入能力,使 LLM成为更好的密集检索基础。LLaRA 由两个前置任务 EBAE 和 EBAR 组成。这两个任务协作将 LLM 的文本嵌入转化为全局上下文的表示者,从而促进查询与相关目标之间的语义匹配。

总结

⭐ 本工作提出了LLaRA,该方法作为对 LLM 进行后处理适应以用于密集检索应用。LLaRA 包含两个前置任务: LLM 的文本嵌入分别用于重构输入句子的词元和预测下一个句子的词元。通过这种方式旨在捕捉输入文本本身和下一句的全局语义,从而使LLM变成一个有效的密集检索器。

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

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

相关文章

深入理解C语言中的POSIX定时器

引言 在Unix和类Unix系统中&#xff0c;定时器是一种常见的机制&#xff0c;用于在特定时间间隔后执行某些操作。POSIX定时器因其灵活性和功能丰富而被广泛采用。本文将深入探讨POSIX定时器的工作原理、内部机制、使用方法及其在实际开发中的应用。 POSIX定时器基础 POSIX定…

【视频讲解】Python贝叶斯卷积神经网络分类胸部X光图像数据集实例

全文链接&#xff1a;https://tecdat.cn/?p37604 分析师&#xff1a;Yuanchun Niu 在人工智能的诸多领域中&#xff0c;分类技术扮演着核心角色&#xff0c;其应用广泛而深远。无论是在金融风险评估、医疗诊断、安全监控还是日常的交互式服务中&#xff0c;有效的分类算法都是…

数据仓库理论知识

1、数据仓库的概念 数据仓库&#xff08;英文&#xff1a;Date Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于数据存储、分析、报告的数据系统。数据仓库的建设目的是面向分析的集成化数据环境&#xff0c;其数据来源于不同的外部系统&#…

Git 修改Push后的Commit Message

向远程仓库push代码之后&#xff0c;在IDEA中无法直接修改Commit Message&#xff0c;需要在终端或控制台中输入以下命令&#xff08;HEAD~1中的1表示只对最后一个提交进行修改&#xff0c;因此1可以自定义&#xff09; git rebase -i HEAD~1执行完rebase指令后&#xff0c;会…

带AI功能朵米客服系统3.5无限制开心版+搭建文档

带AI功能朵米客服系统3.5无限制开心版搭建文档&#xff0c;朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将…

0基础跟德姆(dom)一起学AI Python进阶07-多线程_生成器

* 多进程案例 * 带参数的多进程代码**(重点)** * 查看进程的id * 演示: 进程之间数据是相互隔离的 * 多线程案例 * 入门案例 * 带参数的多线程代码**(重点)** * 演示: 线程之间数据是相互共享的 * 互斥锁 * 上下文管理器**(重点)** > 解析: with open原理, 为啥…

每日一题,力扣leetcode Hot100之198.打家劫舍

这一道题乍一看可以双层循环暴力解&#xff0c;但是仔细一想有可能最大利益并不是一家隔着一家偷&#xff0c;我可以间隔很多家偷&#xff0c;所以 这个题的思路还是有点像爬楼梯&#xff0c;用动态规划解。 首先确立动态规划的初始条件&#xff1a; 1.dp[0]nums[0]只有一家 …

企业邮箱怎么设置邮箱监控(老板监控员工邮件的方法推荐)【企业管理必备】

在现代企业中&#xff0c;电子邮件作为主要的沟通工具&#xff0c;不仅承载着日常的工作信息&#xff0c;还涉及大量机密内容。为了确保信息安全、提高工作效率&#xff0c;许多企业希望设置邮件监控&#xff0c;了解员工的邮箱使用情况。 本文将详细介绍企业邮箱如何设置邮箱…

Qt-使用qrc文件管理资源(15)

目录 qrc机制 创建qrc文件 1.在项目中创建一个qrc文件 2.导入图片到qrc文件中 2.2先设置一个前缀 2.3把刚刚使用的图片导入到资源文件中 测试结果 图片文件到哪去了&#xff1f; qrc机制 上篇文章中&#xff0c;我们提到了窗口的图片怎么用QIcon进行修改&#xff0c;…

MySQL record 01 part

更改密码&#xff1a; alter user rootlocalhost identified with mysql_native_password by ‘123456’; 注意&#xff1a; 在命令行方式下&#xff0c;每条MySQL的命令都是以分号结尾的&#xff0c;如果不加分号&#xff0c;MySQL会继续等待用户输入命令&#xff0c;直到MyS…

USB - 笔记

1.USB接口区分 2 充电宝 图中提到的各种充电协议都是用于快速充电技术的标准,适用于不同品

聚类算法指南

欢迎来到雲闪世界。 聚类是任何数据科学家必备的技能&#xff0c;因为它对解决实际问题具有实用性和灵活性。本文概述了聚类和不同类型的聚类算法。 什么是聚类&#xff1f; 聚类是一种流行的无监督学习技术&#xff0c;旨在根据相似性将对象或观察结果分组。聚类有很多有用…

c++的封装

实现my_string中可能实现的功能 #include <iostream> #include<cstring> using namespace std; class my_string {char *str; //记录c风格的字符串int size; //记录字符串的实际长度int capacit;//记录最大容量public://无参的构造函数my_string():size(0)…

护眼台灯十大排名有哪些?盘点2024年央视公认最好的护眼灯!

随着学业负担的加重和电子设备的广泛使用&#xff0c;青少年的近视问题变得日益严峻&#xff0c;近视率也在持续上升。导致近视的因素多样&#xff0c;不仅仅局限于电子屏幕的过度使用&#xff0c;还包括遗传因素、不良的用眼习惯、环境条件、营养不良以及过重的学习压力等&…

公司电脑能监控聊天记录吗?公司监控微信聊天记录的方法,一分钟速成!

在现代企业中&#xff0c;微信已经成为许多员工日常沟通的主要工具。虽然它极大地提高了工作效率&#xff0c;但也给公司管理带来了一些挑战&#xff0c;比如如何防止员工在工作时间闲聊、保护企业机密信息不外泄等。因此&#xff0c;不少公司希望对员工的微信聊天记录进行监控…

SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座

数字化办公时代&#xff0c;企业升级 IT 基础设施&#xff0c;已不再是选择题&#xff0c;而是必答题。 数字化办公时代&#xff0c;企业为何要升级 IT 基础设施&#xff1f; 随着时代变化与科技进步&#xff0c;人们的工作方式也发生了巨大变化。如今&#xff0c;远程办公、全…

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节&#xff0c;涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件&#xff0c;最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂…

【Java数据结构】反射、枚举以及lambda表达式

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.反射 2.1反射定义 2.2反射主要应用场景 2.3Class类(反射机制的起源) 2.31获取Class类 2.32Class类常用方法 2.33获得类中的成员变量 2.34使用类中的成员…

Leetcode3258. 统计满足 K 约束的子字符串数量 I

Every day a Leetcode 题目来源&#xff1a;3258. 统计满足 K 约束的子字符串数量 I 解法1&#xff1a;暴力 暴力枚举每一个子字符串&#xff0c;看是否满足 k 约束。 代码&#xff1a; /** lc appleetcode.cn id3258 langcpp** [3258] 统计满足 K 约束的子字符串数量 I*/…

WebAPI(三)、 DOM 日期对象Date;获取事件戳;根据节点关系查找节点

文章目录 DOM1. 日期对象(1)、日期对象方法(2)、时间戳(3)、下课倒计时 2. 节点操作(1)、 查找节点&#xff08;根据节点关系找&#xff09;(2)、 增加节点&#xff1a;创建create、追加append、克隆clone(3)、 删除节点remove DOM 1. 日期对象 日期对象就是用来表示时间的对…