如何在TorchText中加载已训练完成的fasttext词向量?
自定义训练fasttext词向量加载到TorchText的正确操作步骤
第一步:导出训练好的fasttext向量为标准文本格式
首先将你无监督训练得到的.bin格式fasttext模型,导出为TorchText支持的纯文本向量格式:
import fasttext # 加载你训练好的fasttext二进制模型 ft_model = fasttext.load_model("your_trained_fasttext.bin") # 导出为标准词向量文本文件 ft_model.save_vectors("custom_fasttext_vectors.txt")
第二步:TorchText(v0.12+ 新版本)加载流程
目前主流版本的TorchText已弃用Field接口,使用以下流程加载:
import torch import torch.nn as nn from torchtext.vocab import build_vocab_from_iterator, Vectors # 1. 加载导出的自定义fasttext向量文件 custom_vectors = Vectors(name="custom_fasttext_vectors.txt") # 2. 基于你的业务语料构建词汇表 # corpus_iterator为你的分词后语料迭代器,每个元素为分词后的文本词列表,例如 [["我", "爱", "学习"], ["今天", "天气", "好"]] corpus_iterator = your_corpus_tokenized_result vocab = build_vocab_from_iterator(corpus_iterator, specials=["<unk>", "<pad>"]) # 设置默认索引为<unk>,匹配不在词表中的词 vocab.set_default_index(vocab["<unk>"]) # 3. 生成对应词汇表的嵌入矩阵 # lower_case_backup开启后找不到匹配词时会尝试匹配小写形式 embedding_matrix = custom_vectors.get_vecs_by_tokens(vocab.get_itos(), lower_case_backup=True) # 4. 初始化模型嵌入层 embedding_layer = nn.Embedding.from_pretrained(embedding_matrix, freeze=False)
注意:freeze参数设置为False时,词向量会在后续模型训练中继续微调,设为True则固定不变
旧版本TorchText(v0.8及更早)加载流程
如果使用带Field的旧版本API,操作如下:
from torchtext.legacy import data from torchtext.vocab import Vectors import torch # 定义数据处理Field TEXT = data.Field(sequential=True, tokenize=your_custom_tokenizer, lower=True, include_lengths=True) fields = [("text", TEXT)] # 加载你的业务数据集,示例为读取csv格式训练数据 train_dataset = data.TabularDataset(path="your_train_data.csv", format="csv", fields=fields, skip_header=True) # 构建词表同时加载自定义fasttext向量 TEXT.build_vocab( train_dataset, vectors=Vectors("custom_fasttext_vectors.txt"), unk_init=torch.Tensor.normal_ # 未知词用正态分布初始化,避免全零向量 ) # 直接获取嵌入层即可 embedding_layer = nn.Embedding.from_pretrained(TEXT.vocab.vectors, freeze=False)
常见报错排查
- 向量文件格式错误:确保导出的txt文件第一行是【词表总数 向量维度】两个整数,后续每行格式为「词 维度1 维度2 ... 维度n」,不要有多余的分隔符
- 大小写不匹配:调用
get_vecs_by_tokens时设置lower_case_backup=True,构建词表时也统一做小写处理可避免该问题 - 未知词初始化异常:加载时可指定
unk_init=torch.Tensor.normal_给不在词向量中的词生成随机初始化向量,避免全零向量影响模型效果 - 路径错误:确保传入
Vectors的文件路径为绝对路径,或者相对路径指向正确的文件位置
内容的提问来源于stack exchange,提问作者Ramraj Chandradevan
相关产品推荐
相关产品推荐

