【问题标题】:How is an input translated to the input units of a NN输入如何转换为 NN 的输入单元
【发布时间】:2020-11-14 12:14:57
【问题描述】:

我对机器学习和神经网络还很陌生。我使用以下模型对短文本进行情感分析。我通常了解信号是如何计算的,一直到输出层。现在我不明白的是如何找到输入。当模型对一个词进行分类时,该词是如何翻译成 512 个输入单元的?模型评估单词的哪些特征以及如何确定?

  model = Sequential()
  model.add(Dense(512, input_shape=(max_words,), activation='relu'))
  model.add(Dropout(0.5))
  model.add(Dense(256, activation='sigmoid'))
  model.add(Dropout(0.5))
  model.add(Dense(2, activation='softmax'))


  model.compile(loss='categorical_crossentropy',
                optimizer='adam',
                metrics=['accuracy'])

【问题讨论】:

    标签: tensorflow machine-learning keras neural-network


    【解决方案1】:

    当模型对一个词进行分类时,该词是如何翻译成 512个输入单元?

    正如您已经注意到的,在神经网络可以处理任何类型的书面信息(单个单词、句子或整个文本)之前,必须将其编码为向量表示。这称为embedding表示,寻找合适的嵌入是自然语言处理 (NLP) 研究的子领域。

    多年来,发表了许多不同的表述。对于单个单词,例如Word2Vec,其中神经网络根据单词的语义相似性“学习”了嵌入。这意味着在上下文中相似的单词应该在向量空间中靠近。

    句子最简单的嵌入是bag-of-words 嵌入。这意味着我们计算句子语料库中有多少个不同的单词(例如N),并将每个句子转换为长度为N的向量,其中向量的每个索引代表一个单词,索引处的值该词在句子中出现的次数。

    当然还有很多更复杂的文本嵌入。

    【讨论】:

    • 所以在词袋法的情况下;这个长度为 n 的向量如何转换为特定数量的 x 输入单元?
    • 嗯,您首先必须知道数据的维度,然后才能指定输入维度。但是,假设您希望输入维度为 512,那么您可以通过更灵活的方法自行定义嵌入的维度。 BoW 示例只是我为说明目的而选择的最简单的示例。
    • 对于上面的模型,对数据进行了预处理,只使用了最常用的 3000 个词(见 inputsize =maxwords)。这是有道理的,因为这可能是一种将输入向量的大小限制为 3000 长度的方法。我仍然不明白为什么第一层有 512 个单位以及如何转换
    • 在您的示例中,max_words 是第一层的输入维度(即 3000),512 是第一层的输出维度。在我上面的评论中,我使用 512 作为输入维度的示例,它与您的示例没有关联,很抱歉造成混淆。
    • 没错,你的例子有3层,输入层隐含在第一层。不要混淆,输入层有时也算作层。
    【解决方案2】:

    有多种方法可以获得单词的向量嵌入。

    1. 基于计数的方法:PMI、PPMI 和 SVD
    2. 基于预测的方法:CBOW 和 Skip-Gram

    基于计数的方法创建形状为 Vocabulary*Vocabulary 的单词的共现矩阵,其中每个单词由 K 邻域中的某种共现计数表示。

    基于预测的模型在语料库上进行训练,并根据两个词的上下文的接近程度创建向量嵌入基础。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多