[论文笔记]RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL

引言

今天带来又一篇RAG论文笔记:RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL。

检索增强语言模型能够更好地适应世界状态的变化并融入长尾知识。然而,大多数现有方法只能从检索语料库中检索到短的连续文本片段,限制了对整个文档上下文的完整理解。作者引入了一种新颖的方法,即递归嵌入、聚类和总结文本片段,从底部开始构建具有不同摘要级别的树。在推理期间,RAPTOR模型从这棵树中检索,将跨不同抽象级别的庞大文档中的信息整合起来。

源码发布在: https://github.com/parthsarthi03/raptor 。

1. 总体介绍

大语言模型已经成为具有深远影响的变革性工具,在许多任务上表现出令人印象深刻的性能。然而,即使是一个大型语言模型也不包含特定任务所需的足够领域特定知识,并且世界持续变化,使LLM中的事实失效。通过额外的微调或编辑来更新这些模型的知识是困难的,特别是在处理庞大文本语料库时。在开放领域问答系统中开创性的另一种方法是将大量文本进行分块(段落)后在单独的信息检索系统中建立索引。所检索的信息随后与问题一起作为上下文呈现给LLM(RAG检索增强),这使得为系统提供特定领域当前知识变得容易,并且能够轻松解释和追溯来源。

然而,现有的检索增强方法也存在缺陷。大多数现有方法只检索到几个短小的相邻文本片段,这限制了它们表示和利用大规模话语结构的能力。这在需要整合来自文本多个部分知识的主题性问题中尤为重要,比如理解整本书的情况,就像NarrativeQA数据集中以灰姑娘的童话故事为例,针对问题“灰姑娘如何走向幸福结局?”,检索到的前K个相邻短文本不包含足够的上下文来回答问题。

image-20240709165214027

为了解决这个问题,作者设计了一个索引和检索系统,使用树结构捕捉文本的高级和低级细节。如图1所示,RAPTOR对文本片段进行聚类,生成这些聚类的文本摘要,然后重复此过程,从底部生成树。这种结构使得RAPTOR能够加载不同级别代表文本的片段到LLM的上下文中,从而能够有效地回答不同级别的问题。

作者的主要贡献是利用文本摘要的想法,允许在不同尺度上进行检索增强上下文,并在长文集合的实验中展示其有效性。

2. 相关工作

为什么使用检索? 硬件和算法的最新进展确实扩展了模型可以处理的上下文长度,引发了关于检索系统必要性的讨论。然而,模型往往未充分利用长距离上下文,并在上下文长度增加时性能下降,特别是当相关信息嵌入在冗长上下文中时。此外,在实际应用中,使用长上下文既昂贵又缓慢。这表明,为知识密集型任务选择最相关的信息仍然至关重要。

检索方法 检索增强语言模型(Retrieval-augmented language models, RALMs)在各个组成部分中取得了改进:检索器(retriever)、阅读器(reader)和端到端系统训练。检索方法已经从传统的基于单词(term)的技术(如TF-IDF和BM25)转变为基于深度学习的策略。一些最近的工作提出使用大型语言模型作为检索器,因为它们能够记忆大量知识。关于阅读器组件的研究包括Fusion-in-Decoder,它同时使用DPR和BM25进行检索,并在编码器中独立处理段落,以及RETRO,它利用跨块关注和分块检索生成基于检索上下文的文本。

端到端系统训练工作包括Atlas,它在与检索器一起微调编码器-解码器模型;REALM,一种为开放域问答微调的双向掩码语言模型;以及RAG,将预训练的序列到序列模型与神经网络检索器集成。尽管方法多样,模型的检索组件主要依赖于标准方法,即对语料库进行分块并使用基于BERT的检索器进行编码。

尽管这种方法被广泛采用,但Nair等强调了一个潜在的缺点:连续分割可能无法捕获文本的完整语义深度。从技术或科学文档中提取的片段阅读可能缺乏重要上下文,使其难以阅读甚至具有误导性。

