当前位置: 首页 > news >正文

词向量基础:从独热编码到分布式表示的演进

文章目录

    • 一、词向量概述
      • 1.1 词向量介绍
      • 1.2 对词向量的理解
    • 二、古典时代 - 离散表示
      • 2.1 独热编码
      • 2.2 核心思想
      • 2.3 详细步骤
      • 2.4 优点和缺点
    • 三、现代时代 - 分布式表示
      • 3.1 分布式表示的核心
      • 3.2 如何学习分布式表示? - Word2Vec
        • A. Skip-gram (跳元模型)
        • B. CBOW (连续词袋模型)
      • 3.3 分布式表示的优势
    • 四、总结对比与演进图
      • 4.1 总结对比
      • 4.2 演进流程

一、词向量概述

1.1 词向量介绍

词向量是自然语言处理(NLP)的核心技术,它将离散的单词转换为连续的稠密向量,使机器能够理解语义和语法关系。本文从最基础的独热编码(One-Hot Encoding)出发,逐步介绍其局限性,并阐述如何通过分布式表示(Distributed Representation)解决这些问题,最终演进到现代词向量模型(如Word2Vec、GloVe、FastText)。

1.2 对词向量的理解

想象一下,我们如何让计算机理解“国王”和“女王”这两个词?在计算机看来,它们都只是无意义的字符串。要让机器理解语言,我们首先需要将词语转换成它能处理的数学形式——向量。将词语表示为向量的过程,就是“词向量”或“词嵌入”的核心任务。
这个演进过程主要分为两个时代:

  1. 古典时代:离散表示
    • 核心思想: 每个词都是独一无二的、孤立的原子。
    • 代表技术: 独热编码
  2. 现代时代:分布式表示
    • 核心思想: 一个词的含义由它周围的词语决定(“词义由上下文界定”)。
    • 代表技术: Word2Vec, GloVe, FastText

下面,我们详细拆解这两个时代。

二、古典时代 - 离散表示

2.1 独热编码

独热编码是最直观、最简单的词向量表示方法。有以下特点:

  • 每个词表示为一个高维稀疏向量
  • 向量维度等于词汇表大小
  • 每个向量只有一个位置为1,其余为0
  • 无法体现词汇间的语义相似性

2.2 核心思想

在一个巨大的词典中,给每个词分配一个唯一的整数索引。然后,创建一个与词典长度相等的向量。对于某个词,其对应的索引位置为1,其余所有位置都为0。

2.3 详细步骤

假设我们有一个非常小的句子库(语料库):"我喜欢学习人工智能,人工智能很有趣。"
1. 构建词典:
首先,我们提取出所有不重复的词语,并给它们一个唯一的ID。
* 我: 1
* 喜欢: 2
* 学习: 3
* 人工智能: 4
* 很: 5
* 有趣: 6
* ,: 7 (忽略标点,这里仅为示例)
* 。: 8 (忽略标点,这里仅为示例)
我们的词典大小 V = 6

2. 创建向量:
向量的维度就是词典的大小 V。每个词的向量都是一个 V 维的向量。
* “我” 的向量:
[1, 0, 0, 0, 0, 0] (索引1的位置为1)
* “喜欢” 的向量:
[0, 1, 0, 0, 0, 0] (索引2的位置为1)
* “学习” 的向量:
[0, 0, 1, 0, 0, 0] (索引3的位置为1)
* “人工智能” 的向量:
[0, 0, 0, 1, 0, 0] (索引4的位置为1)

2.4 优点和缺点

1、优点

  • 简单直观: 非常容易理解和实现。
  • 信息无损: 在词典范围内,每个词的表示都是独一无二的,没有信息损失。

2、致命缺点

  1. 维度灾难:
    词典中有多少词,向量的维度就有多少。现代语料库的动辄是几十万甚至上百万的词汇量。这意味着每个词的向量都会是一个极其稀疏(绝大部分是0)且维度极高的向量。这会消耗巨大的存储空间,并给后续的机器学习模型带来巨大的计算负担。
  2. 语义鸿沟:
    这是独热编码最根本的缺陷。它完全无法表达词语之间的语义关系
    • 向量 [1, 0, 0, 0, 0, 0] (“我”) 和 [0, 1, 0, 0, 0, 0] (“喜欢”) 之间的夹角是90度。
    • 向量 [0, 1, 0, 0, 0, 0] (“喜欢”) 和 [0, 0, 1, 0, 0, 0] (“学习”) 之间的夹角也是90度。
    • 向量 [0, 0, 0, 1, 0, 0] (“人工智能”) 和 [0, 0, 0, 0, 1, 0] (“很”) 之间的夹角还是90度。
      在数学上,所有词向量都是正交的,它们之间没有任何“远近”或“相似”的概念。计算机无法从这种表示中学习到“国王”和“女王”比“国王”和“自行车”更相似”这样的常识。这对于需要理解语义的机器翻译任务来说是致命的。
      为了解决语义鸿沟,人们引入了词-文档矩阵,比如TF-IDF。它虽然考虑了词在文档中的频率,但本质上还是一种离散的、基于计数的表示,无法捕捉词语间的深层语义联系。

