博客

  • 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文字的辅助效果不如在纯文本情况下明显。这就像是让一个学霸去解一道偏题,即使聪明如他,也难免会栽跟头。

    另外,研究还发现,模型在处理长文档时表现有所下降,这可能是因为模型对长文本的上下文信息利用不充分。就像是让你读一本厚厚的小说,然后问你某个细节,你可能也会一时找不到答案吧!

    限制与未来展望

    这项研究也指出了一些限制。例如,目前的分析仅限于模型在特定数据集上的表现,而没有考虑数据隐私、成本、法律合规等实际应用中的重要因素。此外,研究还没有对模型进行微调,这意味着实际应用中可能会有更好的表现。

    未来的研究方向包括如何更好地安排文本顺序、提高模型的置信度校准、以及探索多问答形式的问答系统。看来,GPT-4还有很大的进步空间,值得我们期待!

    总结

    总的来说,GPT-4在文档理解中的表现令人印象深刻。虽然在某些方面还有改进的空间,但它已经展示了强大的潜力。特别是在结合OCR文字和文档图像后,GPT-4 Vision Turbo模型的表现尤为出色。这为我们在文档处理和自动化方面提供了新的可能性。

    各位读者,下次再面对堆积如山的文档时,不妨试试GPT-4吧!


    参考文献:

    1. Borchmann, L. (2023). Notes on Applicability of GPT-4 to Document Understanding.
    2. Mathew, M. et al. (2020). Document Visual Question Answering Challenge 2020. arXiv preprint arXiv:2008.08899.
    3. Mathew, M. et al. (2022). InfographicVQA. In Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision.
    4. OpenAI. (2023). GPT-4. https://openai.com/research/gpt-4.

    Q: 这篇论文试图解决什么问题?

    A: 这篇论文主要针对的是文档理解(Document Understanding)领域中GPT-4系列模型的适用性和性能问题。文档理解是指将文档转换为有意义的信息,通常涉及到集成布局、非文本元素和文本样式所代表的线索。论文中提到,尽管文本只能模型在文档理解任务上难以取得令人满意的结果,但是GPT-4 Vision Turbo模型在输入中同时提供外部OCR引擎识别的文本和文档图像时表现良好。

    论文试图解决的具体问题包括:

    1. 评估GPT-4家族模型在文档理解领域的性能:作者对所有公开可用的GPT-4系列模型进行了评估,以了解它们在文档理解任务上的表现,并与专门为此目的开发的模型进行比较。
    2. 探索GPT-4模型在文档视觉问题回答(Document Visual Question Answering)上的表现:这是文档理解任务中的一种,作者选择这一任务进行评估,因为它既适合基于LLM的聊天助手,又可以通过自然语言提问或指定指令来请求文档中的每一条信息。
    3. 解决GPT-4模型在商业API中可实现的结果与报道结果之间的差异:作者提到,尽管GPT-4模型的新闻发布提到了在两个文档VQA数据集上的分数,但具体细节仍然未知,而且不清楚这些结果是否可以通过商业API实现。
    4. 分析GPT-4模型在处理长文档时的性能下降问题:论文中提到,对于长文档,GPT-4模型的性能显着下降。
    5. 探讨数据污染问题:作者还研究了GPT-4模型训练或测试数据集是否可能受到污染,这可能会影响模型性能的评估。
    6. 提出改进建议和未来研究方向:在论文的最后部分,作者提出了一些可能的改进领域,并对未来的研究提出了建议。

    总的来说,这篇论文试图提供一个详细的技术报告和可复现的评估程序,以填补现有知识与GPT-4模型在文档理解任务上性能之间的差距。

    Q: 有哪些相关研究?

    A: 论文中提到了多个与文档理解(Document Understanding)和视觉问题回答(Visual Question Answering, VQA)相关的研究和数据集。以下是一些主要的相关研究和数据集:

    1. DocVQA (Mathew et al., 2020): 这是一个文档视觉问题回答的数据集,专注于文本密集型文档。
    2. InfographicsVQA (Mathew et al., 2022): 专注于信息图表的视觉问题回答数据集。
    3. SlideVQA (Tanaka et al., 2023): 针对幻灯片文档的视觉问题回答数据集。
    4. DUDE (Van Landeghem et al., 2023): 文档理解数据集和评估,包含多种类型的问题和答案。
    5. Qwen-VL (Bai et al., 2023): 一个多模态视觉语言模型,用于理解、定位、文本阅读等任务。
    6. InternVL (Chen et al., 2023, 2024): 用于通用视觉语言任务的视觉基础模型。
    7. InstructDr (Tanaka et al., 2024): 针对文档理解的指令化数据集。
    8. GRAM (Blau et al., 2024): 用于多页文档视觉问题回答的全局推理模型。
    9. Tesseract OCR: 一个开源的光学字符识别引擎。
    10. Azure Cognitive Services: 微软提供的一系列认知服务,包括OCR功能。
    11. Amazon Textract: 亚马逊提供的文档文本检测和分析服务。

    这些研究和数据集为文档理解领域提供了丰富的资源,使得研究人员能够开发和评估处理文档图像和文本的模型。论文中对这些资源进行了评估和比较,以确定GPT-4系列模型在文档理解任务上的性能。

    Q: 论文如何解决这个问题?

    A: 论文通过以下步骤和方法解决文档理解领域中GPT-4模型的性能评估问题:

    1. 模型评估:作者对所有公开可用的GPT-4家族模型进行了评估,特别是关注了文档视觉问题回答(Document Visual Question Answering)这一子领域。
    2. 数据集选择:选择了DocVQA、InfographicsVQA、SlideVQA和DUDE等数据集,这些数据集覆盖了文档类型的全谱系,包括文本密集型和视觉密集型文档,以及多页文档。
    3. 实验设计:作者设计了一系列实验,包括最佳提示(prompt)的选择、图像分辨率的优化以及OCR(光学字符识别)引擎的比较。
    4. 性能比较:通过比较不同模型版本(如TURBO V、TURBO V + OCR、8K + OCR、32K + OCR等)在不同数据集上的性能,来评估它们在文档理解任务上的表现。
    5. 错误分析:利用数据集的诊断类别和元数据来分析模型性能,特别是根据输入和证据特征进行分析。
    6. 数据污染分析:研究了训练或测试数据集是否可能在GPT-4模型的训练数据中,从而影响性能评估的准确性。
    7. 局限性讨论:作者讨论了分析的局限性,如仅关注模型性能、数据集选择的合理性、未进行微调(finetuning)、OCR引擎的影响等。
    8. 未来研究方向:提出了未来研究的潜在领域,包括文本布局的重要性、置信度校准、多QA问题的处理等。
    9. 详细技术报告和复现性:与以往不公开的设置不同,作者提供了详细的技术报告和可复现的评估程序,确保了研究的透明度和可靠性。

    通过这些步骤,论文不仅评估了GPT-4模型在文档理解任务上的性能,还提供了深入的分析和对未来研究方向的建议。

    Q: 论文做了哪些实验?

    A: 论文中进行了一系列实验来评估GPT-4家族模型在文档理解领域的性能。以下是实验的主要步骤和内容:

    1. 数据集选择:选择了DocVQA、InfographicsVQA、SlideVQA和DUDE等数据集,以覆盖不同类型和特点的文档。
    2. 最佳提示(Prompt)确定:在验证集上对不同的提示进行了优化,以确定最佳的提示组合。这些提示旨在提高模型对问题的回答质量。
    3. 图像分辨率优化:研究了不同图像分辨率对模型性能的影响,以确定最佳的输入图像大小。
    4. OCR引擎比较:比较了Tesseract、Azure Cognitive Services和Amazon Textract等不同的OCR引擎,以确定哪个引擎在文本识别方面表现最佳。
    5. 模型版本比较:评估了不同版本的GPT-4模型,包括TURBO V、TURBO V + OCR、8K + OCR和32K + OCR等,以了解它们在文档理解任务上的表现。
    6. 错误分析:利用数据集的诊断类别和元数据,分析了模型在不同类型的输入和证据特征下的性能。
    7. 证据位置分析:研究了模型性能如何随着请求信息在文档中的位置而变化,以了解模型是否存在对输入文档开始或结束部分的偏好。
    8. 答案类型分析:分析了模型在处理不同类型的答案(如列表答案和不可回答问题)时的性能。
    9. 引导指令污染分析:通过在提示中加入特定数据集的名称,来检查模型性能是否因数据集名称的存在而受到影响,从而评估数据污染的可能性。
    10. 性能提升分析:研究了通过提供外部OCR引擎识别的文本作为输入的一部分,对GPT-4 Vision模型性能的影响。

    这些实验的目的是为了全面评估GPT-4模型在文档理解任务上的性能,并探索提高性能的不同方法和因素。通过这些实验,作者能够提供关于GPT-4模型在文档理解领域适用性的深入见解。

    Q: 有什么可以进一步探索的点?

    A: 根据论文内容,以下是一些可以进一步探索的点:

    1. 文本布局的重要性:研究不同OCR设置如何影响文本阅读顺序和完整性的保持,以及空间布局的理解。
    2. 置信度校准:评估和改进文档理解系统中置信度分数的校准,这对于业务流程自动化尤为重要。
    3. 多QA问题处理:探索如何同时从单个文档中提取多个值,这可能提高成本效率并潜在地提高答案质量。
    4. 不同输入文本表示和排列的影响:研究不同的文本输入表示和排列方式对模型性能的影响,特别是对于纯文本大型语言模型(LLMs)。
    5. 数据集选择的多样性:考虑不同的数据集选择对模型性能评估的影响,以及如何通过多样化的数据集来提高模型的泛化能力。
    6. 微调(Finetuning)的影响:研究在特定数据集上微调大型语言模型对性能的潜在提升。
    7. 零样本学习(Zero-shot learning)的优化:探索不同的提示(prompt)策略,以提高零样本性能。
    8. OCR质量对模型性能的影响:研究OCR引擎的不同输出如何影响模型的性能,并寻找提高OCR质量的方法。
    9. 第三方API的依赖性:研究如何减少对第三方API的依赖,以及如何确保模型在实际部署中的稳定性和一致性。
    10. 模型的“理解”能力:深入研究模型在文档处理中的“理解”能力,以及如何评估和提高这种能力。
    11. 模型的偏见和公平性:评估模型可能存在的偏见,并探索减少这些偏见的方法,以确保模型的公平性。
    12. 模型的可解释性和透明度:提高模型的可解释性,以便更好地理解其决策过程,并增加用户对模型输出的信任。

    这些探索点可以帮助研究者和开发者更好地理解和改进大型语言模型在文档理解任务上的性能,以及在实际应用中的可靠性和有效性。

    Q: 总结一下论文的主要内容

    A: 这篇论文的主要内容可以总结如下:

    1. 研究背景:论文探讨了GPT-4家族模型在文档理解领域的适用性,特别是在需要理解文本的空间布局和视觉线索的情况下。
    2. 文档理解定义:文档理解是指将文档转换成有意义的信息,通常需要集成布局、非文本元素和文本样式的线索。
    3. GPT-4家族模型:论文评估了不同版本的GPT-4模型,包括文本模型和能够处理图像输入的模型。
    4. 实验设计:作者选择了DocVQA、InfographicsVQA、SlideVQA和DUDE等数据集进行评估,并在验证集上对提示、图像分辨率和OCR引擎进行了优化。
    5. 性能评估:通过比较不同模型在各个数据集上的表现,发现结合视觉和文本信息的模型(如TURBO V + OCR)性能更优。
    6. 错误分析:分析了模型性能与输入文档表示信息的方式之间的关系,以及模型在不同证据位置和答案类型下的表现。
    7. 数据污染分析:探讨了训练或测试数据集可能在GPT-4模型训练数据中的情况,以及这可能对性能评估产生的影响。
    8. 局限性:论文讨论了研究的局限性,包括仅关注模型性能、数据集选择的合理性、未进行微调、OCR引擎的影响等。
    9. 未来研究方向:提出了未来研究的潜在领域,如文本布局的重要性、置信度校准、多QA问题处理等。
    10. 详细技术报告:与以往不公开的设置不同,作者提供了详细的技术报告和可复现的评估程序,确保了研究的透明度和可靠性。

    总的来说,这篇论文提供了对GPT-4家族模型在文档理解任务上性能的全面评估,并探讨了影响性能的多种因素,同时提出了未来研究的方向。

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

    前言

    大家好,今天我要和大家聊聊一个即便我闭门造车也能侃侃而谈的热门话题——多模态模型。近期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提出了一个有效的解决方案:通过恒等变换,尽量消除优化目标对某些变量的依赖,使得训练更加稳定。

    恒等变换

    具体来看,SiD通过一系列恒等变换,将优化目标简化为一个更易处理的形式。这些变换利用了概率密度定义和贝叶斯公式,使得训练过程更高效。

    实践中的挑战与解决方案

    训练中的坑

    虽然理论上SiD的方法看起来很美,但在实际操作中仍然存在一些挑战。例如,如何在不牺牲效果的前提下减少显存需求。论文提出了未来可以尝试对预训练模型加LoRA来进一步节省显存。

    延伸思考

    SiD的方法虽然已经很完善,但仍有改进空间。比如,是否可以进一步简化恒等变换,或者引入新的优化策略来提高训练效率。

    文章小结

    总的来说,SiD通过一系列精妙的恒等变换和优化策略,成功地将复杂的多步扩散模型蒸馏为单步生成模型。这不仅提高了生成效率,还减少了对训练数据和计算资源的需求。未来,随着更多改进和优化的引入,SiD有望在更加广泛的应用场景中展现其价值。


    参考文献

    苏剑林. (May. 01, 2024). 《以蒸馏的名义:“从去噪自编码器到生成模型”重现江湖 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/10085

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

    引言

    众所周知,不管是文本还是视觉领域,各种生成模型正在以无法阻挡的势头“肆虐”互联网。虽然大家都明白,实现真正的通用人工智能(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 代生成模型 N(μt-1, Σt-1) 中采样 n 个样本 x(1)t-1, x(2)t-1,⋯, x(n)t-1,来训练第 t 代的生成模型:

    μt = 1/n ∑_{i=1}^n x(i)t-1
    Σt = 1/(n-1) ∑_{i=1}^n (x(i)t-1 - μt)(x(i)t-1 - μt)^⊤

    注意,如果加上截断技巧,那么第 t 代的生成模型就是 N(μt, λΣt),其中 λ∈(0,1)。于是可以想象,每一代的方差(多样性)都将以 λ 的比率衰减下去,最后变成零(完全丧失多样性)。如果不使用截断技巧(即 λ=1)是不是就没事了?并不是。根据定义 μt = 1/n ∑_{i=1}^n x(i)t-1,由于 x(i)t-1 都是随机采样得到的,所以 μt 也是一个随机变量,根据正态分布的叠加性,它实际上服从:

    μt ∼ N(μt-1, 1/n Σt-1) ⇒ μt ∼ N(μ0, t/n Σ0)

    可以预见,当 t 足够大时,μt 本身就会明显偏离 μ0,这对应的是质量的崩溃,而不单单是多样性的降低。

    总的来说,截断技巧的引入,会大大加速多样性的丧失速度,而即便没有截断技巧,在长期有限样本的迭代训练中,生成分布也有可能明显偏离原始的真实分布。注意,正态分布这个例子所做的假设已经比一般的生成模型要弱得多,至少它的拟合能力是保证足够的,但这依然不可避免多样性衰减或者质量崩溃,而对于真实世界的数据和能力有限的生成模型来说,理论上只会更加糟糕。

    生成模型的实验验证

    对于实际的生成模型,理论分析难以进行,所以只能通过实验来探索结果了。原论文做了非常丰富的实验,结果基本上跟正态分布的结论一致,即如果加入截断技巧的话,多样性将会迅速丧失,即使没有截断技巧,经过反复迭代后的模型依然会不可避免地出现一些偏离。

    小结

    本文探讨了当各种生成模型大规模“肆虐”互联网时可能出现的后果。在生成模型反复用自己生成的数据进行更新迭代时,可能会导致信息严重同质化、丧失多样性的问题,类似于曾经因“牛吃牛”而出现的“疯牛病”。原论文通过理论分析和实验验证,揭示了生成模型在长期迭代中可能出现的“模型自噬紊乱(Model Autophagy Disorder,MAD)”现象。

    尽管生成模型为我们带来了许多便利和创新,但我们也需要警惕其潜在的风险。未来,我们或许需要更智能的数据筛选机制和更丰富的数据源来避免这种“食自己”的现象,从而确保生成模型的多样性和质量。

    参考文献

    希望本文能为您带来一些启发,帮助您更好地理解生成模型的潜在风险。如果您有任何疑问或建议,欢迎留言交流!


    生成模型的未来,或许不只是技术的进步,更是我们对其使用方式的深思熟虑。让我们共同期待一个更加多样化和创新的数字世界!

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

    导言:梯度流的神奇世界

    在数学和机器学习的广袤世界中,有一个神秘的概念被称为“梯度流(Gradient Flow)”。如果你对梯度下降法有一定了解,那么你应该知道它是寻找函数最小值的强大工具。而梯度流,则是将这个寻找最小值的过程中的各个点连接起来,形成一条随时间变化的轨迹。本文将带你深入探讨这个奇妙的概念,并进一步扩展到概率空间,揭示出“Wasserstein梯度流”的神秘面纱。

    梯度下降:从山顶到山谷的滑梯

    1.1 梯度下降的基本原理

    假设我们站在一座山顶,想要找到最低谷的那一点。为了实现这个目标,我们可以使用梯度下降法。这个方法的核心在于,我们总是沿着当前点的负梯度方向前进,因为负梯度方向是局部下降最快的方向。具体的迭代公式如下:

    xt+1 = xt − α∇xf(xt)

    在这个公式中,xt表示当前的位置,α是学习率,∇xf(xt)是函数在xt点的梯度。如果函数f(x)是凸的,梯度下降通常能够找到最小值。即使函数不是凸的,梯度下降也能让我们接近一个极小值点。

    1.2 梯度流的定义

    如果我们将学习率α记作Δt,并考虑当Δt趋近于0时的极限情况,那么梯度下降的迭代公式将变为一个常微分方程(ODE):

    dxt/dt = −∇xf(xt)

    求解这个ODE得到的轨迹,就是所谓的“梯度流”。换句话说,梯度流是梯度下降在寻找最小值过程中的轨迹。

    最速方向:为什么要选择梯度下降

    2.1 局部最快下降方向

    为什么梯度下降法如此受欢迎?一个常见的说法是“梯度的负方向是局部下降最快的方向”。这个说法虽然没错,但有些不够严谨。因为“最快”涉及到定量比较,只有先确定比较的指标,才能确定“最”的结果。

    2.2 约束优化视角

    在欧氏空间中,梯度的负方向是局部下降最快的方向。然而,如果我们换一个模长的定义,或者换一个约束条件,结果可能就会不同。因此,从优化的角度来看,梯度下降法对应的优化目标是:

    xt+1 = argminx ||x - xt||^2 / (2α) + f(x)

    这意味着我们将约束条件转化为一个惩罚项,从而简化了优化过程。

    泛函与概率空间:从函数到密度函数

    3.1 泛函的引入

    普通的多元函数输入一个向量,输出一个标量。而泛函则是输入一个函数,输出一个标量。例如,定积分运算:

    I[f] = ∫ba f(x) dx

    在这里,I[f]就是一个泛函。我们将关注的泛函定义域为全体概率密度函数的集合,即研究输入一个概率密度、输出一个标量的泛函。

    3.2 Wasserstein梯度流的引入

    假设我们有一个泛函F[q],想要计算它的最小值。模仿梯度下降的思路,我们可以沿着它的负方向进行迭代。对于概率分布来说,性态比较好的距离是Wasserstein距离。我们可以将欧氏距离替换为Wasserstein距离,最终得到:

    ∂qt(x)/∂t = ∇x ⋅ (qt(x) ∇x δF[qt(x)] / δqt(x))

    这就是“Wasserstein梯度流”,其中δF[q]/δqF[q]的变分导数。

    应用与示例:从理论到实践

    4.1 f散度的应用

    例如,对于f散度,我们可以得到:

    ∂qt(x)/∂t = ∇x ⋅ (qt(x) ∇x(f(rt(x)) − rt(x) f'(rt(x))))

    其中,rt(x) = p(x) / qt(x)。这一公式可以帮助我们通过ODE从分布qt中采样。

    4.2 逆KL散度的应用

    另一个简单的例子是逆KL散度,当我们使用负对数作为函数f时,得到:

    ∂qt(x)/∂t = -∇x ⋅ (qt(x) ∇x log(p(x) / qt(x)))

    这正好是一个Fokker-Planck方程,对应的随机微分方程(SDE)为:

    dx = ∇x log(p(x)) dt + √2 dw

    这意味着,如果我们知道log(p(x)),那么就可以用上式实现从p(x)中采样。

    文章小结

    本文介绍了从梯度下降法到梯度流的概念,并进一步扩展到概率空间,引入了Wasserstein梯度流的概念。我们讨论了这些概念与连续性方程、Fokker-Planck方程和ODE/SDE采样之间的联系。通过这些讨论,我们不仅揭示了数学优化中的一些核心原理,还展示了这些原理在概率密度函数优化中的应用。希望这次奇幻旅程让你对梯度流有了更深的理解!


    如果你对优化算法和深度学习有更多兴趣,可以参考以下资源:

    • 《从动力学角度看优化算法(一):从SGD到动量加速》
    • 《从动力学角度看优化算法(三):一个更整体的视角》
    • 《从Wasserstein距离、对偶理论到WGAN》

    愿你在数学与机器学习的世界中探索得愉快,发现更多的奇妙与乐趣!

  • 梯度流与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升级之路: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 & 2 & \cdots & L-3 & L-2\
    -2 & -1 & 0 & 1 & \cdots & L-4 & L-3\
    \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots\
    2-L & 3-L & 4-L & \cdots & -2 & -1 & 0\
    1-L & 2-L & 3-L & \cdots & -3 & -2 & -1\
    \end{array}\right)
    ][/latex]

    Leaky ReRoPE与窗口化处理

    为了在保留局域性的同时避免Long Context导致位置越界问题,Leaky ReRoPE将推理阶段的相对位置矩阵改为:

    [latex][
    \left(\begin{array}{cccccccccc}
    0 & 1 & 2 & \cdots & w-1 & w & \cdots & w+k & \cdots & w+L-1-wk\
    -1 & 0 & 1 & \cdots & w-2 & w-1 & \cdots & w+k-1 & \cdots & w+L-2-wk\
    \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots\
    -w+1 & -w+2 & -w+3 & \cdots & -1 & 0 & \cdots & k-1 & \cdots & L-2-wk\
    \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\
    \end{array}\right)
    ][/latex]

    其中,( w ) 是窗口宽度,( k ) 用来调节可处理的最大长度。

    ReRoPE的无限扩展能力

    ReRoPE直接取了 ( k \to \infty ) 的极限:

    [latex][
    \left(\begin{array}{cccccccccc}
    0 & 1 & 2 & \cdots & w-1 & w & \cdots & w & \cdots & w\
    -1 & 0 & 1 & \cdots & w-2 & w-1 & \cdots & w & \cdots & w\
    \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots\
    -w+1 & -w+2 & -w+3 & \cdots & -1 & 0 & \cdots & w & \cdots & w\
    \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\
    \end{array}\right)
    ][/latex]

    逆用Leaky ReRoPE:让训练阶段变慢,推理阶段变快

    为什么逆用?

    原本的ReRoPE和Leaky ReRoPE在推理阶段增加了计算成本。如果我们反过来在训练阶段使用Leaky ReRoPE,而在推理阶段使用常规的RoPE,能否解决这一问题呢?

    实验与结果

    我们进行了以下实验组合:“GAU + Deep Norm + Tiger + 语言模型”。在训练阶段使用 ( k=1/16, w=128 ) 的Leaky ReRoPE,在推理阶段使用正常的RoPE。测试结果如下:

    测试长度BaselineBaseline-lognNTK-RoPE-fixedNTK-RoPE-logn†-fixedNTK-RoPE-logn-fixedNTK-RoPE-mixedNTK-RoPE-logn†-mixedNTK-RoPE-logn-mixedReRoPE-w256ReRoPE-w256-logn†ReRoPE-w256-lognInvLeaky ReRoPE-w128-lognInvLeaky ReRoPE-w128-b8-lognHFWA512 (训练)
    训练49.41%49.40%49.41%49.41%49.40%49.41%49.41%49.40%49.41%49.41%49.40%49.38%49.62%48.70%
    4096(重复)24.17%24.60%51.86%55.94%62.85%53.09%59.11%68.91%77.90%82.40%85.12%82.25%81.15%80.84%
    4096(不重复)23.16%24.02%39.61%41.11%44.14%40.12%42.38%45.41%48.48%48.85%49.07%48.32%48.85%48.15%

    其中,( b8 ) 是指RoPE的频率底数从10000换成了80000。可以看到,“Leaky ReRoPE → RoPE”的InvLeaky ReRoPE虽然效果上不如“RoPE → ReRoPE/Leaky ReRoPE”,但依然胜过了HFWA,并且由于推理阶段是常规的RoPE,可以套用现成的加速技术,因此依然是有相当竞争力的。

    我们对 [latex]( k, w, b )[/latex] 等参数做了一些简单的调参,发现最优解基本上就是上述两个组合。具体来说:

    调参与训练速度

    • ( k ) 设置为“扩展倍数的2倍的倒数”
    • ( w ) 设置为训练长度的四分之一
    • ( b ) 可选乘以扩展倍数

    在上述实验中,模型参数量为1亿,训练长度为512,每1000步的训练时间从330秒增加到了350秒,增加不到10%。虽然这里有GAU的原因,因为GAU是单头的注意力,本身比多头注意力快。如果是多头注意力或者训练长度更长,增加幅度可能会更大,但估计不会超过50%,依然在可接受范围内。

    小结

    本文提出了Leaky ReRoPE的“逆用”方法,通过在训练阶段使用更大步长的Leaky ReRoPE,使得推理阶段可以退回常规的RoPE,从而保持推理速度不变。实验结果表明,这种方法依然具有相当的竞争力。未来的工作可以进一步优化参数设置,提升模型性能。


    希望这篇文章能够帮助您更好地理解逆用Leaky ReRoPE的方法及其优势。如果有任何疑问或建议,欢迎在评论区留言讨论。

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

    语言模型(LLM)在自然语言处理中的应用越来越广泛,而通过增大Tokenizer的词表来提高压缩率,从而缩短串行长度、降低解码成本,是大家都喜闻乐见的事情。然而,这种方法在带来诸多优点的同时,也可能产生一些问题。本文将探讨增大词表后语言模型在续写任务中遇到的问题,并提出解决方案。

    优劣分析

    优点

    1. 解码速度提升:由于LLM是自回归的,解码过程会随着序列长度的增加变得越来越慢。通过“增大词表 → 提高压缩率 → 缩短串行长度”,可以减少相同文本对应的tokens数量,从而减少解码步数,提升解码速度。
    2. 缓解Exposure Bias:语言模型的训练方式通常是Teacher Forcing,缩短串行长度能够缓解Teacher Forcing带来的Exposure Bias问题,从而可能提升模型效果。

    缺点

    1. 割裂字符联系:增大词表可能会割裂token与token之间在字符层面的联系,影响模型的泛化能力。例如,“太阳能”和“太阳”都是词表中的一个词时,模型可能不知道“太阳能”是由“太阳”和“能”组成,从而难以完成一些子词相关的任务。
    2. 续写问题:增大词表后,常见的命令或短语可能被视为单个token,导致模型在续写时无法正确生成。例如,“import numpy as np”被当作一个token,用户输入“import numpy”时,模型无法续写出“ as np”。

    续写问题

    Armen Aghajanyan分享了一个典型的例子:在训练代码模型时使用超大词表,导致“import numpy as np”变成了一个token。当用户输入“import numpy”时,模型无法续写出“ as np”。这种现象在自然语言模型中也很常见。例如,“太阳能”和“太阳”都是独立的token时,用户输入“太阳”后,模型续写出的内容可能不符合用户的期望。

    参考对策

    虽然Armen Aghajanyan提到的问题确实存在,但笔者认为通过适当的处理,这个问题不仅可以解决,还能转化为增大词表的优点。以下是一个可行的解决方案:

    基于词表的前缀搜索

    假设用户输入了“广州的白云”,Tokenizer将其分为“广州/的/白云”。此时,如果直接将这三个词转换为id输入模型,模型可能无法续写出“广州/的/白云机场”等结果。因此,我们可以进行以下步骤:

    1. 前缀搜索:对“白云”进行词表的前缀搜索,假设搜索结果为“白云”、“白云机场”、“白云山”、“白云路”四个词。
    2. 计算条件概率:用LLM计算以下条件概率:
      [latex][p(\text{白云}|\text{广州, 的})p(\text{白云机场}|\text{广州, 的})p(\text{白云山}|\text{广州, 的})p(\text{白云路}|\text{广州, 的})][/latex]
    3. 归一化与采样:将条件概率归一化后进行采样,决定续写内容。例如,采样结果为“白云机场”,则输出“机场”,并按照“广州/的/白云机场”进行续写。

    这种方法不仅解决了Armen Aghajanyan所提到的问题,还能在词表压缩率高的情况下,一次性生成更多的字。特别地,回退操作只需在采样第一步进行,从第二步开始就不需要回退操作,计算量很少。

    文章小结

    本文介绍了增大词表后LLM在续写任务中可能出现的问题,并分享了参考的解决方案。通过结合基于LLM的续写和基于词表的前缀搜索,可以有效地解决续写问题,并将增大词表的缺点转化为优点。希望这些思路能为语言模型的进一步优化提供参考。

  • Viterbi Sampling算法的改进与完善

    在自然语言处理领域,分词是一个至关重要的步骤。最近,一篇名为《随机分词浅探:从Viterbi Decoding到Viterbi Sampling》的文章中,作者提出了一种名为“Viterbi Sampling”的随机分词算法。本文将详细讨论该算法的改进,并从数学上证明其效果可以与Subword Regularization等价。

    问题分析

    在知乎的评论中,用户 @鹤舞 指出,当前的采样算法可能会在多次二选一的过程中“稀释”了部分方案的出现概率,导致原本分数最高的切分并不是以最高概率出现。

    例如,假设有三种切分方案,每种方案的得分都一样,理应每种方案的出现概率都是1/3。然而,Viterbi Sampling算法将多选一的过程拆分成多步的二选一,从而导致概率分布发生偏移。

    示例分析

    以单词“watching”为例,有三种切分方案:watch ing, wat ching, 和 w atching。按照Viterbi Sampling的操作,先在前两种方案中选择,概率均为1/2;然后再与第三种方案比较,概率依然为1/2。最终,前两种方案的出现概率为1/4,而第三种方案的出现概率变为了1/2。

    解决办法

    为了解决上述问题,可以采用“水塘采样(Reservoir sampling)”的算法。具体来说,每次进行二选一后,同时缓存累积概率,并在后续的二选一过程中使用累积概率进行比较。

    具体实现

    假设前两种切分方案的概率均为1/3,选择其中一种后,总的累积概率为2/3。接下来,新方案被选中的概率为1/3,而不是1/2。这保证了每种方案的出现概率均保持为1/3。

    在实际计算时,为避免指数爆炸问题,可以缓存对数形式的概率,并利用logsumexp函数避免溢出。

    Zlogi = logsumexp(Zlogi-1, αsi)

    相应的实现已经内置在bytepiece>=0.5.0中。

    完美采样的证明

    为了证明改进后的Viterbi Sampling算法是“完美采样”,我们需要回顾Viterbi Decoding的基本原理。Viterbi Decoding通过动态规划找出最优的分词方案,其子串也必须是对应子字节串的最优切分方案。

    数学推导

    通过动态规划,可以计算出每个位置的最优切分方案及其得分。而在Viterbi Sampling中,我们需要对所有切分方案进行采样,其采样概率应与得分成正比。

    Z(c1, c2, ..., cl) = ∑ Z(c1, ..., ck) * e^(α * s(ck+1, ..., cl))

    通过逐步计算累积权重Z,可以实现对所有切分方案的完美采样。

    递归式转换

    在实际计算中,使用对数形式的累积权重Zlog,并通过logsumexp函数进行累积计算。

    Zlog(c1, c2, ..., cl) = logsumexp(Zlog(c1, ..., ck) + α * s(ck+1, ..., cl))

    这样可以避免直接计算指数导致的溢出问题。

    文章小结

    本文通过详细分析和数学推导,完善了之前提出的Viterbi Sampling算法。改进后的算法不仅解决了概率“稀释”问题,而且在效果上与Subword Regularization等价,同时在使用效率上更具优势。

    通过这些改进,Viterbi Sampling算法在实际应用中将具备更高的可靠性和效率,为自然语言处理领域的分词任务提供了更优的解决方案。