《BLEU: a Method for Automatic Evaluation of Machine Translation》翻译

文章目录

    • 0. 摘要
    • 1. 引言
      • 1.1 理由
      • 1.2 观点
    • 2. 基准 BLEU 指标
      • 2.1 修正的 n-gram 精度
        • 2.1.1 对文本块的修正 n-gram 精度
        • 2.1.2 仅使用修正 n-gram 精度对系统进行排序
        • 2.1.3 结合修正的 n-gram 精度
      • 2.2 句子长度
        • 2.2.1 召回率的问题
        • 2.2.2 句子简短惩罚
      • 2.3 BLEU 细节
    • 3. BLEU 评估
    • 4. 人类评估
      • 4.1 单语组配对判断
      • 4.2 双语组配对判断
    • 5. BLEU与人类评估
    • 6. 结论
    • 7. 碎碎念

0. 摘要

对机器翻译进行的人工评估虽然全面,但成本高昂。人工评估可能需要数月才能完成,并且涉及无法重复使用的人力劳动。我们提出了一种自动化的机器翻译评估方法,该方法快速、廉价、与语言无关,与人工评估高度相关,并且每次运行的边际成本很低。我们将这种方法作为熟练人类评审员的自动替代,当需要快速或频繁评估时,可以替代他们进行评估。

1. 引言

1.1 理由

对机器翻译(MT)的人工评估权衡了翻译的许多方面,包括翻译的充分性、忠实度和流畅性(Hovy, 1999;White 和 O’Connell, 1994)。Reeder(2001)提供了一个全面的机器翻译评估技术目录及其丰富的文献。大多数情况下,这些不同的人工评估方法都相当昂贵(Hovy, 1999)。此外,它们可能需要数周或数月才能完成。这是一个大问题,因为机器翻译系统的开发者需要监控系统的日常变化效果,以便从中筛选出好的想法并剔除坏的想法。我们相信,机器翻译的进步源于评估,而目前有大量有益的研究思路因评估瓶颈而无法释放。开发者将从一种廉价、快速、与语言无关且与人工评估高度相关的自动评估中受益。在本文中,我们提出了这样一种评估方法。

1.2 观点

如何衡量翻译性能?机器翻译越接近专业人类翻译,效果越好。这是我们提案的核心思想。为了判断机器翻译的质量,我们使用数值指标来测量其与一个或多个参考人类翻译的接近程度。因此,我们的 MT 评估系统需要两个组件:

  1. 数值的「翻译接近度」指标
  2. 高质量人类参考翻译的语料库

我们将接近度指标设计成类似于语音识别领域广泛使用的词错误率指标,适当地修改以适应多参考翻译,并允许在词汇选择和词序上的合理差异。主要思想是使用加权平均的可变长度短语匹配来对比参考翻译。这种方法催生了一系列使用不同加权方案的指标。我们从中选择了一个有前景的基准指标。

在第 2 节中,我们详细描述了基准指标。在第 3 节中,我们评估了 BLEU 的性能。在第 4 节中,我们描述了一项人类评估实验。在第 5 节中,我们将基准指标的性能与人类评估进行了比较。

2. 基准 BLEU 指标

通常,给定一个源句子,存在许多「完美」的翻译,这些翻译在词汇选择或顺序上可能有所不同,即使使用相同的词。然而,人类可以清楚地区分好的翻译和差的翻译。例如,考虑以下两个中文源句子的候选翻译:

例1:

  • 候选1: It is a guide to action which ensures that the military always obeys the commands of the party.
  • 候选2: It is to insure the troops forever hearing the activity guidebook that party direct.

虽然它们看起来是关于同一主题,但质量差异显著。为了比较,这里有三个相同句子的参考人类翻译:

  • 参考1: It is a guide to action that ensures that the military will forever heed Party commands.
  • 参考2: It is the guiding principle which guarantees the military forces always being under the command of the Party.
  • 参考3: It is the practical guide for the army always to heed the directions of the party.

