热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析

本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。

640?wx_fmt=gif

向AI转型的程序员都关注了这个号👇👇👇

机器学习AI算法工程   公众号:datayx

斯坦福大学CS224n(全称:深度学习与自然语言处理)是自然语言处理领域很受欢迎的课程,由 Chris Manning 和 Richard Socher 主讲。

但是自 2017 年以来,NLP 有了很多重大的变化,包括 Transformer 和预训练语言模型等。以前开放的是 17 年年初的课程,很多激动人心的前沿模型都没有介绍,而今年年初 CS224n 终于开始更新 19 年课程的视频。

这门课程为深入学习NLP应用的前沿研究提供了深入的探索。课程最后的项目将涉及训练复杂的循环神经网络并将其应用于大型NLP问题。

在模型方面,将涵盖词向量表示,基于窗口的神经网络,循环神经网络,长短期记忆模型,递归神经网络,卷积神经网络以及一些涉及 memory component 的非常新的模型。

课程视频、Pytorch实现代码获取方式:

2019斯坦福CS224n深度学习自然语言处理笔记(1)——绪论与Word2Vec

本文内容整理自2019年斯坦福CS224n深度学习自然语言处理课程,其笔记为本人听课心得,重点在于对于知识内容的思考,并非课程原文笔记,应称为课后笔记。

1.绪论

在本堂课中,其基础技能需要懂得并应用:Ipython,numpy和Pytorch。其他的关于自然语言处理和深度学习,上了这堂课,你就会了解。

2. 语言的来源

语言,语言是传递信息的声音和文字,是人类沟通的主要方式(其他方式包括图像、触感等)。它作为人类文明的载体,距今已有5000多年的历史。如此古老的本领,在历史的长河之中,没有出现质的改变(功能没有改变,方式没有改变)。

在信息和信息传播活动,人类历史中共有五次巨大变革:

第一次:语言的诞生,是历史上最伟大的信息技术革命,语言使人类描述信息、交流信息的方式得到了大大的改进.

第二次:文字的诞生,为了便于交流和长期存储信息,就要创造一些符号代表语言,这些符号经过相当长的一段时间后逐渐演变成文字,并固定下来.

第三次:印刷术的诞生,使得知识可以大量生产、存储和流通,进一步扩大了信息交流的范围.

第四次:电磁波的应用,电磁波的应用使得信息传递的速度大大提高.

第五次:计算机技术的应用,使人们对信息的处理能力、处理速度产生了飞跃.

然而,当今自然语言(人类使用的语言,包含以上第一次、第二次革命的结果),相较于当今5G的网络传播速度(第五次革命),是相当的缓慢,但是仍然被我们人类广泛使用,那这是为什么?这是因为语言虽然说的东西少,但是听的内容多。这其中的信息增益,来源于对于世界的认知。

所谓的意思(Meaning)指两个方面,一方面是单词本身的意思(Representation for words),另一方面是使用单词想要表达的意思(Express by using words)。例如,我渴了。句子本身是说我缺少水分,而另一个含义是,你需要给我倒杯水。这是使用这句话想要表达的意思。

从语言学角度来说,文字等价于符号(signifier),也就是符号化所要表示的意思(signified the idea thing)。从这个角度讲,符号学派的理论就自然站得住脚。

3. 符号理论的表示及运算方法

基于符号理论,一个比较著名的应用是WordNet,NLTK工具包中包含这个应用,它将单词之间的关系描述为同义词和上位词(synonym set and hypernyms), 也就是什么是什么的关系。这样就能够很好的解决不同符号所表示的不同含义及其之间的关系。在中文中,也存在同样的工具(知网,即HowNet),不是大家所熟知的论文检索网站。

这样,WordNet就可以获得层次化的单词间的关系,但是同样存在以下几个问题:

缺少细微差别,一词多义

无法添加新的含义

构建过程过于主观

在文本表示上,如上所讲,已经有一定的方法,接下来需要解决的是如何进行语言间的运算(计算机要做的事)。

传统的自然语言处理(NLP)方式中,将单词看作为离散的符号(discrete symbols),就像一个词典一样,一个词对应一个编号,更一般的,使用独热(One-Hot)编码的形式。这样,符号就可以转换为数值进行运算。

同样的,该种方法同样存在一些问题,例如,词汇表太大,英文词汇超过50万个。不能够计算相似度(一种方法是使用wordnet,另一种方法就想去学习一种基于向量的表示方式)

那么,如何去基于单词向量本身学习呢?在1957年,一种理论提出:词汇的含义来源于其上下文(word’s means is given by it’s context)。跟随着这个思路,从神经语言模型(2003)到Word2Vec(2013)的道路就都说的通了。

神经网络模型的目的是,将单词进行分布式表示,即把词映射到一个向量空间中,使得相似的词拥有相似的位置。Word2Vec模型具有以下特点:

拥有大规模语料库

词使用分布式向量表示

对于每一个文本,均有一个中心词和一个上下文。

使用相似度计算中心词和上下文的概率

下面就是“硬核”Word2Vec的推导过程。

4. Word2Vec推导过程

我们使用Skip-Gram模型举例说明,

首先,Word2Vec同样使用极大似然估计,就像我们上面所说,它需要使得给定中心词,使得上下文词出现概率最大,即:

640?wx_fmt=png

其中o表示目标词,V表示词表。其含义为,上面为两个词的矩阵的乘积最大,下面为正则项。这就有点像softmax函数一样。此处,我们先穿插一点,可以看到,其实这种计算方法就是使得越共现的词,向量乘积越大,乘积越大,则概率越大。最终会实现和某一个词的相关词和其都相似,就使得这些相关词向量更加相似。

640?wx_fmt=png

640?wx_fmt=png

