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

对于独热编码余弦相似度结果为0和词向量解决了词之间相似性问题的理解

文章目录

  • 深入理解
  • 简单案例
  • 结论
  • 词向量(Word Embedding)简介
  • 词向量如何解决相似性问题?
  • 简单案例:基于上下文的词向量训练
  • 总结

  • 对于独热表示的向量,如果采用余弦相似度计算向量间的相似度,可以明显的发现任意两者向量的相似度结果都为 0,即任意二者都不关,也就是说独热表示无法解决词之间的相似性问题。

深入理解

  • 独热编码(One-Hot Encoding)是一种将类别型变量转换为二进制向量的方法。对于一个有NNN 个不同类别的特征,独热编码会创建一个长度为NNN的向量,其中只有一个元素为 1(表示当前类别),其余元素为 0。例如,对于三个类别 “猫”、“狗”、“鸟”,其独热编码可能分别为 [1,0,0][1, 0, 0][1,0,0][0,1,0][0, 1, 0][0,1,0][0,0,1][0, 0, 1][0,0,1]
  • 余弦相似度用于衡量两个向量在方向上的相似性,其中 A⋅BA \cdot BAB 是向量的点积,∣A∣|A|A∣B∣|B|B 是向量的模(欧几里得范数)。计算公式为:
    余弦相似度=A⋅B∥A∥⋅∥B∥\text{余弦相似度} = \frac{A \cdot B}{\|A\| \cdot \|B\|} 余弦相似度=ABAB

对于任意两个不同的独热向量:

  • 点积A⋅B=0A \cdot B = 0AB=0(因为独热向量只有一个 1,且不同向量的 1 位置不同)。
  • 每个向量的模 ∣A∣=∣B∣=1|A| = |B| = 1A=B=1(因为只有一个 1,其余为 0)。

因此,余弦相似度为:
余弦相似度=01⋅1=0\text{余弦相似度} = \frac{0}{1 \cdot 1} = 0 余弦相似度=110=0

  • 这表明任意两个不同的独热向量是完全不相关的(相似度为 0),无法反映它们之间可能存在的语义或实际关系。

简单案例

假设我们有以下三个词的独热编码:

  • “猫”:[1,0,0][1, 0, 0][1,0,0]
  • “狗”:[0,1,0][0, 1, 0][0,1,0]
  • “鸟”:[0,0,1][0, 0, 1][0,0,1]

计算 “猫” 和 “狗” 的余弦相似度:

  1. 点积:
    [1,0,0]⋅[0,1,0]=(1⋅0)+(0⋅1)+(0⋅0)=0[1, 0, 0] \cdot [0, 1, 0] = (1 \cdot 0) + (0 \cdot 1) + (0 \cdot 0) = 0 [1,0,0][0,1,0]=(10)+(01)+(00)=0
  2. 模:
    ∥[1,0,0]∥=12+02+02=1∥[0,1,0]∥=02+12+02=1\|[1, 0, 0]\| = \sqrt{1^2 + 0^2 + 0^2} = 1 \\ \|[0, 1, 0]\| = \sqrt{0^2 + 1^2 + 0^2} = 1 [1,0,0]=12+02+02=1[0,1,0]=02+12+02=1
  3. 余弦相似度:
    01⋅1=0\frac{0}{1 \cdot 1} = 0 110=0

计算 “猫” 和 “鸟” 的余弦相似度:

  1. 点积:
    [1,0,0]⋅[0,0,1]=(1⋅0)+(0⋅0)+(0⋅1)=0[1, 0, 0] \cdot [0, 0, 1] = (1 \cdot 0) + (0 \cdot 0) + (0 \cdot 1) = 0 [1,0,0][0,0,1]=(10)+(00)+(01)=0
  2. 模:
    ∥[1,0,0]∥=1∥[0,0,1]∥=1\|[1, 0, 0]\| = 1 \\ \|[0, 0, 1]\| = 1 [1,0,0]=1[0,0,1]=1
  3. 余弦相似度:
    01⋅1=0\frac{0}{1 \cdot 1} = 0 110=0

计算 “狗” 和 “鸟” 的余弦相似度:

  1. 点积:
    [0,1,0]⋅[0,0,1]=(0⋅0)+(1⋅0)+(0⋅1)=0[0, 1, 0] \cdot [0, 0, 1] = (0 \cdot 0) + (1 \cdot 0) + (0 \cdot 1) = 0 [0,1,0][0,0,1]=(00)+(10)+(01)=0
  2. 模:
    ∥[0,1,0]∥=1∥[0,0,1]∥=1\|[0, 1, 0]\| = 1 \\ \|[0, 0, 1]\| = 1 [0,1,0]=1[0,0,1]=1
  3. 余弦相似度:
    01⋅1=0\frac{0}{1 \cdot 1} = 0 110=0

结论

  • 通过计算可以发现,任意两个不同词的独热编码的余弦相似度均为 0。表明独热编码无法捕捉词与词之间的相似性(例如 “猫” 和 “狗” 都是动物,但相似度为 0)。
  • 这是独热编码的局限性之一,因此在实际 NLP 任务中通常会使用更高级的词表示方法(如词嵌入 Word2Vec、GloVe 等)来解决这一问题。

词向量(Word Embedding)简介

  • 词向量(Word Embedding)是一种将词语映射到低维连续向量空间的技术,其核心思想是让语义或用法相似的词在向量空间中距离更近。与独热编码不同,词向量是稠密向量(非稀疏),每个维度表示词的某种潜在语义或语法特征(如“性别”、“动作”、“情感”等)。

