鹿鹿就是梦妍 發表於 2026-1-26 15:37:00

吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(六)情绪分类和词嵌入除偏

<p>此分类用于记录吴恩达深度学习课程的学习笔记,目前已完结,点击进入全集目录<br>
课程相关信息链接如下:</p>
<ol>
<li>原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai</li>
<li>github课程资料,含课件与笔记:吴恩达深度学习教学资料</li>
<li>课程配套练习(中英)与答案:吴恩达深度学习课后习题与答案</li>
</ol>
<p>本篇为第五课的第二周内容,2.2、2.9和2.10内容,同时也是本周理论部分的最后一篇。</p>
<hr>
<p>本周为第五课的第二周内容,与 CV 相对应的,这一课所有内容的中心只有一个:<strong>自然语言处理(Natural Language Processing,NLP)</strong>。<br>
应用在深度学习里,它是专门用来进行<strong>文本与序列信息建模</strong>的模型和技术,本质上是在全连接网络与统计语言模型基础上的一次“结构化特化”,也是人工智能中<strong>最贴近人类思维表达方式</strong>的重要研究方向之一。<br>
<strong>这一整节课同样涉及大量需要反复消化的内容,横跨机器学习、概率统计、线性代数以及语言学直觉。</strong><br>
语言不像图像那样“直观可见”,更多是抽象符号与上下文关系的组合,因此<strong>理解门槛反而更高</strong>。<br>
因此,我同样会尽量补足必要的背景知识,尽可能用比喻和实例降低理解难度。<br>
本周的内容关于词嵌入,是一种<strong>相对于独热编码,更能保留语义信息的文本编码方式</strong>。通过词嵌入,模型不再只是“记住”词本身,而是能够<strong>基于语义关系进行泛化</strong>,在一定程度上实现类似“<strong>举一反三</strong>”的效果。词嵌入是 NLP 领域中最重要的基础技术之一。</p>
<p>本篇的内容关于<strong>情绪分类和词嵌入除偏</strong>,是对本周内容的最后补充。</p>
<h2 id="1-词向量的使用">1. 词向量的使用</h2>
<p>在介绍完前面的内容后,你会发现,我们使用各种模型和技术,最终的目的都是为了得到可以合理刻画文本信息间语义关系的<strong>词向量</strong>。<br>
而一旦这些词向量被训练出来,它们的价值并不会随着训练任务的结束而消失,反而<strong>真正的用武之地才刚刚开始</strong>。</p>
<p>实际上,在词向量的使用中,<strong>最常见、也是最直接的方式,就是将训练好的词向量作为下游任务的输入表示。</strong><br>
在文本分类、情绪分析、问答系统等任务中,我们不再使用独热编码这种“只区分身份、不包含语义”的表示方式,而是通过查表的方式,将每个词映射为一个稠密的词向量,再送入分类器或序列模型中进行处理。<br>
也正是这种连续、可度量的语义空间,使得<strong>模型在还没有接触具体任务之前,就已经拥有了一定程度的语言理解能力。</strong><br>
而且,你会发现这其实是一种非常典型的<strong>迁移学习</strong>思想:<br>
词向量模型在大规模语料上学习到的是一种<strong>通用的语言结构与语义分布</strong>,而下游任务只需要在此基础上进行少量参数调整,就可以完成更具体的目标。</p>
<p>更重要的是, NLP 中对词向量的迁移学习和我们之前介绍的 CV 内容有所不同,在 CV 任务中,迁移效果往往高度依赖于任务之间的相似性,例如用自然图片上训练得到的模型参数去处理医学影像,效果未必理想。<br>
而在 NLP 领域中,由于语言本身具有极强的通用性,只要任务使用的是同一语言,<strong>将预训练词向量作为嵌入层矩阵的初始化方式,往往是一种“用了就不亏”的选择</strong>。<br>
最终,从模型结构上看,这相当于模型的第一层不再从完全随机的参数开始学习,而是直接站在了一个已经组织好语义结构的空间中,再去完成具体任务。<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152709307-555486151.png" alt="image.png" loading="lazy"></p>
<p>也正是在这样的背景下,NLP 的各种应用百花齐放,其中最经典的应用之一,就是下面要介绍的情绪分类。</p>
<h1 id="2-情绪分类sentiment-classification">2. 情绪分类(Sentiment Classification)</h1>
<h2 id="21-情绪分类原理">2.1 情绪分类原理</h2>
<p>情绪分类是自然语言处理领域中最早被系统研究、同时也最具代表性的任务之一。<br>
其基本形式并不复杂:<strong>给定一段文本,判断其情绪倾向,例如正面、负面,或更细粒度的多类别情绪。</strong><br>
简单举个例子:<br>
对于两条酒店评论 <strong>“拉完了”</strong> 和 <strong>“夯爆了”</strong>,我们可以在不同的情绪粒度下,对它们给出不同形式的分类结果。</p>
<ol>
<li><strong>正负二分类</strong>:在最粗粒度的情绪分类任务中,我们只关心文本所表达的整体态度是正面还是负面。
<ul>
<li>“拉完了” → <strong>负面情绪</strong></li>
<li>“夯爆了” → <strong>正面情绪</strong></li>
</ul>
</li>
</ol>
<p>在这一设定下,模型的目标非常明确:只需判断“喜欢”还是“不喜欢”,而<strong>不关心情绪强度或细节差异。</strong><br>
2. <strong>星级五分类</strong>:如果进一步提高情绪刻画的精细程度,就可以将任务扩展为多类别分类,例如常见的 <strong>1~5 星评分预测</strong>。<br>
- “拉完了” → ★☆☆☆☆<br>
- “夯爆了” → ★★★★★</p>
<p>在这一情况下,模型不仅需要识别情绪的正负,还需要理解<strong>情绪的强烈程度</strong>,相比二分类任务,五分类对语义表示的要求明显更高。<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152958597-1831761240.png" alt="image.png" loading="lazy"><br>
可以看出,<strong>情绪分类任务的核心难点并不在于模型结构本身,而在于如何让模型“理解”文本所蕴含的情绪语义</strong>。</p>
<p>而这恰恰正是词向量发挥作用的地方:<strong>只有当“拉完了”“夯爆了”这样的词语在向量空间中被映射到合理的位置,后续的分类模型才有可能做出稳定、可靠的判断。</strong><br>
而在句子中,情绪本身并不是由单个词独立决定的,而是由<strong>多个词在语义空间中的组合关系</strong>共同构成。<br>
同样举例来说明,比如:</p>
<ul>
<li>“好” 和 “棒” 在语义空间中彼此接近。</li>
<li>“糟糕” 和 “失望” 会聚集在另一片区域。</li>
</ul>
<p>因此,当文本被表示为一组词向量后,模型实际上是在判断:<strong>这些向量整体更靠近“正面情绪区域”,还是“负面情绪区域”。</strong><br>
这也是为什么,在情绪分类任务中,<strong>词向量的质量往往直接决定了模型的上限</strong>。</p>
<p>了解了基本原理后,我们来看看如何实现情绪分类。</p>
<h2 id="22-情绪分类-10-平均词向量输入分类器">2.2 情绪分类 1.0 :平均词向量输入分类器</h2>
<p>在最早期、也是最朴素的情绪分类实现中,我们并不会引入复杂的序列模型,而是采用一种<strong>几乎不关心词序</strong>的做法:<strong>将一句话中所有词的词向量取平均,作为整句文本的表示。</strong></p>
<p>具体来说,假设一句话由 <span class="math inline">\(n\)</span> 个词组成,其对应的词向量分别为 :<span class="math inline">\(\mathbf{w}_1, \mathbf{w}_2, \dots, \mathbf{w}_n\)</span>,那么句向量可以直接定义为:</p>
<p></p><div class="math display">\[\mathbf{s} = \frac{1}{n} \sum_{i=1}^{n} \mathbf{w}_i
\]</div><p></p><p>这个 <span class="math inline">\(\mathbf{s}\)</span> 就被视为整段文本在语义空间中的“位置”,随后只需要将它送入一个<strong>简单的分类器</strong>(如全连接层 + softmax),即可完成情绪预测。<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152137630-1144988396.png" alt="image.png" loading="lazy"><br>
这种方法理解起来很直观:<strong>这句话里,所有词语的“情绪方向”加起来,更偏向哪一边?</strong><br>
如果一句话中大多数词的向量都靠近“正面情绪区域”,那么平均后的结果自然也会偏向正面;反之亦然。</p>
<p>它的优点是实现简单,计算开销极低;不依赖复杂模型,对小数据集也较为友好,而且通过这种简单的方式也可以直观体现词向量质量对下游任务的影响。</p>
<p>但它的缺点非常突出,我们常说:<strong>语言是有顺序的</strong>,这种方法<strong>完全忽略了词序信息,只看孤立的语义方向的堆叠,便极有可能产生相应的误解</strong>。<br>
例如:“缺少好的服务,好的环境和好的餐食。”<br>
这句话很明显是负面评价,分类器却可能因为出现了很多“好”而将其判断为正面评价。</p>
<p>因此,<strong>平均词向量 + 分类器</strong> 只是情绪分类任务的入门解法,我们知道有这种方式即可。</p>
<h2 id="23-情绪分类-20-使用循环神经网络">2.3 情绪分类 2.0 :使用循环神经网络</h2>
<p>与直接取平均不同,RNN 会<strong>按顺序逐词读取文本</strong>,并在每一步将当前词的信息与历史上下文进行融合。<br>
而回顾之前介绍的语言模型内容就会发现,不同于我们之前演示使用的命名实体识别,情绪分类是在读取完整句信息后输出一个分类结果,它是一个<strong>多对一模型</strong>,这类模型反而更符合我们的直觉,来看它的传播过程:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152136651-365514513.png" alt="image.png" loading="lazy"><br>
对于一个词序列 <span class="math inline">\(w_1, w_2, \dots, w_n\)</span>,RNN 的核心计算可以抽象为:</p>
<p></p><div class="math display">\[\mathbf{a}_t = f(\mathbf{w}_t, \mathbf{a}_{t-1})
\]</div><p></p><p>其中,<span class="math inline">\(\mathbf{a}_t\)</span> 表示模型在读到第 <span class="math inline">\(t\)</span> 个词时,对“当前语义状态”的综合理解。<br>
我们使用最后一个隐藏状态 <span class="math inline">\(\mathbf{a}_n\)</span> 作为整句文本的表示,再将得到的句向量输入分类器进行预测,得到最终的分类结果。</p>
<p>这种方式带来的最大改变在于:<strong>情绪不再是词向量的简单叠加,而是一个随阅读过程逐步演化的结果。</strong></p>
<p>举例来说:</p>
<ul>
<li>在读到“好”的时候,模型的情绪倾向可能偏正。</li>
<li>但当随后读到“不”时,隐藏状态会被重新调整。</li>
<li>最终输出的表示能够体现“否定”对整体情绪的修正。</li>
</ul>
<p>因此,RNN 在对语义的理解能力上明显优于简单的平均向量方法。当然,这也带来了梯度问题和训练成本的提升。</p>
<p>情绪分类的相关技术同样在不断进步,如今,以 <strong>BERT</strong> 为代表的双向 Transformer 通过大规模语料预训练,能够捕获更精细的上下文语义关系,在情绪分类等判别任务上显著超越传统模型,而更前沿的做法是直接利用<strong>指令微调的大语言模型</strong>,通过 prompt 或少量样本即可完成情绪判断。<br>
情绪分类正逐步从“专用模型任务”内化为“通用语言理解能力”的自然体现。</p>
<p>下面,我们补充最后一部分内容:</p>
<h1 id="3-词嵌入除偏word-embedding-debiasing">3. 词嵌入除偏(Word Embedding Debiasing)</h1>
<p>我们知道,词向量并不是从真空中学到的,它们来源于真实语料。而真实语料,本身就不可避免地携带着各种<strong>社会偏见和统计偏向</strong>。<br>
由于词向量的训练目标是捕捉词与词的共现关系,如果某些刻板印象在语料中频繁出现,那么它们就会被“如实地”编码进向量空间中。<br>
例如,在大量文本中,如果:</p>
<ul>
<li>“医生” 、“工程师”更频繁地与男性词汇共现。</li>
<li>“护士” 、“保姆”更频繁地与女性词汇共现。</li>
</ul>
<p>那么训练出来的词向量空间中,就可能形成一条明显的“性别方向”,并在无意中强化这些关联。</p>
<p>从模型角度看,这种行为是<strong>完全合理的统计学习结果</strong>,但从应用角度看,这种偏见在情绪分析、招聘筛选、推荐系统等场景中,可能带来严重问题。</p>
<p><strong>这便是词嵌入除偏的目标:在尽量保留语义信息的前提下,削弱或移除特定维度上的偏见成分</strong>。</p>
<p>2016 年, 论文 Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings 中,首次对<strong>词嵌入中的社会偏见</strong>进行了清晰的建模,并提出了一套可操作的除偏方法。它的主要观点是:<strong>偏见并不是“到处都是”的,而是主要集中在某些可解释的方向上。</strong></p>
<p>我们分点来看看这一方法的实现逻辑:</p>
<h2 id="31-定义偏见方向bias-direction">3.1 定义偏见方向(Bias Direction)</h2>
<p>论文的第一步,是显式地定义什么是“偏见方向”。<br>
以性别偏见为例,我们并不凭主观判断去找偏见,而是构造一组<strong>成对的性别词</strong>,例如:</p>
<ul>
<li>(he, she)</li>
<li>(man, woman)</li>
<li>(king, queen)</li>
</ul>
<p><strong>对于每一组词对,都可以在词向量空间中计算其差向量。将这些差向量进行平均,便可得到一个代表“性别差异”的方向向量</strong>,就像这样:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126153405646-1690433377.png" alt="image" loading="lazy"><br>
假定词向量拟合度较高,那么对于这个方向就可以理解为:<strong>沿着这条方向移动,语义主要在“男性 ↔ 女性”之间变化,而与其他语义因素关系不大。</strong></p>
<p>这一步的意义在于将原本模糊、抽象的“偏见”问题,<strong>转化为向量空间中一个可操作的几何方向</strong>。,就像射击前需要先确定靶心一样,只有明确了偏见方向,后续才能有针对性地削弱或移除某些词在该方向上所携带的偏见成分。</p>
<h2 id="32-区分中性词与性别词">3.2 区分中性词与性别词</h2>
<p>同样以性别偏见为例:接下来,我们将词汇分为两类:</p>
<ol>
<li><strong>性别中性词</strong>:如 <em>doctor, nurse, homeworker</em>,它们不应天然带有性别信息。</li>
<li><strong>性别特定词</strong>:如 <em>man, woman, she, he</em>,要保留合理的性别信息。<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152958836-1340196476.png" alt="image.png" loading="lazy"></li>
</ol>
<p>注意,这样区分并不代表我们不对特定词进行处理,而是<strong>对不同类型的词采取不同策略</strong>:</p>
<ol>
<li>对语义上应当与性别无关的中性词,应<strong>移除</strong>其性别方向上偏见。</li>
<li>对本身就包含性别差异的词对,则在保留性别信息的前提下,强制其在性别维度上<strong>对称</strong>、在其他语义维度上对齐,从而避免偏见被不合理地放大。</li>
</ol>
<p>下面就来看看如何实现这些策略:</p>
<h2 id="33-硬除偏hard-debias">3.3 硬除偏(Hard Debias)</h2>
<p>其实并不难理解,首先,我们处理中心词,这一步我们称之为<strong>去投影(Neutralize):将中性词向量在性别方向上的分量直接移除,使其在该方向上的投影为 0。</strong><br>
就像这样:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152629903-530152228.png" alt="image.png" loading="lazy"><br>
通过这样调整词向量,让中性词在性别方向上的分量消失,自然就不会因为这个方向上的语义差异而产生偏见。</p>
<p>继续,我们处理特定词,而这部分我们称为<strong>等距化(Equalize):对于这类本应只在性别上不同的词对,强制它们在性别方向上的距离对称,而在其他语义维度上保持一致。</strong><br>
就像这样:<br>
<img src="https://img2024.cnblogs.com/blog/3708248/202601/3708248-20260126152647475-1295451046.png" alt="image.png" loading="lazy"><br>
这样做的道理很直观:对于“男”和“女”,在语义空间里,我们不希望出现“男只有一点点男性特征,而女则非常女性化”的不对称情况。<br>
<strong>如果特定词在性别方向上不对称,不仅会模糊性别边界,还可能降低词向量的整体质量。</strong><br>
通过等距化,特定词对在“性别以外”的语义上保持等价,但在性别方向上依然可以清晰区分,从而既消除偏见,又保留必要的性别信息。</p>
<p>此外,既然有硬除偏,自然也有<strong>软除偏</strong>,在明白了硬除偏后,软除偏便不难理解:<br>
简单来讲,<strong>软除偏只针对中性词</strong>,其处理逻辑和硬除偏也大体相同,不同的是<strong>软除偏将每类偏见中“让中性词在偏见方向上的分量最小化”的逻辑加入神经网络损失函数中作为一项进行迭代优化。</strong><br>
这种方法更符合我们在深度学习领域的直觉,实际上在现代技术中也有继承软除偏思想、更先进的词嵌入除偏方法,这里就不再专门展开了。</p>
<h1 id="4-总结">4. 总结</h1>
<table>
<thead>
<tr>
<th>概念</th>
<th>原理</th>
<th>理解</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>词向量使用</strong></td>
<td>将训练好的词向量作为下游任务输入,捕捉语义关系,支持迁移学习。</td>
<td>模型第一层不再从零开始,而是“站在已整理好的语义空间上”。</td>
</tr>
<tr>
<td><strong>情绪分类(Sentiment Classification)</strong></td>
<td>给定文本判断情绪倾向,可二分类(正/负)或多分类(如 1~5 星)。</td>
<td>文本中的词语向量整体靠近“正面区域”还是“负面区域”。</td>
</tr>
<tr>
<td><strong>平均词向量 + 分类器</strong></td>
<td>将句子中所有词向量取平均作为整句表示,再送入分类器。</td>
<td>词语的“情绪方向”堆叠,哪边多就偏向哪边。</td>
</tr>
<tr>
<td><strong>RNN 情绪分类</strong></td>
<td>按顺序逐词读取文本,将当前词与历史上下文融合,输出最后隐藏状态作为句向量。</td>
<td>情绪随着阅读过程逐步演化,如“好” → 正面,但遇到“不”被修正。</td>
</tr>
<tr>
<td><strong>词嵌入偏见问题</strong></td>
<td>词向量从真实语料中学习共现关系,容易捕捉社会偏见(如性别刻板印象)。</td>
<td>统计规律“如实反映”,但可能强化偏见。</td>
</tr>
<tr>
<td><strong>偏见方向(Bias Direction)</strong></td>
<td>构造成对词(he/she, man/woman),计算差向量并平均得到偏见方向。</td>
<td>在向量空间中,沿此方向语义主要在“男性 ↔ 女性”之间变化。</td>
</tr>
<tr>
<td><strong>区分中性词与特定词</strong></td>
<td>中性词移除偏见方向成分;特定词保持性别信息并等距化。</td>
<td>中性词去除偏见就像去掉不必要的色彩,特定词对保持对称,就像男女形象保持平衡。</td>
</tr>
<tr>
<td><strong>硬除偏(Hard Debias)</strong></td>
<td>对中性词去投影使性别方向为 0,对特定词做等距化保持对称。</td>
<td>用“刀子”切掉中性词性别成分,同时调整特定词对保持对称。</td>
</tr>
<tr>
<td><strong>软除偏(Soft Debias)</strong></td>
<td>只针对中性词,将“最小化偏见方向分量”的目标加入损失函数,通过迭代优化实现减弱偏见。</td>
<td>温和压低偏见方向,而不是完全切掉,保留语义空间结构。</td>
</tr>
</tbody>
</table><br><br>
来源:https://www.cnblogs.com/Goblinscholar/p/19533686
頁: [1]
查看完整版本: 吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(六)情绪分类和词嵌入除偏