递归摘要作为上下文 摘要(Summarization,总结)技术提供了对文档的简洁视图,使内容更加集中。Gao等人的摘要模型使用段落(passage)的摘要和片段,提高了大多数数据集的正确性,但有时可能是一种高失真的压缩手段。Wu等人的递归摘要生成模型采用任务分解来总结较小的文本块,然后将其集成以形成较大部分的摘要。虽然这种方法对捕获更广泛主题很有效,但可能会忽略细节。LlamaIndex通过类似摘要相邻文本块的方式来缓解这一问题,但同时保留中间节点,因此存储着不同层次的细节,保留了细粒度的详情。然而,由于这两种方法依赖于相邻节点的分组或摘要,可能仍会忽视文本内的远程相互依赖关系,而RAPTOR可以找到并组合这些关系。

3. Method

RAPTOR概览 建立在长文本通常呈现子主题和分层结构的思想基础上,RAPTOR通过构建一个递归树结构来解决阅读中的语义深度和连接问题,该结构平衡了更广泛的主题理解和细粒度细节,允许根据语义相似性而不仅仅是文本顺序对节点进行分组。

RAPTOR树的构建始于将检索语料库分割成长度为100的短连续文本,类似于传统的检索增强技术。如果一句话超过100个标记的限制,我们将整个句子移至下一个块(chunk),而不是在句子中途截断。这保留了每个块内文本的上下文和语义连贯性。然后使用SBERT嵌入这些文本。这些块及其对应的SBERT嵌入形成了树结构的叶节点。

为了将相似的文本块分组,采用了聚类算法。一旦分组,将使用语言模型对分组文本进行总结。然后重新嵌入这些总结文本,并继续嵌入、聚类和总结循环,直到进一步聚类变得不可行为止,最终形成原始文档的结构化、多层树表示。RAPTOR的一个重要特点是其计算效率。该系统在构建时间和标记消耗方面呈线性缩放,适用于处理庞大和复杂的语料库。

对于在该树内查询,引入了两种不同的策略:树遍历和折叠树。树遍历方法逐层遍历树,在每个级别修剪和选择最相关的节点。折叠树方法评估所有级别上的节点,以找到最相关的节点。

聚类算法 聚类在构建RAPTOR树、将文本段组织成连贯簇(Group)方面发挥着关键作用。这一步将相关内容组合在一起,有助于后续的检索过程。

作者聚类方法的一个独特之处在于使用软聚类,其中节点可以属于多个簇,而不需要固定数量的簇。这种灵活性是必不可少的,因为单个文本段通常包含与各种主题相关的信息,因此需要将其纳入多个摘要中。

聚类算法基于高斯混合模型(GMMs),这种方法提供了灵活性和概率框架。GMMs假设数据点是从多个高斯分布混合中生成的。

给定一个包含N个文本片段的集合,每个表示为一个d维稠密向量嵌入,假设文本向量 x x x​属于第k个高斯分布的概率表示为 p ( x ∣ k ) = N ( x ; μ k , Σ k ) p(x|k) = \mathscr N(x;\mu_k,\Sigma_k) p(xk)=N(x;μk,Σk)。整体概率分布是加权和 P ( x ) = ∑ k = 1 K π k N ( x ; μ k , Σ k ) P(x) = \sum_{k=1}^K \pi_k \mathscr N(x;\mu_k,\Sigma_k) P(x)=k=1KπkN(x;μk,Σk),其中 π k \pi_k πk​表示第k个高斯分布的混合权重。

向量嵌入的高维度对传统GMMs构成挑战,因为在高维空间中使用距离度量可能表现不佳。为了缓解这一问题,作者采用均匀流形近似和投影(Uniform Manifold Approximation and Projection,UMAP),一种用于降维的流形学习技术。UMAP中的最近邻参数n_neighbors决定了保留局部结构和全局结构之间的平衡。作者的算法通过变化n_neighbors来创建层次聚类结构:首先识别全局聚类,然后在这些全局聚类中执行局部聚类。这种两步聚类过程捕捉了文本数据之间的广泛关系,从广泛主题到具体细节。

如果局部聚类的组合上下文超过了总结模型的标记阈值,作者的算法会在该聚类内递归应用聚类,确保上下文保持在标记阈值内。

