【高级RNN】预训练词嵌入导入文本分类任务——GLOVE模型

在深度学习中,词嵌入是文本模型的强大组成部分。实践中常使用预训练词嵌入。本文展示如何将TensorFlow预训练的词嵌入应用于简单文本分类任务,还会用到双向RNN层和门限递归单元,项目需下载Common Crawl向量,示例参考相关书籍。

预训练词嵌入导入文本分类任务——GLOVE模型

       在深度学习中,词嵌入是文本模型中强大的组成部分。在应用中十分常见的做法是,先使用例如word2vec模型在大量无标记问版中训练出的词向量,然后在后续的任务(例如有监督的文件分类任务)中使用这些词向量。

       使用无监督方法从头训练词向量通常需要极大的语料库。在实践中,我们使用预训练的词嵌入,这些词嵌入是从巨大语料库上训练的,可以通过网络获取。

       在本文中,我们将展示如何将TensorFlow预训练的词嵌入应用在一个简单的文本分类任务中。并借此机会使用在深度学习应用中强大的组件,这些组件在自然语言理解中更加强大且不可或缺:双向RNN层和门限递归单元。

       本项目需要下载Common Crawl向量(840B个符号),进而推进本次示例。预训练向量的信息请参考网页项目网页(http://nlp.stanford.edu/projects/glove/

具体解释见代码注释

代码如下:

import zipfile
import numpy as np
import tensorflow as tf

path_to_glove = "glove/glove.840B.300d.zip"
PRE_TRAINED = True
GLOVE_SIZE = 300
batch_size = 128
embedding_dimension = 64
num_classes = 2
hidden_layer_size = 32
times_steps = 6

# 创建模拟数据
digit_to_word_map = {
   
   0: "PAD_TOKEN", 1: "One", 2: "Two", 3: "Three", 4: "Four",
                     5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"}
even_sentences = []
odd_sentences = []
seqlens = []

for i in range(10000):
    rand_seq_len = np.random.choice(range(3, 7))  # 在3-6范围内抽取一个随机数,作为生成句子的长度
    seqlens.append(rand_seq_len)  # 将抽取的随机数添加至末尾
    rand_odd_ints = np.random.choice(range(1, 10, 2), rand_seq_len)   # 在1-9之间获取数量为rand_seq_len的奇数
    rand_even_ints = np.random.choice(range(2, 10, 2), rand_seq_len)  # 在2-9之间获取数量为rand_seq_len的偶数
#                                                                      (个人认为应该改为range(0, 10, 2),但问题不大)
    if rand_seq_len < 6:  # 若长度不足6位,为了统一长度至6位,在末尾补0
        rand_odd_ints = np.append(rand_odd_ints, [0] * (6 - rand_seq_len))
        rand_even_ints = np.append(rand_even_ints, [0] * (6 - rand_seq_len))

    # 原文中even_sentences与rand_even_ints的对应关系是反的,此处为调整后的结果
    even_sentences.append(" ".join([digit_to_word_map[r] for r in rand_even_ints]))
    odd_sentences.append(" ".join([digit_to_word_map[r] for r 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值