2.2 语言模型和词向量 tensorflow词向量

----------------------------大纲--------------------------

1 随着模型不断更新

2 直接使用预先训练好的词向量如word2vec, glove

--------------------------------------------------------------

省去数据读取以及预处理模块

1 随着模型不断更新

1.1 train文件中输入语句用index表示

#表示最长的句子长度max_document_length

max_document_length=max([len(x.split(" "))for xin x_text])

vocab_processor = learn.preprocessing.VocabularyProcessor(max_document_length)

#拿到句子中的index向量表示(注意这里是词的index)

x = list(vocab_processor.fit_transform(x_text))

1.2 模型文件中index向量转化为词向量

self.input_x = tf.placeholder(tf.int32, [None, sequence_length],name="input_x")

with tf.name_scope("embedding"):

#tf.random_uniform([vocab_size, embedding_size], -1.0,1.0)词向量采用均匀分布作为初始化

# trainable=Ture表示模型中不断迭代更新词向量的值,如果trainable=False表示采用第三方预先训练好的词向量结果

self.W = tf.Variable(tf.random_uniform([vocab_size, embedding_size], -1.0,1.0),trainable=True, name="W")

self.embedded_x = tf.nn.embedding_lookup(self.W,self.input_x)


2 直接使用预先训练好的词向量如word2vec, glove

如下以glove为例,格式如下,词以及其对应的词向量

2.1 train文件中

# 读文件获取glove中的词汇,以及其对应的词向量

vocab, embd = data_helpers.loadGloVe(FLAGS.embedding_file, FLAGS.embedding_dim)

embedding = np.asarray(embd)

def tokenizer(iterator):

    for value in iterator:

        yield re.split(r'\s', value)

# 将glove文件中的词转化为index

vocab_processor = learn.preprocessing.VocabularyProcessor(max_sequence_length, tokenizer_fn=tokenizer)

vocab_processor.fit(vocab)

#拿到句子中的index向量表示(注意这里是词的index)

x = list(vocab_processor.fit_transform(x_text))

2.2 model文件中

#传入glove的初始值的占位符

self.embedding_placeholder = tf.placeholder(tf.float32, [self.vocab_size,self.embedding_size],

name="embedding")

self.input_x = tf.placeholder(tf.int32, [None, sequence_length],name="input_x")

with tf.variable_scope("embedding"):

#trainable=False的设置如上

       self.W = tf.Variable(tf.constant(0.0,shape=[self.vocab_size,self.embedding_size]),                     trainable=False, name="W")

# 把glove初始值给self.W

self.embedding_init = tf.assign(self.W,self.embedding_placeholder)

self.embedded_x = tf.nn.embedding_lookup(self.W,input_x )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面 态度决定高度!让优秀成为一种习惯! 世界上没有什么事儿是加一次班解决不了的,如果有,就加两次!(- - ...
    夜尽天明时阅读 5,358评论 0 7
  • Deep Learning 算法已经在图像和音频领域取得了惊人的成果,但是在 NLP 领域中尚未见到如此激动人心的...
    MobotStone阅读 3,012评论 1 12
  • 近日,谷歌官方在 Github开放了一份神经机器翻译教程,该教程从基本概念实现开始,首先搭建了一个简单的NMT模型...
    MiracleJQ阅读 6,468评论 1 11
  • TF API数学计算tf...... :math(1)刚开始先给一个运行实例。tf是基于图(Graph)的计算系统...
    MachineLP阅读 3,552评论 0 1
  • 明知道爱情并不牢靠 但是我还是拼命往里跳 明知道再走可能是监牢 但是我还是相信只是煎熬 朋友都劝我不要不要 不要拿...
    游由310阅读 310评论 0 0