NLP Word Embeddings

embedded/2025/2/15 21:05:38/

Word representation

One-hot形式

在上一周介绍RNN类模型时,使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的,算法很难学习到单词之间的关系。

比如下面的例子,即使语言模型已经知道orange juice是常用组合词,但是却不容易泛化到知道apple juice。这主要是因为单词之间的内积是0向量。

因此我们可以用非One-hot的多维向量描述一个单词,单词之间的距离可以描述单词之间的相似度,这样可以让算法更快的学习到单词之间的联系。

多维向量形式

使用多维向量,向量每一维是一个浮点数,这样可以使用更少维度的dense向量表征单词。

1. 可以使用迁移学习的思想,预训练大量数据获取每个单词的embdding,或者直接从网络找到其他人训练好的模型获取Embedding。

2. 获取到Embdding之后可以再应用到你的任务当中,比如名字识别等模型,这是你的训练集可能是比较小的。

3. 如果你的训练集很大,也可以尝试fine-tune第一步中的预训练模型

单词之间的相似度

使用多维向量表征单词时,可以使用cos距离或者L2距离等来表征单词之间的相似度

Learning Word Embddings

在NLP最开始的时候,研究人员尝试用很复杂的模型来获取Word Embdding,但是后来大家发现可以用越来越简单的模型来获取并且效果很好,尤其是在大数据集下。该小节从复杂模型讲起,然后逐步简化。

早期模型

每次取数据集中句子中待预测词前面的4(超参)个单词,输入到模型中,模型输出层是softmax输出每个单词的可能性。

Word2Vec 之 skip-grams

原始论文中作者提供了Word2Vec的两个版本:skip-grams、CBow。

CBow是利用中间词周围的上下文预测中间词,有优点有缺点,不展开讲,这里只介绍skip-grams。

定义

首先介绍什么是skip-grams,skip-grams需要提供一个context单词和一个target单词,先选定context单词,然后在其前后k(超参)个相邻单词的窗口内,随机选取一个target单词组成一个pair

模型结构

输出层为词库大小个softmax分类单元

缺点

这个算法存在一些问题:

1. softmax在词库很大时计算成本很高,可以使用多层softmax降低计算量(后面的课程中有更优的解决方案,这里没展开),建立多层softmax树时,可以使用启发式算法优化(不展开),把常用词放在浅层,低频词放在深层,减少检索成本。

2. 如何选取context单词,如果正态分布选取会导致抽取的都是高频词,低频词很难被取出来,也需要用启发式算法抽样(不展开)。

Negative Sampling

定义

负采样是对原始skip-grams的优化,可以有效降低多类分类问题的计算量。

负采样是选取一个context单词,然后从其前后一定窗口内选取一个临近的target单词作为正样本,其标签是1;然后用同样的context单词,从词库随机选取k(超参)次target单词分别组成负样本,其标签是0。

小概率会抽到实际也是context单词附近的单词,因为是随机误差所以影响不大。

模型结构

跟skip-grams相比,模型的输出层将词库大小个softmax单元,替换为了词库大小个逻辑回归单元,并且在每次迭代中只需要更新跟正负样本相关的k+1个输入层的逻辑回归单元参数,大幅降低计算量。

如何进行负样本选取

既不是随机采样,也不是按照词频采样,作者用了一个经验公式(无法证明是最好的,但是现在都用的这个公式):

P(w_i)=\frac{f(w_i)^{\frac{3}{4}}}{\sum_{j=1}^{10000}f(w_j)^{\frac{3}{4}}}

GloVe

全称:Global Vectors for word representation。使用不如Word2Vec广泛。

定义

首先统计词库中每两个单词在训练集中一起出现的次数,然后输入context单词模型预测其跟target词出现次数并最小化两者之间的差值。

模型结构

在实际模型中,增加了一个权重系数经验公式f(x_{ij})用于对低频词提权,高频词降权。

