Gensim Word2vec 使用教程
本文主要基于Radim Rehurek的Word2vec Tutorial.
**
准备输入
**
Gensim的word2vec的输入是句子的序列. 每个句子是一个单词列表
代码块
例如:
>>> # 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的内置列表很简单, 但是在输入很大时会占用大量的内存. 所以Gensim只要求输入按顺序提供句子, 并不将这些句子存储在内存, 然后Gensim可以加载一个句子, 处理该句子, 然后加载下一个句子.
例如, 如果输入分布在硬盘上的多个文件中, 文件的每一行是一个句子, 那么可以逐个文件, 逐行的处理输入:
>>> 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, 转换大小写, 删除数字, 抽取命名实体等, 所有这些都可以在MySentence迭代器中进行处理.
注意, word2vec会在整个句子序列上跑两遍, 第一遍会收集单词及其词频来够爱走一个内部字典树结构. 第二遍才会训练神经网络. 如果你只能遍历一边数据, 则可以参考以下做法
>>> model = gensim.models.Word2Vec() # an empty model, no training
>>> 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
**
训练
**
Word2vec有很多可以影响训练速度和质量的参数.
第一个参数可以对字典做截断. 少于min_count次数的单词会被丢弃掉, 默认值为5
python
model = Word2Vec(sentences, min_count=10) # default value is 5
另外一个是神经网络的隐藏层的单元数:
model = Word2Vec(sentences, size=200) # default value is 100
大的size需要更多的训练数据, 但是效果会更好. 推荐值为几十到几百.
最后一个主要的参数控制训练的并行:
model = Word2Vec(sentences, workers=4) # default = 1 worker = no parallelization
worker参数只有在安装了Cython后才有效. 没有Cython的话, 只能使用单核.
内存
word2vec的参数被存储为矩阵(Numpy array). array的大小为#vocabulary 乘以 #size大小的浮点数(4 byte)矩阵.
内存中有三个这样的矩阵, 如果你的输入包含100,000个单词, 隐层单元数为200, 则需要的内存大小为100,000 * 200 * 4 * 3 bytes, 约为229MB.
另外还需要一些内存来存储字典树, 但是除非你的单词是特别长的字符串, 大部分内存占用都来自前面说的三个矩阵.
评测
Word2vec的训练是无监督的, 没有可以客观的评测结果的好方法. Google提供的一种评测方式为诸如”A之于B相当于C至于D”之类的任务: 参见http://word2vec.googlecode.com/svn/trunk/questions-words.txt
Gensim也支持相同的评测集:
>>> model.accuracy('/tmp/questions-words.txt')
-02-01 22:14:28,387 : INFO : family: 88.9% (304/342)
-02-01 22:29:24,006 : INFO : gram1-adjective-to-adverb: 32.4% (263/812)
-02-01 22:36:26,528 : INFO : gram2-opposite: 50.3% (191/380)
-02-01 23:00:52,406 : INFO : gram3-comparative: 91.7% (1222/1332)
-02-01 23:13:48,243 : INFO : gram4-superlative: 87.9% (617/702)
-02-01 23:29:52,268 : INFO : gram5-present-participle: 79.4% (691/870)
-02-01 23:57:04,965 : INFO : gram7-past-tense: 67.1% (995/1482)
-02-02 00:15:18,525 : INFO : gram8-plural: 89.6% (889/992)
-02-02 00:28:18,140 : INFO : gram9-plural-verbs: 68.7% (482/702)
-02-02 00:28:18,140 : INFO : total: 74.3% (5654/7614)
切记, 要根据自己的应用了需求来确定算法的性能.
存储和加载模型
存储、加载模型的方法如下:
>>> model.save('/tmp/mymodel')
>>> new_model = gensim.models.Word2Vec.load('/tmp/mymodel')
另外, 可以直接加载由C生成的模型:
model = Word2Vec.load_word2vec_format('/tmp/vectors.txt', binary=False)# using gzipped/bz2 input works too, no need to unzip:
model=Word2Vec.load_word2vec_format('/tmp/vectors.bin.gz', binary=True)
在线训练
可以在加载模型之后使用另外的句子来进一步训练模型
model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)
但是不能对C生成的模型进行再训练.
使用模型
Word2vec支持数种单词相似度任务:
model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1)
[('queen', 0.50882536)]
model.doesnt_match("breakfast cereal dinner lunch".split())
'cereal'
model.similarity('woman', 'man')
.73723527
可以通过以下方式来得到单词的向量:
model['computer'] # raw NumPy vector of a word
array([-0.00449447, -0.00310097, 0.02421786, ...], dtype=float32)
Gensim Word2vec 使用教程相关推荐
- Kaggle word2vec NLP 教程 描述
原文:Bag of Words Meets Bags of Popcorn 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 描述 在本教程竞赛中,我们对情感分析进行了一些&quo ...
- Python Gensim Word2Vec
Gensim is an open-source vector space and topic modelling toolkit. It is implemented in Python and u ...
- 【NLP】5计数词向量底层代码编写和gensim word2vec库入门——斯坦福大学CS224n第一次课作业代码复现
gensim word2vec库入门 背景:词向量 第一部分:基于计数的词向量 共现矩阵 绘制共现词嵌入图 问题1.1:实现distinct_words 问题1.2:实现compute_co_occu ...
- 【射雕英雄传】文本分析初步 第二弹【gensim word2vec lda roberta】
我来填坑了,这学期五门数学课期末属实有点顶,废话不多说好吧,切入正题. 下面文中可能会时不时'引用前文',第一弹链接在这里 文章目录 内容概览 词云 gensim Word2Vec LDA 情感分析[ ...
- 【NLP】6 gensim word2vec基于中文语料库实战——中文wiki百科、清华大学自然语言处理实验室数据集、搜狗全网新闻数据集
gensim word2vec自己寻找语料库训练模型--非gensim data 1. 数据下载 2. 中文wiki百科 2.1 数据获取 2.2 数据处理 3. 清华大学自然语言处理实验室数据集 4 ...
- 自然语言处理之使用gensim.Word2Vec训练词向量进行词义消歧
自然语言处理之使用gensim.Word2Vec训练词向量进行词义消歧 NLP中进行词义消歧的一个非常方便且简单的方法就是训练词向量,通过词向量计算余弦值,来推断某个词在句子中的含义.python中的 ...
- Kaggle word2vec NLP 教程 第三部分:词向量的更多乐趣
原文:Bag of Words Meets Bags of Popcorn 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 第三部分:词向量的更多乐趣 代码 第三部分的代码在这里 ...
- Kaggle word2vec NLP 教程 第二部分:词向量
原文:Bag of Words Meets Bags of Popcorn 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 第二部分:词向量 代码 第二部分的教程代码在这里. 分 ...
- python实现glove,gensim.word2vec模型训练实例
20210331 https://blog.csdn.net/sinat_26917383/article/details/83029140 glove实例 https://dumps.wikimed ...
最新文章
- java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?
- 末学者笔记--openstack共享组件:rabbitmq(3)
- 最受欢迎 Top 12 Python 开源框架,你都用过吗?
- webpack 热替换和热重载
- 服务器安装Windows Server + Ubuntu双系统
- 使用IDEA2017创建java web +maven项目
- 手误【删库】 == 跑路,不存在的 ——删瓦辛格
- 开机自启动脚本_使用xtu降低笔记本(游戏本)cpu电压及功耗·游戏本延时(以及试着解决开机自启动的问题)...
- Java读取文件中的arraylist_java – 从文件中读取ArrayList作为对象?
- sencha touch 在安卓中横屏、竖屏切换 应用崩溃问题
- ORA-00257归档日志写满的解决方法 - xwdreamer - 博客园
- 修改表结构的执行效率
- 8个前端技术学习网站
- django中url 和 path 的区别
- 【游戏开发实战】Unity UGUI序列帧动画(蓝胖子序列帧图)
- 矩阵论——矩阵的标准型
- python求平方值,python – 字典的平方值
- flask url_for()和redirect的区别
- java对象转excel_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...
- Scanner基本用法及其实例
热门文章
- 【两种解法】基础实验4-2.2 列出叶结点 (25 分)
- 【最详细】数据结构(C语言版 第2版)第二章课后习题答案 严蔚敏 等 编著
- 解题报告——例题5-8 Unix is 命令(UVa 400)——26行代码解决
- 两个有序链表序列的交集 (20分)(最佳解法)
- java字符串转语音文件_java - Java文字转语音(Spring Boot) - 堆栈内存溢出
- 传统公司部署OpenStack(t版)简易介绍(六)——neutron模块部署
- python exe是什么_[Python] [转] python.exe和pythonw.exe的区别(区分.py、.pyw、.pyc文件)...
- python笔记之序列(tuple的基本使用和常用操作)
- Windows Server 笔记之磁盘管理
- Java字符串编码转换UTF-8