精华内容
下载资源
问答
  • 动态词向量《1》:ELMO!! 我能学习单词的复杂特征,包括语法和语义;还能学习不同上下文语境下的一词多义。——ELMO1. ELMO的粗浅理解ELMo是Embedding from Language Model的缩写,它通过无监督的方式对语言模型进行...

    动态词向量《1》:ELMO

    !! 我能学习单词的复杂特征,包括语法和语义;还能学习不同上下文语境下的一词多义。——ELMO

    1. ELMO的粗浅理解

    ELMo是Embedding from Language Model的缩写,它通过无监督的方式对语言模型进行预训练来学习单词表示。这个词向量模型出自2018 NAACL的论文《Deep Contextualized Word Representations》。本文也将基于这篇论文来阐述ELMO词向量模型。

    ELMO是一种动态词向量算法,它最大的特点就是在大型的语料库里训练一个 biLSTM (双向LSTM模型)。下游任务需要获取单词词向量的时候,可以直接将整个句子输入 biLSTM,利用 biLSTM 的输出作为单词的词向量,这样词向量就能包含上下文语义信息。我们也可以简单理解为:biLSTM是一个函数,函数的输入是一个句子,输出是句子中单词的词向量。ELMO的整体架构如下图所示,后面我将详细介绍ELMO模型的架构流程。

    42b21ae793187faf86a716746af20cd6.png

    2. 双向语言模型

    此时你可能会惊讶,为什么不从Char Encode 层开始讲起,而是直接跳到双向语言模型(biLM)嘞?因为ELMO的亮点就在于双向语言模型的设计,而初始化词向量其实并不是我们最关注的内容,当然在第三节我会介绍一下Char Encode Layer的。双向语言模型顾名思义由前向和反向语言模型组成,我们先假设一个序列有N个token即:,那么他们接下来会经历什么嘞?

    • 前向语言模型(forward LM)其实就是已知前k-1个词语: 预测第k个词语 的概率,如下所示:
    • 后向语言模型(backward LM)则正好相反,它是已知下文 ,预测第k个单词,如下所示:

    • 双向语言模型(biLM)说白了就是将前向和后向语言模型结合起来,并最大化前后向语言模型的联合似然函数:

      其中,公式里有两个LSTM 单元参数(前向和后向LSTM), 为输入的初始词向量参数,为输出的Softmax层参数(对LSTM每一个步长输出的隐藏状态hidden作softmax后输入概率)。需要注意的是Word Embedding参数 和Softmax参数 是共享的,两个LSTM的参数是互相独立的。

    此时你可能会疑惑为什么要用LSTM和softmax来计算语言模型概率嘞?

    由于传统的N-gram模型不能够考虑很长的前后文,因此目前大家还是主要还是使用多层双向LSTM来实现双向语言模型。在时刻 k,LSTM 的第 j 层会输出一个隐状态 ,其中 j=1,...,L,L 是 LSTM 的层数。最上层是 ,对它进行 softmax 之后就得到输出词的概率了。

    为了加深记忆,你可以记住下面这张图,我相信它能给你带来更直观的感受:

    a70c0689df8315d8368d04c73e8fc6a3.png

    3. 字符编码层初始化词向量

    ELMO最核心的设计就是上节讲述的双向语言模型,正是这个独特的设计使ELMO能够解决一次多义问题。但是我们在上节的描述中,将词向量直接送入了双向语言模型里,那么这个词向量是从何而来的嘞?

    其实这个词向量的生产有很多方式,你可以直接通过Word Embedding(比如使用word2vec模型)来得到,但是论文并不是这样设计的。

    ELMO模型使用的是word_char embedding,这是一种字符级别的词向量获取方法,其实就是对单词内的字符通过CNN卷积操作生成词向量。使用这种方法来初始化词向量自然有其高明之处,现实中字符是有限的但是词语是无限的,要想表示所有词汇当然不能使用Word Embedding方法。

    至于这个字符编码层具体是怎么实现的,我就不赘述了,毕竟ELMO模型的创新点不在这。

    4. 生成词向量

    如果你已经阅读完了第三节,我相信你已经了解了ELMO模型整个的训练过程了,接下来我们要进行最后一步操作:生成词向量。

    ELMO模型的作者提出了两种生成词向量的方法:第一种是直接使用最后一层 biLSTM 的输出作为词向量。第二种是更加通用的方法,将 L+1 个输出向量加权融合在一起。这里我们还是讲解一下第二种生成方法吧!

    假设我们的手中有了一个训练好的ELMO模型,该模型的biLSTM有L层,=,初始词向量也是x_dim维的,那么每个句子中的单词将会有2L+1个词向量表征它。L层前向LSTM和L层后向LSTM总共会生成2L个维的hidden向量,当然初始词向量层也会有一个维的向量与之对应。


    一般情况下,我们将每一层的前向、后向hidden向量进行拼接,然后将初始化向量拷贝一份进行拼接,这样我们就能得到L+1个 维的向量啦!用公式可以表示成

    这里的是词的embedding输出,表示每一层的正向和反向输出拼接后的结果。

    对于这些表征,论文用如下公式对它们做了一个Scalar Mixer:

    这里的是一个SoftMax后的概率值,标量参数是用来对整个ELMo向量进行scale缩放的。这两部分都是作为参数来学习的,针对不同任务会有不同的值。在处理特定任务时,LSTM 的参数都是固定的(或者是微调的),主要调的参数是,当然这里 ELMo 只是一个特征提取,实际任务会再加上一些其它的网络架构。
    展开全文
  • 传统的词向量模型,例如 Word2Vec 和 Glove 学习得到的词向量是固定不变的,即一个单词只有一种词向量,显然不适合用于多义词。而 ELMo 算法使用了深度双向语言模型 (biLM),只训练语言模型,而单词的词向量是在输入...

    传统的词向量模型,例如 Word2Vec 和 Glove 学习得到的词向量是固定不变的,即一个单词只有一种词向量,显然不适合用于多义词。而 ELMo 算法使用了深度双向语言模型 (biLM),只训练语言模型,而单词的词向量是在输入句子实时获得的,因此词向量与上下文信息密切相关,可以较好地区分歧义。

    1. 静态词向量算法

    在之前的文章中介绍了词嵌入算法 Word2Vec 和 Glove。与传统的 one-hot 编码、共现向量相比,词嵌入算法得到的词向量维度更低、也可以比较好地支持一些下游的任务,例如文档分类,问答系统等。

    但是这两种算法都是静态词向量算法,在数据集上训练好一个语言模型之后,每一个词的词向量就固定下来了。后续使用词向量时,无论输入的句子是什么,词向量都是一样的,例如:

    "我喜欢吃小米"中的"小米"指一种食物"小米手机挺好用"中的"小米"指手机品牌给定上面两个句子,在 Word2Vec 和 Glove 中去得到"小米"的词向量都是一样的,不能根据上下文给出更准确的词向量。

    而 ELMo是一种动态词向量算法,在大型的语料库里训练一个 biLSTM (双向LSTM模型)。下游任务需要获取单词词向量的时候,将整个句子输入 biLSTM,利用 biLSTM 的输出作为单词的词向量,包含了上下文信息。可以理解成,biLSTM 是一个函数,函数的输入是一个句子,输出是句子中单词的词向量。

    2. 双向语言模型

    首先介绍什么是双向语言模型,以及如何通过 biLSTM 得到单词的词向量,对 LSTM 不熟悉的童鞋可以参考前一篇文章循环神经网络 RNN、LSTM、GRU。

    2.1 双向语言模型

    双向语言模型包括前向模型和后向模型,给定一个包含 N 个单词的句子 T = [t(1), t(2), ..., t(N)],前向模型需要通过前面的单词 [t(1), t(2), ..., t(k-1)] 预测下一个单词 t(k),而后向模型需要通过后面的单词,预测前一个单词。

    2.2 使用 biLSTM 得到上下文相关的词向量

    2 层的 biLSTM 模型

    biLSTM 是一种双向的循环神经网络,包含了前向网络与后向网络两部分。上图是一个层数 L = 2 的 biLSTM。

    每一个单词 t(i) 的输入是词向量,这个词向量是固定的,可以使用 Word2Vec 或者 Glove 生成的词向量,在 ELMo 中使用了 CNN-BIG-LSTM生成的词向量。注意,ELMo 输入时的词向量是固定的,ELMo 将输入的词向量传到 biLSTM 得到的才是动态的,包含上下文信息。

    ELMo 的论文中使用以下符号表示双向 LSTM 中每一层对应第 i 个单词的输出,前向输出包含第 i 个单词之前的语义,后向输出包含了第 i 个单词之后的语义。

    文章中比较难添加公式,因此使用 h(k,j,→) 表示前向输出,使用 h(k,j,←) 表示后向向输出,请谅解。每一层的输出 h(k-1,j,→) 和 h(k+1,j,←) 都是单词的动态词向量。

    LSTM 一共 L 层,对于前向 LSTM,每一个单词 t(k-1) 的最后一层输出 h(k-1,L,→) 用于预测下一个单词 t(k);对于后向 LSTM,每一个单词 t(k+1) 的最后一层输出 h(k+1,L,←) 用于预测前一个单词 t(k)。预测的过程采用 softmax, biLSTM 需要优化的目标函数如下:

    θ(x) 表示单词输入时候的词向量,这个词向量是固定的。θ(s) 表示 softmax 层,用于预测前后的单词。θ(LSTM,→) 表示前向 LSTM 的参数,用于计算 h(k-1,L,→)。θ(LSTM,←) 表示后向 LSTM 的参数,用于计算 h(k-1,L,←)。

    3. ELMo 算法

    3.1 流程介绍

    ELMo 模型

    ELMo 中使用的 biLSTM 层数 L = 2,ELMo 首先在大型的数据集上训练好模型,然后再后续任务中可以根据输入的句子,输出每一个单词的词向量。例如给定一个句子 T = [t(1), t(2), ..., t(N)],ELMo 计算词向量的方法如下:

    从静态的词向量表里查找单词的词向量 E(1), ..., E(N) 用于输入。ELMo 使用 CNN-BIG-LSTM 生成的词向量作为输入。将单词词向量 E(1), ..., E(N) 分别输入第 1 层前向 LSTM 和后向 LSTM,得到前向输出 h(1,1,→), ..., h(N,1,→),和后向输出 h(1,1,←), ..., h(N,1,←)。将前向输出 h(1,1,→), ..., h(N,1,→) 传入到第 2 层前向 LSTM,得到第 2 层前向输出 h(1,2,→), ..., h(N,2,→);将后向输出 h(1,1,←), ..., h(N,1,←) 传入到第 2 层后向 LSTM,得到第 2 层后向输出 h(1,2,←), ..., h(N,2,←)。则单词 i 最终可以得到的词向量包括 E(i), h(N,1,→), h(N,1,←), h(N,2,→), h(N,2,←),如果采用 L 层的 biLSTM 则最终可以得到 2L+1 个词向量。3.2 使用词向量

    在上面我们知道句子中一个单词 i 可以得到 2L+1 个词向量,在实际使用的过程中应该如何利用这 2L+1 个词向量?

    首先在 ELMo 中使用 CNN-BIG-LSTM 词向量 E(i) 作为输入,E(i) 的维度等于 512。然后每一层 LSTM 可以得到两个词向量 h(i,layer,→) 和 h(i,layer,←),这两个向量也都是 512 维。则对于单词 i 可以构造出 L+1 个词向量。

    h(i,0) 表示两个 E(i) 直接拼接,表示输入词向量,这是静态的,1024 维。

    h(i,j) 表示第 j 层 biLSTM 的两个输出词向量 h(i,j,→) 和 h(i,j,←) 直接拼接,这是动态的,1024维。

    ELMo 中不同层的词向量往往的侧重点往往是不同的,输入层采用的 CNN-BIG-LSTM 词向量可以比较好编码词性信息,第 1 层 LSTM 可以比较好编码句法信息,第 2 层 LSTM 可以比较好编码单词语义信息。

    ELMo 的作者提出了两种使用词向量的方法:

    第一种是直接使用最后一层 biLSTM 的输出作为词向量,即 h(i,L)。

    第二种是更加通用的做法,将 L+1 个输出加权融合在一起,公式如下。γ 是一个与任务相关的系数,允许不同的 NLP 任务缩放 ELMo 的向量,可以增加模型的灵活性。s(task,j) 是使用 softmax 归一化的权重系数。

    3.3 ELMo效果

    ELMo 论文中的例子

    这是论文中的一个例子,上面的是 Glove,下面两行是 ELMo。可以看到 Glove 查找 play 的最近邻,会出现“游戏”、“表演”、“运动”等相关的单词,可能与 paly 在句子中的实际意思不同。但是在 ELMo 中,可以看到第一个句子中的 play 是比赛的意思,其最近邻句子的 play 也是比赛的意思。而第二个句子的 play 都是表演的意思。说明 ELMo 可以根据上下文更好地得到一个单词的词向量。

    4. ELMo 总结

    ELMo 训练语言模型,而不是直接训练得到单词的词向量,在后续使用中可以把句子传入语言模型,结合上下文语义得到单词更准确的词向量。

    使用了 biLSTM,可以同时学习得到保存上文信息和下文信息的词向量。

    biLSTM 中不同层得到的词向量侧重点不同,输入层采用的 CNN-BIG-LSTM 词向量可以比较好编码词性信息,第 1 层 LSTM 可以比较好编码句法信息,第 2 层 LSTM 可以比较好编码单词语义信息。通过多层词向量的融合得到最终词向量,最终词向量可以兼顾多种不同层次的信息。

    参考文献

    1. Deep contextualized word representations

    https://arxiv.org/pdf/1810.04805.pdf

    2. 知乎:ELMo原理解析及简单上手使用

    https://zhuanlan.zhihu.com/p/51679783

    展开全文
  • word2vec、glove、fasttext是静态词向量,无法解决一词多义问题,elmo、GPT、Bert词向量是基于语言模型的动态词向量。 elmo、GPT、bert三者之间有什么区别? 特征提取器: elmo采用LSTM进行提取,GPT和bert则采用...

          word2vec、glove、fasttext是静态词向量,无法解决一词多义问题,elmo、GPT、Bert词向量是基于语言模型的动态词向量。

    elmo、GPT、bert三者之间有什么区别?

    • 特征提取器:
      elmo采用LSTM进行提取,GPT和bert则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM,elmo采用1层静态向量+2层LSTM,多层提取能力有限,而GPT和bert中的Transformer可采用多层,并行计算能力强。
    • 单/双向语言模型:
      GPT采用单向语言模型,elmo和bert采用双向语言模型。但是elmo实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比bert一体化融合特征方式弱。
      GPT和bert都采用Transformer,Transformer是encoder-decoder结构,GPT的单向语言模型采用decoder部分,decoder的部分见到的都是不完整的句子;bert的双向语言模型则采用encoder部分,采用了完整句子。

    资料传送:

    在这里插入图片描述

    展开全文
  • ELMo词向量用于中文

    千次阅读 热门讨论 2018-10-18 14:40:07
    ELMo于今年二月由AllenNLP提出,与word2vec或GloVe不同的是其动态词向量的思想,其本质即通过训练language model,对于一句话进入到language model获得不同的词向量。根据实验可得,使用了Elmo词向量之后,许多NLP...

    转载自 http://www.linzehui.me/2018/08/12/碎片知识/如何将ELMo词向量用于中文/


    ELMo于今年二月由AllenNLP提出,与word2vec或GloVe不同的是其动态词向量的思想,其本质即通过训练language model,对于一句话进入到language model获得不同的词向量。根据实验可得,使用了Elmo词向量之后,许多NLP任务都有了大幅的提高。

    论文:Deep contextualized word representations

    AllenNLP一共release了两份ELMo的代码,一份是Pytorch版本的,另一份是Tensorflow版本的。Pytorch版本的只开放了使用预训练好的词向量的接口,但没有给出自己训练的接口,因此无法使用到中文语料中。Tensorflow版本有提供训练的代码,因此本文记录如何将ELMo用于中文语料中,但本文只记录使用到的部分,而不会分析全部的代码。

    需求:
    使用预训练好的词向量作为句子表示直接传入到RNN中(也就是不使用代码中默认的先过CNN),在训练完后,将模型保存,在需要用的时候load进来,对于一个特定的句子,首先将其转换成预训练的词向量,传入language model之后最终得到ELMo词向量。

    准备工作:

    1. 将中文语料分词
    2. 训练好GloVe词向量或者word2vec
    3. 下载bilm-tf代码
    4. 生成词表 vocab_file (训练的时候要用到)
    5. optional:阅读Readme
    6. optional:通读bilm-tf的代码,对代码结构有一定的认识

    思路:

    1. 将预训练的词向量读入
    2. 修改bilm-tf代码
      1. option部分
      2. 添加给embedding weight赋初值
      3. 添加保存embedding weight的代码
    3. 开始训练,获得checkpoint和option文件
    4. 运行脚本,获得language model的weight文件
    5. 将embedding weight保存为hdf5文件形式
    6. 运行脚本,将语料转化成ELMo embedding。

    训练GloVe或word2vec

    可参见我以前的博客或者网上的教程。
    注意到,如果要用gensim导入GloVe训好的词向量,需要在开头添加num_word embedding_dim。 如:

    获得vocab词表文件

    注意到,词表文件的开头必须要有<S> </S> <UNK>,且大小写敏感。并且应当按照单词的词频降序排列。可以通过手动添加这三个特殊符号。
    如:

    代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    model=gensim.models.KeyedVectors.load_word2vec_format(
    fname='/home/zhlin/GloVe/vectors.txt',binary=False
    )
    words=model.vocab
    with open('vocab.txt','w') as f:
    f.write('<S>')
    f.write('\n'
    f.write('</S>')
    f.write('\n')
    f.write('<UNK>')
    f.write('\n') # bilm-tf 要求vocab有这三个符号,并且在最前面
    for word in words:
    f.write(word)
    f.write('\n')

    修改bilm-tf代码

    注意到,在使用该代码之前,需要安装好相应的环境。

    如果使用的是conda作为默认的Python解释器,强烈建议使用conda安装,否则可能会出现一些莫名的错误。

    1
    2
    3
    conda install tensorflow-gpu=1.4
    conda install h5py
    python setup.py install #应在bilm-tf的文件夹下执行该指令

    然后再运行测试代码,通过说明安装成功。

    修改train_elmo.py

    bin文件夹下的train_elmo.py是程序的入口。
    主要修改的地方:

    1. load_vocab的第二个参数应该改为None
    2. n_gpus CUDA_VISIBLE_DEVICES 根据自己需求改
    3. n_train_tokens 可改可不改,影响的是输出信息。要查看自己语料的行数,可以通过wc -l corpus.txt 查看。
    4. option的修改,将char_cnn部分都注释掉,其他根据自己需求修改

    如:

    修改LanguageModel类

    由于我需要传入预训练好的GloVe embedding,那么还需要修改embedding部分,这部分在bilm文件夹下的training.py,进入到LanguageModel类中_build_word_embeddings函数中。注意到,由于前三个是<S> </S> <UNK>,而这三个字符在GloVe里面是没有的,因此这三个字符的embedding应当在训练的时候逐渐学习到,而正因此 embedding_weightstrainable应当设为True

    如:

    修改train函数

    添加代码,使得在train函数的最后保存embedding文件。

    训练并获得weights文件

    训练需要语料文件corpus.txt,词表文件vocab.txt。

    训练

    cd到bilm-tf文件夹下,运行

    1
    2
    3
    4
    5
    export CUDA_VISIBLE_DEVICES=4
    nohup python -u bin/train_elmo.py \
    --train_prefix='/home/zhlin/bilm-tf/corpus.txt' \
    --vocab_file /home/zhlin/bilm-tf/glove_embedding_vocab8.10/vocab.txt \
    --save_dir /home/zhlin/bilm-tf/try >bilm_out.txt 2>&1 &

    根据实际情况设定不同的值和路径。

    运行情况:

    PS:运行过程中可能会有warning:

    ‘list’ object has no attribute ‘name’
    WARNING:tensorflow:Error encountered when serializing lstm_output_embeddings.
    Type is unsupported, or the types of the items don’t match field type in CollectionDef.

    应该不用担心,还是能够继续运行的,后面也不受影响。

    在等待了相当长的时间后,在save_dir文件夹内生成了几个文件,其中checkpoint和options是关键,checkpoint能够进一步生成language model的weights文件,而options记录language model的参数。

    获得language model的weights

    接下来运行bin/dump_weights.py将checkpoint转换成hdf5文件。

    1
    2
    3
    nohup python -u  /home/zhlin/bilm-tf/bin/dump_weights.py  \
    --save_dir /home/zhlin/bilm-tf/try \
    --outfile /home/zhlin/bilm-tf/try/weights.hdf5 >outfile.txt 2>&1 &

    其中save_dir是checkpoint和option文件保存的地址。

    接下来等待程序运行:

    最终获得了想要的weights和option:

    将语料转化成ELMo embedding

    由于我们有了vocab_file、与vocab_file一一对应的embedding h5py文件、以及language model的weights.hdf5和options.json。
    接下来参考usage_token.py将一句话转化成ELMo embedding。

    参考代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    import tensorflow as tf
    import os
    from bilm import TokenBatcher, BidirectionalLanguageModel, weight_layers, \
    dump_token_embeddings

    # Our small dataset.
    raw_context = [
    '这 是 测试 .',
    '好的 .'
    ]
    tokenized_context = [sentence.split() for sentence in raw_context]
    tokenized_question = [
    ['这', '是', '什么'],
    ]

    vocab_file='/home/zhlin/bilm-tf/glove_embedding_vocab8.10/vocab.txt'
    options_file='/home/zhlin/bilm-tf/try/options.json'
    weight_file='/home/zhlin/bilm-tf/try/weights.hdf5'
    token_embedding_file='/home/zhlin/bilm-tf/glove_embedding_vocab8.10/vocab_embedding.hdf5'

    ## Now we can do inference.
    # Create a TokenBatcher to map text to token ids.
    batcher = TokenBatcher(vocab_file)

    # Input placeholders to the biLM.
    context_token_ids = tf.placeholder('int32', shape=(None, None))
    question_token_ids = tf.placeholder('int32', shape=(None, None))

    # Build the biLM graph.
    bilm = BidirectionalLanguageModel(
    options_file,
    weight_file,
    use_character_inputs=False,
    embedding_weight_file=token_embedding_file
    )

    # Get ops to compute the LM embeddings.
    context_embeddings_op = bilm(context_token_ids)
    question_embeddings_op = bilm(question_token_ids)

    elmo_context_input = weight_layers('input', context_embeddings_op, l2_coef=0.0)
    with tf.variable_scope('', reuse=True):
    # the reuse=True scope reuses weights from the context for the question
    elmo_question_input = weight_layers(
    'input', question_embeddings_op, l2_coef=0.0
    )

    elmo_context_output = weight_layers(
    'output', context_embeddings_op, l2_coef=0.0
    )
    with tf.variable_scope('', reuse=True):
    # the reuse=True scope reuses weights from the context for the question
    elmo_question_output = weight_layers(
    'output', question_embeddings_op, l2_coef=0.0
    )


    with tf.Session() as sess:
    # It is necessary to initialize variables once before running inference.
    sess.run(tf.global_variables_initializer())

    # Create batches of data.
    context_ids = batcher.batch_sentences(tokenized_context)
    question_ids = batcher.batch_sentences(tokenized_question)

    # Compute ELMo representations (here for the input only, for simplicity).
    elmo_context_input_, elmo_question_input_ = sess.run(
    [elmo_context_input['weighted_op'], elmo_question_input['weighted_op']],
    feed_dict={context_token_ids: context_ids,
    question_token_ids: question_ids}
    )

    print(elmo_context_input_,elmo_context_input_)

    可以修改代码以适应自己的需求。

    Reference

    https://github.com/allenai/bilm-tf

    展开全文
  • 如何将ELMo词向量用于中文

    千次阅读 2019-05-29 21:55:17
    ELMo于今年二月由AllenNLP提出,与word2vec或GloVe不同的是其动态词向量的思想,其本质即通过训练language model,对于一句话进入到language model获得不同的词向量。根据实验可得,使用了Elmo词向量之后,许多NLP...
  • 词向量对比

    2020-04-23 09:50:27
    目录: 一、文本表示和各词向量间的对比 1、文本表示哪些方法? 下面对文本表示进行一个归纳,也就是对于一篇文本可以如何用数学语言表示呢?...基于one-hot、tf-idf、text... 基于词向量动态表征:elmo、GPT、b...
  • 词向量(从one-hot到word2vec)

    千次阅读 2018-12-26 10:30:41
    词向量的意思就是通过一个数字组成的向量来表示一个词,这个向量的构成有很多种方法,如one-hot编码、基于共现矩阵的方式、word2vec、动态词向量ELMo等。 一、one-hot向量 优势:简单易懂、稀疏存储 不足:维度...
  • 最近刚出来效果最好的模型是bert的动态词向量,刷新了各个自然语言处理Task的成绩如QA,NER,CLASSIFICATION等 接下来就让我们实际来构建一个以bert为后端词向量的文本分类模型 1、首先安装腾讯开源的Bert-as-...
  • ELmo解决单词考虑上下文,词向量的表示,动态调整词向量。目前来说最好的方法 首先我们通过训练集训练已经得到了back词向量,然后在测试集中,如果出现了这个back单词,我们不是直接使用训练好的词向量, 而是将训练...
  • 关于词向量的问题

    2020-04-17 00:35:19
    word2vec是CBOW或者Skip-gram等学出来的,通过大规模语料,学习自然语言本身的序列信息,它学习的通用特征,静态词向量。ELMo(Embedding from Language Models)模型核心是一个双层双向的LSTM网络 ,将其隐状态抽...
  • 我们都体会到了BERT预训练模型的强大,主要一点就是它可以动态生成句向量,根据不同的上下文而得到不同的句向量,当然也可以得到词向量,但是如果我想比较不同语境下的词向量该怎么做呢?比如这两句话“在手机品牌中...
  • 传统的短文本聚类模型存在维度高、数据稀疏和缺乏语义信息等问题,针对互联网短文本特征稀疏、语义存在奇异性和动态性而导致的短文本聚类性能较差的问题,提出了一种基于特征词向量的文本表示和基于特征词移动距离的...
  • Embedding字面意思:嵌入 ...基于内容的 embedding 方法:涉及到 NLP 相关的文本 embedidng 方法,包括静态向量 embedding(如 word2vec、GloVe 和 FastText)和动态向量 embedding(如 ELMo、GPT 和 BERT) 简
  • 我们都体会到了BERT预训练模型的强大,主要一点就是它可以动态生成句向量,根据不同的上下文而得到不同的句向量,当然也可以得到词向量,但是如果我想比较不同语境下的词向量该怎么做呢?比如这两句话“在手机品牌中...
  • 于是,出现了同样是静态表示的Glove,动态表示的Elmo,Bert,Xlnet等。特别是bert,xlnet在NLP多项任务上大杀四方。同时,word embedding的研究倾向于复杂的模型,需要强大的计算能力,所以,Word embedd...
  • 目录 一、word embedding 1.1 介绍 1.2 Word2Vec有两种训练方法: 1.3 Word Embedding的...2.1 ELMO的本质思想是:本身是个根据当前上下文对Word Embedding动态调整 2.2 ELMO采用了典型的两阶段过程: 2.3 ...
  • 作者:王小草 背景介绍 最近对句子的分布式嵌入...嵌入或表征,是用具有语义相似性的向量来表征自然语言中的词语。以此类推,句子嵌入或句子表征,就是用向量来表征自然语言中的句子,使得向量中携带着句子的语...
  • 动态词向量(训练过程中更新词向量),所有不同形式的输入均以封装好,调用方法如下 静态词向量,请执行 python word2vec_gensim.py,该版本是采用gensim来训练词向量 动态词向量,请执行 python word2vec.py,该版本...
  • 上下文相关的词嵌入 静态词向量的没个词有一个...比较常见的动态词向量训练方法有elmo、bert等 bert使用的是transformer的encoder,任务是mask语言模型和NSP(预测下一个句子) bert的fine-tuning训练方式 ...
  • 文章目录什么是语义表示静态词向量动态词向量(上下文词向量)位置编码ERNIE的原理介绍神经网络上的改造辅助任务学习过程ERNIE的应用案例性能不敏感的场景:直接使用ERNIE 的模型蒸馏案例:搜索问答Query识别和QP...
  • 文章目录知识图谱行业发展知识图谱构建流程工具类概述simhash算法simhash库数据集数据清洗计算simhash值余弦距离数据集数据清洗计算余弦距离知识...ERNIE什么是语义表示静态词向量动态词向量(上下文词向量)ERNIE原理...
  • 现在,向量这个可以意味着很多不同的东西。Vector 是 20世纪80年代初中期在加利福尼亚州萨克拉门托形成的新波浪岩带的名称。这是凯洛格加拿大公司生产的早餐麦片的名字。在流行病学领域,载体被用来描述从一个宿主...
  • cnn在sentence分类和向量实验

    千次阅读 2017-08-10 20:02:38
    每一个行是一个word2vec的向量。 共n行,代表n个。 然后卷积运算,窗口是3,4,5。 输入层 如图所示,输入层是句子中的词语对应的word vector依次(从上到下)排列的矩阵,假设句子有 n 个,vector的维数为 k ...
  • 为此本文提出一种基于残差结构的深层多通道CNN模型(MCCNN),通过BERT(Bidirectional Encoder Representation from Transformers)产生动态词向量来提高词汇语义表示的准确性,利用多头注意力捕获长句子的依赖并通过...
  • 在“Word2Vec的实现”一节中,我们在小规模数据集上训练了一个 Word2Vec 词嵌入模型,并通过词向量的余弦相似度搜索近义词。虽然 Word2Vec 已经能够成功地将离散的单词转换为连续的词向量,并能一定程度上地保存词与...
  • 1. 背景 1.1 NLP产品应用 翻译,智能音响,搜索引擎,智能推荐 ...动态词向量:rnn,lstm,transformer ELMo GPT BERT XLM XLNet ERNIE 监督数据有限,用无监督的方式,大规模预训练 2...
  • 最近在跑模型时因为用BERT预训练模型提取评论文本的动态词向量,对于6000个用户,每个用户12条评论,每条评论202个单词,768维的向量大约有40G,如果直接提取,无论是内存还是显存都吃不下,而且如果在模型中一条条...
  • 1、文本表示哪些方法? 下面对文本表示进行一个归纳,也就是对于一篇文本可以如何用数学语言表示呢? ... 基于词向量动态表征:elmo、GPT、bert 2、传统的词向量有什么问题?怎么解决?各种...
  • 近几年,用海量无标记文本数据训练出的低维单词表征向量,也就是嵌入 embedding,已经在包括词性标注、句法解析、命名实体识别、语意角色标注、机器翻译等许多任务中展现出了有效性。但这种嵌入是静态的...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

动态词向量