\thetae分别是单词的context向量和target向量,分别为单词作为context单词时使用和作为target单词时使用,训练完成后可以使用\theta_w\frac{\theta_w+e_w}{2}作为最终的词向量。

偏置项存在的意义ChatGPT的解释如下

词向量的应用

Sentiment Classification

通过分析文本的情感表达来确定其情感倾向。在NLP中经常使用。

在有词向量的情况下,你可以使用中等大小的标注训练集来进行情感分类,而不需要大量标注数据集。

如下图可以将评价中的所有词向量相加或取平均作为输入预测分数,但是这样存在一个问题,无法理解上下文,比如左下角例子,good出现更多可能预测分较高,但实际是差评

进一步使用RNN模型逐次输入每个单词词向量,输出打分。

消除词向量偏见

以性别偏见为例,计算he/she、male/female这些词向量的差并计算平均值,找到性别差异向量;然后对于不应该跟性别关联的词如医生、婴儿看护在这个方向上移动到0坐标;然后对性别差异的反义词组在这个方向上移动为对称的。


http://www.ppmy.cn/embedded/162502.html

相关文章

3.【线性代数】——矩阵乘法和逆矩阵

三 矩阵乘法和逆矩阵 1. 矩阵乘法1.1 常规方法1.2 列向量组合1.3 行向量组合1.4 单行和单列的乘积和1.5 块乘法 2. 逆矩阵2.1 逆矩阵的定义2.2 奇异矩阵2.3 Gauss-Jordan 求逆矩阵2.3.1 求逆矩阵 ⟺ \Longleftrightarrow ⟺解方程组2.3.2 Gauss-Jordan求逆矩阵 1. 矩阵乘法 1.…

C++自研游戏引擎-碰撞检测组件-八叉树AABB检测算法实现

八叉树碰撞检测是一种在三维空间中高效处理物体碰撞检测的算法,其原理可以类比为一个管理三维空间物体的智能系统。这个示例包含两个部分:八叉树部分用于宏观检测,AABB用于微观检测。AABB可以更换为均值或节点检测来提高检测精度。 八叉树的…

2024 StoryDiffusion 文字/文字+图像----->视频

基于扩散模型的生成模型在生成长序列图像和视频时面临内容一致性的重大挑战,尤其是涉及复杂主题和细节的场景中,角色身份、服饰风格等元素难以保持连贯。传统方法通常依赖潜在空间的运动预测,但长视频生成时易出现不稳定性。针对这些问题&…

初学 mybatis

前言 回顾之前 不使用 mybatis 框架,我们是怎么通过Java 操作数据库的 "jdbc" 前提:使用maven 构建的项目 1 添加 关于jdbc 的依赖,以及辅助操作数据库的 commons-dubli jar包 截取 前后端项目 2 添加配置文件里面内容有&…

上下文编辑器在不同场景下的功能(含使用案例)

上下文编辑器(Context Editor)解释 上下文编辑器(Context Editor)通常指的是一种能够修改、优化或过滤上下文信息的工具或方法,以增强下游任务的表现,特别是在 检索增强生成(RAG)、问…

Webpack代码分割、分割策略性能优化详解

在前端面试中,Webpack 是一个常见的考察点,特别是关于性能优化、构建配置以及代码分割等方面的问题。以下是 Webpack 常见问题详解,包括 代码分割 相关的内容。 1. Webpack 基础概念 1.1 Webpack 是什么? Webpack 是一个前端构建工具,主要用于将项目中的各种资源(JavaS…

《Nuxt.js 实战:从放弃到入门》一、项目初始,图片尺寸缩放

环境准备 在开始之前,确保你的开发环境已经安装了以下工具: Node.js:建议安装最新的 LTS 版本,可以从 Node.js 官网 下载安装。npm 或 yarn:npm 会随着 Node.js 一起安装,yarn 可以通过 npm install -g y…

【Prometheus】prometheus黑盒监控balckbox全面解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…