候选 1 与这三个参考翻译共享许多词和短语,而候选 2 则没有。我们将在第 2.1 节中量化这种共享的概念。例如,候选 1 与参考 1 共享「It is a guide to action」,与参考 2 共享「which」,与参考 1 共享「ensures that the military」,与参考 2 和 3 共享「always」,与参考1共享「commands」,以及与参考 2 共享「of the party」(忽略大小写)。相比之下,候选 2 的匹配显著少且程度较低。

显然,只需比较每个候选翻译与参考翻译之间的 n-gram 匹配,一个程序就可以将候选翻译 1 排在候选翻译 2 之前。第 5 节中展示的大量翻译集合的实验表明,这种排名能力是一种普遍现象,而不是几个简单例子的产物。对 于BLEU 实现者来说,主要的编程任务是比较候选翻译的 n-gram 与参考翻译的 n-gram,并计算匹配的数量。这些匹配是位置无关的。匹配越多,候选翻译就越好。为了简化起见,我们首先关注计算单词匹配(unigram matches)。

2.1 修正的 n-gram 精度

我们指标的基石是熟悉的精度测量。要计算精度,需要计算出现在任何参考翻译中的候选翻译词(unigrams)的数量,并除以候选翻译中的总词数。然而,MT 系统可能会过度生成「合理」的词,导致不太可能但高精度的翻译。为了解决这个问题,我们引入了修正的unigram 精度。这涉及计算一个词在任何单个参考翻译中出现的最大次数,将每个候选词的总计数剪切到其最大参考计数,汇总这些剪切后的计数,并除以候选词的总数。

例2:

  • 候选: the the the the the the the.
  • 参考1: The cat is on the mat.
  • 参考2: There is a cat on the mat.

修正的 Unigram 精度 = 2/7。

在例 1 中,候选 1 的修正 unigram 精度为 17/18,而候选 2 的修正 unigram 精度为 8/14。同样,例 2 中的候选的修正 unigram 精度为 2/7,尽管其标准 unigram 精度为 7/7。

修正的 n-gram 精度对于任何 n 的计算方式类似:收集所有候选 n-gram 计数及其对应的最大参考计数,按其对应的参考最大值剪切,汇总,并除以候选 n-gram 的总数。在例 1 中,候选 1 的修正 bigram 精度为 10/17,而候选 2 的修正 bigram 精度为 1/13。在例 2 中,候选的修正 bigram 精度为0。

这种修正的 n-gram 精度评分捕捉了翻译的两个方面:充分性和流畅性。使用与参考相同词(1-grams)的翻译倾向于满足充分性,而更长的 n-gram 匹配则考虑了流畅性。

2.1.1 对文本块的修正 n-gram 精度

为了在多句测试集中计算修正的 n-gram 精度,我们在整个文档的语料库上评估 MT 系统,但我们的基本评估单位是句子。我们逐句计算 n-gram 匹配,汇总所有候选句子的剪切 n-gram 计数,并除以测试语料库中的候选 n-gram 总数,以计算整个测试语料库的修正精度得分,( p n p_n pn )。

p n = ∑ C ∈ { C a n d i d a t e s } ∑ n - g r a m ∈ C C o u n t c l i p ( n - g r a m ) ∑ C ′ ∈ { C a n d i d a t e s } ∑ n - g r a m ′ ∈ C ′ C o u n t ( n - g r a m ′ ) p_n = \frac{\sum_{C \in \{Candidates\}} \sum_{n\text{-}gram \in C} Count_{clip}(n\text{-}gram)}{\sum_{C' \in \{Candidates\}} \sum_{n\text{-}gram' \in C'} Count(n\text{-}gram')} pn=C{Candidates}n-gramCCount(n-gram)C{Candidates}n-gramCCountclip(n-gram)

2.1.2 仅使用修正 n-gram 精度对系统进行排序

为了验证修改后的 n-gram 精度能否区分非常好的翻译和不好的翻译,我们计算了一个(优秀的)人类译者和一个标准(较差的)机器翻译系统的修改精度数值,每个系统对 127 个源语句分别使用了 4 个参考翻译。平均精度结果如图 1 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

