我想在Tensorflow中使用SVD(奇异值分解)从text8语料库创建矢量表示。我使用了以下代码,但未采用维数:
u,s,v = tf.svd(coocurrence_matrix)
我需要类似TruncatedSVD in scikit-learn之类的东西。我该怎么办?在Tensorflow中可以做同样的事情吗?
最佳答案
在您处理cs20si的第一个任务时,我会考虑一下。
形成任意大小的共现矩阵,例如(1000,1000)。一旦有了单词(列表)和将单词映射到索引的字典,就可以使用ndarray形成并发矩阵,例如
cooccurrence_matrix = np.zeros((VOCAB_SIZE, VOCAB_SIZE))
n_words = len(words)
for i, current_word in enumerate(words):
if current_word not in dictionary:
current_word = 'UNK'
if i != 0:
left_word = words[i-1]
if left_word not in dictionary:
left_word = 'UNK'
cooccurrence_matrix[dictionary[current_word]][dictionary[left_word]] += 1
if i < n_words-1:
right_word = words[i+1]
if right_word not in dictionary:
right_word = 'UNK'
cooccurrence_matrix[dictionary[current_word]][dictionary[right_word]] += 1
print cooccurrence_matrix.shape
之后,您可以直接使用tf.svd,因为它只需要张量。
tf_svd = tf.svd(matrix, compute_uv=True)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
svd, u, v = sess.run(tf_svd, feed_dict={matrix:cooccurrence_matrix})
如tf.svd文档中所述,tf.svd的输出将具有三个值。我将从字典大小100开始,看看一切是否顺利。
关于python - Tensorflow中的SVD,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44224914/