Introduction

本文的目的就是用最简单的方式获取 elmo 得到的word representation,看了一些其他人的介绍,其实最后对我有用的就这么多了,我只想要他生成的词向量。
简单介绍一下 elmo:Allen NLP在NAACL2018上的Best paper - Deep contextualized word representations,使用elmo让原有的模型在NLI等Task上效果提升。
那好,直接说怎么得到这个elmo。现在有tf,pytorch,keras各种版本。本文使用的官方给出的elmo片段方式,不用加在模型当中,直接获得词向量的Tensor,因为我只想用他的词向量,训练他的模型又耗时有耗机器。

Environment

首先在conda中新建环境:

conda create -n allennlp python=3.6

接着安装allennlp[保证你电脑里gcc是OK的,编译时需要C++的环境]

pip install allennlp

别断网就OK了,东西有点多,pytorch啥的全套。
然后,下载allennlp给出的训练好的参数和模型
网址:

  • https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_options.json
  • https://s3-us-west-2.amazonaws.com/allennlp/models/elmo/2x4096_512_2048cnn_2xhighway/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5

这样方便你重复使用。

Method

下面就是用这两个文件怎么得到词向量了:

from allennlp.commands.elmo import ElmoEmbedderoptions_file = "/files/elmo_2x4096_512_2048cnn_2xhighway_options.json"
weight_file = "/files/elmo_2x4096_512_2048cnn_2xhighway_weights.hdf5"elmo = ElmoEmbedder(options_file, weight_file)# use batch_to_ids to convert sentences to character ids
context_tokens = [['I', 'love', 'you', '.'], ['Sorry', ',', 'I', 'don', "'t", 'love', 'you', '.']] #references
elmo_embedding, elmo_mask = elmo.batch_to_embeddings(context_tokens)print(elmo_embedding)
print(elmo_mask)

Result

Embedding:
tensor([[[[ 0.6923, -0.3261,  0.2283,  ...,  0.1757,  0.2660, -0.1013],[-0.7348, -0.0965, -0.1411,  ..., -0.3411,  0.3681,  0.5445],[ 0.3645, -0.1415, -0.0662,  ...,  0.1163,  0.1783, -0.7290],...,[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000]],[[-1.1051, -0.4092, -0.4365,  ..., -0.6326,  0.4735, -0.2577],[ 0.0899, -0.4828, -0.5596,  ...,  0.4372,  0.3840, -0.7343],[-0.5538, -0.1473, -0.2441,  ...,  0.2551,  0.0873,  0.2774],...,[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000]],[[-3.2634, -0.9448, -0.3199,  ..., -1.2070,  0.6930, -0.2016],[-0.3688, -0.7632, -0.0715,  ...,  0.6294,  1.6869, -0.6655],[-1.0870, -1.4243, -0.2445,  ...,  0.0825,  0.5020,  0.2765],...,[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000],[ 0.0000,  0.0000,  0.0000,  ...,  0.0000,  0.0000,  0.0000]]],[[[ 0.5042, -0.6629, -0.0231,  ..., -0.3084, -0.9741, -0.7230],[ 0.1131,  0.1575,  0.1414,  ...,  0.3718, -0.1432, -0.0248],[ 0.6923, -0.3261,  0.2283,  ...,  0.1757,  0.2660, -0.1013],...,[-0.7348, -0.0965, -0.1411,  ..., -0.3411,  0.3681,  0.5445],[ 0.3645, -0.1415, -0.0662,  ...,  0.1163,  0.1783, -0.7290],[-0.8872, -0.2004, -1.0601,  ..., -0.2655,  0.2115,  0.1977]],[[ 0.1221, -0.7032,  0.0169,  ..., -0.3249, -0.4935, -0.4965],[ 0.3399, -0.4682,  0.1888,  ..., -0.0565,  0.1001, -0.0416],[-0.8135, -0.8491, -0.3264,  ..., -0.5674,  0.2638,  0.2006],...,[ 0.4460, -0.4475, -0.1583,  ...,  0.4372,  0.3840, -0.7343],[-0.1287,  0.0161,  0.0315,  ...,  0.2551,  0.0873,  0.2774],[-1.2373, -0.3373,  0.1098,  ..., -0.0276, -0.0181,  0.0602]],[[-0.0830, -1.5891, -0.2576,  ..., -1.2944,  0.1082,  0.6745],[-0.0724, -0.7200,  0.1463,  ...,  0.6919,  0.9144, -0.1260],[-2.3460, -1.1714, -0.7065,  ..., -1.2885,  0.4679,  0.3800],...,[ 0.1246, -0.6929,  0.6330,  ...,  0.6294,  1.6869, -0.6655],[-0.5757, -1.0845,  0.5794,  ...,  0.0825,  0.5020,  0.2765],[-1.2392, -0.6155, -0.9032,  ...,  0.0524, -0.0852,  0.0805]]]])
Mask:  tensor([[1, 1, 1, 1, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 1]])

