Nougat:用于学术文档的神经光学理解

article/2025/6/27 1:38:25

摘要

科学知识主要以PDF形式存储于书籍和科学期刊中。然而,PDF格式会导致语义信息的丢失,尤其是在数学表达式方面。我们提出了Nougat(Neural Optical Understanding for Academic Documents),这是一种Visual transformer模型,用于执行光学字符识别(OCR)任务,将科学文档转换为标记语言。我们在一个新的科学文档数据集上展示了该模型的有效性。所提出的方法为提升数字时代科学知识的可获取性提供了一个有前景的解决方案,通过弥合人类可读文档与机器可读文本之间的差距。我们公开了模型和代码,以加速未来在科学文本识别方面的研究工作。

1 引言

大多数科学知识存储于书籍中,或以科学期刊的形式出版,其中最常见的格式是Portable Document Format(PDF)。在HTML之后,PDF是互联网上第二常见的数据格式,占据了common crawl中2.4%的份额 [1]。然而,这些文件中存储的信息很难被提取为其他格式。对于高度专业化的文档(如科学研究论文)来说尤其如此,在这些文档中,数学表达式的语义信息会丢失。

现有的光学字符识别(OCR)引擎,如Tesseract OCR [2],擅长于检测和分类图像中的单个字符和单词,但由于其逐行处理的方式,无法理解字符之间的关系。这意味着它们将上标和下标与周围文本一视同仁,这对于数学表达式来说是一个严重缺陷。在诸如分数、指数和矩阵等数学符号中,字符的相对位置至关重要。

将学术研究论文转换为机器可读文本也使科学整体上更具可访问性和可检索性。数百万篇学术论文的信息目前无法完全访问,因为它们被锁定在一种不可读的格式中。现有语料库,如S2ORC数据集 [3],使用GROBID [4]提取了1200万篇论文的文本,但缺乏对数学公式的有意义表示。

为了解决这一问题,我们引入了Nougat,这是一种基于transformer的模型,可以将文档页面图像转换为格式化的标记文本。

本文的主要贡献如下:

  • 发布了一个预训练模型,能够将PDF转换为轻量级的标记语言。我们在GitHub上开源了该代码和模型
  • 我们提出了一个构建数据集的流程,用于将PDF与源代码配对
  • 我们的方法仅依赖于页面图像,因此可以处理扫描的论文和书籍
    在这里插入图片描述

2 相关工作

光学字符识别(OCR)是计算机视觉领域的一个广泛研究方向,应用包括文档数字化 [2, 5]、手写识别以及场景文本识别 [6–8]。具体来说,数学表达式识别是一个被深入研究的子课题。用于手写数学表达式的基于语法的方法 [9–11] 被不同的encoder-decoder模型所改进。全卷积模型 [12] 被各种RNN decoder模型所取代 [13–17],这些模型适用于手写和印刷的公式。最近,decoder [18, 19] 以及encoder [20] 都被Transformer架构 [21] 所替代。

视觉文档理解(Visual Document Understanding,VDU)是另一个相关的深度学习研究方向,关注于从多种类型的文档中提取相关信息。先前的工作依赖于预训练模型,这些模型通过联合建模文本和布局信息,在Transformer架构中学习信息提取能力。LayoutLM模型系列 [22–24] 使用掩码布局预测任务来捕捉不同文档元素之间的空间关系。

与我们目标相近的开源解决方案包括GROBID [4],该工具专注于书目信息的提取,将数字原生的科学文档解析为XML;还有pdf2htmlEX [25],它将数字原生的PDF转换为HTML,同时保留文档的布局和外观。然而,这两种方案都无法恢复数学表达式的语义信息。

3 模型

此前的VDU方法要么依赖于第三方OCR工具提取的文本 [22, 23, 26],要么专注于票据、发票或表单类文档 [27]。最新研究 [28, 29] 表明,使用外部OCR引擎并非实现VDU竞争性结果的必要条件。

该模型架构是一个encoder-decoder的transformer [21] 架构,允许进行端到端的训练流程。我们在Donut架构 [28] 的基础上进行构建。该模型不需要任何OCR相关的输入或模块,文本是由网络隐式识别的。参见图1了解整体方法概览。