为了确定最佳聚类数,使用贝叶斯信息准则(Bayesian Information Criterion,BIC)进行模型选择。BIC不仅惩罚模型复杂性,还奖励拟合优度。对于给定的GMM,BIC为 B I C = ln ⁡ ( N ) k − 2 ln ⁡ ( L ^ ) BIC = \ln(N)k - 2\ln(\hat L) BIC=ln(N)k2ln(L^),其中 N N N为文本片段(或数据点)的数量, k k k为模型参数的数量, L ^ \hat L L^​为模型似然函数的最大化值。在GMM的情境中,参数数量 k k k是输入向量的维度和聚类数量的函数。

得到由BIC确定的最佳聚类数量后,使用EM算法来估计GMM参数,即均值、协方差和混合权重。虽然GMM中的高斯假设可能与文本数据的性质不完全符合,后者通常表现出稀疏和偏斜的分布,但实证观察表明,它是一种有效的模型。

基于模型的摘要 在使用高斯混合模型对节点进行聚类后,将每个聚类中的节点发送到语言模型进行总结。这一步允许模型将大块文本转化为所选节点的简明、连贯摘要。作者使用gpt-3.5-turbo生成摘要。总结步骤将检索到的大量信息压缩为可管理的大小。

查询 下面详细阐述了RAPTOR所采用的两种查询机制:树遍历和折叠树(collapsed tree,坍塌树)。这些方法提供了在多层RAPTOR树中获取相关信息的独特方式,每种方法都有其各自的优势和权衡。在附录F中提供了这两种方法的伪代码。使用SBERT对所有节点进行嵌入。

树遍历方法首先基于查询嵌入与根节点的余弦相似性选择top-k个最相关的根节点。这些所选节点的子节点在下一层被考虑,然后再次基于它们的子节点与查询向量的余弦相似性选择top-k个节点。该过程重复进行,直到达到叶节点。最后,将从所有选定节点中提取的文本连接起来形成检索到的上下文。算法步骤如下:

  1. 在RAPTOR树的根层开始。计算查询嵌入与该初始层中所有节点的嵌入之间的余弦相似性。
  2. 基于最高余弦相似性得分选择前k个节点,形成集合 S 1 S_1 S1
  3. 继续处理集合 S 1 S_1 S1中元素的子节点。计算查询向量与这些子节点的向量嵌入之间的余弦相似性。
  4. 根据与查询的最高余弦相似性得分选择top-k个子节点,形成集合 S 2 S_2 S2
  5. 递归地继续这个过程达到d层,生成集合 S 1 、 S 2 . . . S d S_1、S_2...S_d S1S2...Sd
  6. 将集合 S 1 S_1 S1 S d S_d Sd​连接起来组装成与查询相关的上下文。

通过调整深度 d d d和每层选择的节点数 k k k​,树遍历方法提供了对检索到的信息的特定性和广度的控制。该算法从树的顶层开始具有宽泛的视野,并随着向下穿越到较低层而逐渐聚焦于更细节的内容。

image-20240709175100834

图2:树遍历和折叠树检索机制的示意图。树遍历从树的根层开始,并基于余弦相似性与查询向量检索top-k个(在此处为top-1个节点)。在每层,它从前一层top-k的子节点中检索top-k的节点。折叠树将树折叠成单层,并基于与查询向量的余弦相似性检索节点,直到达到标记数的阈值。这两种示意图中都突出显示了进行余弦相似性搜索的节点。

折叠树方法提供了一种更简单的搜索相关信息的方式,通过同时考虑树中的所有节点,如图2所示。这种方法不是逐层进行,而是将多层树折叠成单层,实质上将所有节点置于同一水平进行比较。该方法的步骤如下所述:

  1. 首先将整个RAPTOR树折叠为单层。这个新的节点集合,表示为 C C C,包含原始树的每一层中的节点。
  2. 接下来,计算查询嵌入与折叠集合 C C C中所有节点的嵌入之间的余弦相似性。
  3. 最后,选择与查询具有最高余弦相似性得分的top-k个节点。继续将节点添加到结果集,直到达到预定义的最大标记数,确保不超出模型的输入限制。

image-20240709175659483

作者在QASPER数据集的20个故事上对这两种方法进行了测试。图3显示了树遍历在不同top-大小和折叠树在不同最大标记数下的性能。折叠树方法始终表现更好。因为它提供了比树遍历更大的灵活性;即,通过同时搜索所有节点,它检索出针对特定问题正确粒度的信息。相比之下,使用相同值的 d d d k k k进行树遍历时,树的每个级别的节点比例将保持恒定。因此,无论问题是什么,高阶主题信息与细节信息的比例将保持不变。