区分人类翻译(高精度)和机器翻译(低精度)的强烈信号非常明显。随着从单字精度到四字精度的增加,这种差异变得更加显著。似乎任何单一的 n-gram 精度分数都可以区分出好的翻译和差的翻译。然而,为了有用,该指标还必须能够可靠地区分质量差异不大的翻译。此外,它必须能够区分两个质量不同的人类翻译。后一个要求确保了当机器翻译(MT)接近人类翻译质量时,指标的持续有效性。

为此,我们获得了一份由缺乏母语水平的译者(在源语言中文和目标语言英文上都不具备母语水平)进行的人类翻译。作为对比,我们还获得了一份由母语为英语的译者翻译的相同文档。此外,我们还获得了三个商业系统的机器翻译。这五个「系统」(两个是人类译者,三个是机器系统)与两份专业人类翻译参考进行评分。图 2 显示了平均修正后的 n-gram 精度结果。

在这里插入图片描述

每一个 n-gram 统计数据都暗示了相同的排名:H2(人类译者2)优于H1(人类译者1),而 H1 和 S3(机器/系统 3)之间的质量有很大差距。S3 似乎优于 S2,而 S2 又优于 S1。值得注意的是,这与我们稍后讨论的人类评审员对这些「系统」分配的排名顺序完全一致。尽管任何单一的 n-gram 精度都提供了充足的信号,但将所有这些信号合并成一个单一的数值指标会更加稳健。

2.1.3 结合修正的 n-gram 精度

我们应该如何结合不同 n-gram 大小的修正精度呢?对这五个系统来说,修正精度的加权线性平均得出了令人鼓舞的结果。然而,如图 2 所示,修正 n-gram 精度随着 n 的增加大致呈指数衰减:修正单字精度远大于修正双字精度,修正双字精度又远大于修正三字精度。一个合理的平均方案必须考虑到这种指数衰减;对修正精度的对数进行加权平均满足了这一要求。

BLEU 使用均匀权重的对数平均,这相当于使用修正 n-gram 精度的几何平均值。通过实验,我们发现使用最大 n-gram 阶数为4时,与单语人类评判的相关性最好,尽管 3-gram 和 5-gram 也给出了相似的结果。

2.2 句子长度

候选翻译不应过长或过短,评价指标应强制执行这一点。在某种程度上,n-gram 精度已经实现了这一点。n-gram 精度会对候选翻译中出现但在任何参考翻译中都不存在的多余词语进行惩罚。此外,如果一个词在候选翻译中出现的频率超过其在参考翻译中的最大出现次数,修正精度也会受到惩罚。这奖励了适当使用词语的次数,并惩罚了超过参考翻译中出现次数的使用。然而,仅靠修正 n-gram 精度不足以强制执行适当的翻译长度,正如下面这个简短且荒谬的例子所示。

例子3:
候选翻译: of the
参考翻译1: It is a guide to action that ensures that the military will forever heed Party commands.
参考翻译2: It is the guiding principle which guarantees the military forces always being under the command of the Party.
参考翻译3: It is the practical guide for the army always to heed the directions of the party.

由于这个候选翻译与适当长度相比太短,人们预期会发现夸大的精度:修正单字精度是 2/2,修正双字精度是 1/1。

2.2.1 召回率的问题

传统上,精度与召回率配对使用以克服此类与长度相关的问题。然而,BLEU 评估指标考虑了多个参考翻译,每个参考翻译可能使用不同的词汇来翻译相同的源词。此外,一个好的候选翻译只会使用(召回)这些可能选择中的一个,而不会使用全部。实际上,召回所有选择会导致糟糕的翻译。

以下是一个例子。

例子4
候选翻译1: I always invariably perpetually do.
候选翻译2: I always do.
参考翻译1: I always do.
参考翻译2: I invariably do.
参考翻译3: I perpetually do.

第一个候选翻译从参考翻译中召回了更多的词,但显然比第二个候选翻译差得多。因此,简单地计算所有参考词汇的召回率并不是一个好的衡量标准。诚然,可以通过对齐参考翻译来发现同义词,并基于概念而不是词汇来计算召回率。但是,考虑到参考翻译在长度、词序和句法上存在差异,这样的计算是复杂的。

2.2.2 句子简短惩罚