Encoder:视觉encoder接收一个文档图像 x ∈ R 3 × H 0 × W 0 \mathbf { x } \in \mathbb { R } ^ { 3 \times H _ { 0 } \times W _ { 0 } } xR3×H0×W0,裁剪边距并将图像调整为固定矩形大小 ( H , W ) ( H , \, W ) (H,W)。如果图像小于该矩形,则添加padding以保证所有图像具有相同的维度。我们使用Swin Transformer [30],这是一种分层视觉transformer [31],它将图像分割为固定大小的不重叠窗口,并应用一系列自注意力层来在这些窗口间聚合信息。模型输出为嵌入patch序列 z ∈ R d × N z \in \mathbb{R}^{d \times N} zRd×N,其中 d d d 是潜在维度, N N N 是patch数量。

Decoder:编码后的图像 z z z 被一个带有cross-attention的transformer decoder架构解码为一系列token。token以自回归方式生成,使用self-attention和cross-attention分别对输入序列的不同部分和encoder输出进行关注。最终,输出被投影到词表大小 v v v,得到 ℓ ∈ R v \ell \in \mathbb { R } ^ { v } Rv

按照Kim等人的做法 [28],我们使用mBART decoder [32] 的实现。我们采用与Taylor等人 [33] 相同的tokenizer,因为他们的模型也专注于科学文本领域。
在这里插入图片描述

3.1 Setup

我们将文档图像以96 DPI的分辨率进行渲染。由于Swin Transformer对输入尺寸有严格限制,我们选择输入大小为 ( H , W ) = ( 896 , 672 ) (H,W) = (896,672) (H,W)=(896,672)。其长宽比介于美国信纸与A4纸之间: 22 17 < 4 3 < 2 . { \frac { 2 2 } { 1 7 } } < { \frac { 4 } { 3 } } < { \sqrt { 2 } } . 1722<34<2 .。文档图像在缩放后会被补齐(padding)以适配所需的输入尺寸。这个输入尺寸允许我们使用Swin base模型架构 [30]。我们用其预训练权重对模型进行初始化。

Transformer decoder的最大序列长度为 S = 4096 S = 4096 S=4096。如此设置的原因在于学术论文的文本往往非常密集,尤其是表格的语法对token数量消耗较大。BART decoder是一个仅含decoder的transformer架构,共10层。整个模型架构总共有3.5亿参数。我们还测试了一个较小的模型,其参数量为2.5亿,最大序列长度为 S = 3584 S = 3584 S=3584,decoder层数为4,初始化方式同样采用预训练base模型。

推理阶段:文本通过贪婪解码(greedy decoding)方式生成。

训练阶段:我们使用AdamW优化器 [34] 训练3个epoch,有效batch size为192。由于训练过程中存在不稳定性,我们选择初始学习率 l r i n i t = 5 ⋅ 10 − 5 \mathrm { l r _ { i n i t } = 5 \cdot 1 0 ^ { - 5 } } lrinit=5105,每15次更新后按0.9996的因子进行衰减,直到达到最终学习率 l r e n d = 7.5 ⋅ 10 − 6 \mathrm { l r _ { e n d } } = 7 . 5 \cdot 1 0 ^ { - 6 } lrend=7.5106

3.2 数据增强

在图像识别任务中,使用数据增强可以有效提升模型的泛化能力。由于我们仅使用数字生成(digital-born)的学术论文,因此需要通过多种图像变换来模拟扫描文档中的瑕疵与多样性。这些变换包括腐蚀(erosion)、膨胀(dilation)、高斯噪声(gaussian noise)、高斯模糊(gaussian blur)、位图转换(bitmap conversion)、图像压缩(image compression)、网格扰动(grid distortion)以及弹性变换(elastic transform)[35]。每种变换都有固定的概率被应用于某张图像。这些变换通过 Albumentations 库 [36] 实现。各个变换效果的示意图参见图2。

