ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Word2Vec (上)

Word2Vec (上) 碎碎语最近一直在想去学习NLP但是一直迟迟没有下手因为实在是不知道从哪里开始学习最后在朋友的推荐下看了cs224n前两节课英文课堂实在是折磨呀好在B站有对应的中文字幕。对word2vec有了自己的一些了解故在此留下自己学习过的痕迹因篇幅有限可能word2vec会分成上下上部分来讲完这其中会加入我个人的一些看法和间接同时也会借鉴大佬的博客中的一些内容。语言模型语言模型是通过学习语言规律根据上下文预测后续应该出现什么的一种模型。其本质是根据语言序列(按照一定顺序排列起来的一些语言单位语言单位在nlp中常指token也可理解为词或者字这里不做过多介绍)构造概率模型即某句话出现的概率。语言模型分为统计语言模型和神经语言模型。语言模型的通俗来讲就是挑选尽可能靠谱的句子返回给用户这其中的统计语言模型是依靠统计词出现的频率来预测后续内容而神经语言模型是依学习语言规律来预测后续内容。统计语言模型那什么是统计语言模型呢统计语言模型是指利用已有的语料中的统计信息估计出语言序列的概率分布从而计算一个句子出现的概率并可以预测下一个词。简单点来说就是根据已知计算句子概率的概率模型。计算句子概率的概率模型很多n-gram模型便是其中的一种。假设一个句子由n个词组成​那么这个句子出现的概率是一般来说语言模型都是为了让我们这个条件概率出现的可能性最大化但是呢随着我们上下文越来越长我们这个条件概率的计算变的会越来越困难因此我们就产生了著名的N-gram模型。N-gram模型提出了一个大胆的近视预测当前词时不需要知道所有的上下文只需要知道最近的几个词。这便是所谓的马尔可夫假设。当我们只能看到最近的两个词语是我们的N-gram模型就变成了Trigram3-gram当我们只需要考虑前一个词时就变成了Bigram2-gram。学到这里的时候我产生了一个疑问。语言模型通过最大化下一个 Token 的条件概率进行训练那么为什么条件概率较高的 Token 可以被认为是当前上下文下更合理的预测这种‘概率最大’与‘预测正确’之间是什么关系1.条件概率表示“在当前上下文下出现的可能性”首先条件概率表示的是在训练数据所反映的语言规律下给定当前上下文之后各个 Token 作为下一个 Token 出现的相对可能性。就比如假设当前的上下文是“今天的天气很”。模型需要预测下一个 Token它可能得到所以如果那么模型认为在上下文的预测中比更符合它所学习到的数据分布。2.为什么训练时要最大化这个概率假设真实训练文本是语言模型希望学习也就是给定前面的上下文真实的下一个 Token 应该具有较高的概率。因此训练时最大化这实际上就是最大似然估计Maximum Likelihood Estimation, MLE。等价地也就是最小化交叉熵损失所以如果模型预测的是真实 Token那么也就是说真实 Token 的概率越高训练损失越小这里的C表示的是真实文本。到了真正预测的时候假设上下文是C模型得到整个词表的概率分布如果我们采用贪心解码Greedy Decoding就选择概率最大的 Token因为从模型自己的概率分布来看概率最大的 Token 是它认为最可能出现的 Token。所以概率最大不是说这个 Token “一定正确”而是说在模型当前学到的概率分布中它是最可能成为真实下一个 Token 的候选。其实除了贪心解码还有别的解码方式例如Beam Search束搜索Random Sampling随机采样在这里就不过多的叙述了。3.概率最大 ≠ 一定正确假设真实答案是“今天天气非常冷。”但是模型给出的概率是那么模型按照最大概率原则会预测但真实 Token 是所以也就是说概率最大只是模型的最优判断不是真值保证。总结语言模型学习的并不是一个确定性的“正确答案”而是给定上下文条件下下一个 Token 的概率分布。训练时通过最大化真实 Token 的条件概率也就是最大化似然使模型学习训练数据中的语言规律。当给定新的上下文时模型会计算不同 Token 的条件概率。若采用贪心解码则选择条件概率最大的 Token因为在模型当前估计的概率分布下该 Token 是最可能出现的因此具有最高的期望预测准确率。但是概率最大并不意味着一定正确。因为语言本身具有不确定性而且模型学习到的概率分布只是对真实数据分布的近似。因此“概率最大”表示的是模型在当前概率分布下的最优预测而不是对真实答案的绝对保证。只有当模型能够较好地逼近真实条件概率分布时最大概率 Token 才能够在统计意义上对应最高的预测正确率。既然训练目标是最大化真实 Token 的概率为什么 ChatGPT 推理时不总是选择概率最高的 Token而是会使用 temperature、top-k、top-p 等采样方法后面学到gpt的时候也会讲解一下。N-gram同样有很多的局限性1.马尔可夫假设导致上下文有限N-gram的核心假设是但是问题是自然语言中一个词可能会依赖很久之前的信息如果我们的N很小那么我们的模型根本看不到那么远的上下文。2.N很大时数据稀疏Data Sparsity很严重当我们的N越大的时候一个具体的 N-gram 在训练语料中出现的次数就越少。例如我们的N为2时我们只需要统计两个词的组合但是当我们的N为5时我们就需要统计五元组出现的可能性N 越大一个具体的 N-gram 在训练语料中出现的次数就越少。甚至可能出现:最大似然估计3.参数规模会随着 N 爆炸增长假设我们的词表大小|V|10000那么理论上2-gramBigram的组合数最多为3-gramTrigram的组合数最多为所以随着N-gram中N的增加可能的N-gram数量呈指数级上升这会带来极大的存储和计算成本。虽然我们可以采取稀疏存储、剪枝等方法降低成本但问题依然存在。4.无法很好地理解语义N-gram本质上还是在统计哪些词在上下文中一起出现他并没有考虑到词与词之间的一个内在联系。因为N-gram本质上将我们的每个单词看作单独的一个词并没有考虑词与词之间的潜在联系就比如P(苹果|我喜欢吃)和P(香蕉|我喜欢吃)模型知道这些词在上下文中经常出现但是它很难学习到苹果和香蕉之间的关系这也是为什么我们后面会引入word embedding也是后来Word2Vec、神经网络语言模型等方法出现的重要原因之一。神经网络语言模型Neural Network Language Model, NNLM那什么是神经网络语言模型呢神经网络并不是直接“理解”上下文而是通过训练不断调整参数使得不同上下文能够产生不同的隐藏表示并利用这个表示预测下一个 Token。而不是和我们的统计语言模型一样单纯的统计共现词的频率进而预测。那神经网络是如何学习给定的上下文进而预测下一个token的呢神经网络的学习过程1.词变成向量神经网络不能直接处理文本所以需要我们将文本或者说token转换成向量这个过程就叫做embedding最初我们的embedding向量是随机初始化的在后续的学习过程中不断的去修改。例如“我” “喜欢” “吃”我们的第一步就是要将token转换成向量这个转化的过程就叫做embedding2.神经网络学习“上下文表示”我们经过上面的embedding过程之后我们就已经有了三个向量神经网络的作用就是将我们这些转化后的向量转化成一个能表示上下文的隐藏表示。这其中表示的是我们神经网络的参数我在后续的讲解中会涉及到。3.根据上下文表示预测下一个 Token有了h这个上下文的表示函数接下来我们就可以通过一个线性层这样计算后我们就可以得到接下来可能生成的每个token的分数logit其实就是神经网络给每个token的一个原始分数然后经过softmax函数将我们的所有token的分数logit转化成一个合法的概率分布。softmax这个函数很有意思soft本意是柔软的max本意又是最大值。而我们的softmax就是两者的中和一方面我们的softmax函数使用后很容易知道概率最大的那个tokenmax另一方面我们的softmax函数也不会舍弃掉那些概率的很低的tokensoft他俩一结合就变成我们的softmax函数了。softmax的公式:表示的是每个token的得分T温度系数现在不做过多叙述后面如果我会写LLM推理相关内容到时候再详细介绍。到这里我们的神经网络就完成了我们的下一个token的概率预测部分4.学习和反向传播在模型的最开始我不是说了随机化我们的token吗因此在模型开始学习的第一轮我们得到的神经网络预测往往也是随机概率。例如我喜欢吃 ——》汽车0.4苹果0.1香蕉0.1火车0.4很明显这个概率非常的逆天毕竟人不太可能喜欢吃汽车和火车吧这时候我们的训练数据就发挥它的作用了他会告诉我们的正确答案是什么然后我们的损失函数就会给我们的模型一定的惩罚。又因为我们的P(apple)的概率是0.1因此他的损失值会很大这时候我们的神经网络就会根据这个概率太低了而进行反向传播然后就会使用优化器进行参数更新就相当于我们人类做错题之后的复盘在经过过这次反向传播之后我们的模型就会开始变的更加聪明一些。这时候没有深度学习基础的孩子就会问哪什么是反向传播和优化器呀反向传播Backpropagation反向传播主要是解决我们Loss变大/变小到底和我们的模型中的哪些参数有关如果想要改变loss我们又该如何去调整我们的参数。假设模型里有参数最后我们会得到反向传播的过程就是对我们的Loss值计算偏导数算出来的这几个就叫做梯度那什么又是梯度呢梯度本质就是求导嘛所以说我们的梯度表示的就是我们的Loss对于参数的一个敏感程度也就是变化的快慢和变化的方向。优化器Gradient Descent梯度下降我认为是比较简单的一个优化器公式其中w模型参数LLoss梯度学习率Learning Rate反向传播计算梯度而我们的优化器使用梯度来对我们的参数进行更新Loss——反向传播——优化器——更新参数碎碎语断断续续写了两天其实仔细一看我仅仅写了word2vec的一些前置知识希望我的word2vec下可以完结这一主题。
返回列表