Проблемы, определяющие пользовательский преобразователь sklearn на основе gensim word2ve c - PullRequest
2 голосов
/ 23 февраля 2020

Я только начал изучать кодирование в 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']

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Нашел ответ здесь . «Проблема» возникает из-за рандомизации при запуске word2ve c. Решается установкой первичного параметра и ограничением модели одним рабочим потоком.

0 голосов
/ 26 февраля 2020

Вы также можете использовать оболочку sklearn для модели gensim word2ve c, как показано ниже.

>>> from gensim.test.utils import common_texts
>>> from gensim.sklearn_api import W2VTransformer
>>>
>>> # Create a model to represent each word by a 10 dimensional vector.
>>> model = W2VTransformer(size=10, min_count=1, seed=1)
>>>
>>> # What is the vector representation of the word 'graph'?
>>> wordvecs = model.fit(common_texts).transform(['graph', 'system'])
>>> assert wordvecs.shape == (2, 10)

Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...