【问题标题】:how to reduce the dimension of the document embedding?如何降低文档嵌入的维度?
【发布时间】:2019-05-21 21:02:07
【问题描述】:

让我们假设我有一组文档嵌入。 (四) 每个文档嵌入由 N 个词向量组成,其中每个预训练向量都有 300 维。

语料库将表示为 [D,N,300]。

我的问题是,将 [D,N,300] 减少到 [D,1, 300] 的最佳方法是什么。我应该如何用单个向量而不是 N 个向量来表示文档?

提前谢谢你。

【问题讨论】:

  • 我投票结束这个问题,因为这个问题应该在 datascience.SE 上提出。

标签: tensorflow machine-learning deep-learning nlp word-embedding


【解决方案1】:

好问题,但所有答案都会导致信息丢失。对你来说最好的方法是使用 Bi-LSTM/GRU 层,并提供你的词嵌入作为该层的输入。并取最后一步的输出。

最后一个时间步的输出将包含文档的所有上下文信息,包括正向和反向。因此,这是在模型学习表示时获得所需内容的最佳方式。

请注意,文档越大,信息丢失越多。

【讨论】:

    【解决方案2】:

    简单地平均词向量是相当普遍和相当(也许令人惊讶)有效的。

    【讨论】:

    • 非常感谢,到目前为止我一直在使用这种技术,但我想确保其他先进技术不会产生比当前简单方法更好的结果
    【解决方案3】:

    我会说你正在寻找的是doc2vec。使用它,您可以将整个文档转换为一个 300 维向量。你可以这样使用它:

    from gensim.test.utils import common_texts
    from gensim.models.doc2vec import Doc2Vec, TaggedDocument
    
    documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(your_documents)]
    model = Doc2Vec(documents, vector_size=300, window=2, min_count=1, workers=4)
    

    这将根据您的数据训练模型,并且您将能够仅使用问题中指定的一个向量来表示每个文档。

    你可以运行推理:

    vector = model.infer_vector(doc_words)
    

    我希望这会有所帮助:)

    【讨论】:

    • 我不想从一开始就重新训练语料库,而是想使用现有的预训练词向量。是否可以将我的文档语料库作为一组预训练的词向量提供到该模型中并从中获取结果?
    • 我不确定我是否了解您想要做什么。当您说词向量时,您是指文档向量吗?基本上,你可以做任何你想做的事,但只需要注意尺寸。你绝对可以按照你的建议试试这个,但我认为如果你从一开始就训练它,你会得到最好的结果。
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2015-02-28
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多