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

CS224n:Word Vectors and Word Senses(二)

目录

一、共现矩阵

1.1 基于共现矩阵的词向量

二、SVD分解

2.1 基于共现矩阵的词向量 vs. Word2Vec词向量

三、GloVe词向量

3.1 GloVe词向量的好处

3.2 GloVe的一些结果展示


部分笔记来源参考

Beyond Tokens - 知乎 (zhihu.com)

NLP教程(1) - 词向量、SVD分解与Word2Vec (showmeai.tech)

一、共现矩阵

1.1 基于共现矩阵的词向量

先来回顾一下上节的Word2Vec的核心思想:让相邻的词的向量表示相似。

我们实际上还有一种更加简单的思路——使用「词语共现性」,来构建词向量,也可以达到这样的目的。即,我们直接统计哪些词是经常一起出现的,那么这些词肯定就是相似的。那么,每一个词,都可以做一个这样的统计,得到一个共现矩阵(word-word co-occurrence matrix)。

上面的例子中,给出了三句话,假设这就是我们全部的语料。我们使用一个size=1的窗口,对每句话依次进行滑动,相当于只统计紧邻的词。这样就可以得到一个共现矩阵。

共现矩阵的每一列,自然可以当做这个词的一个向量表示。这样的表示明显优于one-hot表示,因为它的每一维都有含义——共现次数,因此这样的向量表示可以求词语之间的相似度。

直接基于共现矩阵构建词向量,会有一些明显的问题,如下:

怎么解决这个问题呢?这就引出了我们第二节要讲的SVD矩阵分解。

二、SVD分解

我们将巨大的共现矩阵进行SVD分解后,只选取最重要的几个特征值,得到每一个词的低维表示,从而解决维度问题,讲到这里了,顺便讲讲SVD的数学原理。

它可以将任意一个实数矩阵 M分解成三个特殊矩阵的乘积,如下:

从几何的意义很好理解,记M是一个线性变换,即对一个向量从V的空间旋转(V^{T})、拉伸(\Sigma)、再旋转(U)到U的空间,如下:

从几何的意义上,具体的原理如下:

M经过数次迭代后可以整理成我们想要得到的样子

我们通过构建共现矩阵、进行SVD降维,可视化,依然呈现出了类似Word2Vec的效果。

但是还有一些问题,由于共现矩阵巨大,SVD分解的计算代价也是很大的。另外,像a、the、is这种词,与其他词共现的次数太多,也会很影响效果。所以,我们需要使用很多技巧,来改善这样的词向量。例如,直接把一些常见且意义不大的词忽略掉;把极度不平衡的计数压缩到一个范围;使用皮尔逊相关系数,来代替共现次数等等很多技巧。

2.1 基于共现矩阵的词向量 vs. Word2Vec词向量

三、GloVe词向量

这里我们采用第一种

我们和Word2vec的loss函数(下图)对比一下,会发现这里loss的分母没有显式出现,这是因为分母已通过 Softmax 中的归一化项隐式包含在Q_{ij}中。

其实就是一个新的交叉熵函数。交叉熵,只是众多损失函数中的一种,而交叉熵损失函数天然有一些缺陷:由于它是处理两个分布,而很多分布都具有「长尾」的性质,这使得基于交叉熵的模型常常会给那些不重要、很少出现的情形给予过高的权重。另外,由于我们需要计算概率,所以「必须进行合理的规范化」(normalization),规范化,就意味着要除以一个「复杂的分母」,像Softmax中,我们需要遍历所有的词汇来计算分母,这样的开销十分巨大。

至此,我们得到了GloVe的损失函数(一套词向量版):

3.1 GloVe词向量的好处

3.2 GloVe的一些结果展示

本小节结束

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

相关文章:

  • LOVON——面向足式Open-Vocabulary的VLN导航:LLM做任务分解、YOLO11做目标检测,最后L2MM将指令和视觉映射为动作,且解决动态模糊
  • 九联UNT403HS_海思MV320处理器_安卓9-优盘强刷刷机包
  • 从内部保护你的网络
  • Android ConstraintLayout 使用详解
  • CAN总线协议
  • 【机器学习与数据挖掘实战 | 医疗】案例20:基于交叉验证和LightGBM算法的糖尿病遗传风险预测
  • FastDDS (SharedMemory)
  • Mysql监控数据库
  • synchronized 深度剖析:从语法到锁升级的完整演进
  • VSCode:通义灵码插件安装使用 -- 免费AI编程工具
  • 登录校验一
  • 抢占先机,PostgreSQL 中级专家认证的职业跃迁
  • 逻辑回归在银行贷款审批中的应用:参数选择与实践
  • grafana/lock-stack 日志 Pipeline 配置
  • 性能监控体系:InfluxDB Grafana Prometheus
  • 【东枫科技】DreamHAT+
  • 3D 建模核心术语扫盲:拓扑、UV 展开、烘焙与 AO 贴图解析
  • 关于“PromptPilot” 之5 -标签词与标签动作的语言模型九宫格
  • c#中switch case语句的用法
  • Go语言的gRPC教程-拦截器
  • 向华为学习——IPD流程体系之IPD术语
  • 译 | BBC Studios团队:贝叶斯合成控制方法SCM的应用案例
  • k8s云原生rook-ceph pvc快照与恢复(上)
  • JavaScriptAJAX异步请求:XHR、Fetch与Axios对比
  • 学习笔记:封装和单继承
  • ls hgfs提示ls: cannot access ‘hgfs‘: Permission denied
  • Spring Boot 2.1.18 集成 Elasticsearch 6.6.2 实战指南
  • OneCode3.0 DSM:领域驱动设计驱动下的自定义枚举领域划分实践
  • CMake Debug/Release配置生成器表达式解析
  • 加密与安全