然而,折叠树方法的一个缺点是需要对树中的所有节点执行余弦相似性搜索。然而,使用诸如FAISS等快速k近邻库可以使这一过程更加高效。

image-20240709175854058

定性研究 作者进行了定性研究,以比较RAPTOR的检索过程与Dense Passage Retrieval(DPR)方法的优劣。研究专注于使用一个1500字的灰姑娘童话故事的主题性、多跳问题。如图4所示,RAPTOR基于树的检索使其能够选择来自不同树层的节点,与问题的细节级别相匹配。这种方法通常比DPR为下游任务提供更相关和全面的信息。

4. 实验

在三个问答数据集:NarrativeQA、QASPER和QuALITY上评估。

image-20240710131217970

image-20240710131225493

使用UnifiedQA 3B作为阅读器,SBERT、BM25和DPR作为嵌入模型,在QASPER、NarrativeQA和QuALITY三个数据集上进行受控对比。如表1和表2所示,结果表明,当RAPTOR与任何检索器结合时,在所有数据集上均表现出优于各自检索器的一致性。RAPTOR与SBERT结合具有最佳性能

image-20240710131356405

比较了RAPTOR与BM25和DPR,在三种不同的LLM上的表现。如表3所示,在QASPER数据集上,RAPTOR始终优于BM25和DPR。

image-20240710131610257

在QuALITY数据集中,如表4所示,RAPTOR的准确率达到62.4%,比DPR和BM25分别提高了2%和5.1%。当使用UnifiedQA时也观察到类似的趋势。

image-20240710131645822

最后,在NarrativeQA数据集中,如表6所示,RAPTOR在多个指标上表现出色。

image-20240710131656515

**与最先进系统的比较 **

在受控比较的基础上,研究了RAPTOR相对于其他最先进模型的性能。如表5所示,搭配GPT-4的RAPTOR在QASPER上创造了一个新的基准,获得了55.7%的F-1分数,超过了CoLT5 XL的53.9%。

image-20240710131746212

在QuALITY数据集中,如表7所示,搭配GPT-4的RAPTOR创造了一个新的最先进,准确率达到82.6%,超过了之前62.3%的最佳结果。

在NarrativeQA数据集中,如表6所示,与UnifiedQA搭配的RAPTOR创造了一个新的最先进的METEOR分数。

4.1 树结构的贡献

研究了每一层节点对RAPTOR检索能力的贡献。假设上层节点在处理需要对文本进行更广泛理解的主题性或多跳查询中起着至关重要的作用。作者定性和定量验证了这一假设。

image-20240710131959491

在表8中展示了一个故事的具体发现,表明全树搜索,利用所有层,优于仅专注于特定层级的检索策略。这些发现凸显了RAPTOR中完整树结构的重要性。通过为检索提供原始文本和更高级别的摘要,RAPTOR可以有效处理更广泛范围的问题,从高阶主题性查询到细节导向问题。

B 在RAPTOR中聚类机制的消融研究

在QuALITY数据集上进行了一项消融研究。该研究将RAPTOR的表现与一种平衡的树状编码和摘要相邻块进行了对比。

B.1 方法论

对于RAPTOR,采用了典型的聚类和摘要过程。相比之下,另一种设置涉及通过递归编码和总结相邻文本块来创建平衡树。选择了7个节点的窗口大小,折叠树方法应用于两种模型的检索。

image-20240710135342327

B.2 结果与讨论

消融研究的结果见表9。该消融研究的结果明确显示在利用RAPTOR的聚类机制时,准确性有所提高。

5. 结论

介绍了RAPTOR,一种新颖的基于树结构的检索系统,它通过在各种抽象级别上的上下文信息增强了大型语言模型的参数化知识。通过采用递归聚类和总结技术,RAPTOR创建了一个能够在检索语料库的各个部分之间综合信息的分层树结构。在查询阶段,RAPTOR利用这个树结构进行更有效的检索。

F 检索方法伪代码

遍历方法:

image-20240710135611812

折叠方法:

image-20240710135659585

总结

