首页 > 其他分享 >标准神经网络怎么处理词向量

标准神经网络怎么处理词向量

时间:2024-09-10 10:37:00浏览次数:8  
标签:text 标准 神经网络 池化 向量 维度 输入

词向量输入到标注神经网络

好的,我来通过一个具体的例子,详细说明如何将多个词向量堆叠成矩阵,或者通过池化或取平均的方法,将其转换为一个固定长度的向量,然后输入到标准的前馈神经网络中。

假设我们有一个句子:

"I love cats"

这个句子包含三个单词:"I"、"love" 和 "cats"。

假设我们使用的词向量维度为 4(为了简单起见,实际中词向量维度通常为100-300)。我们有以下词向量:

  • I 的词向量:[0.1, 0.2, 0.3, 0.4]
  • love 的词向量:[0.5, 0.6, 0.7, 0.8]
  • cats 的词向量:[0.9, 1.0, 1.1, 1.2]

方法一:堆叠词向量成矩阵

步骤

  1. 词向量表示

    将每个单词转换为对应的词向量,如上所示。

  2. 堆叠成矩阵

    将三个词向量按顺序堆叠成一个矩阵。矩阵的形状为 (3, 4),即3个单词,每个词向量有4个维度。

    [
      [0.1, 0.2, 0.3, 0.4],   // "I"
      [0.5, 0.6, 0.7, 0.8],   // "love"
      [0.9, 1.0, 1.1, 1.2]    // "cats"
    ]
    
  3. 将矩阵展开为向量

    为了输入到标准的前馈神经网络(通常需要一维向量),将矩阵展平成一个一维向量。可以使用flatten操作,将矩阵按行或按列展开:

    • 按行展开(Row-major order)

      [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
      

      这个向量的长度为 12(3个单词 * 4个维度)。

  4. 输入到神经网络

    将这个长度为12的向量作为输入层,传递给前馈神经网络。

神经网络结构

  • 输入层:12个神经元,对应展开后的向量的每个元素。
  • 隐藏层:可以设置一个或多个隐藏层,例如包含8个神经元的隐藏层。
  • 输出层:根据任务需求,例如二分类任务,可以使用一个神经元加上Sigmoid激活函数。

示意图

输入层 (12个节点) --> 隐藏层 (8个节点) --> 输出层 (1个节点)

方法二:池化或取平均

步骤

  1. 词向量表示

    同样地,将每个单词转换为对应的词向量。

  2. 池化操作

    对于每个维度,对所有词向量的对应维度进行池化操作,例如取平均或取最大值。

    • 取平均值(Average Pooling)

      对于每个维度 \(d_i\)( i = 1, 2, 3, 4 ),计算:

      \(\text{平均值}_i = \frac{1}{N} \sum_{j=1}^{N} x_{j,i}\)

      其中 ( N = 3 )(词的数量),$ x_{j,i} $ 表示第 ( j ) 个词的第 ( i ) 个维度的值。

      具体计算:

      第1维:
      \(\text{平均值}_1 = \frac{0.1 + 0.5 + 0.9}{3} = \frac{1.5}{3} = 0.5\)

      第2维:

      \(\text{平均值}_2 = \frac{0.2 + 0.6 + 1.0}{3} = \frac{1.8}{3} = 0.6\)

      第3维:
      \(\text{平均值}_3 = \frac{0.3 + 0.7 + 1.1}{3} = \frac{2.1}{3} = 0.7\)

      第4维:

      $ \text{平均值}_4 = \frac{0.4 + 0.8 + 1.2}{3} = \frac{2.4}{3} = 0.8$

      得到平均后的向量:

      [0.5, 0.6, 0.7, 0.8]
      
    • 取最大值(Max Pooling)

      对于每个维度,取所有词向量中该维度的最大值。

      第1维:

      $ \text{最大值}_1 = \max(0.1, 0.5, 0.9) = 0.9$

      第2维:

      $ \text{最大值}_2 = \max(0.2, 0.6, 1.0) = 1.0$

      第3维:

      \(\text{最大值}_3 = \max(0.3, 0.7, 1.1) = 1.1\)

      第4维:

      \(\text{最大值}_4 = \max(0.4, 0.8, 1.2) = 1.2\)

      得到最大值池化后的向量:

      [0.9, 1.0, 1.1, 1.2]
      
  3. 输入到神经网络

    • 将池化后的向量作为输入,维度为4。
    • 根据任务需求,设计神经网络的结构。

神经网络结构

  • 输入层:4个神经元,对应池化后的向量的每个元素。
  • 隐藏层:例如包含4个神经元的隐藏层。
  • 输出层:根据任务需求设置。

示意图

输入层 (4个节点) --> 隐藏层 (4个节点) --> 输出层

总结与比较

  • 堆叠方法

    • 优点:保留了所有词的完整信息,包括词的顺序(在展开时保留了顺序)。
    • 缺点:当句子长度不固定时,输入向量的长度也会变化,不利于处理变长的输入。
  • 池化方法

    • 优点:无论句子包含多少个词,最终的输入向量长度都是固定的,便于处理不同长度的句子。
    • 缺点:在取平均或最大值的过程中,可能会丢失部分信息,特别是词的顺序和细节信息。

实际应用中的考虑

  • 变长输入的处理
  • 在实际应用中,句子的长度通常是不固定的。为了在标准神经网络中处理变长的句子,通常需要将输入转换为固定长度。
    • 截断或填充:将句子截断或用特殊的填充词(如 <PAD>)补齐到固定长度,然后按上述方法处理。
    • 动态池化:采用更复杂的池化方法,或者使用注意力机制来对输入进行加权求和。

完整的模型示例

假设我们要构建一个文本分类模型,步骤如下:

  1. 预处理

    • 将文本分词,得到单词列表。
    • 使用词汇表将单词映射为索引或直接映射为词向量。
  2. 词向量表示

    • 使用预训练的词向量,或随机初始化词向量。
  3. 特征提取

    • 方法一:将词向量堆叠并展开。
    • 方法二:对词向量进行池化(取平均或最大值)。
  4. 模型构建

    • 输入层:接受处理后的固定长度向量。
    • 隐藏层:一个或多个全连接层,激活函数可以使用ReLU、Sigmoid等。
    • 输出层:根据分类任务的类别数,设置对应的神经元数量,使用Softmax激活函数。
  5. 训练与优化

    • 定义损失函数(如交叉熵损失)。
    • 使用优化算法(如梯度下降、Adam)训练模型。

小结

通过以上具体的例子,我们演示了如何将多个词向量堆叠成矩阵并展开,或者通过池化方法将其转换为固定长度的向量,然后输入到标准的前馈神经网络中进行处理。

这种方法在处理定长输入时较为方便,但在处理变长序列、保留词序信息以及捕捉长距离依赖关系方面,可能不如循环神经网络等模型有效。

标签:text,标准,神经网络,池化,向量,维度,输入
From: https://www.cnblogs.com/cork/p/18405919

相关文章

  • 深度学习基础案例4--运用动态学习率构建CNN卷积神经网络实现的运动鞋识别(测试集的准
    ......
  • 多输入多输出 | Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测
    多输入多输出|Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测目录多输入多输出|Matlab实现DBO-BP蜣螂算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料预测效果基本介绍多输入多输出|Matlab实现DBO-BP蜣螂算法......
  • 支持向量机模型 0基础小白也能懂(附代码)
    支持向量机模型0基础小白也能懂(附代码)原文链接啥是向量机模型本篇我们要讲解的模型是大名鼎鼎的支持向量机SVM,这是曾经在机器学习界有着近乎「垄断」地位的模型,影响力持续了好多年。直至今日,即使深度学习神经网络的影响力逐渐增强,但SVM在中小型数据集上依旧有着可以和神......
  • 如何实现标准库般强大的 C++ Vector?:从动态扩容到移动语义到迭代器全覆盖
    在C++中,std::vector是最常用的动态数组容器。它具有高效的内存管理、动态扩容、随机访问等特点。在这篇博客中,我们将从零开始,实现一个功能强大、灵活、并且具有高性能的Vector类,具备std::vector的大部分功能,包括动态扩容、迭代器、模板支持、随机访问等,尽可能模仿C+......
  • fmt.Printf 函数用于格式化并打印信息到标准输出
    在Go语言中,fmt.Printf函数用于格式化并打印信息到标准输出。%c和%d是格式化参数中的占位符,用于指定输出的格式。以下是一些常用的格式化参数:%v:默认格式,根据变量的类型自动选择输出格式。%+v:类似 %v,但会输出字段名。%#v:类似 %v,但会输出Go语法表示。%T:输出变量的类型......
  • 每天五分钟玩转深度学习框架PyTorch:将nn的神经网络层连接起来
    本文重点前面我们学习pytorch中已经封装好的神经网络层,有全连接层,激活层,卷积层等等,我们可以直接使用。如代码所示我们直接使用了两个nn.Linear(),这两个linear之间并没有组合在一起,所以forward的之后,分别调用了,在实际使用中我们常常将几个神经层组合在一起,这样不仅操作方便,而且......
  • 【深度学习】嘿马深度学习笔记第8篇:卷积神经网络,学习目标【附代码文档】
    本教程的知识点为:深度学习介绍1.1深度学习与机器学习的区别TensorFlow介绍2.4张量2.4.1张量(Tensor)2.4.1.1张量的类型TensorFlow介绍1.2神经网络基础1.2.1Logistic回归1.2.1.1Logistic回归TensorFlow介绍总结每日作业神经网络与tf.keras1.3神经网络基础......
  • 长短期记忆神经网络-LSTM回归预测-MATLAB代码实现
    一、LSTM简介(代码获取:底部公众号)长短期记忆神经网络(LongShort-TermMemory,LSTM)是一种循环神经网络(RecurrentNeuralNetwork,RNN)的变体。相比于传统的RNN,LSTM能够更好地处理长期依赖关系,适用于许多序列建模任务,包括回归预测。在LSTM中,每个时间步都有一个隐藏状态(hiddenst......
  • Clang-format格式标准化
    1,工具与准备:VScode中可以安装clang-format扩展或者使用C/C++;  2,配置VScode设置中,首选项->设置;可使用everythin搜索clang-format.exe;一般visualstudio会自带,选择一个即可(在环境变量中,添加对应的路径);    3,配置.clang-format中断使用以下命令创建.clang-form......
  • 向量与矩阵几何关系
    目录一、基向量二、向量与基向量三、向量张成的空间四、矩阵与线性变换五、矩阵乘法与线性变换复合一、基向量基向量(basisvectors)是构成向量空间的一组基本元素,它们满足以下条件:线性无关:基中的向量之间不能通过线性组合相互表示。这意味着没有一个向量可以表示为......