候选翻译比参考翻译更长的情况已经通过修正的 n-gram 精度度量得到了惩罚:因此无需再次惩罚它们。因此,我们引入了一个乘法的简短惩罚因子。有了这个简短惩罚,一个高分的候选翻译现在必须在长度、词汇选择和词序上与参考翻译匹配。需要注意的是,这个简短惩罚和修正的 n-gram 精度长度效应都不直接考虑源文本的长度;相反,它们考虑的是目标语言中参考翻译的长度范围。

我们希望当候选翻译的长度与任何参考翻译的长度相同时,简短惩罚为 1.0。例如,如果有三个参考翻译,长度分别为 12、15 和 17 个词,而候选翻译简短为 12 个词,我们希望简短惩罚为1。我们将最接近的参考句子长度称为「最佳匹配长度」。

还有一个考虑因素:如果我们逐句计算简短惩罚并取平均值,那么短句子的长度偏差会被严厉惩罚。因此,我们在整个语料库上计算简短惩罚,以允许句子层面上有一些自由度。我们首先通过对语料库中每个候选句子的最佳匹配长度求和来计算测试语料库的有效参考长度 r。我们选择简短惩罚为 r/c 的指数衰减,其中 c 是候选翻译语料库的总长度。

2.3 BLEU 细节

我们取测试语料库修正精度分数的几何平均值,然后将结果乘以一个指数形式的简短惩罚因子。目前,在计算精度之前进行的唯一文本规范化操作是大小写折叠。

首先,我们计算使用长度为 N 的 n-gram 和正权重 ( w n w_n wn)(权重和为1)得到的修正 n-gram 精度 ( p n p_n pn) 的几何平均值。接下来,设候选翻译的长度为 (c),有效参考语料库长度为 (r)。我们计算简短惩罚因子 (BP):

