从零开始构建一个语言模型中vocab_size(词汇表大小)的设定规则

        从零开始构建一个语言模型就要设计一个模型框架,其中要配置很多参数。在自然语言处理任务中,vocab_size(词汇表大小) 的设定是模型设计的关键参数之一,它直接影响模型的输入输出结构、计算效率和内存消耗。

        本文是在我前文的基础上讲解的:从零开始构建一个小型字符级语言模型的详细教程(基于Transformer架构)之一数据准备-CSDN博客

一、词汇表大小vocab_size

        vocab_size指的是词汇表的大小,也就是原始文本数据集中所有唯一字符的数量。如果是字符级别的模型,所以词汇表里的每个元素都是一个字符,比如字母、标点符号、空格等等。如下图1所示。

图1 字符映射表的示意图

        为什么一个参数要单独拿出来讲,应该它关系重大。以下是详细理由:

        (1vocab_size决定了嵌入层的输入维度,也就是有多少个不同的字符需要被映射。例如,如果vocab_size是50,这表示数据集中共有50种不同的字符,这可能包括26个英文字母(大小写)、标点符号、空格、换行符等。嵌入层就需要处理50个不同的字符,每个字符对应一个向量。

        (2vocab_size决定了模型输出层神经元数量,模型的最后一层通常是一个线性层,将隐藏层的输出映射到词汇表的大小,以便生成每个字符的概率分布。因此,vocab_size也决定了输出层的神经元数量,确保每个字符都有一个对应的概率值。

这段代码定义了一个 CBOW 模型的网络结构,其中: - `vocab_size` 是词汇表大小。 - `embd_size` 是词向量的维度。 - `context_size` 是上下文窗口的大小。 - `hidden_size` 是隐藏层的大小。 - `nn.Embedding(vocab_size, embd_size)` 定义了一个词向量嵌入层,用于将输入的词汇索引转换为对应的词向量。 - `nn.Linear(2*context_size*embd_size, hidden_size)` 定义了一个线性层,用于将多个词向量拼接成一个输入向量,并将其映射到隐藏层。 - `nn.Linear(hidden_size, vocab_size)` 定义了一个线性层,用于将隐藏层的输出映射到预测的词汇概率分布。 - `forward` 方法定义了模型的前向传播过程,其中: - `inputs` 是一个输入的上下文词汇索引列表,大小为 `(2*context_size,)`。 - `embedded` 是将输入的词汇索引转换为对应的词向量,并拼接成一个输入向量,大小为 `(1, 2*context_size*embd_size)`。 - `hid` 是将输入向量映射到隐藏层,并应用激活函数得到的隐藏层输出,大小为 `(1, hidden_size)`。 - `out` 是将隐藏层的输出映射到预测的词汇概率分布,大小为 `(1, vocab_size)`。 - `log_probs` 是将预测的词汇概率分布应用 softmax 函数,并取对数得到的预测结果,大小为 `(1, vocab_size)`。 - `extract` 方法定义了从 CBOW 模型中提取词向量的操作,其中: - `inputs` 是一个输入的词汇索引列表,大小为 `(2*context_size,)`。 - `embeds` 是将输入的词汇索引转换为对应的词向量,大小为 `(2*context_size, embd_size)`。 这个 CBOW 模型可以用于训练机器学习模型,使得模型能够根据上下文预测目标词汇,或者用于提取词汇的词向量表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搏博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值