在训练过程中,我们还会对ground truth文本添加扰动,通过随机替换token的方式进行。我们发现这种方式能显著减少模型输出陷入重复循环的现象。更多细节见第5.4节。
在这里插入图片描述

4 数据集

据我们所知,目前并不存在包含 PDF 页面与对应源码的配对数据集,因此我们使用 arXiv 上的开放获取文章构建了自己的数据集。为了提升版面布局的多样性,我们还包含了 PubMed Central(PMC)开放获取非商业数据集的一个子集。在预训练阶段,我们还使用了 Industry Documents Library(IDL)的一部分。数据集组成情况见表 A.1。

arXiv 我们收集了 arXiv 上发布的 1,748,201 篇文章的源码与编译后的 PDF。为了确保格式的一致性,我们首先使用 LaTeXML[^7] 处理源文件,并将其转换为 HTML5 文件。此步骤对于标准化和消除 LaTeX 源码中的歧义(尤其是在数学表达方面)非常关键。转换过程包括替换用户自定义宏、标准化空白字符、添加可选括号、规范化表格、以及将引用与引文替换为正确的编号。

随后,我们解析 HTML 文件,并将其转换为一种轻量级标记语言,该语言支持各种元素,如标题、加粗与斜体文本、算法、LaTeX 行内与显示数学公式、以及 LaTeX 表格。通过这种方式,我们确保源码格式统一,便于后续处理。该过程可见图 3。

PMC 我们还处理了 PMC 中的文章,这些文章除了 PDF 文件之外,还提供包含语义信息的 XML 文件。我们将这些文件解析为与 arXiv 文章相同的标记语言格式。由于 PMC 的 XML 文件在语义信息方面并不总是很丰富,例如公式和表格往往以图像形式存储,这些情况不易检测,因此我们仅在预训练阶段有限使用 PMC 的文章。

XML 文件被解析为与上述相同的标记语言。

IDL IDL 是由加州大学旧金山分校图书馆维护的一个文档集合,包含了对公共健康有影响的产业相关文档。Biten 等人 [37] 为 IDL 数据集中的 PDF 提供了高质量的 OCR 文本。该数据不包含文本格式信息,仅用于预训练阶段,以训练模型识别扫描文档中的基础 OCR 文本。

4.1 Splitting the pages

我们根据 PDF 文件中的分页信息将 markdown 文件进行拆分,并将每页栅格化为图像,生成最终的配对数据集。在编译过程中,LaTeX 编译器会自动决定 PDF 文件的分页位置。由于我们不会为每篇论文重新编译 LaTeX 源码,因此必须通过启发式方法将源码划分为与各页相对应的部分。为此,我们使用嵌入在 PDF 页面中的文本,并将其与源文本进行匹配。

然而,PDF 中的图像与表格的位置可能并不与源码中的位置相对应。为了解决该问题,我们在预处理步骤中使用 pdffigures2 [38] 移除这些元素。识别出的图注会与 XML 文件中的图注进行比较,并根据 Levenshtein 距离 [39] 进行匹配。一旦源文档被拆分为各个页面,我们会将移除的图像与表格重新插入至每页末尾。为了更好地匹配,我们还使用 pylatexenc 库,将 PDF 文本中的 unicode 字符替换为对应的 LaTeX 命令。
在这里插入图片描述

我们在预处理步骤中使用 pdffigures2 [38] 移除这些元素。识别出的图注随后会与 XML 文件中的图注进行比较,并基于 Levenshtein 距离 [39] 进行匹配。一旦源文档被拆分为独立的页面,移除的图像与表格会被重新插入到各个页面的末尾。

为了实现更好的匹配,我们还使用 pylatexenc 库 将 PDF 文本中的 unicode 字符替换为对应的 LaTeX 命令。

Bag of Words 匹配 我们首先使用 MuPDF 从 PDF 中提取文本行,并进行预处理以去除页码以及可能的页眉/页脚。接着,我们使用带有 TF-IDF 向量器的 Bag of Words 模型 [40] 和线性支持向量机分类器。该模型以 PDF 行作为训练样本,以页码为标签进行训练。随后,我们将 LaTeX 源码划分为段落,并预测每个段落对应的页码。

