CS224斯坦福nlp课程学习笔记2-词向量

2024-05-14 21:58

本文主要是介绍CS224斯坦福nlp课程学习笔记2-词向量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

one hot encoder(词袋模型)

每个词表示为一个向量,向量长度为语料库中词的个数,每个向量值只有一个编码为1其余是0

杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0]
上海 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]
宁波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0]
北京 [0,0,0,0,0,0,0,0,0,……,1,0,0,0,0,0,0]

缺点:

  1. 这种方式编码比较随机,向量之间是相互独立的,很难看出向量之间的语义关系。
  2. 存在数据稀疏问题。向量维度过大,容易造成维度灾难。

word embedding(词向量)

将词转化成一种分布式表示,又称词向量。分布式表示将词表示成一个定长的连续的稠密向量。

  • 分布式表示优点:

1、词之间存在相似关系: 是词之间存在“距离”概念,这对很多自然语言处理的任务非常有帮助。
2、包含更多信息: 词向量能够包含更多信息,并且每一维都有特定的含义。在采用one-hot特征时,可以对特征向量进行删减,词向量则不能

  • 较著名的采用neural network language
    model生成词向量的方法有:Skip-gram、CBOW、LBL、NNLM、C&W、GloVe等。

word2vec

通过单词和上下文彼此预测。

  • 两个算法:
    Skip-grams (SG):预测上下文
    Continuous Bag of Words (CBOW):预测目标单词
  • 两种稍微高效一些的训练方法:
    Hierarchical softmax
    Negative sampling
    在这里插入图片描述
    其中w(t)代表当前词语位于句子的位置t,同理定义其他记号。在窗口内(上图为窗口大小为5),除了当前词语之外的其他词语共同构成上下文。

skip-gram

在这里插入图片描述
v表示one-hot编码长度,d表示设定的输出向量的维度
1v Vd->1d dv ->1v
最后softmax之前1
v向量的多少跟窗口大小有关。if窗口大小n=3最后预测的结果(t-3,t-2,t-1,t+1,t+2,t+3)。

  • softmax()结果和truth值比较,前反馈进行参数修正
    在这里插入图片描述
    最后的W和W’都是V*d维的向量(有V个d维的词向量),也就是说同一个词有两个词向量,最终的embedding选择有两种策略:相加、拼接

CBOW

Skip-gram是给定词语预测上下文
cbow是给定上下文预测词语
其他类似于skip-gram

word2vec缺点:
  • 每个曾词只有一个向量表示,一词多意的情况没有考虑
  • 滑动窗口的局限,只考虑的局部上下文信息,没有考虑全局信息

共现矩阵

例如,有语料如下:
I like deep learning.
I like NLP.
I enjoy flying.
则其共现矩阵如下:
在这里插入图片描述
矩阵定义的词向量在一定程度上缓解了one-hot向量相似度为0的问题,但没有解决数据稀疏性和维度灾难的问题。

SVD(奇异值分解)

既然基于co-occurrence矩阵得到的离散词向量存在着高维和稀疏性的问
题,一个自然而然的解决思路是对原始词向量进行降维,从而得到一个稠密的连续词向量。
SVD矩阵分解的方式就能够得到两组向量,分别表示文档的向量(可以用来做文本距离)和单词的向量。
有上面的矩阵进行SVD分解,得到矩阵正交矩阵U,对U进行归一化得到矩阵如下:
在这里插入图片描述
SVD得到了word的稠密(dense)矩阵,该矩阵具有很多良好的性质:语义相近的词在向量空间相近,甚至可以一定程度反映word间的线性关系。
在这里插入图片描述
word2vector考虑局部上下文关系
共现矩阵考虑到了全局的信息
结合二者的优点提出了一种glove算法

glove算法`

在这里插入图片描述

P(j|i)=Xij/Xi
推导过程参考glove学习笔记``
(ps:自己也有点晕,不想误导大家。。。学会的可以在这个上面补充哦!
学的不好,请大家批评指正)

这篇关于CS224斯坦福nlp课程学习笔记2-词向量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989963

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert