Category: AI

不要忘记连接!用基于图的重排序提升RAG的表现不要忘记连接!用基于图的重排序提升RAG的表现

认识一下RAG:文本生成的超级英雄 Retrieval Augmented Generation,简称RAG,是一个能让大型语言模型(LLM)在回答问题时表现更佳的工具。RAG的工作原理是通过从现有文档中检索相关信息来为生成的文本提供背景支持。听起来是不是很厉害?但问题是,如果文档只提供部分信息或者与问题背景的连接不明显,那么RAG该怎么办?这篇文章就来回答这两个核心问题。 G-RAG:图神经网络的魔力 我们介绍一种基于图神经网络(GNN)的方法,叫做G-RAG。这个方法在RAG的检索器和阅读器之间引入了一个重排序器。G-RAG不仅考虑了文档之间的连接,还利用了语义信息(通过抽象意义表示图,AMR)来提供上下文感知的排序器。G-RAG不仅表现优异,还比最先进的方法更省计算资源。 为什么重排序很重要? 在开放领域问答(ODQA)中,RAG虽然能成功地检索到相关文档,但不能充分利用文档间的连接。这会导致模型忽视那些包含答案但与问题背景连接不明显的文档。通过重排序过程,我们能更有效地过滤检索到的文档,提高阅读过程的效果。 现有方法的不足 目前的重排序器虽然表现不错,但仍有一些问题。首先,大多数现有工作未能捕捉到不同检索文档之间的重要连接。其次,尽管AMR图提高了对复杂语义的理解,但将冗余的AMR信息集成到预训练语言模型中会导致过拟合和计算时间增加。最后,现有方法利用的预训练语言模型在快速发展的LLM时代显得不足。 我们的解决方案 为了应对这些挑战,我们提出了一种基于文档图的方法,每个节点代表一个文档,每条边代表两个文档之间存在共同概念。我们将不同文档之间的连接信息纳入边特征,并通过消息传递机制更新边特征。同时,我们在节点特征中加入了关键的AMR信息,避免了冗余信息的引入。 实验结果 我们在两个代表性的ODQA数据集上进行了实验:自然问题(NQ)和TriviaQA(TQA)。结果显示,基于图的策略(如GCN和G-RAG)在各种评估指标上表现出色。特别是G-RAG-RL模型,通过使用排序损失函数,进一步提升了识别正面文档的能力。 结论与未来展望 我们的G-RAG模型在现有ODQA方法中表现出色,通过利用文档之间的隐性连接和战略性地整合AMR信息,显著提高了识别有价值信息的能力。尽管预训练的LLM在重排序任务中的表现可能不尽如人意,但对其进行微调可能极大地提升RAG系统的表现。未来的研究方向包括设计更复杂的模型来更好地处理AMR信息,以及探索更高级的方法来解决LLM产生的排名分数中的平局问题。 参考文献 [...]

GPT-4在文档理解中的应用GPT-4在文档理解中的应用