⭐ 作者引入了一种新颖的方法,递归嵌入、聚类和总结文本片段,从底部开始构建具有不同摘要级别的树。在推理期间,首先将这棵树拉平,然后从拉平的树节点中检索,将跨不同抽象级别的庞大文档中的信息整合起来。

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

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

相关文章

FP5207+音频功率放大器的组合解决方案-适用于便携式音频播放器、无线耳机、智能音箱和车载音响系统等高质量音频输出需求的产品,以提高电池供电的效率和输出功率

随着消费者对智能家居的需求增长,智能音响市场成为重要增长点。同时,音响技术也在不断发展,音响及扬声器的功能和性能不断提升。 蓝牙音箱,这类音箱供电是以锂电池为主,一般选用内置升压的音频功放芯片,音响…

windows 构建nginx本地服务随系统自启

1.先去官网下载一个nginxzip 2.将zip解压&#xff0c;将nginx-server.exe文件放入文件夹 3.创建nginx-server.xml&#xff0c;将以下内容放进文件内 <service> <id>nginx</id> <name>Nginx Service</name> <description>High Per…

强化学习中的蒙特卡洛算法和时序差分算法

在强化学习&#xff08;Reinforcement Learning, RL&#xff09;中&#xff0c;价值函数的估计是核心任务之一。蒙特卡洛&#xff08;Monte Carlo, MC&#xff09;方法和时序差分&#xff08;Temporal Difference, TD&#xff09;方法是两种常用的策略&#xff0c;用于估计状态…

软件架构之架构风格

软件架构之架构风格 9.3 软件架构风格9.3.1 软件架构风格分类9.3.2 数据流风格9.3.3 调用/返回风格9.3.4 独立构件风格9.3.5 虚拟机风格9.3.6 仓库风格 9.4 层次系统架构风格9.4.1 二层及三层 C/S 架构风格9.4.2 B/S 架构风格9.4.3 MVC 架构风格9.4.4 MVP 架构风格 9.5 面向服务…

机器学习筑基篇,​Ubuntu 24.04 编译安装 Python 及多版本切换

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 编译安装最新Python及多版本切换 描述&#xff1a;说到机器学习&#xff0c;人工智能&#xff0c;深度学习不免会提到Python这一门编程语言&#xff08;人生苦短&#xff0c;及时Pyt…

windows防火墙端口设置

PS&#xff1a;本文实例为Windows Server 2019&#xff0c;其他Windows版本大同小异。 1、首先打开windows防火墙&#xff0c;点击“高级设置” 2、 高级设置界面 3、假设需要开放一个端口为3306应该怎么做 光标对准“入站规则”右键新建规则&#xff0c;选择“端口” 协议这…

C++类和对象(一)

目录 面向过程和面向对象 面向过程编程&#xff08;Procedural Programming&#xff09; 面向对象编程&#xff08;Object-Oriented Programming&#xff09; 一、类的定义 类定义格式 类域 二、类的访问限定符及封装 访问限定符 封装 三、实例化 实例化概念 对象大小…

常见WAF拦截页面总结

