【问题标题】:Word embeddings with multiple categorial features for a single word单个单词具有多个类别特征的词嵌入
【发布时间】:2020-02-05 11:26:15
【问题描述】:

我正在寻找一种在 Pytorch 中使用 LSTM 层实现词嵌入网络的方法,以便nn.Embedding 层的输入具有与词 ID 向量不同的形式。

在我的例子中,每个单词都有一个对应的向量,因此我的语料库中的句子是向量的向量。因此,例如,我可能有带有向量 [500, 3, 18] 的单词“King”,其中 500 是单词 ID,3 是单词颜色,18 是字体大小等。这里的嵌入层作用是做一些自动特征减少/提取。

如何向嵌入层提供此类表单数据?或者你有什么更好的建议?

【问题讨论】:

    标签: python python-3.x pytorch word-embedding


    【解决方案1】:

    我不确定你所说的带有 LSTM 的 word2vec 算法是什么意思,因为原始的 word2vec 算法不使用 LSTM,而是直接使用嵌入来预测周围的单词。

    无论如何,您似乎要嵌入多个分类变量。在示例中,它是单词 ID、颜色 ID 和字体大小(如果将其四舍五入为整数值)。你有两个选择:

    1. 您可以为所有可能的功能组合创建新 ID,并为它们使用 nn.Embedding。但是,存在大多数 ID 在数据中显得过于稀疏而无法学习可靠嵌入的风险。

    2. 为每个功能单独嵌入。然后,您需要将特征的嵌入组合在一起。你基本上有三种选择:

      • 只需连接嵌入并让网络的以下层来解析组合。
      • 为所有特征选择相同的嵌入维度并对它们进行平均。 (我可能会从这个开始。)
      • 添加一个nn.Dense 层(或两个,第一个使用 ReLU 激活,第二个没有激活),它将显式结合您的特征的嵌入。

    如果您需要包含无法离散化的连续特征,您始终可以获取连续特征,在它们之上应用一两层并将它们与离散特征的嵌入相结合。

    【讨论】:

    • 关于您的第一个问题:我将输入句子输入到嵌入层,然后输入到 LSTM 层,然后输入到 FC 层。我最后的目标是预测给定句子中的下一个单词。 ------ 关于您的第二个解决方案,如果我有一些数字特征怎么办(例如:字体大小可以取 8 到 16 之间的任何实数)我想处理数字特征。字体大小只是一个例子。因此,在我的情况下,将字体大小值划分为 bin 是行不通的。
    • 连续特征对于神经网络来说总是很棘手(想想需要多深的 CV 和信号处理才能使连续输入有意义)。无论如何,您总是可以采用连续特征,在它们之上应用一两层,然后将此表示与离散特征的嵌入结合起来。我不知道你有多少数据,但除非你有大量数据,否则离散化和嵌入通常效果更好。
    • JindFich 您有关于第 2.3 点的任何示例或详细信息(单独特征之上的密集层)吗?将来单独学习嵌入将无助于学习特征间依赖关系,对吗?我们应该如何解决这个问题,密集层会这样做吗? (我的理解是,分别学习特征的嵌入会使它们按顺序出现在嵌入空间中,但这可能会受到前一个时间步的其他特征的影响,而不是这个特征)
    猜你喜欢
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多