介绍 各位读者,你们是否曾经因为无法快速翻阅一大堆文档而感到头痛?别担心,我们的好朋友GPT-4来了!最近,Lukasz Borchmann 和他的团队在一篇名为《Notes on Applicability of GPT-4 to Document Understanding》的论文中详细探讨了GPT-4在文档理解领域的表现。让我们一起来看看这位AI大将是如何在文档中大显神通的吧! 文档理解:不仅仅是文字 文档理解不仅仅是读取文字,还包括理解文档的版式、图像和各种视觉线索。这就像是要你在一堆报纸中找到一条特定的新闻,不仅要看文字,还要注意标题、图片和排版。GPT-4 Vision Turbo在这方面表现优异,特别是当输入包括OCR识别的文字和文档图像时,效果更佳。 实验结果:GPT-4的表现如何? Borchmann团队选择了四个数据集进行测试:DocVQA, InfographicsVQA, SlideVQA和DUDE。每个数据集都代表了不同类型的文档挑战。结果显示,TURBO V和TURBO V + OCR模型在结合视觉和文字信息时表现最佳,尤其是对文本密集型文档效果显著。 例如,在DocVQA数据集上,TURBO V + OCR模型取得了87.4的高分,而纯文字模型的表现则稍显逊色。看来,GPT-4不仅能看懂文字,还能“看图说话”! 错误分析:GPT-4的难题 当然,GPT-4也不是完美无缺的。在一些情况下,模型对文档的理解会受到输入信息的影响。例如,当需要从图表或图像中提取信息时,OCR文字的辅助效果不如在纯文本情况下明显。这就像是让一个学霸去解一道偏题,即使聪明如他,也难免会栽跟头。 另外,研究还发现,模型在处理长文档时表现有所下降,这可能是因为模型对长文本的上下文信息利用不充分。就像是让你读一本厚厚的小说,然后问你某个细节,你可能也会一时找不到答案吧! [...]

“闭门造车”之多模态模型方案浅谈“闭门造车”之多模态模型方案浅谈

前言 大家好,今天我要和大家聊聊一个即便我闭门造车也能侃侃而谈的热门话题——多模态模型。近期Google的Gemini 1.5和OpenAI的Sora再次点燃了大家对多模态技术的热情。虽然我没有亲身实践过这些大模型,但凭借一些文本生成和图像生成的经验,我依然可以带大家一探究竟。 问题背景 多模态模型,简而言之,就是能同时处理图文混合的模型。有人可能会想,这不就是烧钱堆显卡,然后用Transformer“一把梭”搞定吗?其实没那么简单。文本生成一直有明确的方向——语言模型。而图像生成则没有这样清晰的路线,VAE、GAN、Flow、Diffusion等方法各显神通,原因就在于图像生成需要对连续变量进行概率建模,这比文本生成复杂得多。 离散之路 既然连续难搞,那能不能把图像离散化,套用文本生成的框架呢?答案是可以的,这也是目前的主流思路。图像本质上是离散的,比如一幅$n \times n$大小的RGB图像,就是$3n^2$个0~255的整数。我们可以通过VQ-VAE或者VQ-GAN这样的“图像Tokenizer”进行离散化,然后用文本生成的方式处理这些离散的图像Token。 压缩损失 虽然听起来很美好,但图像Tokenizer有一个大问题——信息损失。为了提高生成速度,通常会对图像进行高度压缩,这导致图像细节严重缺失。参考SEED的重构效果,虽然整体语义保持,但细节完全不同。无损压缩是理想状态,但目前的技术还达不到这个水平。 扩散模型 面对信息损失的问题,如果限定无损压缩,那么扩散模型是一个不错的选择。扩散模型通过将标准高斯分布映射为目标分布,有足够的熵源来保证生成效果。相比之下,Flow模型虽然设计上可逆,但效果上限不如扩散模型。因此,扩散模型成为了图像生成的首选。 Patch输入 一个大胆的想法是直接以原始图像的Patch作为输入,用Transformer进行处理。这样可以避免特征间的孤立问题。实验表明,这种做法是可行的,虽然训练步数较多,但在多模态大模型训练中的步数本身就很大,所以这不算大问题。 文章小结 本文介绍了一种多模态模型的设计构思,即直接以原始图像的Patch作为图像输入,文本部分常规预测下一个Token,图像部分用加噪图像重构原图。这种组合能够以最保真的方式实现多模态生成。虽然这只是我闭门造车的一些想法,但希望能给大家带来一些启发。 参考文献 苏剑林. (Feb. 21, 2024). 《“闭门造车”之多模态模型方案浅谈》[Blog post]. Retrieved from 科学空间 希望大家喜欢这篇文章,欢迎分享和讨论! [...]

以蒸馏的名义:“从去噪自编码器到生成模型”重现江湖以蒸馏的名义:“从去噪自编码器到生成模型”重现江湖

