Word2vec Tutorial

https://radimrehurek.com/gensim/models/word2vec.html

更新:下面交互式word2vec演示的完整HTTP服务器代码现在在Github上开源。有关文档的高性能相似性服务器,请参阅ScaleText.com。

准备输入

从一开始,gensim的word2vec就需要一系列句子作为输入。每个句子都有一个单词列表(utf8字符串):

1

2

3

4

6

7

# import modules & set up logging

import gensim, logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

sentences = [['first', 'sentence'], ['second', 'sentence']]

# train word2vec on the two sentences

model = gensim.models.Word2Vec(sentences, min_count=1)

将输入保存为Python内置列表很方便,但是当输入很大时会占用大量RAM。

Gensim只需要在迭代时输入必须按顺序提供句子。无需将所有内容保存在RAM中:我们可以提供一个句子,处理它,忘记它,加载另一个句子......

例如,如果我们的输入遍布磁盘上的几个文件,每行一个句子,那么我们可以逐行处理输入文件,而不是将所有内容加载到内存列表中:

1

2

3

4

6

7

8

9

10

11

class MySentences(object):

    def __init__(self, dirname):

        self.dirname = dirname

    def __iter__(self):

        for fname in os.listdir(self.dirname):

            for line in open(os.path.join(self.dirname, fname)):

                yield line.split()

sentences = MySentences('/some/directory') # a memory-friendly iterator

model = gensim.models.Word2Vec(sentences)

假设我们想要进一步预处理文件中的单词 - 转换为unicode,小写,删除数字,提取命名实体......所有这些都可以在MySentences迭代器中完成,而word2vec不需要知道。所需要的只是输入产生一个句子(utf8单词列表)。

高级用户注意:调用Word2Vec(句子,iter = 1)将在句子迭代器上运行两次传递(或者,通常iter + 1次传递;默认iter = 5)。第一遍收集单词及其频率以构建内部字典树结构。第二次和随后的传递训练神经模型。这两个(或者,iter + 1)传递也可以手动启动,以防您的输入流不可重复(您只能承受一次传递),并且您可以通过其他方式初始化词汇表:

1

2

3