Tips

  • 实验的输出结果是 2 * 3 * 8 * 1024 的word embedding,都是2、3、8超参数。
  • 2是batch_size, 3是两层biLM的输出加一层CNN对character编码的输出, 8是最长list的长度(对齐), 1024是每层输出的维度。
  • mask的输出2是batch_size, 8实在最长list的长度, 第一个list有4个tokens,第二个list有8个tokens, 所以对应位置输出1。

References

https://cstsunfu.github.io/2018/06/ELMo/
https://blog.csdn.net/sinat_26917383/article/details/81913790

最简单的方式获取ELMo得到的词向量相关推荐

  1. ELMo预训练词向量模型

    引言 Word Embedding:词嵌入.最简单的理解就是:将词进行向量化表示,抽象成为数学描述,然后可以进行建模,应用到很多自然语言处理的下游任务中.之前用语言模型做 Word Embedding ...

  2. 最简单的方式获取当前位置,经纬度等

    前言 不知道为啥,任性的写个前言,其实也没啥内容. 正文 公司有个项目需求是在设备联网的时候,向服务器端推送当前设备的一些信息,其中包括了当前设备所在的经纬度和详细地点信息,当时也考虑过百度高德地图这 ...

  3. 【NLP】词向量:从word2vec、glove、ELMo到BERT详解!

    目前,词向量(又叫词嵌入word embedding)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词 ...

  4. bert获得词向量_词向量详解:从word2vec、glove、ELMo到BERT

    目前,词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词向量训练原理可以很好地掌握N ...

  5. [人工智能-深度学习-55]:循环神经网络 - 样本数据的几种编码方式:OneHot、ASCII、词向量word2vec

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  6. [NLP]高级词向量表达之ELMo详解

    一.引言 词向量是自然语言处理任务中非常重要的一个部分,词向量的表征能力很大程度上影响了自然语言处理模型的效果.如论文中所述,词向量需要解决两个问题: (1)词使用的复杂特性,如句法和语法. (2)如 ...

  7. ELMO中文词向量训练及使用的完整流程

    笔者最近在学习elmo中文的词向量训练及使用,由于网上相关资料比较缺乏,也比较零碎,没有完整的从中文词向量的训练到使用的介绍,学起来困难较多.经过漫长的尝试,笔者终于将整套流程走通,相信应该是目前最完 ...

  8. ELMo模型最简单使用方式(pytorch版)

    一.配置环境 在你的环境中下载allennlp,这个包自带pytorch.所以你在自己的conda里面创建和虚拟环境之后,直接pip这个就行 pip install allennlp 下载好ELMo要 ...

  9. 基于uFUN开发板的心率计(一)DMA方式获取传感器数据

    前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...

最新文章

  1. 如何将 Spring Boot Actuator 的指标信息输出到 InfluxDB 和 Prometheus
  2. python 消息机制_Python并发编程之线程消息通信机制任务协调(四)
  3. font-size:100%理解
  4. clone-graph
  5. CImage类的用法(转帖)
  6. python中的继承有什么特点_Python类的继承机制是什么
  7. Extmail maildrop错误
  8. python-31:然而我发现结果并不是我想要的
  9. pcnn关系抽取论文阅读总结:尽量细节表现出来
  10. Java 后台做图片压缩的两种方法
  11. 联想服务器开机显示英文,在开机自检时,在联想LOGO画面处死机(即自检时死机)...
  12. IT十年人生过客-二十九-结婚
  13. 麦子学院demo(html+css)
  14. WordPress 安装时常见的数据库的错误
  15. sweetalert加载弹窗定时自动关闭
  16. mysql不包含模糊查询
  17. JavaEE 之 Mybatis
  18. (八)以交易为生:交易系统
  19. BoxCutter:吸附
  20. 血压计 - 袖带血压计概念

热门文章

  1. 佛山c语言培训学校,佛山C语言培训:如何轻松学习C语言?
  2. 概率论:先验与后验与似然
  3. List转Map思想的妙用
  4. 马克·扎克伯格:一场绝非偶然的传奇
  5. 定义一个判断素数的函数
  6. 《Python编程金典》读书笔记
  7. 白话数字签名(3)——Web程序中的数字签名
  8. js数组的5种查询方式——find(),findIndex(),indexOf(),lastIndexOf(),include()
  9. 海神祭司被机器人拉出来_美深海机器人意外殉职 水下10公里被挤碎(图)
  10. windows cmd 命令大全