前言 今天我们要聊的,是一篇名为《Score identity Distillation: Exponentially Fast Distillation of Pretrained Diffusion Models for One-Step Generation》的论文。顾名思义,这篇论文探讨了如何更快、更好地蒸馏扩散模型。即便你对蒸馏一无所知,看到这里也不必担心,咱们一步步来。 蒸馏模型:从繁到简的艺术 常规蒸馏步骤 蒸馏的常规步骤是什么呢?简单来说,就是随机采样大量输入,然后用扩散模型生成相应的输出,用这些输入输出作为训练数据对,来监督训练一个新模型。但是,这种方法需要教师模型迭代多次(比如1000次)才能生成高质量输出,费时费力,还容易造成效果损失。有没有更高效的方法呢? Score Identity Distillation(SiD) 这篇论文提出了一种名为“Score identity Distillation(SiD)”的方法。虽然名字高大上,但其实思路很简单:它利用了一些恒等式来设计和推导整个框架。不过,这些恒等式本身并不新,名字只是为了显得高端而已。 重现江湖:从去噪自编码器到生成模型 初级形式 假设我们有一个训练好的教师扩散模型,它需要多步采样才能生成高质量图片。我们的目标是训练一个单步采样的学生模型,即一个类似GAN的生成器,只需输入噪声就能生成图像。如果我们有大量的输入输出对,那么直接监督训练就可以了,但如果没有呢? SiD采用了一个看似绕但很聪明的思路:如果学生模型生成的数据分布和目标分布很相似,那么用学生模型生成的数据集去训练一个扩散模型,它也应该和教师模型相似。 点睛之笔 谈到GAN,有些人可能会“闻之色变”,因为它们容易训崩。但SiD提出了一个有效的解决方案:通过恒等变换,尽量消除优化目标对某些变量的依赖,使得训练更加稳定。 恒等变换 [...]

数字版“疯牛病”:生成模型的自噬之路数字版“疯牛病”:生成模型的自噬之路