model = gensim.models.Word2Vec(iter=1 # an empty model, no training yet

model.build_vocab(some_sentences)  # can be a non-repeatable, 1-pass generator

model.train(other_sentences)  # can be a non-repeatable, 1-pass generator

如果您对Python中的迭代器,迭代器和生成器感到困惑,请查看我们的Python数据流教程。

训练

Word2vec接受几个影响训练速度和质量的参数。

其中一个是修剪内部字典。在十亿字的语料库中只出现一次或两次的单词可能是无趣的错别字和垃圾。此外,没有足够的数据对这些单词进行任何有意义的培训,因此最好忽略它们:

1

model = Word2Vec(sentences, min_count=10 # default value is 5

min_count 的合理值介于0到100之间,具体取决于数据集的大小。

另一个参数是NN层的大小,它们对应于训练算法具有的“自由度”:

1

model = Word2Vec(sentences, size=200 # default value is 100

较大的尺寸值需要更多的训练数据,但可以产生更好(更准确)的模型。合理的价值在几十到几百。

最后一个主要参数(此处为完整列表)用于培训并行化,以加快培训:

1

model = Word2Vec(sentences, workers=4) # default = 1 worker = no parallelization

只有安装了Cython才有效 的workers参数。没有Cython,你只能使用一个核心因为GIL(并且word2vec训练将非常缓慢)。

更新:下面交互式word2vec演示的完整HTTP服务器代码现在在Github上开源。有关文档的高性能相似性服务器,请参阅ScaleText.com。

准备输入

从一开始,gensim的word2vec就需要一系列句子作为输入。每个句子都有一个单词列表(utf8字符串):

1

2

3

4

6

7

# import modules & set up logging

import gensim, logging

logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

sentences = [['first', 'sentence'], ['second', 'sentence']]

# train word2vec on the two sentences

model = gensim.models.Word2Vec(sentences, min_count=1)

将输入保存为Python内置列表很方便,但是当输入很大时会占用大量RAM。

Gensim只需要在迭代时输入必须按顺序提供句子。无需将所有内容保存在RAM中:我们可以提供一个句子,处理它,忘记它,加载另一个句子......

例如,如果我们的输入遍布磁盘上的几个文件,每行一个句子,那么我们可以逐行处理输入文件,而不是将所有内容加载到内存列表中:

1

2

3

4

6

7

8

9

10

11

class MySentences(object):

    def __init__(self, dirname):

        self.dirname = dirname

    def __iter__(self):

        for fname in os.listdir(self.dirname):

            for line in open(os.path.join(self.dirname, fname)):

                yield line.split()

sentences = MySentences('/some/directory') # a memory-friendly iterator

model = gensim.models.Word2Vec(sentences)

假设我们想要进一步预处理文件中的单词 - 转换为unicode,小写,删除数字,提取命名实体......所有这些都可以在MySentences迭代器中完成,而word2vec不需要知道。所需要的只是输入产生一个句子(utf8单词列表)。

高级用户注意:调用Word2Vec(句子,iter = 1)将在句子迭代器上运行两次传递(或者,通常iter + 1次传递;默认iter = 5)。第一遍收集单词及其频率以构建内部字典树结构。第二次和随后的传递训练神经模型。这两个(或者,iter + 1)传递也可以手动启动,以防您的输入流不可重复(您只能承受一次传递),并且您可以通过其他方式初始化词汇表:

1

2

3

model = gensim.models.Word2Vec(iter=1 # an empty model, no training yet

model.build_vocab(some_sentences)  # can be a non-repeatable, 1-pass generator

model.train(other_sentences)  # can be a non-repeatable, 1-pass generator

如果您对Python中的迭代器,迭代器和生成器感到困惑,请查看我们的Python数据流教程。

训练

Word2vec接受几个影响训练速度和质量的参数。

其中一个是修剪内部字典。在十亿字的语料库中只出现一次或两次的单词可能是无趣的错别字和垃圾。此外,没有足够的数据对这些单词进行任何有意义的培训,因此最好忽略它们:

1

model = Word2Vec(sentences, min_count=10 # default value is 5

min_count 的合理值介于0到100之间,具体取决于数据集的大小。

另一个参数是NN层的大小,它们对应于训练算法具有的“自由度”:

1

model = Word2Vec(sentences, size=200 # default value is 100

较大的尺寸值需要更多的训练数据,但可以产生更好(更准确)的模型。合理的价值在几十到几百。

最后一个主要参数(此处为完整列表)用于培训并行化,以加快培训:

1

model = Word2Vec(sentences, workers=4) # default = 1 worker = no parallelization

只有安装了Cython才有效 的workers参数。没有Cython,你只能使用一个核心因为GIL(并且word2vec训练将非常缓慢)。

Word2vec 详解相关推荐

  1. Word2Vec详解

    Word2Vec详解 这几天集中学习了Word2Vec,实现并不复杂,但是真正对一些细节有些了解还查阅了一些资料,今天在这里统一自己整理总结一下. 简介 首先说为什么会有Word2Vec,之前对文字的 ...

  2. 语言处理方法-Word2Vec详解

    NLP之--Word2Vec详解 2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进 ...

  3. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  4. 【NLP】word2vec详解

    前言   word2vec 是 Google 于 2013 年开源推出的一个用于获取词向量的工具包,它简单.高效,因此引起了很多人的关注.word2vec 可以根据给定的语料库,通过优化后的训练模型快 ...

  5. 【NLP】Word2Vec详解(含数学推导)

    word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:并且,该工具得到的训练结果--词向量(word embedding),可以很好地度量词与词之间的相似性.随着深度学习(Deep L ...

  6. NLP之——Word2Vec详解

    2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:其次,该工具得到的训 ...

  7. Word2Vec详解-公式推导以及代码

    Word2Vec 1.前记 2.一些背景知识 2.1词向量简单介绍 2.2哈弗曼树简单介绍 3.基于层次softmax的模型 3.1COBW 层次softmax 3.1.1整体结构 3.1.2 前向传 ...

  8. [NLP]高级词向量表达之Word2vec详解(知识点全覆盖)

    1.词表征(Word Representation) 首先明确句子是 序列化 ,里面携带了大量大信息.在NLP发展的进程里面, 采用了one-hot vector的形式来表示一个句子里面的词是一种方式 ...

  9. 词向量模型(word2vec) 详解

    转载:https://blog.csdn.net/peghoty/article/details/37969519 pdf下载链接:https://github.com/renpengcheng-gi ...

  10. word2vec详解(一)

    面经之word2vec篇(一) 前篇 本来以为自己word2vec掌握的很好,面试的时候回答的一团糟-借此机会,结合面试提问,再来复习一遍word2vec吧,面试给自己上了一节很重要的课- 本篇文章主 ...

最新文章

  1. 文献阅读|Dynamic-SLAM
  2. ASP.NET:性能与缓存
  3. C++常量指针this
  4. SpringMVC教程--图片上传
  5. VLDB 2021 EAB最佳论文:深度解析机器学习的基数估计为何无法实现?
  6. ApacheSkyWalking APM 生态衍生多语言监控, 支持 .NET Core
  7. 汽车之家店铺数据抓取 DotnetSpider实战[一]
  8. 宏定义中有浮点数_GEO是什么?还可以定义新的数据类型吗?
  9. var radioname = new array();_体坛观察丨争议判罚不止中超 为何VAR屡成足坛焦点?_足球...
  10. Linux命令之nl
  11. AIO 理论 与 编程
  12. PDF文件如何自动生成目录书签
  13. 云服务器哪家比较好呢?
  14. PTA 10-99 3-1-(b) 查询st1制片公司的总裁
  15. samba 配置文件详解
  16. 择时 配置 选股0909
  17. MySQL复制表结构,表数据。
  18. 马丁福勒《UML精粹》读书笔记_第七章
  19. 关于PR安装在D盘初始化时闪退,加载到optical的时候PR直接闪退
  20. Arcmap加载在线地图的方法总结

热门文章

  1. JUC编程入门(高并发)
  2. Linux系统中安装Nginx
  3. Flutter之Stack
  4. java manager 模式_java设计模式之装饰器模式(Decorator)
  5. 字节跳动单点恢复功能及 Regional CheckPoint 优化实践
  6. 你的努力,是否符合你的预期?
  7. 利用集合类排序JAVA_Java使用Collections工具类对List集合进行排序
  8. python中字符串怎么引用_如何在字符串中引用函数参数
  9. 三菱plc分拣程序_三菱PLC实现电梯控制方案,含全套程序设计
  10. apache 设置404 页面_Apache和Nginx解析漏洞