欢迎订阅本专栏:《PyTorch深度学习实践》
订阅地址:https://blog.csdn.net/sinat_33761963/category_9720080.html
- 第二章:认识Tensor的类型、创建、存储、api等,打好Tensor的基础,是进行PyTorch深度学习实践的重中之重的基础。
- 第三章:学习PyTorch如何读入各种外部数据
- 第四章:利用PyTorch从头到尾创建、训练、评估一个模型,理解与熟悉PyTorch实现模型的每个步骤,用到的模块与方法。
- 第五章:学习如何利用PyTorch提供的3种方法去创建各种模型结构。
- 第六章:利用PyTorch实现简单与经典的模型全过程:简单二分类、手写字体识别、词向量的实现、自编码器实现。
- 第七章:利用PyTorch实现复杂模型:翻译机(nlp领域)、生成对抗网络(GAN)、强化学习(RL)、风格迁移(cv领域)。
- 第八章:PyTorch的其他高级用法:模型在不同框架之间的迁移、可视化、多个GPU并行计算。
skipgram是很经典的词向量模型,在大量的语料上进行训练,得到每个词的嵌入向量。
相关论文:
- “Distributed Representations of Sentences and Documents”
- “Efficient estimation of word representations in vector space”
相关博客:
- 网上搜索“word2vec","skipgram"一搜一大把
- 对词向量的系统了解可以参考我的博客:https://blog.csdn.net/sinat_33761963/article/details/53521149
现在来看看PyTorch如何实现Skipgram并训练后获取词向量。
6.4.1 准备数据
准备语料:一般情况下语料会存储在文本文件中,一句话为一行,用python都进来后存放在一个list中,每个元素是文本中的一行。接着对每行为本做分词,英文可以直接按照空格分,中文就需要用到分词器了,分割后就得到了以下代码中的corpus_list。
构建词典:这一步不可或缺,我们要将每个词都转换成数字代表的索引,方便模型识别,而模型输出的索引,也需要再转变为文字,方便人查看。因此,需要建立两个dict, 一个是{索引:词}, 一个是{词:索引},即代码中的ix2word, word2ix。
构建训练对:语料一方面用于构建词典,另一方面需要预处理成模型可以读入的训练对(x,y), skipgram是输入中心词,预测上下文词,因此其数据对应为(center_word, contenx_word),且需要转换成索引形式(center_word_ix, contenx_word_ix)
import torch
import torch.nn as nn
import torch.nn.functional as F
# 准备语料
corpus = ['he is a king',
'she is a queen',
'he is a man',
'she is a woman',
'warsaw is poland capital',
'berlin is germany capital',
'paris is france capital']
corpus_list = [sentence.split() for sentence in corpus]
# 构建词典
word2ix = {
}
for sentence in corpus:
for word in sentence.split():
if word not in word2ix:
word2ix[word] = len