引言 众所周知,不管是文本还是视觉领域,各种生成模型正在以无法阻挡的势头“肆虐”互联网。虽然大家都明白,实现真正的通用人工智能(AGI)还有很长的路要走,但这并不妨碍人们越来越频繁地利用生成模型来创作和分享内容。君不见,很多网络文章已经配上了Stable Diffusion模型生成的插图;君不见,很多新闻风格已经越来越显现出ChatGPT的影子。看似无害的这种趋势,正悄然引发了一个问题:我们是否应该对互联网上充斥的生成模型数据保持警惕? 近期发表的论文《Self-Consuming Generative Models Go MAD》揭示了一种令人担忧的可能性,那就是生成模型正在互联网上的无节制扩张,可能会导致一场数字版的“疯牛病”疫情。本文将带您一起学习这篇论文,探讨其可能带来的影响。 “食自己” 一方面,人们使用生成模型的频率越来越高,将会导致互联网上由生成模型创作的内容越来越多;另一方面,生成模型也在更新迭代,其所用的数据也是从互联网爬取的。可以想像,后续的训练集中由生成模型创作的部分占比将会越来越高。换句话说,后面的每一代模型迭代时可能都没有足够多的新鲜数据,纯粹是用自己生产的数据来训练,用广东话说就是“食自己”,这将导致模型的质量或者多样性越来越差,原论文称之为“模型自噬紊乱(Model Autophagy Disorder,MAD)”。 无独有偶,生物学上也曾出现了类似的例子。牛是草食动物,然而,一些畜牧业者为了增强其营养供应,将其他牛的残骸(包括大脑)粉碎并混入饲料中。这在当时看起来是一个机智的做法,但未曾想到最后导致了“疯牛症”的出现和大规模传播。这一事例说明,长期的“食自己”可能会导致有害因素累积在生物体内,一旦达到一定程度,甚至可能触发灾难性的疾病。 因此,我们同样需要反思生成模型的“肆虐”是否会在互联网上引发另一场“疯牛症”——这不仅可能导致信息的同质化,使得各种内容开始变得千篇一律,缺乏原创性和多样性,还有可能引发一系列无法预见的问题。 降多样性 可能有读者会产生疑问:生成模型不就是对真实数据分布的模拟吗?即便连续地使用生成模型的数据进行迭代训练,应该只是在重复呈现真实的数据分布,怎么会导致多样性的丧失呢? 这其中的原因是多方面的。首先,训练生成模型的数据往往并非直接取自真实分布,而是经过人为的加工处理,比如去噪、规范化和对齐。经过加工后,训练集就已经丧失了部分多样性。例如,我们之所以能观察到很多新闻报道或知乎回答都有一股ChatGPT的味道,并非是因为内容本身,而是因为它们的格式与ChatGPT的相似性,这就说明ChatGPT的训练数据和输出结果的风格都比较明显且局限。再比如,为了降低图像生成模型的训练难度,我们通常需要对图像进行对齐处理,如在训练人脸生成模型时,常常需要将所有人脸的眼睛对齐到同一位置,这些操作也导致了多样性的丧失。 此外,还有一个很关键的因素是,由于生成模型本身或者训练技巧等限制,每个生成模型都无法做到完美,此时我们通常会主动地引入一些牺牲多样性来提高生成质量的技巧。比如,对于GAN、Flow等生成模型,我们会选择降低采样噪声的方差,以获得质量更高的生成结果,这就是所谓的截断技巧或退火技巧。另外,如《生成扩散模型漫谈(九):条件控制生成结果》所述,在扩散模型中我们通常引入条件信息以控制输出结果,不管是Classifier-Guidance还是Classifier-Free方案,额外条件的引入也会限制生成结果的多样性。总而言之,在生成模型不尽完美时,我们在平衡质量与多样性过程中,就主动地放弃了部分多样性。 正态分布:简单却深刻的例子 为了更深刻地认识到这种现象,我们接下来将探讨一些具体的例子。作为开始,我们首先考虑的是正态分布,因为它足够简单,所以求解和分析都更加清晰。但后面我们可以观察到,结果已经足够有代表性了。 假设真实分布是多元正态分布 N(μ0, Σ0),我们用来建模的分布也是正态分布 N(μ, Σ),那么训练模型的过程,就是从训练集里边估计均值向量 μ 和协方差矩阵 Σ。接下来我们假设每一代生成模型训练时,都只用到上一代生成模型创作的数据,这是比较极端的假设,但不可否认当生成模型进一步普及时,这个假设越来越接近成立。 在这些假设下,我们从 t-1 [...]

梯度流:从数学到魔法的奇幻旅程梯度流:从数学到魔法的奇幻旅程

