tf.nn.embedding_lookup

来源:互联网 发布:windows屏幕水印 编辑:程序博客网 时间:2024/05/16 18:30

保留初心,砥砺前行

  • embedding通俗易懂说就是将word映射为向量。
  • 对自然语言处理中需要让机器理解word与word之间的关系,例如法国对应巴黎、中国对应北京,就需要用到embedding技术使词与词产生的向量之间存在某种联系(例如意思相近的词产生的向量在空间上更加接近等等)。这些都是后话。
  • 这里只记录tensorflow中关于embedding给出的一个函数
    embedding_lookup
    tensorflow官方文档见这里
tf.nn.embedding_lookup(params, ids, partition_strategy='mod', name=None, validate_indices=True, max_norm=None)

作用:Looks up ids in a list of embedding tensors:也就是说在参数params中查找ids所对应的表示,如果这样的叙述并不清楚,那么参考下边这个简单的例子。

import numpy as npimport tensorflow as tfsess = tf.InteractiveSession()embedding = tf.Variable(np.identity(6, dtype=np.int32))input_ids = tf.placeholder(dtype=tf.int32, shape=[None])input_embedding = tf.nn.embedding_lookup(embedding, input_ids)sess.run(tf.global_variables_initializer())print sess.run(embedding)print sess.run(input_embedding, feed_dict={input_ids: [4, 0, 2, 4, 5, 1, 3, 0]})

运行结果
jianshu6201.png
从以上简单示例可以看出,embedding将变量表现成了one-hot形式,而input_embedding = tf.nn.embedding_lookup(embedding, input_ids)就是把input_ids中给出的tensor表现成embedding中的形式。

简单来说上图中红线上部是创建了一个embedding词典,红线下部是通过输入的input_ids查询上部的字典得到embedding后的值。而字典是可以由用户随意创建的,图中给出的是一个one-hot字典,还可以自由创建其他字典,例如使用正态分布或均匀分布产生(0,1)的随机数创建任意维度的embedding字典

  • 也就是说 embedding_lookup是tensorflow中给出的用于以某种方式进行embedding的函数

如果参数partition_strategy是 “mod”,我们把每一个id分配到间隔p的分区中(p = id % len(params))。例如,13个ids划分为5个分区:[[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8], [4, 9]]
如果参数partition_strategy是 “div”,我们把用连续的方式将ids分配到不同的分区。例如,13个ids划分为5个分区:[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]]

原创粉丝点击