python - 定义基于 gensim word2vec 的自定义 sklearn 转换器的问题
问题描述
我刚刚开始学习 Python 编码并尝试将其用于文本分类。为了能够创建sklearn
管道(同时也学习如何定义和使用类),我想构建一个自定义word2vec
转换器。说明我的问题的示例代码(doc
是令牌列表的列表):
from gensim.models.word2vec import Word2Vec
from sklearn.base import BaseEstimator, TransformerMixin
class GensimVectorizer(BaseEstimator, TransformerMixin):
def __init__(self, n_dim = 64, n_context = 2):
self.n_dim = n_dim
self.n_context = n_context
def fit(self, X):
self.model = Word2Vec(X, size = self.n_dim,
window = self.n_context,
min_count = 1, sample = 1e-3, workers = 4)
return self
def transform(self, X):
return self.model.wv[X]
vect = GensimVectorizer()
vect.fit(doc)
vect.transform('word')
与下面的代码相比,这给了我不同的结果。我究竟做错了什么?
w2v_model = Word2Vec(doc, size = 64, window = 2, min_count = 1, sample = 1e-3, workers = 4)
w2v_model.wv['word']
解决方案
在这里找到了答案。“问题”是由于运行 word2vec 时的随机化引起的。通过设置种子参数并将模型限制为单个工作线程来解决。
推荐阅读
- python - 缺少趋势线
- mysql - 删除关系查询Mysql
- javascript - JavaScript删除功能不起作用
- c# - 错误无法从程序集“dotless.Core,版本=1.5.3.0”加载类型“dotless.Core.configuration.WebConfigConfigurationLoader”
- node.js - centos 7如何卸载node js
- r - 如何使用cowplot创建图表而不激活空白窗口
- javascript - gulp-imagemin 如何将压缩值获取到变量
- arrays - 先排列奇数,再排列偶数。奇偶顺序不应该改变
- port - 每 15 分钟捕获一次使用端口 6881 的进程的 pid
- audit.net - 使用 AuditIdentityDbContext 在 asp.net mvc 中的 Audit.net 框架性能