ELMo模型解读

article/2025/4/21 13:08:58

在反复的看了ELMo源码和参考网上各路大神的经验之后,终于对ELMo的架构有了比较清楚的认识。总结一下自己对ELMo的理解,其实还有很多细节没有搞清楚。

一.模型架构

下面是我画的一个架构简图,对于ELMo不管你输入的是词还是字符,它都会以字符的单位进行后续的字符卷积,对与词的索引是根据词典序号索引的,而字符论文说英文的字符加上一些特殊的标记字符总共不会超过262个,所以对字符的索引是通过utf-8编码来索引的,比如单词“word"的utf-8编码是{119,111,114,100},通过这些编码就可以找到某一个固定的字符。对于整个模型的输入(这里只考虑最小单位的输入,也就是模型的每一个样本)的话由于是语言模型,而作者在train_elmo文件中定义的时间步(unroll_steps)是20,也就是一个样本就是X=20个词,对应的Y=20个对应的下一个词。这就是我们之前常说的一个样本X:Y。

     在得到我们的样本之后,初始化一个262*16的字符嵌入矩阵(或者二维数组),这个16就是每一个字符向量的纬度可以自己定义,通过索引可以找到每个词对应字符的向量,然后进行字符卷积,这其中包括最池化,然后在经过2个highway layers。进入BiLSTM。这一层总共有20个LSTMCell,分别对应20个词的向量的输入,论文中的4096也就是源码中的lstm_dim其实就是隐藏层最原始的h,c的纬度。或者说就是单个LSTMCell里面单个门的sigmoid单元的个数,这个参数其实就是tensorflow中tf.nn.rnn_cell.LSTMCell(num_units)中的第一个参数。注意不同地方的命名不一样,非常容易混淆。源码中的名字也换了好几次。

    两层LSTM之间还有一个残差连接,其实就是把第一层LSTM的输入加到LSTM的输出上。

   最后就是一个softmax,但是这个用的是Sampled_softmax,这个我开始读源码的时候并没有注意到,知道看到n_negtive_samples_batch这个参数时才开始注意它。在网上找了很多资料感觉都是把论文的东西重复了一遍,并没有讲的很清楚,这里感觉是用了负采样的思想,在计算softmax的时候,只需要找一些负样本,并不需要计算所有的可能的词。但是这只是训练 的时候才会用到,而真正在预测的时候还是要遍历词典,计算softmax分母的和,就是那个当词典很大的时候非常耗费时间的那部分。

 

注意:

我上面所说的中间有20个词输入是源码中的bilm.train中的实现方式,是通过tf.nn.static_rnn()实现的。就是这个BiLSTM的长度是固定的,不管你的句子长度有多少,他都会凑成20个词。这里只是在训练权重的时候时间步设置为20,这里训练就是训练模型的共享参数,因为rnn的参数在时间步上是共享的,这一点要注意。

但是在bilm.model中也是最初生成词向量的结构中,rnn是用tf.nn.dynamic_rnn()实现的,感觉这里才是真正的语言模型,在训练好参数之后,这里生成文件中每一行句子的词向量,这里的动态rnn,每一词输入的个数就是每一行句子的长度,而每一个批量的时间步就是这个批量中最大句子的长度,这个批量中长度不够的,用‘0’来进行填补。

下面是我用Notepad++打开的作者使用的训练文件部分截图,作者使用的训练文件是已经分词好了的,将单词和标点符号以及特殊的’s都用空格分开。难怪源码中没有进行分词处理,只是通过空格分开了每一个词。

 

为了更加清楚的认识输入和输出,我打印了2个训练样本{X:Y}如下图所示。

 

 

但是在bilm.model中确用了另一种实现方式,tf.nn.dynamic_rnn(),这种方式的BiLSTM的长度不是固定的,而且每一个批量的都不一定一样,它是根据输入的句子长度来进行调整的,我不知大这个bilm.model 是用来干嘛的,他后面并没有调用。如果知道的可以讨论一下。

