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实现(乞丐版)的主要内容,如果未能解决你的问题,请参考以下文章

基于pytorch实现word2vec

乞丐版JAVA扫雷

Java实现QQ微信轰炸机1.2(斗图乞丐版)

通学智能合约系列(二十二)--乞丐版众筹项目实践

通学智能合约系列(二十二)--乞丐版众筹项目实践

通学智能合约系列(二十二)--乞丐版众筹项目实践