我已经使用 keras 来使用预先训练的词嵌入,但我不太确定如何在 scikit-learn 模型上执行此操作。
我也需要在 sklearn 中执行此操作,因为我正在使用vecstack
集成 keras 序列模型和 sklearn 模型。
这就是我为 keras 模型所做的:
glove_dir = '/home/Documents/Glove'
embeddings_index = {}
f = open(os.path.join(glove_dir, 'glove.6B.200d.txt'), 'r', encoding='utf-8')
for line in f:
values = line.split()
word = values[0]
coefs = np.asarray(values[1:], dtype='float32')
embeddings_index[word] = coefs
f.close()
embedding_dim = 200
embedding_matrix = np.zeros((max_words, embedding_dim))
for word, i in word_index.items():
if i < max_words:
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
model = Sequential()
model.add(Embedding(max_words, embedding_dim, input_length=maxlen))
.
.
model.layers[0].set_weights([embedding_matrix])
model.layers[0].trainable = False
model.compile(----)
model.fit(-----)
我对 scikit-learn 很陌生,从我所看到的在 sklearn 中制作模型的情况来看,你会这样做:
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr.predict(x_test)
所以,我的问题是如何在这个模型中使用预先训练的手套?我应该把经过训练的手套交给哪里embedding_matrix
非常感谢你,我真的很感谢你的帮助。
您可以简单地使用Zeugma https://github.com/nkthiebaut/zeugma图书馆。
你可以安装它pip install zeugma
,然后使用以下代码行创建并训练您的模型(假设corpus_train
and corpus_test
是字符串列表):
from sklearn.linear_model import LogisticRegresion
from zeugma.embeddings import EmbeddingTransformer
glove = EmbeddingTransformer('glove')
x_train = glove.transform(corpus_train)
model = LogisticRegression()
model.fit(x_train, y_train)
x_test = glove.transform(corpus_test)
model.predict(x_test)
您还可以使用不同的预训练嵌入(完整列表here https://github.com/RaRe-Technologies/gensim-data#models)或训练你自己的(参见Zeugma 的文档 https://readthedocs.org/projects/zeugma/了解如何执行此操作)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)