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

1、准备工作

1.1 下载数据集

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

解压后得到如下文件:

1.2 数据预处理

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

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

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

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

介绍 (apachecn.org)https://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函数将其封装为训练数据迭代器。

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

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

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语言模型训练和使用相关推荐

  1. Word2Vec 增量训练

    一. 问题由来 word2vec的本质是一个神经网络语言模型,基于语言模型进行分布式词向量的训练.它需要大量的语料进行训练,从而找到词与词之间的关系,但是当我们已经训练好了一个word2vec模型之后 ...

  2. Spark下的word2vec模型训练

    一.引言 前边一节介绍了Word2Vec模型训练同义词,那么在大数据量的情况下,我们自然想到了用spark来进行训练.下面就介绍我们是如何实现spark上的模型训练. 二.分词 模型训练的输入是分好词 ...

  3. [sphinx]中文语言模型训练

    一,不用分词的短词组语言模型训练 参考资源:http://cmusphinx.sourceforge.net/wiki/tutoriallm  sphinx官方教程 1)文本准备 生成文本文件,内含一 ...

  4. word2vec模型训练保存加载及简单使用

    目录 word2vec模型训练保存加载及简单使用 一 word2vec简介 二.模型训练和保存及加载 模型训练 模型保存和加载 模型的增量训练 三.模型常用API 四.文本相似度计算--文档级别 wo ...

  5. Word2Vec增量训练实现

    在网上找了很久都没有找到Word2Vec增量训练的例子,通过尝试之后,终于实现了增量训练功能.分享出来供大家参考. 环境:     OS: win 10     Python: V3.5.4 核心代码 ...

  6. 语言模型训练工具SRILM详解

    语言模型训练工具SRILM详解 SRILM是著名的约翰霍普金斯夏季研讨会(Johns Hopkins Summer Workshop)的产物,诞生于1995年,由SRI实验室的Andreas Stol ...

  7. 语言模型训练工具SRILM

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴!    S ...

  8. word2vec预训练词向量+通俗理解word2vec+CountVectorizer+TfidfVectorizer+tf-idf公式及sklearn中TfidfVectorizer

    文章目录 文分类实(一) word2vec预训练词向量 2 数据集 3 数据预处理 4 预训练word2vec模型 canci 通俗理解word2vec 独热编码 word2vec (Continuo ...

  9. [书蕴笔记-1]word2vec模型训练

    word2vec模型训练 前言 整体索引在此 书蕴--基于书评的人工智能推荐系统 上次把文本进行了预处理,主要是使用正则去除标签以及对文本去除停用词以及结巴分词. 后续还会加入tf-idf来动态选取停 ...

最新文章

  1. python:解决UnicodeDecodeError
  2. 每日问题记录20171117
  3. React Native 与 嵌入Android原生与Activity页面互相跳转
  4. C# 字符串操作学习总结
  5. 获取this_带你彻底弄清JavaScript的关键字this
  6. java 判断数字二进制有几位_判断一个二进制数字有多少个1----java实现
  7. ss模型复模态的物理意义及adams复模态振型求解
  8. 动态网页开发技术(三):jsp
  9. Linux学习总结(23)——SSH协议详解
  10. windows11百度网盘下载,win11iso镜像百度云下载
  11. 华为HCNE考试110个知识点
  12. jQuery fadeIn淡入的使用
  13. vue3 + crypto-js加密解密(普通版本/TS版本)
  14. LSD_SLAM框架总结[最终版本]
  15. GlobalSign 发布了即将要修改代码签名证书的重要通知
  16. QGIS基本功| 6 图层进阶(三)- 快速美化图层数据
  17. 计算机辅助设计2004,电子线路计算机辅助设计( Protel 2004 ).PDF
  18. python 导入第三方包_python 导入第三方包---
  19. 网际协议(IP,Internet Protocol)
  20. sklearn_逻辑回归制作评分卡_菜菜视频学习笔记

热门文章

  1. 浅显易懂地看LLC变换器(四)
  2. 等保测评--移动互联安全扩展要求
  3. word的分隔符的用法
  4. 基于stm32F4智能手环设计
  5. 利用无线物联网控制器实现无线位移测量
  6. [小程序云开发]security.mediaCheckAsync内容(图片视频语音)安全审核,云函数调用API方法
  7. 关于压缩机制冷系统中热力膨胀阀的理解及经验
  8. React UI 组件库 Chakra UI - 02 颜色模式
  9. word问题:内存或磁盘空间不足,word无法显示所请求的字体
  10. 酷家乐 java面经_酷家乐内部教练案例分享