Доступ к модели в оболочке Gensim - PullRequest
0 голосов
/ 02 января 2019

Я использую следующую оболочку gensim для обучения слово-векторной модели:

import numpy as np
import pandas as pd
from gensim.sklearn_api import W2VTransformer
from gensim.utils import simple_preprocess

# Load synthetic data
data = pd.read_csv('https://pastebin.com/raw/EPCmabvN')
data = data.head(10)
# Set random seed
np.random.seed(0)

X_train = data.apply(lambda r: simple_preprocess(r['text'], min_len=2), axis=1)
y_train = data.label

model = W2VTransformer(size=10, min_count=1)
model.fit(X_train)

model.wv.vocab

Однако, как только я пытаюсь получить доступ к обученной модели, т.е. model.wv.vocab, выводится ошибка:

AttributeError: у объекта 'W2VTransformer' нет атрибута 'wv'

Могу ли я как-то получить доступ к словарю и другим параметрам модели, или это невозможно с оберткой?

Current workaround: 

from gensim.models.doc2vec import TaggedDocument
from gensim.models.doc2vec import Doc2Vec

#Defining model without wrapper
documents = data.apply(lambda r: TaggedDocument(words=simple_preprocess(r['text'], min_len=2), tags=[r.label]), axis=1)
d2v = Doc2Vec(documents, window=2, vector_size=10, min_count=1, seed=0)
d2v.wv.vocab

1 Ответ

0 голосов
/ 02 января 2019

Что заставляет вас думать, что W2VTransformer обладает свойством wv?Он не указан в документации класса:

https://radimrehurek.com/gensim/sklearn_api/w2vmodel.html

И это не совсем идиоматично (в рамках scikit-learn) для доступа к внутреннему состоянию Transformer, подобному этому.Вместо этого вы бы попросили модель, которая уже была fit(), а затем transform() список слов, вернуть список векторов слов.

На самом деле это показано в примере вверху этих gensim документов, в строке, которая выполняет и 1014 *, и `transform () в одну строку (даже если вы не захотите это делать)что):

wordvecs = model.fit(common_texts).transform(['graph', 'system'])

Если вы хотите получить прямой доступ к собственной модели gensim Word2Vec - модели, которая имеет , имеет свойство wv - вы должны иметьиспользовать другой подход.Например, вы можете просмотреть исходный код W2VTransformer, чтобы увидеть, где хранится эта внутренняя модель:

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/sklearn_api/w2vmodel.py

Там вы увидите, что метод fit() хранит текущий Word2Vec экземпляр в свойстве с именем gensim_model.

Итак, ваша строка с ошибкой, где model является экземпляром W2VTransformer, может вместо этого:

model.gensim_model.wv.vocab
...