首页 > 解决方案 > 定义基于 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']

标签: pythonscikit-learn

解决方案


在这里找到了答案。“问题”是由于运行 word2vec 时的随机化引起的。通过设置种子参数并将模型限制为单个工作线程来解决。


推荐阅读