1.回顾:自回归语言模型
1)文本序列的概率分布可分解为每个词基于其上文的条件概率的乘积,如下公式:
其中,𝑊_0:初始上下文单词序列
𝑇: 时间步
当生成EOS标签时,停止生成。
2)MindNLP/huggingface Transformers文本生成方法
- Greedy search
各时刻均选择概率最高的词作为当前输出词:
在上边图中,按照贪心搜索输出序列("The","nice","woman") 的条件概率为:0.5 x 0.4 = 0.2
缺点: 错过了隐藏在低概率词后面的高概率词,如:dog=0.5, has=0.9 ![image.png](attachment:image.png =600x600)
2.环境准备
安装以下程序包:
3.模型加载
4.Beam search
Beam search通过在每个时间步保留最可能的 num_beams 个词,并从中最终选择出概率最高的序列来降低丢失潜在的高概率序列的风险。如图以 num_beams=2 为例:
("The","dog","has") : 0.4 * 0.9 = 0.36
("The","nice","woman") : 0.5 * 0.4 = 0.20
优点:一定程度保留最优路径
缺点:1. 无法解决重复问题;2. 开放域生成效果差
例如,
缺点:1. 无法解决重复问题;2. 开放域生成效果差
5.n-gram 惩罚:
将出现过的候选词的概率设置为 0
设置no_repeat_ngram_size=2 ,任意 2-gram 不会出现两次
Notice: 实际文本生成需要重复出现
Sample
根据当前条件概率分布随机选择输出词𝑤_𝑡
优点:文本生成多样性高
缺点:生成文本不连续
6.TopK sample
选出概率最大的 K 个词,重新归一化,最后在归一化后的 K 个词中采样
将采样池限制为固定大小 K :
在分布比较尖锐的时候产生胡言乱语
在分布比较平坦的时候限制模型的创造力
7.Top-P sample
在累积概率超过概率 p 的最小单词集中进行采样,重新归一化
采样池可以根据下一个词的概率分布动态增加和减少
8.top_k_top_p