241124_文本解码原理

devtools/2024/11/25 5:44:24/

241124_文本解码原理

一个文本序列的概率分布可以分解为每个词基于其上文的条件概率的乘积。

3ea6f75a4c105df8022a4ea68ff5189

Greedy search

就是每步都选择概率最大的,不会去考虑全局

image-20241124201326974

按照贪心搜索输出the nice woman 的概率就是0.5*0.4=0.2

这种方法简单,但也存在问题,比如错过了隐藏在较低概率词后面的高概率词,如has=0.9

Beam search

(图还用上面的)

比如设定num_beams=3,就是到每个节点保留概率最高的三个分支,然后进入分支,遇到分岔再次保留三个分支。最后计算到保留的所有概率,进行比较

使用这种方法就可以保留到上图的the dog has的语句。

一定程度上缓解了Gready search的弊端,但是依旧不完备。如果遇到极低概率后隐藏极高概率的分支,就保留不到。

实质上就是个剪枝。

缺点:无法解决重复问题(每次遇到相同的分支都会选择同样的结果,死循环无限生成同样的)。开放域生成效果差()。

解决重复问题的方法:

n-gram惩罚:将出现过的候选词的强行概率设置为0,过于简单粗暴,不合理。实际文本生成有重复出现的场景。

优化一点的方法就是不那么极端直接赋0,而是乘以一个小于1的系数,缩小其概率。

Sample

根据当前概率分布随机选择输出词。就是不看概率,直接随机选。生成文本的多样性确实高了,但是会产生“我认为意大利面就应该拌42号混凝土”的问题。

Temperature

有一定的随机性但不完全随机

image-20241124204634560

TopK sample

选出概率最大的K个词,重新归一化,最后在归一化后的K个词中采样

image-20241124205218246

尖锐指右侧,a和down的概率已经比较低了,但是还是在下限内,所以也会取到,造成胡言乱语

平坦指左侧,一刀切会切掉低一点点的那些单词

Top-P sample

在累积概率超过概率p的最小单词集中进行采样,重新归一化

image-20241124205538904

使用比例选择有效解决了上面采样方法的问题,在比较平坦的时候会尽可能取到更多的单词,在尖锐的时候取到最大的几个词。

Constrastive Search

image-20241124210419447

这个没太听明白,先记录

打卡截图:

image-20241124211240727


http://www.ppmy.cn/devtools/136758.html

相关文章

ubuntu 交叉编译arm架构的mysql

在 Ubuntu 上使用 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 交叉编译 MySQL demo 应用到 ARM 开发板,涉及多个步骤。以下是详细步骤,从安装交叉编译工具链,到编写和编译 MySQL demo 代码,并最终将其部署到 ARM 开发板。 设置交叉编译工具链 首先,确保已经安装了…

openssl颁发包含主题替代名的证书–SAN

原文地址:openssl颁发包含主题替代名的证书–SAN – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 在 X.509 证书中,commonName(CN)字段只能有一个值。如果让证书支持多个域名和IP地址,…

STM32-- keil 的option for target使用

keil版本号 1.device界面 如:stm32f103c8t6的工程,可以直接在device这里修改成stm32f103vct6,虽然引脚不一样,但是很多一样的地方,可以直接使用,有些不修改也可以下载程序。 2.target xtal的设置不起作用了…

CSS 样式入门:属性全知晓

CSS(层叠样式表)是一种用于控制网页样式和布局的语言。它包含了一系列属性,用于定义元素的外观和行为。下面将详细介绍一些常见的 CSS 属性,以及通过实例展示它们的使用方法和效果。 字体样式属性: font-family&…

Python安装出现严重错误的解决方法_0x80070643-安装时发生严重错误

使用这个软件MicrosoftProgram_Install_and_Uninstall.meta.diagcab把关于Python一个个组件全部删除,然后就能够重新安装Python了 修复阻止程序安装或删除的问题 - Microsoft 支持 这里下载

【JavaEE进阶】SpringBoot 快速上⼿

了解Maven,并配置国内源 使⽤SpringBoot创建⼀个项⽬, 输出HelloWorld 一、Maven 1.什么是Maven 官⽅对于Maven的描述: Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can man…

【Linux】内核驱动模块

Linux内核模块是一种特殊的内核组件,它们可以被动态地加载到正在运行的内核中以扩展其功能,或者在不需要时从内核中卸载。这种动态特性使得Linux内核能够保持精简,同时又可以根据需要加载不同的功能模块。本文将详细介绍Linux内核模块的相关知…

Web3的核心技术:区块链如何确保信息安全与共享

在互联网不断迭代的进程中,Web3被视为下一代互联网的核心发展方向,其目标是构建更加开放、安全、去中心化的数字生态。在这一过程中,区块链作为核心技术,为信息安全与共享提供了全新解决方案。本文将深入探讨区块链如何在Web3中实…