一文读懂“语言模型”

news/2024/11/30 10:33:05/

再一次感谢石头兄弟的推荐,这是今年7月李航老师在 ACM上发表的一篇综述性论文——“语言模型的过去、现在和未来”(https://cacm.acm.org/magazines/2022/7/262080-language-models/fulltext),对于了解自然语言处理会有较大帮助,于是老码农擅自起了个略带互联网色彩的名字——“一文读懂语言模型”,编译分享如下。

摘要】自然语言处理(NLP)近年来发生了革命性的变化,特别预训练语言模型的开发和使用,在许多应用方面都取得了显著的成绩。预训练语言模型有两个主要优点:一个是可以显著提高许多 NLP 任务的准确性。例如,可以利用 BERT 模型来获得比人类更高的语言理解能力,可以利用 GPT-3模型来生成类似于人类文字的生成文本。第二个优点是通用的语言处理工具。如果在传统的自然语言处理中进行基于机器学习的任务,需要标记大量的数据来训练模型。相比之下,目前只需要标记少量数据就可以对预先训练好的语言模型进行微调即可。

自然语言处理是计算机科学、人工智能和语言学的一个分支领域,其应用包括机器翻译、阅读理解、对话系统、文档摘要、文本生成等。

人们利用数学手段建立语言模型主要有两种方法: 一种是基于概率论,另一种是基于形式语言理论,这两种方法也可以结合使用。从基本框架的观点来看,语言模型属于第一类。在形式上,语言模型是一个定义在单词序列(一个句子或一个段落)上的概率分布,是基于概率论、统计学、信息论和机器学习的自然语言文本建模工具。近年来,通过深度学习得到的神经语言模型,特别是最近开发的预训练语言模型,已经成为自然语言处理的基础技术。

本文从计算机科学的历史发展和未来趋势出发,对语言建模,特别是预训语言建模进行了简要介绍,突出了基本概念,直观地解释了技术成就和基本挑战。首先,介绍了马尔科夫和香农研究的语言建模基本概念(基于概率论)。接下来,讨论了乔姆斯基提出的语言模型(基于形式语言理论) ,描述了作为传统语言模型扩展的神经语言模型的定义。然后,解释了预训练语言模型的基本思想,讨论了神经语言建模方法的优点和局限性,最后对语言模型的未来发展趋势进行了预测。

马尔可夫与语言模型

安德烈 · 马尔科夫可能是第一个研究语言模型的科学家,尽管当时还没有“语言模型”这个术语。

假设 w1,w2,... ,wN 是一个单词序列,然后,单词序列的概率可以计算如下:

7f7434cd0da79053a2eef2ca858d8e1b.jpeg

设 p (w1 | w0) = p (w1),不同类型的语言模型使用不同的方法计算条件概率 p (wi | w1,w2,... ,wi-1),学习和使用语言模型的过程称为语言建模。N-gram 模型是一个基本模型,它假设每个位置上的单词只取决于前面 n-1位置上的单词。也就是说,该模型是一个 n-1阶的马尔可夫链。

da385ad8cd591de0ad77201d50abe5b0.jpeg

马尔可夫在1906年研究了马尔可夫链。首先考虑的模型非常简单,只有两个状态和这两个状态之间的转换概率。如果根据转移概率在两个状态之间跳跃,那么访问两个状态的频率将收敛到期望值,这是马尔可夫链的遍历定理。在接下来的几年里,他扩展了该模型,并证明了上述结论仍然适用于更一般的情况。

为了提供一个具体的例子,马尔科夫在1913年将他提出的模型应用到普希金的诗歌小说《尤金 · 奥涅金》中。他移除了空格和标点符号,并将小说的前两万个俄语字母分为元音和辅音,从而得到了小说中的一系列元音和辅音。然后,马尔科夫用纸和笔计算元音和辅音之间的转换概率。然后,利用这些数据验证了最简单的马尔可夫链特征。

马尔可夫链最初应用在语言领域,这是非常有趣的,研究的例子就是最简单的语言模型。

78b895ef5cb6993934f1e59239db321d.jpeg

香农与语言模型

1948年,克劳德 · 香农发表了开创性论文《The Mathematical Theory of Communication》 ,这是信息论领域的奠基之作。在论文中,基于约翰·冯·诺伊曼的建议,香农从统计力学那里借用了“熵”这个术语,引入了熵和交叉熵的概念,并研究了 n-gram 模型的性质。

熵表示一个概率分布的不确定性,而交叉熵表示一个概率分布相对于另一个概率分布的不确定性。熵是交叉熵的一个下界。

假设语言(单词序列)是由随机过程生成的数据,那么,N-gram 的概率分布熵定义如下:

a43245bf2da23a93affe0116552e0712.jpeg

其中 p (w1,w2,... ,wn)表示 n-gram中 w1,w2,... ,wn 的概率。N-gram 概率分布与数据“真实”概率分布的交叉熵定义如下:

e4abdba9eb6ea855d86b542bb6d58e5f.jpeg

其中 q (w1,w2,... ,wn)表示 n-gram的 w1,w2,... ,wn 和 p (w1,w2,... ,wn)表示 n-gram的 w1,w2,... ,wn 的真实概率。

以下关系包括:

3cbd84ed9b7763c85c59831ae0e5e8be.jpeg

香农-麦克米伦-布莱曼定理指出,当语言的随机过程满足平稳性和遍历性条件时,下列关系成立:

ecabf298cd81fba7b0d422fed7ebc198.jpeg

换句话说,当单词序列长度达到无穷大时,语言的熵就可以定义了。熵是一个常数,可以根据语言的数据进行估计。

如果一种语言模型能够比另一种语言模型更准确地预测一个词序列,那么它应该具有较低的交叉熵。因此,香农的工作为语言建模提供了一个评价工具。语言模型不仅可以模拟自然语言,还可以模拟正式语言和半正式语言。

乔姆斯基与语言模型

几乎在同一时代,乔姆斯基在1956年提出了语法的乔姆斯基谱系,用来表示语言的句法。他指出,有限状态语法(也称为了 n-gram 模型)在描述自然语言方面存在局限性。

乔姆斯基的理论断言,一种语言由一组有限或无限的句子组成,每个句子是一组有限长度的单词,单词来自一个有限的词汇,语法是一组生成规则,可以生成语言中的所有句子。不同的语法可以产生不同复杂度的语言,并形成层次结构。

能够生成有限状态机可以接受的句子的语法是有限状态文法或正则文法,而能够生成非确定性下推自动机可以接受的句子的语法是上下文无关文法。有限状态文法被恰当地包含在无上下文文法中。

有限马尔可夫链(或 n-gram 模型)的“文法”是有限状态文法。有限状态文法在生成英语句子方面确实有局限性。例如,英语表达式之间存在着语法关系,例如(i)和(ii)中的下列关系。 

(i) If S1, then S2. 

(ii) Either S3, or S4. 

(iii) Either if S5, then S6, or if S7, then S8

原则上,这些关系可以无限期地组合在一起,以产生正确的英语表达方式(例如,示例 iii )。然而,有限状态文法不能描述所有的组合,并且,在理论上,有些英语句子不能被覆盖。因此,乔姆斯基认为用有限状态文法(包括 n-gram 模型)描述语言有很大的局限性。相反,他指出,上下文无关文法可以更有效地为语言建模。在他的影响下,在接下来的几十年里,无上下文的文法在自然语言处理中得到了广泛的应用。尽管乔姆斯基的理论现在对自然语言处理没有太大的影响,但是它仍然具有重要的科学价值。

神经语言模型

2001年,Yoshua Bengio 和他的合著者提出了最早的神经语言模型之一,从而开启了语言建模的新纪元。众所周知,本吉奥、杰弗里 · 辛顿和扬 · 勒库恩凭借他们在概念和工程方面的突破,使深度神经网络成为计算的关键部分,获得了2018年的图灵奖。

N-gram 模型的学习能力有限。传统方法是从语料库中用平滑法估计模型中的条件概率 p (wi | wi-n + 1,wi-n + 2,... ,wi-1)。然而,模型中的参数数目是指数级 O (V^n) ,其中 V 表示词汇量。当 n 增加时,由于训练数据的稀疏性,模型的参数不能准确地学习。

Bengio 等人提出的神经语言模型从两个方面对 n-gram 模型进行了改进。首先,一个实值向量,称为词嵌入,用来表示一个词或词的组合。一个词嵌入的维数要比“one-hot 向量”的维数低得多,在one-hot 向量中,与该词对应的元素是一个,而其他元素是零。

词嵌入作为一种“分布式表示”,可以比one-hot向量表示一个词语具有更高的效率, 并拥有泛化能力、鲁棒性和可扩展性。其次,用神经网络表示语言模型,大大减少了模型中的参数数量。条件概率由神经网络决定:

978c10172bff457a4e175a4f34eed261.jpeg

其中(wi-n + 1,wi-n + 2,... ,wi-1)表示单词 wi-n + 1,wi-n + 2,... ,wi-1的嵌入; f (·)表示神经网络; θ 表示网络参数。模型中的参数个数仅为 O (V)。图1显示了模型中表征之间的关系。每个位置都有一个中间表示,该表示依赖于前面 n-1位置上的单词嵌入 ,这适用于所有位置。然后,使用位于当前位置的中间表示为该位置生成一个单词。

a14f13d4bb0731ebdd8b8fdd060847ed.jpeg

图1,初始神经语言模型中表征之间的关系

在 Bengio 等人的工作之后,大量的词嵌入方法和神经语言建模方法被开发了出来,并从不同的角度带来了改进。

词嵌入的代表性方法包括 Word2Vec。代表性的神经语言模型是递归神经网络(RNN)的语言模型,包括长短期记忆(LSTM)语言模型。在一个 RNN 语言模型中,每个位置的条件概率由一个 RNN 决定:

534a2c08d9a95f6ab1588b6f598dbab6.jpeg

其中 w1,w2,... ,wi-1表示单词 w1,w2,... ,wi-1的嵌入; f (·)表示 RNN; θ 表示网络参数。RNN 语言模型不再具有马尔可夫假设,每个位置上的单词都依赖于前面所有位置上的单词。神经网络中的一个重要概念是其中间表征或状态。词与词之间的依赖拥有属性是 RNN 模型中状态与状态之间的依赖关系。模型的参数在不同的位置共享,但在不同的位置所得到的表征不同。

图2显示了 RNN 语言模型中表征之间的关系。每个层在每个位置都有一个中间表征,它表示到目前为止单词序列的“状态”。在当前位置的当前层的中间表征形式由在前一位置的同一层的中间表征形式和在当前位置的下一层的中间表征形式决定。当前位置的最终中间表征用于计算下一个单词的概率。

6ee7b313dba610ec0dcf4ccff987c0e8.jpeg

图2,RNN 语言模型中表征之间的关系。在这里,表示一个句子的开始和结束。

语言模型可以用来计算语言的概率(词序列)或生成语言。在后一种情况下,自然语言的句子或文章可以从语言模型中随机抽样,从大量数据中学习的 LSTM 语言模型可以生成相当自然的句子。

语言模型的扩展是一种条件语言模型,它计算给定条件下单词序列的条件概率。如果条件是另一个单词序列,那么问题就变成了从一个单词序列到另一个单词序列的转换ーー也就是所谓的序列到序列问题。机器翻译、文本摘要、生成式对话都是这样的任务。如果给定的条件是一幅图片,那么问题就变成了从一幅图片到一个词序列的转换,图片说明就是这样一个任务。

条件语言模型可用于各种各样的应用程序。在机器翻译中,该系统将一种语言中的句子转换成另一种语言中的句子,并且具有相同的语义。在对话生成中,系统对用户的话语产生响应,两条信息形成一轮对话。在文本摘要中,系统将长篇文本转换为短篇文本,使后者代表前者的中心思想。模型的条件概率分布所代表的语义因应用而异,并从应用的数据中学习。

序列到序列模型的研究为新技术的发展做出了贡献。一个代表性的序列到序列模型是由 Vaswani 等人开发的transformer。transformer完全基于注意力机制,并利用注意力在编码器和解码器之间进行编码、解码和信息交换。目前,几乎所有的机器翻译系统都采用transformer模型,机器翻译已经达到了几乎可以满足实际需要的水平。由于transformer在语言表征上的优越性,现在几乎所有的预训练语言模型都采用了transformer的体系结构。

预训练语言模型

预训练语言模型的基本思想如下。首先,基于一个已实现的语言模型,例如,transformer的编码器或解码器。模型的学习分为两个阶段: 预训练阶段,用一个非常大的语料库通过非监督式学习训练模型的参数; 微调阶段,用预训练的模型应用于一个特定的任务,并通过监督式学习进一步调整模型的参数。表1中的链接为学习和使用预训练的语言模型提供了资源。

824bd46f650739d3a61d9065aaa91191.jpeg

表1. 用于学习和使用预训练语言模型的资源

有三种类型的预训练语言模型: 单向、双向和序列到序列。由于篇幅所限,本文仅涉及前两种类型。所有主要的预训练语言模型都采用了transformer的体系结构,表2提供了现有预训语言模型的摘要。

9a85dfc3b0967779b60ad04726b6f4b5.jpeg

表2. 现有预训练语言模型的摘要

transformer具有很强的语言表达能力,一个非常大的语料库包含了丰富的语言表达式(这样的未标记数据可以很容易地获得) ,训练大规模的深度学习模型已经变得更加有效。因此,预训练的语言模型可以有效地表示语言的词汇、句法和语义特征。预训练语言模型,如 BERT 和 GPT系列 (GPT-1、 GPT-2和 GPT-3)已经成为当前自然语言处理的核心技术。

预训练语言模型的应用给自然语言处理带来了巨大的成功。在语言理解任务(如阅读理解)的准确性方面,BERT 已经甚至超过了人类。“微调”后的 GPT-3在文本生成任务中也达到了惊人的流畅程度。需要注意的是,结果仅仅表明机器在这些任务中的表现更好,而不是 BERT 和 GPT-3能够比人类更好地理解语言,因为这也取决于如何进行基准测试。正如从历史中学到的那样,对人工智能技术的能力有正确的理解和预期对该领域的健康成长和发展至关重要。

Radford 等和 Brown 等开发的 GPT系列具有以下结构。输入是一系列单词 w1,w2,... ,wN,首先,通过输入层,创建一个输入表征序列,表示为矩阵 H (0)。通过 L 变压器译码层后,生成一系列中间表征,表示为矩阵 H (L)。

1b01d18c1476f809c5fe0a27c49b4d81.jpeg

最后,根据每个位置的最终中间表示,计算每个位置的单词概率分布。GPT 的预训练与传统的语言建模相同。目的是预测词序的可能性。对于给定的词序列 w = w1,w2,... ,wN,我们计算并最小化交叉熵或负对数似然来估计参数:

f7d0cb6c84de2cb4120fbd7b7eb292fc.jpeg

其中 θ 表示 GPT系列模型的参数。

图3显示了 GPT系列模型中表征之间的关系。每个位置的输入表示由单词嵌入和“位置嵌入”组成,每个位置上每个层的中间表征形式是从下面位于前一个位置的层中间表征形式创建的。一个词的预测或生成是在从左到右每个位置的反复执行。换句话说,GPT是一种单向语言模型,其中单词序列是从一个方向建模的。(注意,RNN 语言模型也是单向语言模型。)因此,GPT 更适合于解决自动生成句子的语言生成问题。

cfd725dd7df1c1f9a8d453e0d2d73ced.jpeg

图3,GPT系列模型中表征之间的关系。在这里,表示一个句子的开始和结束。

BERT 由 Devlin 等人开发的,具有以下体系结构。输入是一个单词序列,可以是单个文档中的连续句子,也可以是两个文档中连续句子的串联。这使得该模型适用于以一个文本作为输入的任务(例如文本分类) ,以及以两个文本作为输入的任务(例如回答问题)。首先,通过输入层,创建一个输入表示序列,表示为矩阵 H (0)。在通过 L Transformer编码器层之后,创建一个中间表示序列,表示为 H (L)

dcb827c62eedf6774c91e4d513d98a52.jpeg

最后,根据每个位置的最终中间表征,可以计算出每个位置的单词概率分布。BERT 的预训练被称为掩码语言建模。假设单词序列是 w = w1,w2,... ,wN。序列中的几个单词被随机屏蔽,也就是说,变成一个特殊的符号[屏蔽]。产生一个新的单词序列,其中被屏蔽的单词集被表示为w'。学习的目标是通过计算和最小化下列负对数似然估计参数来恢复被掩盖的单词:

ef4afa45bd0e4b37191293d5f835db0c.jpeg

其中 θ 表示 BERT 模型的参数,δi 的值为1或0,表示位置 i 处的单词是否被屏蔽。请注意,掩码语言建模已经是一种不同于传统语言建模的技术。

图4显示了 BERT 模型中表征之间的关系。每个位置的输入表示由词语嵌入、“位置嵌入”等组成。每个位置的每个层的中间表征是从下面所有位置的层的中间表征创建的。单词的预测或生成是在每个掩蔽位置独立进行的,也就是说,BERT 是一个双向的语言模型,其中的词序列是从两个方向建模的。因此,BERT 可以自然地应用于语言理解问题,其输入是一个完整的单词序列,输出通常是一个标签或标签序列。

3d91b7e287e97b71acc9a7a5a9e4301b.jpeg

图4,BERT 模型中表征之间的关系。这里,表示一个特殊的符号,表示整个输入序列。

对预训练语言模型的直观解释是,该机器在预训练过程中进行了大量基于大型语料库的单词卡片或完形填空练习,从单词中捕捉各种句子构成模式,然后从句子中构成文章,表达和记忆模型中的模式。文本不是用单词和句子随机创建的,而是基于词汇、句法和语义规则构建的。GPT系列和 BERT 可以分别使用transformer的译码器和编码器来实现语言的组合性。(组合性是语言最基本的特征,乔姆斯基谱系中的文法也是这一特征的模型。)换句话说,GPT系列 和 BERT 在训练前已经获得了相当多的词汇、句法和语义知识。因此,当在微调中适应特定任务时,只需少量标记数据即可完善模型,以实现高性能。例如,发现不同的 BERT 层具有不同的特性。底层主要表示词汇知识,中层主要表示句法知识,顶层主要表示语义知识。

预训练的语言模型(没有进行微调) ,如 BERT 和 GPT-3,包含了大量的实际知识。例如,它们可以用来回答诸如“但丁出生在哪里?”,并进行简单的推理,例如,“什么是48加76?”然而,语言模型本身并没有推理机制。他们的“推理”能力是基于联想而不是真正的逻辑推理。因此,他们在需要复杂推理的问题上表现不佳,包括论证推理,数值和时间推理,以及语意推理。将推理能力和语言能力整合到自然语言处理系统中将是未来的一个重要课题。

未来展望

当代科学(脑科学和认知科学)对人类语言处理机制(语言理解和语言生成)的理解有限。在可预见的未来,很难看到重大突破的发生,而且有永远不会突破的可能性存在。另一方面,我们希望不断促进人工智能技术的发展,开发对人类有用的语言处理机器。

神经语言建模似乎是迄今为止最成功的方法。语言建模的基本特征没有改变,也就是说,它依赖于在一个包含所有单词序列的离散空间中定义的概率分布。学习过程就是找到最优模型,以便用交叉熵预测语言数据的最高准确性(见图5)。神经语言建模的优势在于,它可以利用复杂的模型、大数据和强大的计算能力非常精确地模拟人类语言行为。从 Bengio 等人提出的原始模型到 RNN 语言模型和 GPT系列 以及BERT 等预训练语言模型,神经网络的结构变得越来越复杂(参见图1,2,3,4) ,而预测语言的能力变得越来越高(交叉熵变得越来越小)。然而,这并不一定意味着模型具有与人类相同的语言能力,这种方法的局限性也是不言而喻的。

144659cf4ad68c0cf7e4df02f70d51a6.jpeg

图5,这台机器通过调整其“大脑”内部的神经网络参数来模拟人类的语言行为最终,它可以像人类一样处理语言。

还有其他可能的发展道路吗?目前还不清楚。可以预见的是,神经语言建模方法仍有很多改进的空间。目前的神经语言模型在表示能力和计算效率(功耗)方面与人脑还有很大差距。根据研究,一个成年人的大脑工作时间只有12W; 与之形成鲜明对比的是,GPT-3模型的训练耗费了几千千兆次/秒的时间。是否能够开发出一个更好的语言模型来更接近人类语言处理是未来研究的一个重要方向。技术改进的机会仍然很多,仍然可以从脑科学的有限发现中得到启发。

人类的语言处理被认为主要在大脑皮层的两个区域进行: Broca 区和Wernicke区(图6)。前者负责语法,后者负责词汇。脑损伤导致失语的典型病例有两例。在 Broca 区受伤的病人只能说零星的话而不是句子,而在Wernicke区受伤的病人可以构建语法正确的句子,但是这些词往往缺乏意义。一个自然的假设是,人类的语言处理是在两个大脑区域并行进行的。是否有必要采用更加人性化的处理机制是一个值得研究的课题。语言模型不能明确地使用语法,也不能无限地组合语言,这是人类语言的一个重要属性,将语法更直接地纳入语言模型的能力将是一个需要研究的问题。

1b4f7b43afe64134e763b2ade3330ec2.jpeg

图6,人脑中负责语言处理的区域。

脑科学家认为,人类语言理解是一个在潜意识中激活相关概念表征并在意识中生成相关图像的过程。表征包括视觉、听觉、触觉、嗅觉和味觉,它们是视觉、听觉、触觉、嗅觉和味觉的内容,通过一个人在成长和发展过程中的经验,在大脑的各个部分被记住。因此,语言的理解与人们的经验密切相关。生活中的基本概念,如猫和狗,是通过视觉、听觉、触觉等传感器的输入来学习的。听到或看到“猫”和“狗”这两个词也会激活人脑中相关的视觉、听觉和触觉表征。机器能否从大量的多模态数据(语言、视觉、语音)中学习更好的模型,从而更智能地处理语言、视觉和语音呢?多模态语言模型将是未来研究的重要课题。

结论

语言模型的历史可以追溯到100多年前,马尔科夫、香农和其他人没有预见到他们所研究的模型和理论会在以后产生如此巨大的影响,甚至可能是意想不到的。未来100年中语言模型将如何发展?它们仍将是人工智能技术的重要组成部分吗?这超出了我们的想象和预测。我们可以看到的是,语言建模技术在不断发展,在未来的几年中,更强大的模型很可能取代 BERT 和 GPT。

【关联阅读】

  • 一文读懂中间件

  • 一文弄清物联网的OTA

  • 一文贯通python文件读取

  • 再谈<全栈架构师> 一文

  • 语音交互技术不是“你问我答”那么简单!

  • 分布式系统的时间问题

  • 2.4G上的无线共存问题

  • 《基于混合方法的自然语言处理》译者序

  • 感知自然语言理解(NLU)

  • 浅谈语音助手可以给企业带来什么?

  • 《智能语音时代》的读书笔记

  • 揭秘“语音交互”背后的AI硬核黑科技!

  • 令人激动的语音UI背后


http://www.ppmy.cn/news/543154.html

相关文章

但丁-社交网络上的有效沟通

悬垂 else 示例&#xff1a; int x 10; int y 10; if (x 10) if (y 10) System.out.println("aaa"); else System.out.println("bbb"); 注&#xff1a;if / else语句中可以不加大括号&#xff0c;但只能写一条语句&#xff1b;此时else和最接近的 i…

与但丁讨论神曲

油画欣赏——《与但丁讨论神曲》 戴都都、李铁子、张安君绝对算不上当代画坛的豪华组合&#xff0c;但他们肯定是制造了一起在中国美术界具有颠覆意义的大事件。 多年以后&#xff0c;当人们重温2006年中国的文化事件&#xff0c;恐怕不能不提到一幅叫《与但丁讨论神曲》的油画…

什么网页游戏是按地地狱划分服务器的,不思议迷宫地域边境详细攻略 全方位介绍地狱边境所有玩法...

小编今天要为大家带来的是不思议迷宫地域边境的超详细的攻略&#xff0c;这篇可是干货啊!赶紧来看看不思议迷宫地域边境详细攻略 全方位介绍地狱边境所有玩法。 一、地图梗概 地狱边境这张地图总体难度还是比较高的&#xff0c;而且有很多恶心人的因素。刷dp可能比较烦&#xf…

【编译、链接、装载十二】动态链接2

【编译、链接、装载十二】动态链接2 四、延迟绑定&#xff08;PLT&#xff09;五、动态链接相关结构1 “.interp”段2 “.dynamic”段3 .动态符号表——dynsym、动态符号字符串表——.dynstr4、动态链接重定位表 六、动态链接的步骤和实现1、动态链接器自举2、装载共享对象3、重…

三国杀全武将台词

链接&#xff1a;https://pan.baidu.com/s/1-r0oWC_SifG5E60AVpXJ1A 提取码&#xff1a;n12x 荀彧&#xff1a; 秉忠贞之志&#xff0c;守谦退之节。 或忠信而死节兮&#xff0c;或訑谩而不疑。 生食汉禄&#xff0c;死为汉臣。 二虎竞食&#xff0c;猎人得利。 主公要臣…

游聚平台三国战纪全版本修改器

2021年8月3日更新 之前的那个工具箱&#xff0c;不更新了&#xff0c;更新起来太麻烦还要添加新游戏。 下载地址 演示地址

python三国杀

各位大佬好&#xff01; 这是我第一次写问章&#xff0c; 有不足请多多指教。(毕竟我只是一名小学生) 一段python三国杀代码 import random import time import datetime ttime rrandom def hm(heart,cheart):print(你的血, heart)print(电脑的血, cheart) def wx():bb[无懈…

三国杀ol服务器维护时间 11月6日,《三国杀OL》停运通知

尊敬的九游《三国杀OL》游戏玩家们&#xff1a; 九游《三国杀OL》游戏从测试开始便一直受到广大玩家的支持和喜爱&#xff0c;一点一滴筑造起来的游戏世界给予我们心里的温馨和欢乐。每一次的更新&#xff0c;都牵动着我们的心扉&#xff1b;每一次的活动&#xff0c;都激扬着我…