首页 > 试题广场 >

实现一个简化版的 GPT-2 风格文本生成函数

[编程题]实现一个简化版的 GPT-2 风格文本生成函数
  • 热度指数:183 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

你的任务是用 Python 实现一个简化版的 GPT-2 风格文本生成函数。该函数将包含以下最小 GPT-2 架构的组件:

  • 词嵌入:将输入的词元映射到稠密的向量表示。
  • 位置嵌入:为词嵌入添加位置信息。
  • 多头注意力:关注序列的不同部分。
  • 前馈网络:通过稠密层处理注意力输出。
  • 层归一化:稳定训练过程。

该函数必须接受以下参数:

  • prompt:引导生成过程的初始文本。
  • 生成的词数量:指定要输出多少个词。
你的函数应输出生成的文本。
实现时需要注意以下细节:
  • 激活函数使用GELU: GELU(x) = 0.5 *x * (1 + tanh(√(2/π) * (x + 0.044715x^3)))
  • 词嵌入使用固定位置,由随机wpe给出
  • 多头注意力中,mask采用下三角矩阵: (1 - np.tri(x.shape[0], dtype=x.dtype)) * -1e10 ; 并且分数计算需要除以 sqrt(d_k)进行缩放
  • Transformer Block 的顺序是
  1. 输入先经过多头注意力层,再加残差。
  2. 接着经过前馈网络,再加残差。
  3. 每一步都有对应的层归一化
  • 输出词选择最大概率的输出

此外,利用辅助函数 load_encoder_hparams_and_params 来检索:

  • 一个虚拟编码器。
  • 模型超参数。
  • 模型参数。

输入描述:
第一行输入prompt,第二行输入生成的词数量。


输出描述:
输出生成的文本
示例1

输入

hello
6

输出

hello hello hello <UNK> <UNK> <UNK>

备注:
1.对应的输入、输出已给出,您只用实现核心功能函数即可。
2.支持numpy、scipy、pandas、scikit-learn库。

这道题你会答吗?花几分钟告诉大家答案吧!