模型搞清楚之后,就是跑代码了,由于这个模型对设备要求较高,我只用了一个小型的数据train文件和词典文件跑了一下。得到了3个ckpt文件和一个权重文件,这个权重文件包含了ELMo的所有模型参数,用HDF explorer打开后可以查看参数的结构。

有了模型结构ckpt文件和模型参数weights.h5文件我就可以算出特定句子中词的3层组合向量,也就是作者所说的与上下文相关的词向量。

 

二.动态词向量(context dependent)词向量的是生成

      其实ELMo模型最大的创新之处就是这个,生成与上下文相关的词向量。作者先用20个时间步的模型训练共享参数,这个上面讲过使用静态rnn实现的,然后在计算动态词向量的时候用了动态rnn,这个时候给定任意长度的句子,用之前预训练好的模型,可以算出这个句子的每个词的3层向量,这3层向量由一层是与上下文无关的向量,这个也是模型中BiLSTM的输入,另外两层的向量是lstm的输出,当然模型最后的输出是经过投影之后的。生成动态词向量的函数是dump_bilm_embeddings(),这个函数把训练文件中每个字的词向量保存为h5格式的文件。3层动态词向量就是代码中的lm_embeddings这个4阶张量。当我们获取这个3层动态词向量之后,为了检验词向量的质量,必须搭建下游模型比如文本分类等。输入下游模型的词向量可以是这3层词向量的任意组合,也可以是单个层的输入到下游模型中。当然这个组合权重论文中也提到,也可以加入每层的组合权重来体现每层的向量在不同任务时所发挥的比重。代码中的dump_token_embeddings()保存的其实是与上下文无关的词向量。很明显他是用词典文件生成的,每一个词的词向量是唯一的,dump_bilm_embeddings()才是真正的动态的词向量

 

 


 

 

 


http://chatgpt.dhexx.cn/article/LW9BJP7S.shtml

相关文章

【预测模型】基于粒子群算法PSO优化极限学习机ELM实现数据预测matlab源码

1 模型 为了提高空气质量预测精度,提出一种基于粒子群算法优化极限学习机的空气质量预测模型.运用粒子群算法优化极限学习机的初始权值和偏置,在保证预测误差最小的情况下实现空气质量最优预测.选择平均绝对百分比误差,均方根误差和平均绝对误差作为评价指标,通过PSO-ELM和ELM…

多元分类预测 | Matlab麻雀算法(SSA)优化极限学习机(ELM)的分类预测,多特征输入模型。SSA-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限学习机(ELM)的分类预测,多特征输入模型。SSA-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出分类效果图,迭代…

多元分类预测 | Matlab粒子群算法(PSO)优化极限学习机(ELM)的分类预测,多特征输入模型。PSO-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab粒子群算法(PSO)优化极限学习机(ELM)的分类预测,多特征输入模型。PSO-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,…

【预测模型-ELM分类】基于极限学习机ELM+OSELM+KELM+半监督SSELM+USELM实现数据集分类附matlab代码

1 内容介绍 极限学习机是由黄广斌等[13]提出的一种针对前馈神经网络设计的机器学习算法。该算法结构简单、计算速率快。ELM的关键在于找到输出和输出之间的映射空间。首先确定隐含层之间的连接权值w和隐含层神经元的偏置b。选择一个无限可微的函数作为隐…

多元分类预测 | Matlab鲸鱼算法(WOA)优化极限学习机(ELM)的分类预测,多特征输入模型。WOA-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab鲸鱼算法(WOA)优化极限学习机(ELM)的分类预测,多特征输入模型。WOA-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程…

【ELM数据预测】基于matlab粒子群算法优化ELM数据预测(含前后对比)【含Matlab源码 449期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:…

elmo模型详解