理想情况下,预测结果应形成一个阶梯函数,但在实际中该信号通常是噪声较大的。为了找到最佳的切分边界,我们采用类似决策树的逻辑,并最小化如下基于 Gini impurity 的指标:

G [ a , b ] ( i ) = ( b − a ) ⋅ ( 1 − p [ a , b ] 2 ( i ) − p [ a , b ] 2 ( i + 1 ) ) , G_{[a,b]}(i) = (b - a) \cdot \left( 1 - p_{[a,b]}^2(i) - p_{[a,b]}^2(i+1) \right), G[a,b](i)=(ba)(1p[a,b]2(i)p[a,b]2(i+1)),

其中, p [ a , b ] ( i ) p _ { [ a , b ] } ( i ) p[a,b](i) 表示在区间 [ a , b ] [a, b] [a,b] 中预测为第 i i i 页的元素的概率,用于刻画在该区间中被用于切分的段落(元素)。

在区间 [ a , b ] [ a , \, b ] [a,b] 中的最佳切分位置 t ^ i \hat { t } _ { i } t^i 被定义为:

t ^ i = arg ⁡ min ⁡ t ( G [ a , t ] ( i ) + G [ t , b ] ( i ) ) . \hat{t}_i = \arg\min_t \left( G_{[a,t]}(i) + G_{[t,b]}(i) \right). t^i=argtmin(G[a,t](i)+G[t,b](i)).

搜索过程从所有段落开始,对于每一个后续页边界,搜索区间的下界被设定为上一次切分的位置。图 4 展示了一个示例页面的可视化结果。

模糊匹配 在第一次粗略的文档切分之后,我们尝试在段落中找到更精确的位置。这通过比较预测切分位置附近的源文本,与嵌入的 PDF 文本中上一页的末尾句子和下一页的起始句子来完成,使用的是 fuzzysearch 库。

如果两个分界点在源文本中的位置一致,则认为该页边界是“精确”的,并赋予一个得分为 1。反之,如果切分位置不一致,则选择归一化 Levenshtein 距离最小的那个,并赋予一个得分为 1 − 距离 1 - \text{距离} 1距离。为了被包含进数据集中,一个 PDF 页面必须在两个页边界处平均得分至少为 0.9。最终,这一标准导致约 47% 的页面被接受进入数据集。

4.2 Ground truth artifacts

由于该数据集经过 LaTeXML 预处理,源码的标记版本可能包含伪影以及来自不被支持包的命令。HTML 文件中可能会包含带编号的小节标题,即使在 PDF 中这些标题并未编号。此外,某些图像或表格可能由于处理错误而在 ground truth 中缺失。Nougat(Blecher 等人)指出了这一点。

此外,源码的切分算法在某些情况下会包含前一页的文本,或者在末尾截断某些单词。尤其是在处理用于格式排版的“不可见”字符(如斜体、加粗文本或节标题)时,这种情况更为常见。

对于 PMC 文章,行内数学表达式通常是以 Unicode 或斜体文本形式呈现,而显示数学公式或表格则往往以图像格式嵌入,因此这些部分将被忽略。

上述问题均会降低整体数据质量。然而,由于训练样本数量巨大,这些小错误在整体上可以被抵消。

5 结果与评估

在这里插入图片描述

在本节中,我们讨论模型的结果和性能。例如,见图 5 或参见附录 B。本模型仅关注页面中与内容相关的主要特征,跳过了方程式周围的框架部分。

5.1 指标

我们在测试集上报告以下指标:

编辑距离
编辑距离(或 Levenshtein 距离)[39] 衡量将一个字符串转换为另一个字符串所需的字符操作次数(插入、删除、替换)。在本研究中,我们考虑标准化的编辑距离,即将其除以字符总数。

BLEU
BLEU [42] 指标最初用于衡量机器翻译质量,即从一种语言翻译到另一种语言后的文本质量。该指标基于候选句子和参考句子之间匹配的 n-gram 数量来计算得分。

METEOR
另一种机器翻译指标,重点关注召回率而非精确度,在 [43] 中提出。