简单来说局限性如下:

  • 维度灾难:词汇表规模大时,向量维度极高
  • 语义鸿沟:任意两个词的余弦相似度都是0,无法衡量语义相似性
  • 存储效率低:高维稀疏向量占用大量存储空间

三、现代时代 - 分布式表示

为了克服独热编码的缺陷,分布式表示应运而生。它的核心思想源于著名的分布假说一个词的含义由它所处的上下文决定

“You shall know a word by the company it keeps.” (J.R. Firth, 1957)
“你通过一个词的‘伙伴’来认识它。”
这意味着,如果两个词在很多上下文中都出现,那么它们的含义就很相似。分布式表示就是将这个思想数学化。

3.1 分布式表示的核心

  • 低维稠密向量: 每个词不再由一个巨大的稀疏向量表示,而是由一个低维(例如50维、100维、300维)的稠密向量表示。这个向量的每一维都是一个浮点数,不再只有0和1。
  • 语义信息编码: 向量中的每个维度都没有直观的语义解释,但整个向量的方向和位置编码了该词的丰富语义信息。语义相近的词,其向量在向量空间中的距离也更近。
    一个绝佳的类比:
    想象一下一个由成千上万种调料构成的巨大空间。每种调料(词)都可以用一个包含“甜度”、“咸度”、“酸度”、“鲜度”等多个维度的向量来表示。
  • 的向量可能是 [高, 低, 低, 低]
  • 的向量可能是 [高, 低, 低, 低]
  • 的向量可能是 [低, 低, 高, 低]
    在这个空间里,盐和糖的距离很近,因为它们的“咸度”和“甜度”维度都很高。而盐和醋的距离就远。这个空间没有直接定义“甜味”,但“甜度”这个维度隐含地表达了它。这就是分布式表示的精髓:通过在多个潜在维度上的组合,来表达复杂的、抽象的概念。

简单来说,核心思想如下:

  • 用低维稠密向量表示词汇
  • 语义相似的词在向量空间中距离较近
  • 向量的每个维度都携带语义信息

主要优势如下:

  • 降维:通常使用几百维向量表示词汇
  • 语义捕获:能够捕获词汇间的语义和语法关系
  • 泛化能力:相似词共享相似的向量表示

3.2 如何学习分布式表示? - Word2Vec

Word2Vec是实现分布式表示最著名、最经典的方法,由Google在2013年提出。它通过一个巧妙的“预测任务”来学习词向量。主要有两种模型架构:

A. Skip-gram (跳元模型)

目标: 给定一个中心词,预测它周围的上下文词。
工作流程:

  1. 选择一个中心词: 在句子 "The quick brown fox jumps over the lazy dog" 中,我们选择中心词 "fox"
  2. 定义窗口大小: 假设窗口大小为2。
  3. 生成训练样本: 对于中心词 "fox",其上下文词是 ["quick", "brown", "jumps", "over"]
    • 训练样本对:(fox -> quick), (fox -> brown), (fox -> jumps), (fox -> over)
  4. 神经网络训练:
    • 输入层: 中心词 "fox" 的独热编码向量。
    • 隐藏层: 一个线性层,将输入的独热编码向量乘以一个巨大的权重矩阵 W。这个矩阵的就是我们想要学习的词向量!输入是 "fox" 的独热编码,相当于从 W 中选取了对应 "fox" 的那一行作为隐藏层的输出。这个输出就是 "fox" 的向量表示 v_fox
    • 输出层: 另一个线性层,将隐藏层的向量 v_fox 乘以另一个权重矩阵 W'。然后通过Softmax函数,计算出词典中每个词作为上下文词的概率。
    • 损失函数: 模型的目标是让正确的上下文词(如 "quick")的概率最大化。通过反向传播,不断调整权重矩阵 WW'。最终,W 中的每一行(即每个词的向量)都会因为预测任务而被优化,使其能很好地代表该词,并与其他词建立联系。
      训练完成后,我们只保留权重矩阵 W,它就是我们得到的词向量表。
