什么是文本张量
将一段文本以张量的形式表示,其中将文本中的词以向量的形式表示,称为词向量,由各个词向量按照顺序组成矩阵的形式表示文本
为什么需要将文本以张量的形式表示
为的是可以作为计算机程序的输入
文本张量表示的方法
-
onehot编码:将每个词以n个元素组成的向量表示,其中每一个词向量中有且只有1位置个为1,其他的位置为0(n是不同词汇的总数)
onehot编码的缺点:词与词的没有任何关联关系,同时大语料的数据集情况下,每个词的向量由于长度过长导致占用大量的内存使用keras的方式实现
from sklearn.externals import joblib
from tensorflow.keras.preprocessing.text import Tokenizer
vocabs = ['bai','bai','hai','sheng','happy', 'ha', 'ha']
tokenizer=Tokenizer(num_words=None,char_level=False)
tokenizer.fit_on_texts(vocabs)
for vocab in vocabs:
vocab_zero=[0]*len(vocabs)
vocab_index=tokenizer.texts_to_sequences([vocab])[0][0]-1
vocab_zero[vocab_index]=1
print(vocab_zero)
# 保存引射器
joblib.dump(tokenizer,'./tokenizer')
**运行结果**
[1, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0]
[0, 1, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0, 0]
-
word2vec
word2vec 是2012年被被Google提出来的将文本生成词向量模型,w它是将词汇表示成向量的无监督的训练方法,该过程会构建神经网络模型,包含CBOW和skipgram两种训练模式CBOW(Continuous bag of words)模式
给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象, 使用上下文词汇预测目标词汇.
过程:
-
将每个词的oneho [1,n]t编码向量作为输入层的输入
-
分别乘以一个[V,N] 权重矩阵W,将分别得到的结果相加求平均作为隐层向量 表示成[1,N]
-
将第2步的结果乘以输出权重矩阵W’ (NxV)得到结果表示成[1,V]
-
[1,V]的向量经过sigmoid输出0到1的概率分布,它将与我们真正的目 标矩阵即词的one-hot编码矩阵(1xn)进行损失的计算, 然后更新网络参数W ,W’ 完成一次模型迭代
-
迭代多轮训练完毕后,输入层的每个词的onehot与矩阵W相乘得到的向量的就是我们想要的词向量
-
skipgram模式
给定一段用于训练的文本语料, 再选定某段长度(窗口)作为研究对象, 使用目标词汇预测上下文词汇
与CBOW的计算过程不一样的是CBOW的第4步中W’ 是多个,所以得到多个[1,V]的向量