随笔分类 -  深度学习 / 动手学深度学习 / 自然语言处理:预训练

摘要:其实BERT预训练任务中,掩蔽语言模型才是最重要的,下一句预测这个任务造成不了什么影响(BERT的原始论文做了两个预训练任务,但后面有一个人只做了掩蔽语言模型,效果还更好,如下)。但是我们需要学到的就是,无论是什么任务,我们总是期望教会模型一点东西(比如下一句预测就是希望模型学会长距离的关系) 上图 阅读全文
posted @ 2025-03-21 14:13 最爱丁珰 阅读(45) 评论(0) 推荐(0)
摘要:注意,GPT只基于Transformer的解码器,没有基于编码器。GPT的主要任务是根据已经给了的句子预测下一个词(这本来就是语言模型干的事,不是说语言模型非要进行机器翻译的)。回忆一下,我们在训练Transformer的时候,解码器的部分也是有mask的(尽管我们输入的是一个完整的句子),所以解码 阅读全文
posted @ 2025-03-20 08:54 最爱丁珰 阅读(38) 评论(0) 推荐(0)
摘要:在词类比任务中,为什么用\(\text{vec}(c)+\text{vec}(b)-\text{vec}(a)\)来进行近似呢?以man,woman,son,daughter为例.\(\text{vec}(\text{son})-\text{vec}(\text{man})\)后,就在son中去除了 阅读全文
posted @ 2025-03-06 21:17 最爱丁珰 阅读(47) 评论(0) 推荐(0)
摘要:在层序softmax中,不是只有叶子节点才代表一个词元吗?那么为什么计算条件概率的时候要去看非叶子节点?非叶子节点代表什么?为什么非叶子节点有词向量?对此,deepseek的解释如下 在层序Softmax(Hierarchical Softmax)中,非叶子节点虽然不直接代表词元,但它们通过构建二叉 阅读全文
posted @ 2025-03-05 19:35 最爱丁珰 阅读(93) 评论(0) 推荐(0)
摘要:现在考虑BERT的输入。一般来说NLP里面的输入都是成对的,比如机器翻译,有一个源句子还有一个目标句子。那么这里如何让输入是两个句子呢?我们只用拼接起来就好了,如下 <cls>表示classification,sep表示句子分隔符(separation);Segment Embeddings就是用来 阅读全文
posted @ 2025-03-04 10:36 最爱丁珰 阅读(49) 评论(0) 推荐(0)
摘要:BERT的任务是构建一个通用的模型,那么在NLP里面,语言模型(看一些词,预测下一个词)显然是最通用的,所以我们将BERT训练成一个语言模型,即带掩码的语言模型。但是Transformer是双向的,而语言模型是单向的,这显然就不能直接训练,于是这就是我们带掩码的原因。<mask>就是我们要填写的词, 阅读全文
posted @ 2025-03-04 10:35 最爱丁珰 阅读(109) 评论(0) 推荐(0)
摘要:想想吴恩达讲的CV里面,复用其他网络的结构,只在最后一层加入一个全连接层,对这个全连接层进行微调,也就是如下过程 那么CV里面可以这么用,NLP里面当然也可以这么用,如下 我们只需要调整这个新增加的简单输出层即可 BERT说白了,就是只有编码器的Transformer 他有两个版本,见下 block 阅读全文
posted @ 2025-03-03 22:39 最爱丁珰 阅读(63) 评论(0) 推荐(0)
摘要:最后一段话各个句子的意思: ELMo将来自预训练的双向长短期记忆网络的所有中间层表示组合为输出表示:ELMo(Embeddings from Language Models)通过双向长短期记忆网络(BiLSTM)生成上下文敏感的词表示,其核心思想是结合双向LSTM所有层的中间表示,形成动态的词向量。 阅读全文
posted @ 2025-03-02 22:06 最爱丁珰 阅读(131) 评论(0) 推荐(0)
摘要:最后一段最后一句话的含义及示例说明: 核心问题:交叉熵损失在处理大型语料库中的罕见共现事件时,会赋予它们过高的权重,导致模型过度关注这些不常见的情况,从而影响整体性能。 具体解释 在跳元模型中,损失函数为: \[-\sum_{i \in V} \sum_{j \in V} x_{ij} \log q 阅读全文
posted @ 2025-03-02 20:39 最爱丁珰 阅读(80) 评论(0) 推荐(0)
摘要:跳元模型的似然函数选择为: \[\prod_{t=1}^T \prod_{-m \leq j \leq m, \, j \neq 0} P(w^{(t+j)} \mid w^{(t)}) \]而非其他形式,主要基于以下核心原因: 1. 模型目标的直接对应 跳元模型的核心目标是最大化给定中心词生成其上 阅读全文
posted @ 2025-03-02 14:59 最爱丁珰 阅读(120) 评论(0) 推荐(0)
摘要:' '.join(list(token))是将token中的每个元素用空格给连接起来。比如' '.join(['f', 'a', 's', 't', '_']) → 'f a s t _' split()函数的默认行为是按照任意空白字符(包括空格、制表符、换行符等)进行分割,并且会自动处理连续的空格 阅读全文
posted @ 2025-03-02 14:57 最爱丁珰 阅读(48) 评论(0) 推荐(0)
摘要:![image](https://img2024.cnblogs.com/blog/2490134/202503/2490134-20250301210633177-385056364.png) 阅读全文
posted @ 2025-03-01 21:06 最爱丁珰 阅读(11) 评论(0) 推荐(0)
摘要:首先来看看二元交叉熵的损失公式 然后再来看看nn.functional.binary_cross_entropy_with_logits的用法 然后来讲一下\(0.9352\)是怎么得出的(\(1.8462\)同理) 每个样本没有归一化的输出为[1.1, -2.2, 3.3, -4.4],标签分别为 阅读全文
posted @ 2025-03-01 20:41 最爱丁珰 阅读(19) 评论(0) 推荐(0)
摘要:一些本人的理解如下: 事件\(D|w_c,w_o\)的意思是以\(w_c\)作为中心词,\(w_o\)是否来自其上下文,若\(D=1\)则表示来自,否则表示不来自 式\((14.17)\)也比较好理解,两个词向量的内积可以衡量两个的相似程度(长度以及夹角) 文中“正样本的事件”指的是\(D=1\); 阅读全文
posted @ 2025-03-01 09:16 最爱丁珰 阅读(52) 评论(0) 推荐(0)
摘要:我们之前都是用独热编码表示单词的,可能会出现下面的问题 显然,对于第二个句子的空格,我们也应该填写"juice",但是目前没有任何的机制表明"apple"与"orange"的关系比"apple"与"man"等的关系更近,所以我们不一定填的出来 此时可以使用词嵌入,如下 绝对值大小表示相关性。此时一个 阅读全文
posted @ 2025-01-31 21:21 最爱丁珰 阅读(50) 评论(0) 推荐(0)