(1) D盾 (2) 云锁 (3) UPUPW安全防护 (4) 宝塔网站防火墙 (5) 网防G01 (6) 护卫神 (7) 网站安全狗 (8) 智创防火墙 (9) 360主机卫士或360webscan (10) 西数WTS-WAF (11) Naxsi WAF (12) 腾讯云 (13) 腾讯宙斯盾 (14) 百度云 图片 (15) 华为云 (16) 网宿云 (17) 创宇盾 图片 (…

ROS服务通信自定义srv

服务通信自定义srv 流程:创建ROS功能包按照固定格式创建srv文件编译配置文件编译生成中间文件 流程: srv 文件内的可用数据类型与 msg 文件一致&#xff0c;且定义 srv 实现流程与自定义 msg 实现流程类似&#xff0c;需查阅msg文件的可以浏览ROS话题通信流程自定义数据msg格式…

【服务器】在Linux查看运行的Python程序,并找到特定的Python程序

在Linux查看运行的Python程序并找到特定的Python程序 写在最前面1. 使用ps命令查看所有Python进程查看详细信息 2. 使用pgrep命令查找Python进程ID 3. 使用top或htop命令使用top命令使用htop命令 4. 使用lsof命令查找Python进程打开的文件 5. 使用nvidia-smi命令查看GPU使用情况…

JDBC编程的学习——MYsql版本

目录 前言 什么是JDBC ??? 前置准备 使用JDBC的五个关键步骤 1.建立与数据库的连接 2.创建具体的sql语句和Statement 3.执行SQL语句 4.处理结果集 5.释放资源 完整流程展示 前言 笔者在先前的博客就提过会写关于JDBC的内容 [Mysql] 的基础知识和sql 语句.教你速成…

R包:reticulate R对python的接口包

介绍1 R和python是两种不同的编程语言&#xff0c;前者是统计学家发明并且服务数学统计计算&#xff0c;后者则是最万能的胶水语言。随着大数据时代的到来&#xff0c;两者在数据分析领域存在越来越多的共同点且可以相互使用&#xff0c;为了破解二者的编程壁垒&#xff0c;CR…

软考《信息系统运行管理员》-3.1信息系统设施运维的管理体系

3.1信息系统设施运维的管理体系 1 信息系统设施运维的对象 基础环境 主要包括信息系统运行环境(机房、设备间、配线室、基站、云计算中心 等)中的空调系统、供配电系统、通信应急设备系统、防护设备系统(如消防系统、安全系统) 等&#xff0c;能维持系统安全正常运转&#xf…

从零开始学习嵌入式----Linux系统命令集合与shell脚本

Shell是一门编程语言&#xff0c;作为学习shell的开始&#xff0c;需要事先搞明白&#xff1a;编程的目的是什么&#xff1f;什么是编程语言&#xff1f;什么是编程&#xff1f; shell本身就是一门解释型、弱类型、动态语言&#xff0c;与python相对应&#xff0c;Python属于解…

aardio —— 今日减bug

打字就减bug 鼠标双击也减bug 看看有多少bug够你减的 使用方法&#xff1a; 1、将资源附件解压缩&#xff0c;里面的文件夹&#xff0c;放到aardio\plugin\plugins 目录 2、aardio 启动插件 → 插件设置 → 选中“今日减bug” → 保存。 3、重启 aardio&#xff0c;等aa…

旗晟智能巡检机器人:开启工业运维的智能化新篇章

在当今快速发展的工业领域&#xff0c;安全、效率和成本控制是企业运营的核心。旗晟科技以创新为驱动&#xff0c;推出了一站式的工业级智能巡检机器人数字化全景运维解决方案&#xff0c;为石油、天然气、化工、电力等高危行业提供了一个全新的运维模式。 一、面对挑战&#x…

提升机器视觉与机器学习软件安全性的实践策略

在近几年科技爆发中&#xff0c;机器学习&#xff08;ML&#xff09;和机器视觉&#xff08;MV&#xff09;的结合正在改变各行各业。机器学习通过数据驱动的算法让计算机能够自我学习&#xff0c;而机器视觉赋予计算机识别和理解图像的能力。这种结合使得计算机可以高效地执行…

浅谈化工厂环保管理的痛点、智慧环保的必要性及EHS系统的实现路径

在全球环保意识日益增强的背景下&#xff0c;化工厂作为工业领域的重要组成部分&#xff0c;其环保管理显得尤为重要。然而&#xff0c;化工厂在追求经济效益的同时&#xff0c;也面临着诸多环保管理的痛点。本文将围绕化工厂环保管理的痛点、化工厂为何需要智慧环保以及如何借…

设计分享—国外后台界面设计赏析

国外后台界面设计将用户体验放在首位&#xff0c;通过直观易懂的布局和高效的交互设计&#xff0c;提升用户操作效率和满意度。 设计不仅追求美观大方&#xff0c;还注重功能的实用性和数据的有效展示&#xff0c;通过图表和图形化手段使数据更加直观易懂。 采用响应式布局&a…

Global Mapper:地理信息的温柔探索

引言 在这纷繁复杂的世界里&#xff0c;地理信息系统&#xff08;GIS&#xff09;如同一把利器&#xff0c;帮助我们剖析、理解和改造这个世界。而在众多GIS软件中&#xff0c;Global Mapper无疑是其中的佼佼者。作为一款功能全面且易于使用的GIS应用程序&#xff0c;Global M…