首页 > 其他分享 >预训练的 Word2Vec 向量来初始化词嵌入矩阵

预训练的 Word2Vec 向量来初始化词嵌入矩阵

时间:2024-08-09 10:49:26浏览次数:19  
标签:初始化 嵌入 Word2Vec 训练 矩阵 embedding word 向量

使用预训练的 Word2Vec 向量来初始化词嵌入矩阵的过程涉及以下几个步骤:

1. 下载预训练的 Word2Vec 向量

  • 获取模型: 预训练的 Word2Vec 向量通常可以从模型发布者的官方网站或开源平台下载。例如,Google 提供了大规模的预训练 Word2Vec 向量。
  • 文件格式: 预训练的 Word2Vec 向量一般保存在文本文件中,每行包含一个词及其对应的词向量。

2. 加载预训练的词向量

  • 读取文件: 从文件中读取词向量,并将其存储在内存中。通常,这些文件的每一行包括词及其对应的向量。
  • 构建词汇表: 创建一个词汇表,将文件中的每个词和对应的词向量映射到一个字典中。

3. 初始化词嵌入矩阵

  • 定义矩阵: 创建一个词嵌入矩阵,其大小为 (词汇表大小, 嵌入维度)。这个矩阵的行数等于词汇表的大小,列数等于词向量的维度。
  • 填充矩阵: 将预训练的词向量填充到词嵌入矩阵中。对于词汇表中的每个词,从预训练的向量字典中查找对应的向量,并将其放入词嵌入矩阵的相应位置。
  • 处理未登录词: 对于不在预训练词向量中的词,通常使用随机初始化的向量或零向量进行填充。

4. 将词嵌入矩阵用于模型

  • 创建嵌入层: 使用初始化好的词嵌入矩阵创建模型的嵌入层。嵌入层将使用这些预训练的词向量作为初始权重。
  • 训练或微调: 训练模型时,可以选择是否对词嵌入矩阵进行进一步的微调,以适应特定任务的需求。

示例代码

以下是 Python 中使用 TensorFlow/Keras 来实现这一过程的示例代码:

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

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

# 1. 读取预训练的 Word2Vec 向量
def load_word2vec_embeddings(file_path, embedding_dim):
    word2vec = {}
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            values = line.split()
            word = values[0]
            vector = np.asarray(values[1:], dtype='float32')
            word2vec[word] = vector
    return word2vec

# 假设词向量维度为 300
embedding_dim = 300
word2vec_file = 'path_to_pretrained_word2vec.txt'
word2vec_embeddings = load_word2vec_embeddings(word2vec_file, embedding_dim)

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

# 3. 初始化词嵌入矩阵
vocab_size = len(word_index) + 1
embedding_matrix = np.zeros((vocab_size, embedding_dim))

for word, i in word_index.items():
    if word in word2vec_embeddings:
        embedding_matrix[i] = word2vec_embeddings[word]

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

# 5. 使用嵌入层构建模型
model = Sequential()
model.add(embedding_layer)
# 添加其他层...

# 示例: 输出词嵌入
padded_sequences = pad_sequences(tokenizer.texts_to_sequences(texts), maxlen=10)
word_embeddings = embedding_layer(padded_sequences)

print("词汇表:", word_index)
print("词嵌入矩阵:", embedding_matrix)
print("词嵌入:", word_embeddings.numpy())

关键点总结

  • 加载预训练词向量: 从文件中读取并解析预训练的词向量,通常以词为键、向量为值的形式存储。
  • 初始化词嵌入矩阵: 使用从预训练模型中读取的词向量填充词嵌入矩阵,为词汇表中的每个词分配相应的向量。
  • 处理未登录词: 对于预训练模型中没有的词,可以用随机值或零向量进行初始化。
  • 创建嵌入层: 使用初始化好的词嵌入矩阵创建模型的嵌入层,并在训练过程中选择是否对其进行微调。

使用预训练的词向量可以显著提升模型的表现,特别是在语料不足或训练时间有限的情况下。

标签:初始化,嵌入,Word2Vec,训练,矩阵,embedding,word,向量
From: https://www.cnblogs.com/chentiao/p/18350383

相关文章

  • 深度学习每周学习总结N6:使用Word2vec实现文本分类
    ......
  • 在 Rust 中嵌入 Python 来调用外部 Python 库
    我正在尝试学习如何将Python嵌入到Rust应用程序中。出于学习目的,我想创建一个运行永远循环的Rust脚本/应用程序。该循环会休眠设定的时间间隔,醒来后,它使用Pythonrequests库从互联网时间服务器获取当前时间。虽然这不是一个实际应用程序,但我的目标是了解如何从Rust调用......
  • activiti初始化报:java.sql.SQLSyntaxErrorException: Table ‘activiti.act_ge_proper
    在学习activiti过成中,由于使用的MySQL是8版本的,所以报了:org.apache.ibatis.exceptions.PersistenceException: ###Errorqueryingdatabase. Cause:java.sql.SQLSyntaxErrorException:Table'activiti.act_ge_property'doesn'texist###Theerrormayexistinorg/......
  • Mysql:初始化
    免费的社区版下载地址:https://dev.mysql.com/downloads/mysql 下载mysql.zip包,直接解压cdmysql-8.0.28-winx64新增my.ini文件[mysql]default-character-set=utf8#默认字符集[mysqld]port=3306#端口basedir=D:/XXX/mysql-8.0.28-winx64#修改成实......
  • 嵌入式初学-C语言-十八
    #接嵌入式初学-C语言-十七#变量的生命周期1.概念:变量在程序运行中存在的时间2.根据变量存在的时间不同,变量可分为静态存储和动态存储 3. 变量的存储类型变量的完整定义格式:[存储类型]数据类型变量列表;  4.存储类型auto:存储类型只能修饰局部变量,被修饰的局......
  • HiDream引领图像文字嵌入技术新革命,助力多领域创意升级
    近日,HiDream“智象大模型2.0”正式上线!据官方信息显示,"智象大模型2.0"在处理文本、图像、视频以及3D内容的多模态能力上取得了显著进展。特别是在"文生图"领域,该模型实现了对长文本复杂逻辑的深入理解、图片与文字的精准嵌入,以及画面艺术感的充分展现,从而在三个关键维度上提升......
  • Java数组篇[2]:数组的初始化
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • 嵌入式实时操作系统(RT-Thread、FreeRTOS、UCOSIII)
    实时操作系统(RT-Thread、FreeRTOS、UCOSIII)文章目录`实时操作系统(RT-Thread、FreeRTOS、UCOSIII)``专有名词概念``1、什么是嵌入式``嵌入式系统的特点``2、什么是实时``3、什么是操作系统``操作系统主要功能和特性``常见的操作系统类型包括``4、嵌入式实时操作系统``关......
  • 嵌入式初学-C语言-十七
    #接嵌入式初学-C语言-十六#函数的递归调用含义:在一个函数中直接或者间接调用了函数本身,称之为函数的递归调用//直接调用a()->a();//间接调用a()->b()->a();a()->b()->..->a();递归调用的本质:本是是一种循环结构,它不同于之前所学的while,do-while,for这......