nlp自然语言处理(不一定是文本,图形也可以)接入深度学习(向量处理),需要把文字等内容转换成向量输入
深度学习分为有监督和无监督学习两类,对应分类和生成算法都是向量输入
词嵌入最简单的模型是one-hot,但数据计算量太大,所以后续更多的是减少数据量和建立关联性
输入one-hot输出概率分布,词向量隐藏层输出(非最终输出) 词向量纬度:w(词数量)*v(隐藏层输出) word2vector通过分析词语的常用组合得到词语的分类信息,类似词语填空 word2vector依赖局部统计信息、对全局缺少依赖
import tensorflow as tf
# 假设vocab_size = 1000
VOCAB_SIZE = 1000
# 假设embedding_size = 300
EMBEDDINGS_SIZE = 300
# 输入单词x是一个[1,vocab_size]大小的矩阵。当然实际上我们一般会用一批单词作为输入,那么就是[N, vocab_size]的矩阵了
x = tf.placeholder(tf.float32, shape=(1,VOCAB_SIZE))
# W1是一个[vocab_size, embedding_size]大小的矩阵
W1 = tf.Variable(tf.random_normal([VOCAB_SIZE, EMBEDDING_SIZE]))
# b1是一个[1,embedding_size]大小的矩阵
b1 = tf.Variable(tf.random_normal([EMBEDDING_SIZE]))
# 简单的矩阵乘法和加法
hidden = tf.add(tf.mutmul(x,W1),b1)
W2 = tf.Variable(tf.random_normal([EMBEDDING_SIZE,VOCAB_SIZE]))
b2 = tf.Variable(tf.random_normal([VOCAB_SIZE]))
# 输出是一个vocab_size大小的矩阵,每个值都是一个词的概率值
prediction = tf.nn.softmax(tf.add(tf.mutmul(hidden,w2),b2))
# 损失函数
cross_entropy_loss = tf.reduce_mean(-tf.reduce_sum(y_label * tf.log(prediction), reduction_indices=[1]))
# 训练操作
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy_loss)
词向量输出位,共现方阵大小v*v(隐藏层输出)
类似词嵌入的方式,可以在分类算法中,把隐藏层输出作为图嵌入的表征
输入词向量,通过输出词向量 encoder=》decoder模型