首先想到为什么不直接使用词共现矩阵,然后提出SVD的解决方法。在比较了基于统计和直接预测两种方法后,提出Glove模型。接着对于词向量的评估方法和一词多义问题提出相应的解决方法。

1. 为什么不直接使用词共现矩阵获得词向量?

在上一节中,最后提出一个问题,为什么不直接使用词共现矩阵获得词向量?

1.1 词共现矩阵方法(窗口统计和全局统计)

其方法有2种,第一种是局部窗口,只统计在它附近窗口内的词,第二种方法是全文词共现,这就是所说的LSA方法,从而能够获得主题信息。

根据例子我们可以发现,直接使用词共现是由以下4个缺陷:

  • 词表大小会不断增长

  • 高维空间需要大量的空间存储

  • 数据稀疏

  • 不够健壮(鲁棒性差,鲁棒=robust)

1.2 解决上述问题方法——SVD

所以,其解决办法思路是,能不能找到一个固定的,低维的矩阵来把词共现的意思蕴含其中呢?于是就是用了降维方法。常用的降维方法就是奇异值分解(Singular Value Decomposition, SVD),之所以叫做奇异值,就是因为它来源于积分方程(设A为mn阶矩阵,q=min(m,n),AA的q个非负特征值的算术平方根叫作A的奇异值。)。最初不是这个名字,而是为标准乘子(canonical multipliers),也就是标准型上的对角元素。这里我们扯远了。

奇异值分解方法如下:

640?wx_fmt=png

U和V是正交的。

当然,这仍然会有之前出现的一些问题,例如高频词(the,has,have)等,统计方法是否科学等。其解决方法如下:

  1. 最高频率设定阈值,如100

  2. 使用皮尔逊系数取代频率,并将负数置为0

  3. 使用倾斜窗口采样更多的词

  4. 等等

其结果也大致可看。

1.3 基于统计和直接预测方法比较

那么基于统计和直接预测两种方法比较如下:

640?wx_fmt=png

3. 词向量评估

接下来的问题就是如何进行词向量的评估,一般的NLP的评估分为内在的(Intrinsic)和外在的(extrinsic)两种方法,区别如下。

640?wx_fmt=png

具体的,内在性评估方法有常见的词距离是否表示相同的含义(anology)和信息检索等。

后面的实验(On the Dimensionality of Word Embedding)也证明以下问题:

  • glove是比sg模型要好,

  • 1000维以上的词向量没有性能提升。

  • 如果使用类似维基百科的语料比使用新闻语料要更好,这是因为维基百科更能显示词与词之间的联系。

4. 一词多义

剩下要解决的问题就是接下来的方向,可能存在一词多义现象。

其中一个解决方法是增加标号,同一个词使用不同的标号表示不同的含义。

另一个方法是,根据不同含义进行加权求和,例如;

640?wx_fmt=png

然而随着技术的发展,现有的解决方法是使用不同层次的编码层,从而获得不同的含义,这就使得一个词不仅基于该词本身的含义(最后一层输出),还基于其上下文(前n层的输出)。

原文地址https://blog.csdn.net/qq_35082030/article/details/88847720

阿里云双11大促  服务器ECS  数据库 全场1折

活动地址

640?wx_fmt=png

1核2G1M,86一年,¥229三年

2核4G3M,¥799三年

2核8G5M,¥1399三年

......


阅读过本文的人还看了以下文章:

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

640?wx_fmt=jpeg

长按图片,识别二维码,点关注

AI项目体验

https://loveai.tech

640?wx_fmt=png



推荐阅读
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 英特尔推出第三代至强可扩展处理器及傲腾持久内存,AI性能显著提升
    英特尔在数据创新峰会上发布了第三代至强可扩展处理器和第二代傲腾持久内存,全面增强AI能力和系统性能。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 计算机学报精选论文概览(2020-2022)
    本文汇总了2020年至2022年间《计算机学报》上发表的若干重要论文,旨在为即将投稿的研究者提供参考。 ... [详细]
  • SDWebImage第三方库学习
    1、基本使用方法异步下载并缓存-(void)sd_setImageWithURL:(nullableNSURL*)urlNS_REFINED_FOR_SWIFT;使用占位图片& ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
  • 本文介绍了在 CentOS 7 系统中如何查看所有活动进程及其运行时间。通过使用 `netstat` 和 `ps` 命令,您可以轻松获取进程的详细信息,包括启动时间、用户、终端和命令等。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 计算机视觉领域介绍 | 自然语言驱动的跨模态行人重识别前沿技术综述(上篇)
    本文介绍了计算机视觉领域的最新进展,特别是自然语言驱动的跨模态行人重识别技术。上篇内容详细探讨了该领域的基础理论、关键技术及当前的研究热点,为读者提供了全面的概述。 ... [详细]
  • 本文深入探讨了HTTP头部中的Expires与Cache-Control字段及其缓存机制。Cache-Control字段主要用于控制HTTP缓存行为,其在HTTP/1.1中得到了广泛应用,而HTTP/1.0中主要使用Pragma:no-cache来实现类似功能。Expires字段则定义了资源的过期时间,帮助浏览器决定是否从缓存中读取资源。文章详细解析了这两个字段的具体用法、相互关系以及在不同场景下的应用效果,为开发者提供了全面的缓存管理指南。 ... [详细]
  • 基于OpenCV的图像拼接技术实践与示例代码解析
    图像拼接技术在全景摄影中具有广泛应用,如手机全景拍摄功能,通过将多张照片根据其关联信息合成为一张完整图像。本文详细探讨了使用Python和OpenCV库实现图像拼接的具体方法,并提供了示例代码解析,帮助读者深入理解该技术的实现过程。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
author-avatar
粉红的少女
网络借贷平台http://www.kljie.com/
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有