导言:梯度流的神奇世界 在数学和机器学习的广袤世界中,有一个神秘的概念被称为“梯度流(Gradient Flow)”。如果你对梯度下降法有一定了解,那么你应该知道它是寻找函数最小值的强大工具。而梯度流,则是将这个寻找最小值的过程中的各个点连接起来,形成一条随时间变化的轨迹。本文将带你深入探讨这个奇妙的概念,并进一步扩展到概率空间,揭示出“Wasserstein梯度流”的神秘面纱。 梯度下降:从山顶到山谷的滑梯 1.1 梯度下降的基本原理 假设我们站在一座山顶,想要找到最低谷的那一点。为了实现这个目标,我们可以使用梯度下降法。这个方法的核心在于,我们总是沿着当前点的负梯度方向前进,因为负梯度方向是局部下降最快的方向。具体的迭代公式如下: 在这个公式中,xt表示当前的位置,α是学习率,∇xf(xt)是函数在xt点的梯度。如果函数f(x)是凸的,梯度下降通常能够找到最小值。即使函数不是凸的,梯度下降也能让我们接近一个极小值点。 1.2 梯度流的定义 如果我们将学习率α记作Δt,并考虑当Δt趋近于0时的极限情况,那么梯度下降的迭代公式将变为一个常微分方程(ODE): 求解这个ODE得到的轨迹,就是所谓的“梯度流”。换句话说,梯度流是梯度下降在寻找最小值过程中的轨迹。 最速方向:为什么要选择梯度下降 2.1 局部最快下降方向 为什么梯度下降法如此受欢迎?一个常见的说法是“梯度的负方向是局部下降最快的方向”。这个说法虽然没错,但有些不够严谨。因为“最快”涉及到定量比较,只有先确定比较的指标,才能确定“最”的结果。 2.2 约束优化视角 在欧氏空间中,梯度的负方向是局部下降最快的方向。然而,如果我们换一个模长的定义,或者换一个约束条件,结果可能就会不同。因此,从优化的角度来看,梯度下降法对应的优化目标是: 这意味着我们将约束条件转化为一个惩罚项,从而简化了优化过程。 泛函与概率空间:从函数到密度函数 3.1 泛函的引入 普通的多元函数输入一个向量,输出一个标量。而泛函则是输入一个函数,输出一个标量。例如,定积分运算: 在这里,I[f]就是一个泛函。我们将关注的泛函定义域为全体概率密度函数的集合,即研究输入一个概率密度、输出一个标量的泛函。 3.2 Wasserstein梯度流的引入 假设我们有一个泛函F[q],想要计算它的最小值。模仿梯度下降的思路,我们可以沿着它的负方向进行迭代。对于概率分布来说,性态比较好的距离是Wasserstein距离。我们可以将欧氏距离替换为Wasserstein距离,最终得到: 这就是“Wasserstein梯度流”,其中δF[q]/δq是F[q]的变分导数。 应用与示例:从理论到实践 [...]

梯度流与Wasserstein梯度流:从山顶滑雪到概率风景线梯度流与Wasserstein梯度流:从山顶滑雪到概率风景线

大家好!今天我们要聊一聊一个有趣的概念,叫做“梯度流(Gradient Flow)”。别紧张,这不是物理课,而是数学和机器学习的世界。简单来说,梯度流就是我们用梯度下降法寻找最小值的过程中,每个点连成的一条轨迹,就像你在山顶滑雪,每个滑下的轨迹都是梯度流。在这篇文章的后半部分,我们将探讨如何将梯度流的概念扩展到概率空间,变成“Wasserstein梯度流”。这将为我们理解连续性方程和Fokker-Planck方程等内容提供一个全新的视角。 梯度下降:从山顶到山谷 假设我们要寻找一个光滑函数的最小值。常见的做法是梯度下降(Gradient Descent),就像从山顶滑雪一样,沿着山坡的斜度(即梯度)往下滑。如果这个山坡是光滑且凹的(数学术语叫凸的),那么你通常能顺利滑到山谷;如果山坡崎岖不平,你可能会卡在某个小山谷里,但能下滑到某个低谷也算不错了。 如果我们把滑雪的步长记为“Δt”,滑雪的轨迹记为“xt”,当步长趋近于0时,这个滑雪过程就变成了一条连续的轨迹,这条轨迹就是所谓的“梯度流”。这意味着,只要你沿着梯度方向滑动,即使步长很小,你总能往让目标函数值变小的方向前进。 最速方向:滑雪的最佳路线 为什么要用梯度下降?一个主流说法是“梯度的负方向是局部下降最快的方向”。这就好比在滑雪时,你选择坡度最大、速度最快的路线。然而,这个说法有点不严谨,因为没说明前提条件——在欧氏空间中,梯度的负方向才是局部下降最快的方向。如果换一种度量方式,结果可能就不一样了。 优化视角:从滑雪到滑翔机 我们还可以将梯度下降的目标推广到更复杂的优化场景中。比如,自然梯度下降(Natural Gradient Descent)使用的是KL散度作为正则项。想象一下,你不仅要从山顶滑到山谷,还要避开雪崩和岩石,这就需要更复杂的导航技巧。通过这种方式,我们可以得到更精确的轨迹。 泛函入门:从滑雪到概率风景线 “泛函”这个词听起来有点吓人,但其实它只是输入一个函数,输出一个标量的运算,比如定积分。我们可以将这个概念推广到概率密度函数的集合中,也就是说,输入一个概率密度函数,输出一个标量。 概率之流:从滑雪到漂流 假如我们有一个泛函F[q],想要计算它的最小值,那么可以模仿梯度下降的思路,沿着它的负方向进行迭代。在概率空间中,我们可以使用Wasserstein距离来替代欧氏距离,这样就得到了“Wasserstein梯度流”。 尽管求解这些数学公式可能有点复杂,但最终的结果是,我们可以通过这种方法来理解和求解连续性方程和Fokker-Planck方程。这就像是从滑雪转换成漂流,通过水流的方向来找到最优的路径。 总结:从山顶滑雪到概率漂流 今天,我们探讨了梯度流和Wasserstein梯度流的概念,从简单的梯度下降到复杂的概率空间优化。通过这种视角,我们不仅更好地理解了连续性方程和Fokker-Planck方程,还为未来的研究提供了新的思路和方向。 希望通过这篇文章,大家不仅学到了知识,还能感受到数学和机器学习的奇妙之处。就像滑雪和漂流一样,掌握了技巧,你就能在这片知识的海洋中自由穿梭。下次再见! [...]

