Word2Vec语言模型训练和使用

        在pytorch框架下,参考《动手学深度学习》搭建word2vec语言模型,并在IMDB数据集中的train子集训练得到词嵌入。

1、准备工作

1.1 下载数据集

        为使用该数据集,首先你需要 下 载 原 始 数 据 aclImdb_v1.tar.gz ( 地 址 :
https://ai.stanford.edu/~amaas/data/sentiment/)。 

解压后得到如下文件:

Word2Vec语言模型训练和使用_第1张图片

1.2 数据预处理

        对下载的数据集中的test和train分别进行预处理从而方便后续模型训练。预处理主要包括:大小写转化、特殊字符处理、stopwords过滤、分词,最后将处理后的数据存储为CSV格式,以方便后续调试。借用了nltk的 stopwords 集,用来将像 i, you, is 之类的对分类效果基本没影响但出现频率比较高的词,从训练集中清除。关于数据预处理这部分网上有很多公开的参考代码。

Word2Vec语言模型训练和使用_第2张图片

2、训练语言模型得到词向量

2.1 使用Gensim库训练语言模型得到词向量

        Gensim是一个免费的 Python库,旨在从文档中自动提取语义主题,尽可能高效(计算机方面)和 painlessly(人性化)。更多的介绍可以查看链接

介绍 (apachecn.org)icon-default.png?t=M85Bhttps://gensim.apachecn.org/#/blog/Introduction/README

        Gensim旨在处理原始的非结构化数字文本(**纯文本**)。在Gensim的算法,比如Word2Vec,FastText,潜在语义分析(LSI,LSA,see LsiModel),隐含狄利克雷分布(LDA,见LdaModel)等,自动训练文档的躯体内检查统计共生模式发现的文件的语义结构。这些算法是无监督的,这意味着不需要人工输入 - 您只需要一个纯文本文档。

        我们使用Gensim中Word2Vec 模型的API来训练得到词向量。Word2Vec的期望输入是经过分词的句子列表(也就是上一步预处理的结果),是一个二维数组。该模型API有多个参数可以调整,包括词向量的维度vector_size、扫描句子的窗口大小window 、训练采用的算法sg和迭代遍历语料库的次数epochs等。主要步骤如下:

 (1)加载CSV文件,然后通过csvStream函数将其封装为训练数据迭代器。

Word2Vec语言模型训练和使用_第3张图片

 (2)使用gensim.models.Word2Vec()函数定义模型,并利用model.train()进行训练,利用model.save()函数将模型训练结果保存至指定位置(这里使用了多个词向量维度和迭代次数来训练,将会得到多个不同的训练结果)。

Word2Vec语言模型训练和使用_第4张图片

 (3)加载上一步保存的Word2Vec模型,使用model.wv.most_similar()函数进行测试,验证训练结果(对上一步使用了多个词向量维度和迭代次数训练得到的结果分别进行验证测试)。

Word2Vec语言模型训练和使用_第5张图片

2.2 手动搭建并训练语言模型得到词向量

        手动搭建语言模型可以参考《动手学深度学习》的相关资料,具体描述了基本概念和基于跳元语法模型,在PTB数据集上使用负采样预训练word2vec。链接如下:

14.1. 词嵌入(word2vec) — 动手学深度学习 2.0.0 documentation

https://zh-v2.d2l.ai/chapter_natural-language-processing-pretraining/word2vec-pretraining.html

        本文参考以上代码搭建word2vec语言模型,并在IMDB数据集中的train子集训练得到词嵌入。主要步骤如下:

  1. 读取上一步的CSV文件,构建数据集。
  2. 过滤掉词频较低的单词,过滤频率门限为5。
  3. 对筛选出来的单词建立一个双向索引。
  4. 将句子索引化。
  5. 二次采样,将出现频率过高的单词删去一些。
  6. 进行中心词和背景词的提取,窗口大小设为5。
  7. 负采样。
  8. 通过嵌入层和批量矩阵乘法构建跳元模型。
  9. 定义损失函数为二元交叉熵损失。
  10. 初始化模型参数并进行训练,得到训练结果并保存。

 具体代码保存在word2vec.py,训练的输出:

Word2Vec语言模型训练和使用_第6张图片

 

 

 

 

 

你可能感兴趣的:(深度学习,word2vec,语言模型)