首页 > 其他分享 >nlp基础-序列填充+嵌入表示的具体步骤

nlp基础-序列填充+嵌入表示的具体步骤

时间:2024-08-09 10:51:38浏览次数:12  
标签:nlp 嵌入 填充 词汇表 矩阵 具体步骤 序列 向量

词嵌入(Word Embedding)是将离散的词语转换为连续的向量表示,以便模型可以处理这些向量。词嵌入的目的是将词语映射到一个低维的实数向量空间中,使得词与词之间的语义关系在这个空间中得到体现。

词嵌入的具体步骤

1. 准备词汇表

  • 构建词汇表: 从训练数据中提取所有唯一的词汇,并为每个词汇分配一个唯一的索引。词汇表的大小决定了嵌入矩阵的行数。

2. 初始化嵌入矩阵

  • 定义嵌入矩阵: 嵌入矩阵的大小为 (词汇表大小, 嵌入维度)。例如,如果词汇表有 10,000 个词,嵌入维度设为 300,则嵌入矩阵的大小为 (10,000, 300)
  • 初始化: 嵌入矩阵可以用随机值初始化,或者使用预训练的词向量(如Word2Vec、GloVe)来初始化。

3. 训练词嵌入

  • 训练模型: 使用神经网络模型(如Word2Vec、GloVe、BERT等)对嵌入矩阵进行训练,使其能够捕捉词语的语义关系。训练过程中,嵌入矩阵会根据上下文信息更新,以提高词向量的质量。

4. 查找词嵌入

  • 映射词索引到词向量: 将文本中的每个词的索引用于查找嵌入矩阵,得到该词的词向量表示。

序列填充和嵌入表示

在处理文本数据时,通常需要将变长的文本序列填充到相同的长度,然后将这些填充后的序列转换为词嵌入表示。以下是具体步骤和示例:

1. 序列填充(Padding)

  • 填充序列: 将所有文本序列填充或截断到相同的长度。通常,使用 <PAD> 标记填充到最大长度。
  • 示例:
    • 原始序列: ["I love programming", "Deep learning is fascinating"]
    • 填充后序列(假设最大长度为 6):
      • ["I", "love", "programming", "", "", ""]
      • ["Deep", "learning", "is", "fascinating", "", ""]

2. 将填充后的序列转换为词嵌入

  • 映射索引到词向量: 使用词汇表中的索引查找嵌入矩阵,得到每个词的词向量。
  • 示例:
    • 词汇表索引: {"I": 1, "love": 2, "programming": 3, "": 0}
    • 嵌入矩阵(假设嵌入维度为 3):
      嵌入矩阵 = [
        [0.1, 0.2, 0.3],  # <PAD>
        [0.4, 0.5, 0.6],  # I
        [0.7, 0.8, 0.9],  # love
        [1.0, 1.1, 1.2]   # programming
      ]
      
    • 填充后的序列转换为词嵌入表示:
      • ["I", "love", "programming", "", "", ""]
      • 对应的词嵌入矩阵表示:
        [
          [0.4, 0.5, 0.6],  # I
          [0.7, 0.8, 0.9],  # love
          [1.0, 1.1, 1.2],  # programming
          [0.1, 0.2, 0.3],  # <PAD>
          [0.1, 0.2, 0.3],  # <PAD>
          [0.1, 0.2, 0.3]   # <PAD>
        ]
        

示例代码

以下是 Python 中使用 Keras 来实现词嵌入和序列填充的示例代码:

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Embedding
import numpy as np

# 示例文本数据
texts = ["I love programming.", "Deep learning is fascinating."]

# 1. 构建词汇表
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
word_index = tokenizer.word_index

# 2. 序列化文本
sequences = tokenizer.texts_to_sequences(texts)

# 3. 填充序列
max_length = 6
padded_sequences = pad_sequences(sequences, maxlen=max_length, padding='post')

# 4. 初始化词嵌入矩阵(随机初始化示例)
embedding_dim = 50
vocab_size = len(word_index) + 1
embedding_matrix = np.random.rand(vocab_size, embedding_dim)

# 5. 创建嵌入层
embedding_layer = Embedding(input_dim=vocab_size, output_dim=embedding_dim, weights=[embedding_matrix], trainable=False)

# 6. 获取词嵌入
word_embeddings = embedding_layer(padded_sequences)

print("词汇表:", word_index)
print("填充后的序列:", padded_sequences)
print("词嵌入:", word_embeddings.numpy())

总结

词嵌入将离散的词语映射到连续的向量空间中,以捕捉词语的语义关系。序列填充保证了输入序列的一致性和可处理性,而词嵌入将这些填充后的序列转换为模型可以理解的向量表示。通过这些步骤,文本数据可以有效地输入到深度学习模型中进行训练和推理。

