最简单的方式获取ELMo得到的词向量
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得到的词向量相关推荐
- ELMo预训练词向量模型
引言 Word Embedding:词嵌入.最简单的理解就是:将词进行向量化表示,抽象成为数学描述,然后可以进行建模,应用到很多自然语言处理的下游任务中.之前用语言模型做 Word Embedding ...
- 最简单的方式获取当前位置,经纬度等
前言 不知道为啥,任性的写个前言,其实也没啥内容. 正文 公司有个项目需求是在设备联网的时候,向服务器端推送当前设备的一些信息,其中包括了当前设备所在的经纬度和详细地点信息,当时也考虑过百度高德地图这 ...
- 【NLP】词向量:从word2vec、glove、ELMo到BERT详解!
目前,词向量(又叫词嵌入word embedding)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词 ...
- bert获得词向量_词向量详解:从word2vec、glove、ELMo到BERT
目前,词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词向量训练原理可以很好地掌握N ...
- [人工智能-深度学习-55]:循环神经网络 - 样本数据的几种编码方式:OneHot、ASCII、词向量word2vec
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
- [NLP]高级词向量表达之ELMo详解
一.引言 词向量是自然语言处理任务中非常重要的一个部分,词向量的表征能力很大程度上影响了自然语言处理模型的效果.如论文中所述,词向量需要解决两个问题: (1)词使用的复杂特性,如句法和语法. (2)如 ...
- ELMO中文词向量训练及使用的完整流程
笔者最近在学习elmo中文的词向量训练及使用,由于网上相关资料比较缺乏,也比较零碎,没有完整的从中文词向量的训练到使用的介绍,学起来困难较多.经过漫长的尝试,笔者终于将整套流程走通,相信应该是目前最完 ...
- ELMo模型最简单使用方式(pytorch版)
一.配置环境 在你的环境中下载allennlp,这个包自带pytorch.所以你在自己的conda里面创建和虚拟环境之后,直接pip这个就行 pip install allennlp 下载好ELMo要 ...
- 基于uFUN开发板的心率计(一)DMA方式获取传感器数据
前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...
最新文章
- 如何将 Spring Boot Actuator 的指标信息输出到 InfluxDB 和 Prometheus
- python 消息机制_Python并发编程之线程消息通信机制任务协调(四)
- font-size:100%理解
- clone-graph
- CImage类的用法(转帖)
- python中的继承有什么特点_Python类的继承机制是什么
- Extmail maildrop错误
- python-31:然而我发现结果并不是我想要的
- pcnn关系抽取论文阅读总结:尽量细节表现出来
- Java 后台做图片压缩的两种方法
- 联想服务器开机显示英文,在开机自检时,在联想LOGO画面处死机(即自检时死机)...
- IT十年人生过客-二十九-结婚
- 麦子学院demo(html+css)
- WordPress 安装时常见的数据库的错误
- sweetalert加载弹窗定时自动关闭
- mysql不包含模糊查询
- JavaEE 之 Mybatis
- (八)以交易为生:交易系统
- BoxCutter:吸附
- 血压计 - 袖带血压计概念
热门文章
- 佛山c语言培训学校,佛山C语言培训:如何轻松学习C语言?
- 概率论:先验与后验与似然
- List转Map思想的妙用
- 马克·扎克伯格:一场绝非偶然的传奇
- 定义一个判断素数的函数
- 《Python编程金典》读书笔记
- 白话数字签名(3)——Web程序中的数字签名
- js数组的5种查询方式——find(),findIndex(),indexOf(),lastIndexOf(),include()
- 海神祭司被机器人拉出来_美深海机器人意外殉职 水下10公里被挤碎(图)
- windows cmd 命令大全