词向量与ELMo模型 词向量漫谈

目录:

  1. 基础部分回顾(词向量、语言模型)
  2. NLP的核心:学习不同语境下的语义表示
  3. 基于LSTM的词向量学习
  4. 深度学习中的层次表示以及Deep BI-LSTM
  5. ELMo模型
  6. 总结

1. 基础部分回顾(词向量、语言模型)

1.1 独热编码-词的表示

1.2 词向量-词的表示

  • 我们为什么需要词向量?(One-hot向量的缺点?)
  • 基于One-hot能否表示单词之间语义相似度?

1.2.1 基于One-hot能否表示单词之间语义相似度?

答:不可以。因为,我们不管是通过欧式距离还是通过余弦相似度,计算用One-hot表示的词编码都是一样的距离,不能区分单词之间语义的相似度。

比如,计算:我们、爬山的欧式距离、余弦相似度:

当然每个词之间的余弦相似度也都是相同的。词向量学习到的每个向量都是用不同的浮点数表示,计算每个单词的相似度是不一样的,可以表示单词之间语义相似度。

1.2.2 One-hot向量的缺点?

  • One-hot向量稀疏性,词向量是稠密向量;
  • One-hot向量不能表示单词之间语义相似度;

词向量从2013年提出开始,慢慢的发展成现在的Bert、XLNet等比较前言的技术。

1.3 词向量-词向量的可视化

把词向量表示成二维数据后,可以发现类似的单词是聚在一起的,因此可以得出词向量可以区分单词之间语义的相似度。

词向量的可视化常用的算法是sklearn中的T-SNE,它是一种降维算法。降维算法还有PCA、ICA、LDA,针对词向量的降维我们通常使用T-SNE,Bengio在他文章中介绍T-SNE非常清楚。我自己找了一下Bengio的文章,没有找到介绍T-SNE的内容,谁找到告诉一下哈!

1.4 词向量-学习词向量

把一堆文本输入到某些模型中,我们可以得到词向量。模型包括:CBOW、Skip-Gram、NNLM、Glove、MF、ELMo、Gaus Embedding、LDA、Bert等。

2. NLP的核心:学习不同语境下的语义表示

2.1 语言模型-概念

2.2 语言模型-对于句子的计算

2.2.1 Chain Rule

贝叶斯公式:

Chain Rule:

2.2.2 Chain Rule for Language Model

2.2.3 Markov Assumption

2.2.4 Language Model(Use 1st Order)

假设现在我们知道这些单词的概率:

P(是|今天) = 0.01
P(今天) = 0.002
P(周日|是) = 0.001
P(周日|今天) = 0.0001
P(周日) = 0.02
P(是|周日) = 0.0002

比较:“今天是周日 VS 今天周日是 ”两句话哪一句从语法上更通顺?

显然, P(今天是周日) >P(今天周日是) 。

ELMo是基于语言模型的目标函数进行训练的。

2.3 语言模型-相关必要知识点

  • Chain Rule, Markov Assumption
  • Unigram, Bigram, Ngram
  • Add-one smoothing, Good-turning smoothing...
  • Perplexity

图片来源于:网友

2.4 基于分布式表示的模型总览

介绍词向量的总览,各个词向量模型之间的联系和区别。

Global方法:把非常大的数据放到模型中学习,得到全局的数据信息。优势:可以从全局的角度考虑问题。劣势:1)计算量很大;2)不能在线学习。

Local方法:基于窗口式的方法进行训练,是一种局部的方法。优势:1)可以随时的增加数据进行训练,也就是可以在线学习;2)可以用在大数据里面。缺点:不能从全局的角度考虑问题。

2.5 建议的学习路径

2.6 词向量训练常见的方法

  • SkipGram方法:预测相邻单词的概率。
  • CBOW方法:已知两边单词,预测中间单词。
  • NNLM方法:基于语言模型和马尔科夫假设进行

基于SkipGram、CBOW和NNLM的方法,我们可以训练出每一个单词的固定词向量。但是在同一句话中,这些方法不能表示相同单词的不同语义。因此我们引出ELMo、Bert和XLNet。

即,如何学出一个单词在不同上下文中的词向量呢?

3. 基于LSTM的词向量学习

3.1 利用LSTM学习词向量(语言模型)

3.2 从单向LSTM到双向LSTM

单向LSTM只能从左到右的预测单词,有时我们想利用单词左右两边的信息,即双向信息,因此我们需要双向LSTM。

XLNet用Permutation language model  实现真正的双向LSTM模型。

以下这种形式不是完全双向的LSTM模型:

4. 深度学习中的层次表示以及Deep BI-LSTM

4.1 启发:深度学习中的层次表示(Hierarchical Representation)

越高级的特征表示越来越具体化。

4.2 How Human Brain Works

4.3 图像中有层次表示,NLP中是否也有?

4.4 Deep BI-LSTM

4.5 训练以及使用

ELMo具体细节可以翻阅论文:Peters M E , Neumann M , Iyyer M , et al. Deep contextualized word representations[J]. 2018.

