在 gensim 包装器中访问模型
Accessing model in gensim wrapper
我使用以下 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' object has no attribute '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
是什么让您认为 W2VTransformer
有 wv
属性?它未在 class 文档中列出:
https://radimrehurek.com/gensim/sklearn_api/w2vmodel.html
而且,像这样访问 Transformer
的内部状态并不是很惯用(在 scikit-learn 中)。相反,您会要求一个已经 fit()
的模型然后 transform()
一个单词列表,以取回一个单词向量列表。
确实在那些 gensim
文档顶部的示例中显示了这一点,在一行中同时执行了 fit()
和 `transform() (即使你不会想这样做):
wordvecs = model.fit(common_texts).transform(['graph', 'system'])
如果您确实想直接访问原生 gensim
Word2Vec
模型 – 确实 具有 wv
[=49] 的模型=] – 你必须使用不同的方法。例如,您可以查看 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
我使用以下 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' object has no attribute '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
是什么让您认为 W2VTransformer
有 wv
属性?它未在 class 文档中列出:
https://radimrehurek.com/gensim/sklearn_api/w2vmodel.html
而且,像这样访问 Transformer
的内部状态并不是很惯用(在 scikit-learn 中)。相反,您会要求一个已经 fit()
的模型然后 transform()
一个单词列表,以取回一个单词向量列表。
确实在那些 gensim
文档顶部的示例中显示了这一点,在一行中同时执行了 fit()
和 `transform() (即使你不会想这样做):
wordvecs = model.fit(common_texts).transform(['graph', 'system'])
如果您确实想直接访问原生 gensim
Word2Vec
模型 – 确实 具有 wv
[=49] 的模型=] – 你必须使用不同的方法。例如,您可以查看 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