标签:nlp,嵌入,填充,词汇表,矩阵,具体步骤,序列,向量
From: https://www.cnblogs.com/chentiao/p/18350372

相关文章

  • 预训练的 Word2Vec 向量来初始化词嵌入矩阵
    使用预训练的Word2Vec向量来初始化词嵌入矩阵的过程涉及以下几个步骤:1.下载预训练的Word2Vec向量获取模型:预训练的Word2Vec向量通常可以从模型发布者的官方网站或开源平台下载。例如,Google提供了大规模的预训练Word2Vec向量。文件格式:预训练的Word2Vec向量一......
  • nlp中文本输入的数据预处理方式
    文本输入的数据预处理是自然语言处理(NLP)模型构建的重要环节,确保原始文本数据能够被模型理解并有效利用。以下是详细的文本输入数据预处理步骤:1.文本清洗(TextCleaning)去除特殊字符:删除不必要的标点符号、表情符号等特殊字符,保持文本简洁。转为小写:通常将文本转换为小写,以......
  • nlp基础之词、子词或字符
    在文本处理过程中,分词可以将文本拆解成不同层次的基本单元:词、子词或字符。这些基本单元在自然语言处理(NLP)任务中有不同的应用场景和效果。以下是对词、子词、字符的解释和举例说明:1.词(Word)定义:词是文本中由空格或标点符号分隔的最基本的语义单元。每个词通常代表一种独立的......
  • nlp基础之-词汇表构建的具体做法
    词汇表构建(VocabularyBuilding)是文本数据预处理中的关键步骤,涉及从训练语料中生成一个包含所有可识别单词、子词或字符的集合。具体做法如下:1.数据收集与清洗数据收集:收集所有待处理的文本数据,包括训练集、验证集和测试集。数据清洗:在构建词汇表之前,清洗数据以去除噪声......
  • 在 Rust 中嵌入 Python 来调用外部 Python 库
    我正在尝试学习如何将Python嵌入到Rust应用程序中。出于学习目的,我想创建一个运行永远循环的Rust脚本/应用程序。该循环会休眠设定的时间间隔,醒来后,它使用Pythonrequests库从互联网时间服务器获取当前时间。虽然这不是一个实际应用程序,但我的目标是了解如何从Rust调用......
  • 嵌入式初学-C语言-十八
    #接嵌入式初学-C语言-十七#变量的生命周期1.概念:变量在程序运行中存在的时间2.根据变量存在的时间不同,变量可分为静态存储和动态存储 3. 变量的存储类型变量的完整定义格式:[存储类型]数据类型变量列表;  4.存储类型auto:存储类型只能修饰局部变量,被修饰的局......
  • HiDream引领图像文字嵌入技术新革命,助力多领域创意升级
    近日,HiDream“智象大模型2.0”正式上线!据官方信息显示,"智象大模型2.0"在处理文本、图像、视频以及3D内容的多模态能力上取得了显著进展。特别是在"文生图"领域,该模型实现了对长文本复杂逻辑的深入理解、图片与文字的精准嵌入,以及画面艺术感的充分展现,从而在三个关键维度上提升......
  • 【深度学习与NLP】——快速入门Pytorch基本语法
    目录Pytorch基本语法1.1认识Pytorch1.1.1什么是Pytorch1.1.2Pytorch的基本元素操作1.1.3 Pytorch的基本运算操作1.1.4 关于TorchTensor和Numpyarray之间的相互转换1.1.5小节总结1.2Pytorch中的autograd1.2.1关于torch.Tensor1.2.2关于Tensor的操作1.2.3......
  • 【北京迅为】《stm32mp157开发板嵌入式linux开发指南》第四章 Ubuntu 启用 root 用户
         iTOP-STM32MP157开发板是基于意法半导体STARM双Cortex-A7核加单Cortex-M4核的一款多核异构处理器。Cortex-A7内核提供对开源操作系统Linux的支持,借助Linux系统庞大而丰富的软件组件处理复杂应用。M4内核上运行对于实时性要求严格的应用。        开发板既有......
  • 嵌入式实时操作系统(RT-Thread、FreeRTOS、UCOSIII)
    实时操作系统(RT-Thread、FreeRTOS、UCOSIII)文章目录`实时操作系统(RT-Thread、FreeRTOS、UCOSIII)``专有名词概念``1、什么是嵌入式``嵌入式系统的特点``2、什么是实时``3、什么是操作系统``操作系统主要功能和特性``常见的操作系统类型包括``4、嵌入式实时操作系统``关......