tensorflow笔记 embedding_lookup

本文详细介绍了TensorFlow中的embedding_lookup函数,包括其工作原理、实现方式以及如何使用预先训练好的词向量矩阵来改进函数表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tensorflow中有一个函数embedding_lookup可以很方便地将输入转化为嵌入矩阵。一般方便起见,我们会使用一个由随机数组成的embedding矩阵,但效果个人觉得和one-hot差不太多。这个矩阵仅仅是初始化矩阵,在更新权重的时候是会改变的。

实现很简单:

inputs = tf.placeholder(tf.int32, name='inputs')
with tf.variable_scope("embedding", reuse=tf.AUTO_REUSE):
    embedding = tf.get_variable('embedding', [vocab_size, embedding_size])
    inputs_embedded = tf.nn.embedding_lookup(embedding, inputs)

with tf.Session() as sess:
    init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    sess.run(init)
    print(sess.run(embedding))
    print(sess.run(encoder_inputs_embedded,feed_dict={encoder_inputs:inputs}))

embedding是一个词典维度x词向量维度的矩阵,每一行代表一个词的词向量,列的索引值代表词在字典中的索引值。inputs是已经根据字典转化为向量的一个列表。embedding_lookup就是根据inputs中的向量,即该词在字典中的索引值,在embedding中找到对应行,读取该行,也就是这个词的词向量。

值得注意的是embedding_lookup不简单只是一个转换成词向量的字典,可以视为一个全连接网络,也就是说在更新的过程中是可以当做权重进行训练的。

 

一个简单的例子:

embedding = [[1 0 0 0 0]
             [0 1 0 0 0]
             [0 0 1 0 0]
             [0 0 0 1 0]
             [0 0 0 0 1]]
inputs = [1,2,2,1,0,3]

inputs_embedded = [[0 1 0 0 0],
                   [0 0 1 0 0],
                   [0 0 1 0 0],
                   [0 1 0 0 0],
                   [1 0 0 0 0],
                   [0 0 0 1 0]]

知道这个原理之后,我们就很容易改进embedding矩阵,使用我们自己通过word2vec训练的矩阵作为初始值,见word2vec训练中文词向量中文词向量。

tf.nn.embedding_lookup是一个用于选取张量中索引对应元素的函数。它的用法是tf.nn.embedding_lookup(tensor, id),其中tensor是输入张量,id是要查找的索引。根据id在tensor中找到对应的元素并返回。 举个例子,假设我们有一个嵌入矩阵embedding和一个输入id列表input_ids。我们可以使用tf.nn.embedding_lookup(embedding, input_ids)来找到embedding中与input_ids中的id对应的向量。如果input_ids=[1, 2, 3],则函数会返回embedding中下标为1, 2, 3的向量组成的矩阵。 需要注意的是,tf.nn.embedding_lookup不仅仅是简单地查表,查到的向量是可以训练的,也就是说它是一种全连接层,训练参数的个数是类别数乘以嵌入向量的大小。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [tf.nn.embedding_lookup()函数](https://blog.csdn.net/yql_617540298/article/details/88394120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [tf.nn.embedding_lookup()的用法](https://blog.csdn.net/yangfengling1023/article/details/82910951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值