在gensim包装器中访问模型

时间:2019-01-02 09:03:18

标签: model wrapper gensim

我使用以下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 :(得分:1)

是什么让您认为W2VTransformer具有wv属性?它未在类docs中列出:

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

而且,访问s Transformer的内部状态并不是很习惯(在scikit-learn内)。相反,您将要求一个已经fit()的模型然后transform()一个单词列表,以获取一个单词向量列表。

实际上是在gensim文档顶部的示例中显示的,在一行中同时执行fit()和`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的属性中。

因此,错误的行(其中modelW2VTransformer的实例)可能是:

model.gensim_model.wv.vocab