Word2Vec的PyTorch实现(乞丐版)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Word2Vec的PyTorch实现(乞丐版)相关的知识,希望对你有一定的参考价值。
参考技术A 这里主要进行分词,词汇表构造以及词汇索引构造包括 batch_size, embedding_size, 窗口大小和词汇表大小
这里就是将数据包装为torch.utils.data.Dataset类,并且用DataLoader类来加载数据
假设所有文本分词,转为索引之后的 list 如下图所示
根据论文所述,我这里设定 window size=2,即每个中心词左右各取 2 个词作为背景词,那么对于上面的 list,窗口每次滑动,选定的中心词和背景词如下图所示
那么 skip_grams 变量里存的就是中心词和背景词一一配对后的 list,例如中心词 2,有背景词 0,1,0,1,一一配对以后就会产生 [2,0],[2,1],[2,0],[2,1]。skip_grams 如下图所示
由于 Word2Vec 的输入是 one-hot 表示,所以我们先构建一个单位矩阵,利用 np.eye(rows) 方法,其中的参数 rows 表示单位矩阵的行数,对于这个问题来说,语料库中总共有多少个单词,就有多少行。
然后根据 skip_grams 每行第一列的值,取出相应的行。将这些取出的行,append 到一个 list 中去,最终的这个 list 就是所有的样本 X(即one-hot表示)。标签不需要 one-hot 表示,只需要类别值,所以只用把 skip_grams 中每行的第二列取出来存起来即可
最后第三步就是构建 dataset,然后定义 DataLoader
模型架构图:
注意,隐层的激活函数是线性的,相当于没做任何处理。训练这个神经网络,用反向传播算法(本质上是链式求导)
以上是关于Word2Vec的PyTorch实现(乞丐版)的主要内容,如果未能解决你的问题,请参考以下文章