循环神经网络RNN基础
-
文本的tokenization
(1)概念和工具的介绍 tokenization就是通常所说的分词,分出的每一个词语我们把它成文token 常见的分词工具有很多,比如: - jieba分词:https://github.com/fxsjy/jieba - 清华大学的分词工具THULAC:https://github.com/thunlp/THULAC-Python (2)中英文分词的方法 a.把句子转化为词语 比如:我爱深度学习可以分为[我,爱,深度学习] b.把句子转化为单个字 比如:我爱深度学习的token是[我,爱,深,度,学,习]
-
N-garm表示方法
N-garm是一组一组的词语,其中的N表示能够被一起使用的词的数量,考虑到了句子中词语的顺序。 例如: text = "深度学习(英语:deep )是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法" cuted = jieba.lcut(text) #lcut方法生成一个列表 print([cuted[i:i+2] for i in range(len(cuted)-1)]) # cuted[i:i+2]、len(cuted)-i表示分成i+1个单词为一组 [['深度', '学习'], ['学习', '('], ['(', '英语'], ['英语', ':'], [':', 'deep'], ['deep', ' '], [' ', ')'], [')', '是'], ['是', '机 器'], ['机器', '学习'], ['学习', '的'], ['的', '分支'], ['分支', ','], [',', '是'], ['是', '一种'], ['一种', '以'], ['以', '人工神经网络'], ['人工神经网络', '为'], ['为', '架构'], ['架构', ','], [',', '对'], ['对', '数据'], ['数据', '进行'], ['进行', '表征'], ['表征', '学习'], ['学习', '的'], ['的', '算法']] 在深度学习比如RNN中会自带N-gram方法
-
向量化
因为文本不能够直接被模型计算,所以需要将其转化为向量 把文本转化为向量有两种方法: a.转化为one-hot编码 b.转化为word embedding (1)one-hot 编码 使用稀疏的向量表示文本,占用空间多 (2)word embedding word embedding是深度学习中表示文本常用的一种方法,和one-hot编码不同,word embedding使用了浮点型的稠密矩阵来表示token。 根据词典的大小,我们的向量通常使用不同的维度,例如100,256,300等,其中向量中的每一个值是一个超参数,其初始值是随机生成的,之后会在训练的过程中进行学习而获得。 如果我们文本中有20000个词语,如果使用one-hot编码,那么我们会有20000*20000的矩阵,其中大多数的位置都为0,但是如果我们使用word embedding来表示的话,只需要20000*维度,比如20000*300 (3)word embedding API torch.nn.Embedding(num_embeddings,embedding_dim) 参数介绍: a.num_embeddings:词典的大小 b.embedding_dim:embedding的维度 使用方法: embedding = nn.Embedding(vocab_size,300) #实例化 input_embeded = embedding(input) #进行embedding的操作 (4)数据的形状变化 假设每个batch中的每个句子有10个词语,经过形状为[20,4]的Word embedding之后,原来的句子会变成[batch_size,10,4]的形状。 增加了一个维度,这个维度是embedding的dim