B P = { 1 if  c > r e ( 1 − r / c ) if  c ≤ r BP = \begin{cases} 1 & \text{if } c > r \\ e^{(1 - r/c)} & \text{if } c \leq r \end{cases} BP={1e(1r/c)if c>rif cr

然后,BLEU 分数计算公式为:

BLEU = B P ⋅ exp ⁡ ( ∑ n = 1 N w n log ⁡ p n ) \text{BLEU} = BP \cdot \exp \left( \sum_{n=1}^{N} w_n \log p_n \right) BLEU=BPexp(n=1Nwnlogpn)

在对数域中,排名行为更为明显:

log ⁡ BLEU = min ⁡ ( 1 − r c , 0 ) + ∑ n = 1 N w n log ⁡ p n \log \text{BLEU} = \min\left(1 - \frac{r}{c}, 0\right) + \sum_{n=1}^{N} w_n \log p_n logBLEU=min(1cr,0)+n=1Nwnlogpn

在我们的基线中,我们使用 (N = 4) 和均匀权重 ( w n w_n wn = 1/N)。

3. BLEU 评估

BLEU 指标的范围是从 0 到 1。除非候选翻译与参考翻译完全一致,否则很少有翻译能获得 1分。出于这个原因,即使是人类译者也不一定能得满分。需要注意的是,每句参考翻译越多,得分就越高。因此,在评估中,即使是「粗略」的比较,也必须谨慎对待不同数量的参考翻译:在一个包含大约 500 句(40 篇一般新闻报道)的测试语料库上,一名人类译者对四个参考翻译的得分为 0.3468,对两个参考翻译的得分为 0.2571。表1 显示了五个系统在该测试语料库上对两个参考翻译的 BLEU 得分。

在这个指标上,机器翻译系统 S2 和 S3 非常接近。因此,出现了几个问题:

在这里插入图片描述

  • BLEU 指标的差异是否可靠?
  • BLEU 得分的方差是多少?
  • 如果我们选择另一组随机的 500 句,是否仍然认为 S3 优于 S2?

为了回答这些问题,我们将测试语料库分成 20 个包含 25 句的块,分别计算这些块上的BLEU 指标。这样,我们就有了每个系统的 20 个 BLEU 指标样本。我们计算了均值、方差和配对 t 统计量,这些结果显示在表 2 中。t 统计量比较了表中每个系统与其左邻系统的得分。例如,S1 和 S2 的配对 t 统计量为 6。

需要注意的是,表 1 中的数字是基于 500 句的总体 BLEU 指标,但表 2 中的均值是基于 25句块的 BLEU 指标的平均值。正如预期的那样,对于每个系统,这两组结果非常接近,仅因有限块大小效应而略有不同。由于配对 t 统计量为 1.7 或以上时具有 95% 的显著性,系统得分之间的差异在统计上非常显著。25 句块上的报告方差作为像 500 句语料库这样的大型测试集方差的上限。

我们需要多少参考翻译?我们通过随机选择四个参考翻译中的一个作为每个40个故事的单一参考,模拟了一个单一参考的测试语料库。通过这种方式,我们确保了一定的风格变化。系统保持了与多个参考翻译相同的排名顺序。这一结果表明,我们可以使用一个具有单一参考的大型测试语料库,前提是这些翻译不是全部来自同一个译者。

4. 人类评估

我们有两组人类评审。第一组称为单语组,由 10 名以英语为母语的评审组成。第二组称为双语组,由 10 名以中文为母语且在过去几年中生活在美国的评审组成。这些人类评审中没有一位是专业翻译员。人类评审对我们 5 个标准系统的中文句子子集进行了评估,这些句子是从我们的 500 句测试语料库中随机抽取的。我们将每个源句子与其 5 个翻译配对,总共形成 250 对中文源句和英文翻译对。我们准备了一个包含这些翻译对的网页,这些翻译对被随机排序,以分散每个源句子的五个翻译。所有评审都使用同一个网页,并按照相同的顺序查看句子对。他们对每个翻译进行评分,评分范围从1(非常差)到5(非常好)。单语组的评审仅根据翻译的可读性和流畅性进行判断。

正如预期的那样,有些评审比其他评审更宽松,而有些句子比其他句子更容易翻译。为了考虑评审和句子之间的固有差异,我们比较了每个评审在各系统中对同一句子的评分。我们对按其总体平均得分排序的相邻系统进行了四次成对 t 检验比较。

4.1 单语组配对判断

图3 显示了两个连续系统得分之间的平均差异及其 95% 置信区间。我们可以看到,S2 比 S1好很多(在 5 分制上平均意见得分差异为 0.326),而 S3 被认为稍好一些(差异为0.114)。这两个差异在 95% 置信水平上都是显著的。人类评审 H1 比最好的系统要好得多,但略逊于人类评审 H2。这并不令人惊讶,因为 H1 既不是中文母语者也不是英文母语者,而 H2 是英语母语者。同样,人类译者之间的差异在 95% 置信水平上也是显著的。

在这里插入图片描述

4.2 双语组配对判断

图 4 显示了双语组的相同结果。他们同样发现 S3 略优于 S2(在 95% 置信水平上),尽管他们认为人类翻译之间的差异要小得多(在 95% 置信水平上不可区分),这表明双语评审更倾向于关注翻译的准确性而非流畅性。

在这里插入图片描述

5. BLEU与人类评估

图 5 显示了单语组评分相对于 5 个系统的 BLEU 得分的线性回归。高达 0.99 的相关系数表明 BLEU 得分很好地反映了人类的判断。特别有趣的是,BLEU 得分能够很好地区分 S2 和S3,尽管它们非常接近。图 6 显示了双语组的相应回归结果,相关系数为 0.96。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

我们现在将最差的系统作为参考点,比较其余系统相对于最差系统的 BLEU 得分和人类评审得分。我们对这 5 个系统的 BLEU 得分、单语组和双语组得分进行了线性归一化处理(根据5 个系统的最大和最小得分范围)。归一化后的得分如图 7 所示。该图展示了 BLEU 得分与单语组得分之间的高度相关性。特别值得注意的是,BLEU 对 S2 和 S3 之间小差异以及 S3 和 H1 之间较大差异的估计非常准确。图中还突出了机器翻译系统与人类译者之间的相对较大差距。

此外,我们推测双语组在评估 H1 相对于 H2 时相当宽容,因为单语组发现他们的翻译在流畅性上存在相当大的差异。

在这里插入图片描述

6. 结论

我们相信,BLEU 将通过帮助研究人员迅速聚焦于有效的建模思路,加速机器翻译研发周期。我们这一信念得到了最近一项统计分析的支持,该分析研究了 BLEU 与人类评判在从四种截然不同的语言(阿拉伯语、中文、法语、西班牙语)翻译成英语时的相关性,这四种语言代表了三种不同的语言家族(Papineni等,2002)。BLEU 的优势在于,它通过在测试语料库上平均化单个句子的评判误差,而不是试图精确预测每个句子的人类评判,从而与人类评判高度相关:量变引起质变。

最后,由于机器翻译和摘要都可以看作是从文本上下文生成自然语言的过程,我们认为 BLEU 可以被改编用于评估摘要或类似的自然语言生成任务。

7. 碎碎念

借助 ChatGPT 的帮助,又大致的对 BLEU 评分的论文做了一次梳理,ChatGPT 真香!

  • 我可以否认一样东西,但不一定非得诋毁它,或者剥夺别人相信的权利。

  • 你可以阴郁,可以懒散,可以不时地计较,过分敏感,可以有些不知足,暴躁,嫉妒,小气,但要记得拷问自我,必须追求善良,尽力坦荡,永远正直。

  • 在你还年轻的时候,你的选择没有对错之分,所有的选择都是对的,对于选择的结果,只是好与更好的差别。

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

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

相关文章

如何在Node.js中执行解压缩文件操作

一、解压文件 1.安装依赖: 安装adm-zip依赖包:npm install adm-zip --save 安装iconv-lite依赖包:npm install iconv-lite --save 解压前的file文件夹结构: update-1.0.2.zip压缩包内容: 2.在depresssFile.js文件&…

鸿蒙是必经之路

少了大嘴的发布会,老实讲有点让人昏昏入睡。关于技术本身的东西,放在后面。 我想想来加把油~ 鸿蒙发布后褒贬不一,其中很多人不太看好鸿蒙,一方面是开源性、一方面是南向北向的利益问题。 不说技术的领先点,我只扯扯…

【网络原理】网络地址转换----NAT技术详解

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 我们在 IP协议 一文中介绍过,由于IPv4协议中 IP地址只有32位,导致最多只能表示 42亿9千万个IP地址。但我们需要通过IP地址来标识网络上的每一个设备&#x…

【p2p、分布式,区块链笔记 IPFS】go-ipfs windows系统客户端节点实现 kubo试用

Kubo (go-IPFS) 是最早和使用最广泛的 IPFS 实现。它包括: 一个 IPFS 守护程序服务器广泛的命令行工具用于控制节点的 HTTP RPC API用于向 HTTP 浏览器提供内容的 HTTP 网关 下载 https://dist.ipfs.tech/#go-ipfs 解压 初始化 C:\User…

docker-minio启动参数

完整命令 docker run -p 9000:9000 -p 9090:9090 -v /opt/minio/data:/data -d --name -d --restartalways minio -e "MINIO_ACCESS_KEYminio" -e "MINIO_SECRET_KEYminioadmin123" minio/minio server --console-address ":9090" -address &q…

IDEA开发工具使用技巧积累

一、IDEA 工具设置默认使用maven的settings.xml文件 第一步:打开idea工具,选中 File ——> New Projects Setup ——> Settings for New Projects 第二步:先设置下自动构建项目这个选项 第三步:选中 Build Tools ——>…

正点原子阿尔法ARM开发板-IMX6ULL(九)——关于SecureCRT连接板子上的ubuntu

文章目录 一、拨码器二、SecureCRT 一、拨码器 emmm,也是好久没学IMX6ULL了,也是忘了拨码器决定了主板的启动方式 一种是直接从TF卡中读取文件(注意这里是通过imdownload软件编译好了之后,通过指令放入TF卡) 一种是现在这种用串口…

日常笔记记录

1、Http 1.1 概念 HTTP 是 HyperText Transfer Protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,是客户端与服务端进行交互时必须遵循的规则。它用于定义 Web 浏览器与 Web 服务器之间交换数据的过程以及…

Golang | Leetcode Golang题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; func convertToBase7(num int) string {if num 0 {return "0"}negative : num < 0if negative {num -num}s : []byte{}for num > 0 {s append(s, 0byte(num%7))num / 7}if negative {s append(s, -)}for i, n : 0, len…

《虚拟现实的边界:探索虚拟世界的未来可能》

内容概要 在虚拟现实&#xff08;VR&#xff09;技术的浪潮中&#xff0c;我们见证了其从实验室的奇想逐渐走向日常生活的非凡旅程。技术发展的背后是不断突破的创新&#xff0c;早期的设备虽然笨重&#xff0c;但如今却趋向精致、轻巧&#xff0c;用户体验显著提升。想象一下…

Java并发学习总结:原子操作类

本文是学习尚硅谷周阳老师《JUC并发编程》的总结&#xff08;文末有链接&#xff09;。 基本类型原子类 AtomicIntegerAtomicLongAtomicBoolean AtomicInteger 的方法 getAndIncrement 和 incrementAndGet 的区别&#xff1a; 两个方法都能实现对当前值加 1 &#xff0c; 但…

家用wifi的ip地址固定吗?换wifi就是换ip地址吗

在探讨家用WiFi的IP地址是否固定&#xff0c;以及换WiFi是否就意味着换IP地址这两个问题时&#xff0c;我们首先需要明确几个关键概念&#xff1a;IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类&#xff1a…

图解:什么是多租户?

大家好&#xff0c;我是汤师爷~ 什么是多租户&#xff1f; 多租户是SaaS&#xff08;软件即服务&#xff09;领域里特有的一个概念。在SaaS服务中&#xff0c;“租户”指的就是使用这个SaaS系统的客户。 那么租户和用户有什么区别呢&#xff1f;举个例子。假设你正在使用一款…

从零开始的Go语言之旅(2 Go by Example: Values)

Go 语言有多种值类型&#xff0c;包括字符串、整数、浮点数、布尔值等。以下是一些基本示例。 package mainimport "fmt"func main() {fmt.Println("go" "lang")fmt.Println("11 ", 11)fmt.Println("7.0/3.0 ", 7.0/3.0)f…

[计算机网络]第一周

TCP/IP 与OSI TCP/IP TCP/IP 四层模型是一个分层网络通信模型&#xff0c;它将网络通信过程分为四个层次&#xff0c;这四层分别是&#xff1a;网络接口层、互联网层、传输层和应用层。 网络接口层负责在计算机和网络硬件之间传输数据&#xff0c;负责在物理网络上发送和接收…

六,Linux基础环境搭建(CentOS7)- 安装HBase

Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装HBase 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01; 一、HBase下载及安装 HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术来源于 Fay Chang 所撰写的Google论文“…

AndroidStudio部署多渠道打包环境(一)

对于游戏来说&#xff0c;需要上架国内很多家应用商店&#xff0c;还有一些小的渠道SDK&#xff0c;大大小小加起来也有几十家了&#xff0c;那么我们部署了多渠道打包环境之后就很方便了。 一 、配置游戏基本参数&#xff1a;在app下面的build.gradle文件里编辑&#xff0c; …

基于Python+Django的气象数据分析与可视化系统

前言 随着互联网技术不断地发展&#xff0c;网络与大数据成为了人们生活的一部分&#xff0c;而气象数据分析与可视化系统 作为网上应用的一个全新的体现&#xff0c;由于其特有的便捷性&#xff0c;已经被人们所接受 本系统采用的框架为Django和python开发了气象数据分析与可…

基于SSM轻型卡车零部件销售系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;配件类型管理&#xff0c;配件信息管理&#xff0c;订单信息管理&#xff0c;检修休息管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&…

arm架构 ubuntu 部署docker

如果有旧版本需要卸载 sudo apt remove docker docker-engine docker-ce docker.io 安装依赖包 sudo apt update && apt install -y apt-transport-https ca-certificates curl software-properties-common 添加docker秘钥 阿里云 curl -fsSL http://mirrors.aliyu…