关键特点:

  1. 低维稠密:通常维度为 50-300(远小于独热编码的维度)。
  2. 语义可计算:通过向量运算可以捕捉词的关系(如“国王 - 男 + 女 ≈ 女王”)。
  3. 相似性量化:余弦相似度可以反映词之间的语义相关性。

词向量如何解决相似性问题?

独热编码的相似度恒为 0,而词向量通过以下方式解决:

  1. 相似词向量接近:通过训练(如预测上下文),模型会使得“猫”和“狗”的向量方向接近。
  2. 连续空间表示:向量的每一维对应某种潜在特征,例如:
    • 维度1:动物性(猫=0.9,狗=0.8,汽车=0.1)
    • 维度2:家用性(猫=0.7,狗=0.6,汽车=0.3)

简单案例:基于上下文的词向量训练

  • 假设有一个小型语料库和简化的词向量(维度=2):句子:"猫 吃 鱼", "狗 吃 肉"
  • 初始随机向量(训练前):
    • 猫: [0.2, 0.4]
    • 狗: [0.3, 0.1]
    • 吃: [0.5, 0.5]
    • 鱼: [0.1, 0.6]
    • 肉: [0.2, 0.2]

  • 目标:通过训练(如Skip-gram模型),调整向量使得共享上下文的词(如“猫”和“狗”都邻近“吃”)在向量空间中接近。

训练步骤(简化):

  1. 输入“吃”,预测上下文“猫”或“狗”。
  2. 计算“吃”的向量与“猫”的向量点积,通过Softmax得到概率。
  3. 根据预测误差反向传播,更新“吃”、“猫”、“狗”的向量。

训练后可能结果(假设):

  • 猫: [0.8, 0.5]
  • 狗: [0.7, 0.4]
  • 吃: [0.6, 0.6]

此时,“猫”和“狗”的向量更接近。


计算相似度(训练后)
余弦相似度公式:
相似度=A⋅B∥A∥⋅∥B∥\text{相似度} = \frac{A \cdot B}{\|A\| \cdot \|B\|} 相似度=ABAB

  1. 猫 vs 狗:
    • 点积:0.8×0.7+0.5×0.4=0.56+0.20=0.760.8 \times 0.7 + 0.5 \times 0.4 = 0.56 + 0.20 = 0.760.8×0.7+0.5×0.4=0.56+0.20=0.76
    • 模:∣A∣=0.82+0.52≈0.94|A| = \sqrt{0.8^2 + 0.5^2} \approx 0.94A=0.82+0.520.94,∣B∣≈0.81|B| \approx 0.81B0.81
    • 相似度:0.760.94×0.81≈0.99\frac{0.76}{0.94 \times 0.81} \approx 0.990.94×0.810.760.99

  1. 猫 vs 肉(无关词):
    • 假设“肉”向量为 [0.2, 0.2]
    • 点积:0.8×0.2+0.5×0.2=0.260.8 \times 0.2 + 0.5 \times 0.2 = 0.260.8×0.2+0.5×0.2=0.26
    • 相似度:0.260.94×0.28≈0.99\frac{0.26}{0.94 \times 0.28} \approx 0.990.94×0.280.260.99

词向量的典型应用

  1. 词类比任务: 国王−男+女≈女王\text{国王} - \text{男} + \text{女} \approx \text{女王}国王+女王
  2. 文本分类:将词向量求和/平均作为句子表示。
  3. 语义搜索:用向量相似度匹配查询词和相关文档。

总结

词向量通过将词映射到连续空间,使得:

  • 语义相似的词向量距离接近。
  • 支持向量运算捕捉复杂关系(如类比关系)。
  • 解决了独热编码无法表示相似性的缺陷。

实际中,Word2Vec、GloVe等模型通过大规模语料训练,自动学习这种分布式表示。

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

相关文章:

  • ubuntu之坑(十五)——设备树
  • gRPC和http长轮询
  • 新手向:Python自动化办公批量重命名与整理文件系统
  • Dubbo 学习笔记
  • 谷歌收获成果:OpenAI收购Windsurf计划告吹
  • 工业软件加密锁复制:一场技术与安全的博弈
  • Mybatis05-参数和返回
  • 以太网供电(PoE)电源
  • 编程语言设计目的与侧重点全解析(主流语言深度总结)
  • vue中使用西瓜播放器xgplayer (封装)+xgplayer-hls 播放.m3u8格式视频
  • Spark 单机模式安装与测试全攻略​
  • STM32小实验1--点亮LED
  • # 电脑待机后出现死机不能唤醒怎么解决?
  • 【终极指南】ChatGPT/BERT/DeepSeek分词全解析:从理论到中文实战
  • 2025年人工智能与网络安全国际会议(IACAINS 2025)
  • vim扩展
  • Python Web框架对比:Flask vs FastAPI
  • Kubernetes控制器详解
  • 重复频率较高的广告为何一直在被使用?
  • JAVA经典单例模式
  • 纯CSS轮播
  • 动手学深度学习13.9. 语义分割和数据集 -笔记练习(PyTorch)
  • 文件摆渡系统:如何攻克跨网文件交换难点,实现安全合规传输?
  • ISO-IEC-IEEE 42010架构规范
  • 用Finalshell连接服务器后出现文件目录不显示,且刷新报错空指针问题记录
  • 【WRFDA实操第一期】服务器中安装 WRFPLUS 和 WRFDA
  • 探索文本切分的多种方法与应用场景
  • 学习 Flutter (三):玩安卓项目实战 - 上
  • 152.Vue3中使用OpenLayers+Turf实现遮罩布挖洞效果
  • MCP终极篇!MCP Web Chat项目实战分享