F-measure
我们还计算了 F1 得分,并报告了精确度和召回率。
在这里插入图片描述

5.2 文本类型

在科学研究文章中,有三种不同类型的文本:1)普通文本,构成文档的主要部分;2)数学表达式;3)表格。在评估过程中,单独检查这些组件非常重要。这是因为在 LaTeX 中,表达相同数学表达式的方式有多种。虽然在 LaTeXML 预处理步骤中已经消除了部分变异,但仍然存在大量的歧义,比如下标和上标的顺序、具有不同符号的等效命令(如 stackrel、atop、substack 或 frac、over)、情境中可以互换的命令(如 bm、mathbf、boldsymbol、bf 或 \left(、\big( 等)、空白命令、额外的括号层次等等。因此,即使渲染的公式看起来相同,预测和地面实况之间也可能存在差异。

此外,在写数字和标点时,始终无法确定内联数学环境结束的位置和文本开始的位置(例如:在这里插入图片描述)。这种歧义降低了数学和普通文本的得分。数学表达式的预期得分低于普通文本。

5.3 比较

我们在表 1 中展示了我们的结果。如预期所示,数学表达式与地面实况的一致性最差。对于普通文本,大部分差异来自于格式歧义和因内联数学而丢失的文本,正如上面所述。GROBID 的输出格式为 XML 文件,我们将其转换为兼容的标记语言,类似于 PMC 或 arXiv 文件。GROBID 在其输出中在某种程度上支持公式,但它将公式识别并存储为嵌入 PDF 中的 Unicode 表示。我们将每个 Unicode 符号替换为其对应的 LaTeX 命令,以提高相似度。此外,GROBID 会错误地将小型内联表达式标记为文本。对于识别的公式,GROBID 存储边界框坐标。我们通过将代码片段发送到外部公式识别软件 LaTeX-OCR [20] 来修改程序。通过这种方式,我们还可以获得数学模态的信号。本节报告的结果相当差,主要是因为 GROBID 错过了大量公式,且公式预测准确度受限于边界框质量。仅使用嵌入 PDF 文本的性能优于 GROBID,这归因于标题页或参考文献部分的格式差异。

Nougat small 和 base 都能超越其他方法,在所有指标上获得较高的分数。我们注意到,较小的模型的表现与较大的 base 模型不相上下。
在这里插入图片描述

5.4 推理过程中的重复

我们注意到模型会陷入重复同一句话或段落的状态,并且无法自行恢复。在最简单的形式下,模型会不断重复最后一句话或段落。我们在测试集中的 1.5% 的页面中观察到了这种行为,但在域外文档中,这种情况的发生频率更高。基于 Transformer 的模型在使用贪心解码 [44] 时,容易出现这种卡在重复循环中的问题。也可能出现模型在两个句子之间交替,但有时会改变一些词语,因此严格的重复检测不足以应对这种情况。更难检测的是模型自己统计自己重复的情况,这种情况有时出现在参考文献部分。

通常,我们在模型出错后会观察到这种行为。模型无法从崩溃中恢复。

反重复增强

因此,我们在训练过程中引入了随机扰动。这帮助模型学会如何处理错误预测的 token。对于每个训练示例,都有一个固定的概率将一个随机 token 替换为任何其他随机选择的 token。这个过程会持续进行,直到新采样的数字大于指定的阈值(在此情况下为 10%)。我们没有观察到性能下降,但注意到重复的显著减少。特别是在域外文档中,我们看到了 32% 的页面转换失败率的下降。

重复检测

由于我们最多生成 4096 个 token,模型最终会停止,但如果没有“句子结束” token,等待这一事件会非常低效且资源密集。为了在推理过程中检测重复,我们查看了第 i 个 token 的最大 logit 值 ℓ i = max ⁡ ℓ i \ell _ { i } = \operatorname* { m a x } \ell _ { i } i=maxi。我们发现,在崩溃发生后,可以使用以下启发式方法来分离 logits。首先,计算大小为 B = 15 B = 15 B=15 的滑动窗口中 logits 的方差。
V a r W i n B [ ℓ ] ( x ) = 1 B ∑ i = x x + B ( ℓ i − 1 B ∑ j = x x + B ℓ j ) 2 \mathrm { V a r W i n } _ { B } [ \ell ] ( x ) = \frac { 1 } { B } \sum _ { i = x } ^ { x + B } \left( \ell _ { i } - \frac { 1 } { B } \sum _ { j = x } ^ { x + B } \ell _ { j } \right) ^ { 2 } VarWinB[](x)=B1i=xx+B(iB1j=xx+Bj)2
在这里,ℓ 表示 logits 信号,x 表示索引。利用这个新的信号,我们重新计算方差,但这次是从位置 x 到序列末尾。
V a r E n d B [ ℓ ] ( x ) = 1 S − x ∑ i = x S ( V a r W i n B [ ℓ ] ( i ) − 1 S − x ∑ j = x S V a r W i n B [ ℓ ] ( i ) ) 2 \mathrm { V a r E n d } _ { B } [ \ell ] ( x ) = \frac { 1 } { S - x } \sum _ { i = x } ^ { S } \left( \mathrm { V a r W i n } _ { B } [ \ell ] ( i ) - \frac { 1 } { S - x } \sum _ { j = x } ^ { S } \mathrm { V a r W i n } _ { B } [ \ell ] ( i ) \right) ^ { 2 } VarEndB[](x)=Sx1i=xS(VarWinB[](i)Sx1j=xSVarWinB[](i))2
如果该信号低于某个阈值(我们选择 6.75),并且在序列的剩余部分保持在该值以下,则我们将序列分类为存在重复。

在推理过程中,如果我们的目标是在更早的时刻停止生成,则显然无法计算到序列的末尾。因此,在这里我们只使用最后 200 个 token 的子集,并将阈值减半。在生成完成后,按照上述程序对整个序列重复该过程。

5.5 限制与未来工作

实用性
模型的实用性受到多种因素的限制。首先是第 5.4 节中提到的重复问题。模型是在研究论文上进行训练的,这意味着它在具有相似结构的文档中表现尤为出色。然而,它仍然能够准确转换其他类型的文档。

几乎所有数据集样本都是英文的。对少量样本进行的初步测试表明,模型在其他拉丁语系语言上的表现令人满意,尽管这些语言中的任何特殊字符将被替换为拉丁字母中的最接近的等效字符。非拉丁语系的语言会立即导致重复。

生成速度
在一台配备 24GB VRAM 的 NVIDIA A10G 显卡的机器上,我们可以并行处理 6 页。生成速度在很大程度上依赖于每页的文本量。对于平均约 1400 个 token 的页面,基模型的每批次平均生成时间为 19.5 秒,且未进行任何推理优化。与传统方法(GROBID 10.6 PDF/s [4])相比,这个速度非常慢,但它不仅限于数字化文档,并且能够正确解析数学表达式。

未来工作
该模型是按单页进行训练的,不了解文档中的其他页面。这导致了文档间的不一致性,最明显的是在参考文献部分,模型被训练在不同风格下,或者在某些章节标题中有时会跳过或凭空生成数字。尽管逐页处理大大提高了并行性和可扩展性,但可能会降低合并文档文本的质量。

解决的主要挑战是模型倾向于进入重复循环的情况,这一问题将留待未来的工作解决。

6 结论

在本研究中,我们提出了Nougat,一种端到端可训练的编码器-解码器 Transformer 模型,用于将文档页面转换为标记语言。我们将最近在视觉文档理解方面的进展应用于一种新的 OCR 任务。与相关方法不同,我们的方法不依赖于 OCR 或嵌入文本表示,而是完全依赖于栅格化的文档页面。此外,我们还展示了一种自动化且无监督的数据集生成过程,通过该过程成功训练了模型进行科学文档到标记语言的转换。总体而言,我们的方法不仅在从数字化 PDF 中提取文本方面表现出色,而且在转换扫描文献和教科书方面也具有巨大的潜力。我们希望这项工作能成为未来在相关领域研究的起点。

所有用于模型评估、训练和数据集生成的代码可以在 https://github.com/facebookresearch/nougat 获取。

论文名称:
Nougat: Neural Optical Understanding for Academic Documents
论文地址:
https://arxiv.org/pdf/2308.13418

http://www.hkcw.cn/article/BkNLUbHquT.shtml

相关文章

移除3D对象的某些部分点云

1&#xff0c;目的 移除3D对象指定区域的点云。效果 2&#xff0c;原理。 通过投影剔除指定区域外的点云数据。 3&#xff0c;主要的算子。 3.1&#xff0c;gen_image_gray_ramp 是 Halcon 中用于生成‌线性灰度渐变图像‌的算子 功能概述‌ 数学原理‌ 生成的图像灰度值…

达芬奇(DaVinci Resolve)下载安装教程

目录 一、软件介绍 二、软件下载 2.1 浏览器访问官网 2.2 进行软件包下载 三、软件安装 3.1 解压软件包 3.2 安装软件 四、基本配置 4.1 语言设置 4.2 其他设置 一、软件介绍 达芬奇&#xff08;DaVinci Resolve&#xff09;视频调色软件。DaVinci Resolve汇集剪辑、…

教室门口160cm是小学生低头线 高中版引发热议

教室门口160cm是小学生低头线!5月27日,山东济宁某高中教室内发生了一件有趣的事情。课间休息时,一位老师注意到学生们普遍较高,旁边正好站着一个身高182厘米的男生,于是老师以他为参照,在教室门口贴上一条胶带作为身高线。结果发现,不少男生经过时都需要低头,这一现象迅…

印尼力邀中企深化产业下游化 共创可持续发展

在印尼谈到与中国的经贸合作,“下游化”是最常提到的词。印尼国土辽阔,镍矿资源的储量和产量皆名列全球第一。坐拥全球绿色能源转型的关键金属,印尼吸引了大量全球投资者。单纯出口原始矿藏对当地就业帮助甚少,且由于附加值低,对印尼财政增收贡献有限。为此,印尼近10年来…

《天下第一楼》迎第600场演出 经典传承再续辉煌

6月2日晚,由何冀平编剧,夏淳、顾威、闫锐导演的北京人艺经典话剧《天下第一楼》在首都剧场迎来第600场演出。北京人艺院长冯远征当天再次强调了“深入生活、体验生活”对创作者的重要性。这部作品讲述了上个世纪初北京城饮食界老字号饭庄“福聚德”在时代变迁中的兴衰史。自1…

2022年上半年软件设计师下午试题

答案&#xff1a; 试题一&#xff1a; 试题二&#xff1a; 试题三&#xff1a; 试题四&#xff1a; 试题五: 试题六&#xff1a;

前端高频面试题2:JavaScript/TypeScript

1.什么是类数组对象 一个拥有 length 属性和若干索引属性的对象就可以被称为类数组对象&#xff0c;类数组对象和数组类似&#xff0c;但是不能调用数组的方法。常见的类数组对象有 arguments 和 DOM 方法的返回结果&#xff0c;还有一个函数也可以被看作是类数组对象&#xff…

花卉目标检测数据集介绍(共 12 类,10490 张图像)

在计算机视觉与智能农业快速发展的背景下&#xff0c;基于深度学习的花卉识别与检测技术正被广泛应用于植物分类、智能园艺、自动监测与生态研究等多个领域。为了推动花卉类目标检测任务的发展&#xff0c;本文介绍一个包含 12 种常见花卉类别的目标检测数据集&#xff0c;总计…

linux学习第18天(fork函数)

pid_t fork(void)&#xff1a;创建一个子进程 成功&#xff1a;父进程返回子进程pid 子进程返回0&#xff08;创建成功&#xff09; 失败&#xff1a;-1 getpid/getppid 举个例子&#xff0c;顺便演示getpid和getppid 子进程只能执行fork之后的代码&#xff0c;并且同时争夺c…

Pycharm的终端无法使用Anaconda命令行问题详细解决教程

很多初学者在Windows系统上安装了Anaconda后&#xff0c;在PyCharm终端中运行Conda命令时&#xff0c;会遇到以下错误&#xff1a; conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保…

关税政策推进受阻 特朗普政府求助上诉法院

当地时间6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法”的命令。当地时间5月29日,位于首都华盛顿的哥伦比亚特区联邦地区法院就特朗普政府依据《国际紧急经济权力法》对多国加征的关税措施发布初步禁令。该裁决针对美国两家小…

如何看待乌称摧毁大量俄战略轰炸机 俄方反驳称战果夸大

乌克兰国家安全局6月1日在社交媒体上宣布,对位于西伯利亚地区的俄罗斯轰炸机基地进行了袭击。乌方表示,此次行动目标精准,约34%的俄罗斯战略轰炸机遭到攻击,俄方战略航空兵损失高达70亿美元。行动由乌克兰总统泽连斯基亲自协调,安全局局长马柳克率队实施。泽连斯基高度评价…

刘若钒:很遗憾因伤不能和大家一起并肩战斗了,兄弟们加油 伤病阻挡国家队梦想

北京时间6月2日,中国男足公布了出征印尼客场的25人名单,刘若钒因伤未能入选。刘若钒在社交媒体上表达了遗憾:“重回国家队是对我这半年在海港表现的认可,但很遗憾因伤不能和大家一起并肩战斗了。”他同时表示,为国家队比赛一直是他的梦想,希望队友们加油,为中国队助威。…

俄乌谈判草草结束 细看条件都够狠 双方态度强硬

乌克兰在发动无人机袭击后,与俄罗斯在土耳其进行了第二轮和谈。谈判持续了大约一个小时便匆匆结束。土耳其方面表示,谈判以“非消极”的方式结束。5月16日进行了第一轮谈判,6月2日进行了第二轮谈判。预计第三轮谈判将在两周后进行,期间双方可能还会继续交战。双方态度都十分…

山东10岁失联男孩确认溺水身亡 搜救努力未果

6月2日,滕州市公安局发布警情通报。5月31日22时35分许,孔某某报警称其外孙赵某某(10岁)于当日17时许离家后失联。接警后,公安机关迅速调阅监控、走访群众,并联合当地政府和社会救援力量,采用搜救警犬和无人机等手段持续开展搜寻。6月2日15时许,在邻村一河道内发现赵某某…

PID项目-记事本不显示下划线

在安装安装keil5的插件的时候想要更改路径&#xff0c;用记事本打开的时候下划线都不见了&#xff0c;使用缩放&#xff0c;把100%缩放成90%就又出现了

AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆

声音克隆与语音合成的结合&#xff0c;是近年来生成式AI在多模态方向上的重要落地场景之一。随着预训练模型能力的增强&#xff0c;结合语音识别、音素映射与TTS合成的端到端系统成为初学者可以上手实践的全流程方案。 围绕 GPT-SoVITS-v4-TTS 模块&#xff0c;介绍了其在整合…

Cherry Studio 和 Dify 如何接入MCP 服务

这里以魔搭社区的MCP 广场为例,进行介绍 一、Cherry Studio 接入 MCP服务教程 1. 第一步:访问魔搭社区官网 魔搭社区官网 点击上方链接进入魔搭社区官网后,点击MCP广场。 2.第二步:选择要接入的MCP服务(这里以 ‘今天吃什么’ 为例) 点击图中标注的连接,然后点击下…

微服务 Feign相关

1.feign 调用超时控制逻辑 openfign 中配置默认的链接时间是 10S 读取时间是60S 可以在YML文件中修改配置 spring: cloud:nacos:server-addr: 127.0.0.1:8848config:namespace: 51d656b5-cfe8-4cd0-95ad-91811cd88dc6#openfeign 相关配置openfeign:client:config: # …

一键解决Github无法访问或时断时续的问题-Linux环境

创建脚本github_host.sh vi github_host.sh 按i插入文本&#xff0c;将下面一段内容复制进去 #!/bin/bashhosts_path/etc/hosts # 系统 hosts 保存路径 hosts_path_bak/etc/hosts.bak # 系统 hosts 备份路径# 备份 hosts echo "########## 备份 $hosts_path 到 $…