朴素贝叶斯与注意力机制:一场“心有灵犀”的邂逅朴素贝叶斯与注意力机制:一场“心有灵犀”的邂逅

嘿,朋友们!今天我们要聊的可是AI界的两位“大明星”——朴素贝叶斯(Naive Bayes)和注意力机制(Attention)。这两位一个朴实无华,一个炫酷吊炸天,但你知道吗?它们之间其实有很多“不可告人”的秘密! 朴素贝叶斯:老实人的自白 先来认识一下朴素贝叶斯,这位老兄可是AI界的“老黄牛”,简简单单,踏踏实实。他的工作原理就像是你在餐厅点菜,完全按照菜单上的推荐组合来点。每道菜都有它自己的独立评分,然后你根据这些评分来决定哪道菜最可能是你喜欢的。 一般化的朴素贝叶斯:变身超级英雄 不过,老实人的日子久了,朴素贝叶斯也想来点儿新花样,于是他决定进行一次“大变身”。他学会了一种叫做“加权平均”的技术,不再是每道菜的评分都一样,而是根据餐厅老板的推荐来调整每道菜的权重。这样一来,他的推荐就显得更加聪明了。 注意力机制:时尚界的弄潮儿 接下来登场的是注意力机制,这位可是AI界的新锐潮人。他的理念是“要注意到每一个细节”。在他看来,每个词对当前词的影响力是不一样的,有的词可能只是打酱油的,有的词则是重头戏。于是,他发明了“注意力分数”,用来衡量每个词的重要性,然后根据这些分数进行加权平均。 当朴素贝叶斯遇上注意力机制 这时,朴素贝叶斯和注意力机制这两个大明星终于碰面了。朴素贝叶斯惊讶地发现,这个炫酷的注意力机制,竟然和自己有那么多相似之处!原来,注意力机制也是一种广义的朴素贝叶斯,只不过是通过更加灵活的加权平均,来捕捉词与词之间的复杂关系。 深度模型:层叠与残差的魔法 不过,单层的朴素贝叶斯和注意力机制能力有限,为了让自己变得更强大,他们决定学习一种叫做“层叠”的魔法。简单来说,就是把多个简单的模型叠加起来,形成一个超级复杂的模型。 在这个过程中,他们还学会了一种叫做“残差连接”的技巧。这就像是你在写文章的时候,既要保持文章的连贯性,又要突出重点。通过这种方式,模型在捕捉复杂关系的同时,也能保留一些简单的、直接的关系。 总结:一场“心有灵犀”的邂逅 今天,我们见证了朴素贝叶斯与注意力机制这两位大明星的“心有灵犀”时刻。通过这种视角,我们不仅更好地理解了注意力机制中的层叠与残差,还为未来的研究提供了新的思路和方向。 所以,朋友们,如果你对AI技术感兴趣,不妨多了解一下朴素贝叶斯和注意力机制这两位大明星。他们之间的“化学反应”一定会让你大开眼界! 希望通过这篇文章,大家不仅学到了知识,还能会心一笑。AI的世界其实并不枯燥,关键是要找到对的方式去探索。下次我们再来聊聊其他有趣的话题吧! [...]

