兒童節(jié)快樂榄融,保留初心,砥礪前行
- embedding通俗易懂說(shuō)就是將word映射為向量翁授。
- 對(duì)自然語(yǔ)言處理中需要讓機(jī)器理解word與word之間的關(guān)系拣播,例如法國(guó)對(duì)應(yīng)巴黎、中國(guó)對(duì)應(yīng)北京收擦,就需要用到embedding技術(shù)使詞與詞產(chǎn)生的向量之間存在某種聯(lián)系(例如意思相近的詞產(chǎn)生的向量在空間上更加接近等等)贮配。這些都是后話。
- 這里只記錄tensorflow中關(guān)于embedding給出的一個(gè)函數(shù)
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:也就是說(shuō)在參數(shù)params中查找ids所對(duì)應(yīng)的表示塞赂,如果這樣的敘述并不清楚泪勒,那么參考下邊這個(gè)簡(jiǎn)單的例子。
import numpy as np
import tensorflow as tf
sess = 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]})
運(yùn)行結(jié)果
jianshu6201.png
從以上簡(jiǎn)單示例可以看出宴猾,embedding將變量表現(xiàn)成了one-hot形式圆存,而
input_embedding = tf.nn.embedding_lookup(embedding, input_ids)
就是把input_ids中給出的tensor表現(xiàn)成embedding中的形式。
簡(jiǎn)單來(lái)說(shuō)上圖中紅線上部是創(chuàng)建了一個(gè)embedding詞典仇哆,紅線下部是通過(guò)輸入的input_ids查詢上部的字典得到embedding后的值沦辙。而字典是可以由用戶隨意創(chuàng)建的,圖中給出的是一個(gè)one-hot字典讹剔,還可以自由創(chuàng)建其他字典油讯,例如使用正態(tài)分布或均勻分布產(chǎn)生(0,1)的隨機(jī)數(shù)創(chuàng)建任意維度的embedding字典
- 也就是說(shuō) embedding_lookup是tensorflow中給出的用于以某種方式進(jìn)行embedding的函數(shù)
如果參數(shù)partition_strategy是 "mod"辟拷,我們把每一個(gè)id分配到間隔p的分區(qū)中(p = id % len(params))撞羽。例如,13個(gè)ids劃分為5個(gè)分區(qū):[[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8], [4, 9]]
如果參數(shù)partition_strategy是 "div"衫冻,我們把用連續(xù)的方式將ids分配到不同的分區(qū)诀紊。例如,13個(gè)ids劃分為5個(gè)分區(qū):[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]]