5. ELMo模型

5.1 ELMo的数学表达

5.2 实验

这一部分展示了ELMo模型论文中的实验结果。

6. 总结

本文是Microstrong在观看李文哲在B站上讲解的直播课程《词向量与ELMo模型》的笔记。直播地址:https://live.bilibili.com/11869202

原文地址:词向量漫谈,欢迎大家关注Microstrong公众号!!!

原文地址:https://www.cnblogs.com/Christbao/p/12332939.html

时间: 2024-10-09 07:08:34

词向量与ELMo模型 词向量漫谈的相关文章

词向量的cbow模型

word2vec完整的解释可以参考<word2vec Parameter Learning Explained>这篇文章. cbow模型 cbow模型的全称为Continuous Bag-of-Word Model.该模型的作用是根据给定的词$w_{input}$,预测目标词出现的概率$w_t$,对应的数学表示为 $p(w_t|w_{input})$.如下图所示,Input layer表示给定的词,${h_1,...,h_N}$是这个给定词的词向量(又称输入词向量),Output layer是

dedecms关键词维护里面字数多的词优先字数少的词的解决办法

织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业.创业方向,第二个词包含了第一个词,在文章中如果出现"创业方向"这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字数多的词优先于字数少的词呢?下面就告诉大家具体的解决方法: 我们找到并打开/include/arc.archives.class.php文件,在里面找到如下代码: 01 function ReplaceKeyword($kw,&$body)

Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ?Copyright 蕃薯耀 2017年9月25日 http://www.cnblogs.com/fanshuyao/ 一.问题描述 很多对外网站的某些内容都需要过滤敏感词,避免政治与色@情上的问题. 二.解决方案 使用词库进行匹配过滤成 * (星号) Java 敏感词工具类及敏感词词库见附件. 1.下载后,有几个类,主要为WordFilter 这个工具类,使用方法如下

九. 常用类库、向量与哈希5.向量及其应用

Vector(向量)是 java.util 包中的一个类,该类实现了类似动态数组的功能. 向量和数组相似,都可以保存一组数据(数据列表).但是数组的大小是固定的,一旦指定,就不能改变,而向量却提供了一种类似于"动态数组"的功能,向量与数组的重要区别之一就是向量的容量是可变的. 可以在向量的任意位置插入不同类型的对象,无需考虑对象的类型,也无需考虑向量的容量. 向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量: 如果需要频繁进行对象的插入和删除工作,或者因为需要处理的对

千亿词霸下载|千亿词霸翻译器

千亿词霸具是我用过的最好的翻译软件,软件中有全文翻译新增查询选中词的功能,在原文框或解释框内双击查询词,即可在千亿词库内查询,得出精确的结果.完整收录了经济贸易,医学,政治,科技,化工,船舶等1600万条专业词汇和丰富例句.千亿词霸千亿词霸是一款非常实用的全能桌面翻译工具,千亿词霸集俄.中.英三国语言翻译学习的软件,它涵盖了大量的双语例句,完整地收录了经济贸易.医学.科技.船舶.化工.政治等1600万条专业词汇和释义,并且它是随着网络而不断更新的,翻译的内容永远都不会过时,使用户可以在俄中英三国

机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法

在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法中,我们讨论了定义法求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,同时排列求导出的结果也很麻烦.因此我们需要其他的一些求导方法.本文我们讨论使用微分法来求解标量对向量的求导,以及标量对矩阵的求导. 本文的标量对向量的求导,以及标量对矩阵的求导使用分母布局.如果遇到其他资料求导结果不同,请先确认布局是否一样. 1. 矩阵微分 在高数里面我们学习过标量的导数和微分,他们之间有这样的关系:$df =f'(x)dx$.

基线系统需要受到更多关注:基于词向量的简单模型

最近阅读了<Baseline Needs More Love: On Simple Word-Embedding-Based Models and Associated Pooling Mechanisms>这篇论文[1],该工作来自杜克大学,发表在ACL 2018上.论文详细比较了直接在词向量上进行池化的简单模型和主流神经网络模型(例如CNN和RNN)在NLP多个任务上的效果.实验结果表明,在很多任务上简单的词向量模型和神经网络模型(CNN和LSTM)的效果相当,有些任务甚至简单模型更好.下

组合部分标签向量并累加成完整向量

<strong><span style="font-size:18px;">/*** * @author YangXin * @info K-Means算法会对向量元素进行多次顺序的遍历,上次表示最适合于这种访问模式. * 利用Mapper输出的部分向量,Reducer通过简单的拼接得到一个完整的向量. */ package unitTwelve; import java.io.IOException; import org.apache.hadoop.io.T

2d游戏中求出一个向量的两个垂直向量

function cc.exports.VerticalVector(vec)--求出两个垂直向量 local result = {} result[1] = cc.p(vec.y/vec.x,-1)--向下方向 result[2] = cc.p(-vec.y/vec.x,1)--向上方向 return result end