Transformer升级之路:逆用Leaky ReRoPE解决推理成本问题Transformer升级之路:逆用Leaky ReRoPE解决推理成本问题

在上周的文章《Transformer升级之路:12、无限外推的ReRoPE?》中,我们介绍了ReRoPE和Leaky ReRoPE的创新方法。实验结果表明,它们在几乎不损失训练效果的情况下能够扩展LLM的Context长度,并且实现了“longer context, lower loss”的理想特性。尤其是ReRoPE,似乎表现出了无限的Context处理能力。然而,这些方法也带来了推理阶段的成本增加问题。本文将探讨一种新的解决方案:逆用Leaky ReRoPE。 回顾RoPE与Leaky ReRoPE RoPE与位置编码 RoPE(Rotary Position Embedding)形式上是一种绝对位置编码,但实际上它实现了相对位置编码。其对应的相对位置矩阵为: [latex][\left(\begin{array}{cccccccccc}0 & 1 & 2 & 3 & \cdots & L-2 & L-1\-1 & 0 & 1 & [...]

增大Tokenizer词表:LLM续写任务的新挑战与解决方案增大Tokenizer词表:LLM续写任务的新挑战与解决方案

语言模型(LLM)在自然语言处理中的应用越来越广泛,而通过增大Tokenizer的词表来提高压缩率,从而缩短串行长度、降低解码成本,是大家都喜闻乐见的事情。然而,这种方法在带来诸多优点的同时,也可能产生一些问题。本文将探讨增大词表后语言模型在续写任务中遇到的问题,并提出解决方案。 优劣分析 优点 缺点 续写问题 Armen Aghajanyan分享了一个典型的例子:在训练代码模型时使用超大词表,导致“import numpy as np”变成了一个token。当用户输入“import numpy”时,模型无法续写出“ as np”。这种现象在自然语言模型中也很常见。例如,“太阳能”和“太阳”都是独立的token时,用户输入“太阳”后,模型续写出的内容可能不符合用户的期望。 参考对策 虽然Armen Aghajanyan提到的问题确实存在,但笔者认为通过适当的处理,这个问题不仅可以解决,还能转化为增大词表的优点。以下是一个可行的解决方案: 基于词表的前缀搜索 假设用户输入了“广州的白云”,Tokenizer将其分为“广州/的/白云”。此时,如果直接将这三个词转换为id输入模型,模型可能无法续写出“广州/的/白云机场”等结果。因此,我们可以进行以下步骤: 这种方法不仅解决了Armen Aghajanyan所提到的问题,还能在词表压缩率高的情况下,一次性生成更多的字。特别地,回退操作只需在采样第一步进行,从第二步开始就不需要回退操作,计算量很少。 文章小结 本文介绍了增大词表后LLM在续写任务中可能出现的问题,并分享了参考的解决方案。通过结合基于LLM的续写和基于词表的前缀搜索,可以有效地解决续写问题,并将增大词表的缺点转化为优点。希望这些思路能为语言模型的进一步优化提供参考。 [...]