elmo模型结构 如下所示是elmo模型结构图: 在输入中可以采用worc2vec模型 训练的词向量。 其实总的来说,elmo模型就是若干bilstm的堆积,然后训练得到的, 对于某一个单词[公式],一个L层的双向语言模型biLM由2L1个向量表…

多元分类预测 | Matlab灰狼算法(GWO)优化极限学习机(ELM)的分类预测,多特征输入模型。GWO-ELM分类预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | 灰狼算法(GWO)优化极限学习机(ELM)的分类预测,多特征输入模型。GWO-ELM分类预测模型 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可出…

ELMo模型简介

word2vec是一种静态词嵌入方法,它不会随着上下文场景的变化而变化。但一词多义在现实中太常见了,因此这种静态嵌入的局限性在很多场景显得力不从心。而ELMo就是为解决这些问题提出的,它的提出意味着从词嵌入(Word Embedding)时代进入了语境词…

【ELM回归预测】基于matlab粒子群算法优化ELM回归预测【含Matlab源码 1722期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:…

【预测模型】基于 Elm神经网络的电力负荷预测模型matlab源码

1. 算法概述 **\ ELM算法针对的问题是单隐层的前馈神经网络(single-hidden layer feedforward neural networks,SLFNs),算法特点在于输入层到隐层的权重W和偏差B可以随机设定,隐层激励函数具有无限可微的特征即可(常用的有radial basis、sine…

【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

模型学习 - ELM

本学弱喜欢在本子上记笔记,但字迹又丑。 望看不懂我的字的大佬不要喷我,看得懂的大佬批评指正。

【预测模型-ELM预测】基于蚁群算法优化极限学习机预测matlab代码

1 简介 针对变压器故障的特征,结合变压器油中气体分析法以及三比值法.提出了基于蚁群算法改进极限学习机的故障诊断方法.由于输入层与隐含层的权值和阈值是随机产生.传统的极限学习机可能会使隐含层节点过多,训练过程中容易产生过拟合现象.该方法运用蚁群算法对极限学习机的输…

【预测模型-ELM分类】基于鲸鱼算法优化核极限学习机实现数据分类附matlab代码

1 内容介绍 极限学习机(extreme learning mac&…

【ELM预测】基于极限学习机ELM实现数据预测matlab源码

一、极限学习机的概念 极限学习机(Extreme Learning Machine) ELM,是由黄广斌提出来的求解单隐层神经网络的算法。 ELM最大的特点是对于传统的神经网络,尤其是单隐层前馈神经网络(SLFNs),在保证学习精度的前提下比传统的学习算法速度更快。 二…

【ELM数据预测】粒子群算法优化ELM数据预测(含前后对比)【含Matlab源码 449期】

⛄一、粒子群算法优化极限学习机ELM简介 PSO-ELM优化算法预测模型 ELM模型在训练之前可以随机产生ω和b, 只需要确定隐含层神经元个数及隐含层神经元激活函数, 即可实现ELM预测模型的构建。在ELM模型的构建中, 只需确定初始ω和b, 而无需复杂的参数设置, 具有学习速度快、泛化…

免费不限速不限存储的网盘推荐

网盘这种东西倒闭的太多了,这年头存点东西真不容易,以前也陆陆续续用过很多网盘,但一直没统计,最近终于发现了一款好用的免费网盘推荐给大家。 替代对象:某度网盘 空间:超级会员免任务扩容至5T空间&…

“白嫖”时代进入最后倒计时,网盘行业到底是怎么由盛及衰的?

继金山网盘、UC网盘、新浪网盘、360网盘等等关停之后,网易网盘也要和大家说再见了。这是目前市场上最后一家完全免费的网盘,网易网盘的淡出也意味着网盘的免费时代终于还是画上了句号。 近日,网易宣布由于产品调整,网易网盘将于20…

在线付费听音乐平台网站源码

介绍: 越来越多音乐需要付费 今天免费给大家一款在线音乐源码 所有音乐免费听 付费音乐也可以 网盘下载地址: http://kekewl.org/PaFDdLJmVpB 图片: