ELMo模型解读

本文详细解析了ELMo模型的架构,包括字符嵌入、BiLSTM、残差连接和动态词向量的生成。重点介绍了如何通过静态RNN训练共享参数,然后利用动态RNN计算上下文相关的词向量,以及在实际应用中如何选择不同层的词向量组合。

在反复的看了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_ba

### 关于ELMo的相关学术论文 ELMo(Embeddings from Language Models)是一种基于双向语言模型的词嵌入方法,其核心思想在于利用大规模无标注语料来学习上下文敏感的词表示[^1]。该技术由Allen Institute for Artificial Intelligence的研究团队提出,并发表在NAACL 2018会议上。 #### ELMo的核心概念 ELMo采用了一种双向LSTM结构(BiLSTM),分别从前向和后向两个方向捕捉序列中的依赖关系[^2]。这种设计使得ELMo能够更好地建模词语在其具体上下文环境中的含义变化。此外,在实际应用中,ELMo可以通过微调的方式融入到各种自然语言处理任务中,从而提升这些任务的表现效果[^3]。 #### 获取ELMo相关学术资源的方法 如果希望深入研究ELMo模型及其背后的理论基础,则可以从以下几个方面入手: 1. **原始论文阅读** - AllenNLP发布的官方论文《Deep Contextualized Word Representations》,这是介绍ELMo最权威的第一手资料。 - 下载地址通常可以在arXiv网站或者会议官网找到:https://www.aclweb.org/anthology/N18-1202.pdf 2. **开源代码探索** - 官方GitHub仓库提供了完整的实现代码以及详细的文档说明,这对于理解和复现实验至关重要。 ```bash git clone https://github.com/allenai/elmo.git cd elmo pip install . ``` 3. **第三方解读文章** - 如知乎专栏作者邵浩撰写的解析文章也是一份非常有价值的参考资料,它不仅解释了ELMo的技术细节还附带了一些简单的实践案例供读者动手尝试。 4. **进一步延伸材料** - 对比其他类似的预训练语言模型如BERT等也是很有必要的,这样可以更全面地了解整个领域的发展脉络[^4]。 ```python import tensorflow_hub as hub elmo = hub.Module("https://tfhub.dev/google/elmo/3", trainable=True) embeddings = elmo(["A sentence.", "Another one."], signature="default", as_dict=True)["elmo"] print(embeddings.shape) # 输出形状应为(batch_size, max_length, embedding_dim) ``` 上述Python脚本展示了如何借助TensorFlow Hub快速加载并使用预先训练好的ELMo模块来进行文本编码操作。 ---
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值