B. CBOW (连续词袋模型)

目标: 给定上下文词,预测中心词。
工作流程:
还是用上面的例子和窗口大小2。

  1. 选择上下文词: 对于中心词 "fox",其上下文词是 ["quick", "brown", "jumps", "over"]
  2. 生成训练样本: 输入是上下文词,输出是中心词。
    • 训练样本对:(["quick", "brown", "jumps", "over"] -> fox)
  3. 神经网络训练:
    • 输入层: 上下文词("quick", "brown", "jumps", "over")的独热编码向量。通常会将这些向量的平均值或拼接作为隐藏层的输入。
    • 隐藏层: 同样是一个线性层,其权重矩阵 W代表了词向量。输入的平均向量与 W 相乘,得到隐藏层输出。
    • 输出层: 另一个线性层和Softmax,预测中心词是 "fox" 的概率。
      两种模型对比:
  • Skip-gram: 小型语料库上表现更好,因为它能更好地学习稀有词的表示。
  • CBOW: 训练速度更快,对高频词的表示效果更好。

3.3 分布式表示的优势

  1. 捕捉语义关系: 这是最大的优势。由于向量空间中的距离和角度代表了语义相似度,模型可以学习到类似 vector('国王') - vector('男人') + vector('女人') ≈ vector('女王') 这样的线性关系。
  2. 降维与泛化: 从百万维降到几百维,极大地节省了空间和计算资源。
  3. 处理泛化: 在训练时从未见过的词,只要其上下文是模型见过的,模型也能在一定程度上理解其含义。

四、总结对比与演进图

4.1 总结对比

特性独热编码分布式表示
核心思想词是孤立的原子词义由上下文决定
向量形式高维、稀疏、离散低维、稠密、连续
维度来源词典大小预设的超参数 (如300)
语义信息无,无法表达相似度丰富,向量距离=语义相似度
存储/计算极高,效率低较低,效率高
对未登录词无法处理无法处理 (但FastText可以)

4.2 演进流程

独热编码 (维度灾难, 语义鸿沟)

词-文档矩阵 (TF-IDF等, 仍无法捕捉深层语义)

分布式表示 (基于分布假说, 解决语义鸿沟)

Word2Vec (Skip-gram & CBOW, 实现分布式表示)

GloVe (全局矩阵分解 + 上下文窗口, 结合了全局统计和局部上下文)

FastText (引入子词信息, 解决了未登录词问题)

这个演进过程,就是NLP领域从“数豆子”(统计词频)到“理解世界”(捕捉语义)的伟大跨越。掌握了从独热编码到分布式表示的演进,你就理解了现代NLP的灵魂。

http://www.dtcms.com/a/323324.html

相关文章:

  • BeanDefinition 与 Bean 生命周期(面试高频考点)
  • 第十九天-输入捕获实验
  • 第十四届蓝桥杯青少年组省赛 编程题真题题解
  • 内存+磁盘混合存储数据库——平衡设备的“快”与“稳”
  • drippingblues靶机教程
  • 掌握长尾关键词SEO优化技巧
  • 202506 电子学会青少年等级考试机器人三级器人理论真题
  • 【Datawhale AI夏令营第三期】多模态RAG
  • JavaScript中使用变量作为JSON对象的键名
  • Java 集合框架深层原理:不止于 “增删改查”
  • Intel i5-14600KF + RTX 5060Ti 16G 台式机剖析
  • Docker多阶段构建及适用镜像推荐
  • 在Word和WPS文字中快速拆分、合并表格
  • 物联网之常见网络配置
  • 智能机票助手-接入Ollama本地模型-Spring-AI-Alibaba
  • 【Python 语法糖小火锅 · 第 2 涮】
  • 医院信息系统(HIS)的功能与应用详解
  • MySQL 元数据详细说明
  • RNN——LSTM(deep-learning)学习
  • Python自动化测试断言详细实战代码
  • BroadcastChannel:轻松实现前端跨页面通信
  • JavaWeb03——javascript基础语法
  • 嵌入式 Linux Mender OTA 实战全指南
  • 国家药品监督管理局医疗器械唯一标识管理信息批量导入mysql工具
  • 算法篇----模拟
  • 企业级高性能web服务器
  • 沿街晾晒识别误检率↓76%:陌讯多模态融合算法实战解析
  • VisionPro常用标定方式
  • 本科毕业论文怎么引用github里面数据集
  • Vue3从入门到精通: 2.2 Vue3组件通信与数据传递深度解析