繁体   English   中英

如何在sklearn中训练模型时使用预先训练过的单词嵌入?

[英]How to make use of pre-trained word embeddings when training a model in sklearn?

对于像keras中的神经网络(NN)这样的东西,非常清楚如何在NN的训练中使用单词嵌入,你可以简单地做类似的事情

embeddings = ...
model = Sequential(Embedding(...),
                   layer1,
                   layer2,...)

但我不确定如何使用sklearn中的算法(如SVM,NB和逻辑回归)来完成此操作。 我知道有一种Pipeline方法,它可以很简单地工作( http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html

pip = Pipeline([(Countvectorizer()), (TfidfTransformer()), (Classifier())])
pip.fit(X_train, y_train)

但是如何在此管道中包含加载的字嵌入? 或者它应该以某种方式包含在管道之外? 我在网上找不到很多关于如何做到这一点的文档。

谢谢。

您可以使用FunctionTransformer类。 如果您的目标是使用一个带有索引矩阵的变换器并输出带有单词向量的3d张量,那么这应该足够了:

# this assumes you're using numpy ndarrays
word_vecs_matrix = get_wv_matrix()  # pseudo-code
def transform(x):
    return word_vecs_matrix[x]
transformer = FunctionTransformer(transform)

请注意,与keras不同,单词vector 不会使用某种梯度下降进行微调

有任何简单的方法可以使用Zeugma软件包获得word embeddings变换器。

它处理预训练嵌入的下载并返回嵌入的“变换器接口”。

例如,如果您想使用GloVe嵌入的平均值来进行句子表示,您只需要编写:

    from zeugma.embeddings import EmbeddingTransformer
    glove = EmbeddingTransformer('glove')

这里的glove是一个sklearn变换器,它具有标准的变换方法,它将句子列表作为输入并输出设计矩阵,就像Tfidftransformer一样。 您可以使用embeddings = glove.transform(['first sentence of the corpus', 'another sentence'])获得生成的嵌入,并且embeddings woud包含2 x N matrics,其中N是所选嵌入的维度。 请注意,如果您已经完成了嵌入式下载或本地加载,则无需担心,Zeugma会透明地处理此问题。

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM