首页
/ 使用textgenrnn生成文本向量编码的完整指南

使用textgenrnn生成文本向量编码的完整指南

2025-07-08 04:22:14作者:咎竹峻Karen

前言

textgenrnn是一个基于神经网络的开源文本生成库,除了生成文本外,它还提供了强大的文本编码功能。本文将详细介绍如何使用textgenrnn将文本转换为向量表示,以及如何利用这些向量进行文本相似度计算等高级应用。

文本向量编码基础

textgenrnn能够生成比传统词向量更强大的句子向量。这些向量捕捉了文本的语义信息,可以用于各种自然语言处理任务。

重要说明:textgenrnn的句子向量只考虑前max_length - 1个token(在预训练模型中,这是前39个字符)。如果需要更全面的句子向量,建议:

  1. 训练一个新模型,设置较大的max_length
  2. 使用词级别的训练模式

环境准备

首先需要导入textgenrnn库并初始化:

from textgenrnn import textgenrnn
textgen = textgenrnn()

基本编码功能

encode_text_vectors函数使用模型的Attention层输出,并可以通过PCA和t-SNE进行降维处理。

对于预训练模型,Attention层的大小为356维(100维嵌入+128*2 RNN层)。

默认情况下,encode_text_vectors使用PCA将高维输出投影到更低的维度:

texts = ['Never gonna give you up, never gonna let you down',
         'Never gonna run around and desert you',
         'Never gonna make you cry, never gonna say goodbye',
         'Never gonna tell a lie and hurt you']

word_vector = textgen.encode_text_vectors(texts)
print(word_vector)
print(word_vector.shape)

使用t-SNE降维

对于可视化需求,可以使用t-SNE将向量降至2D或3D:

word_vector = textgen.encode_text_vectors(texts, tsne_dims=2, tsne_seed=123)
print(str(word_vector))
print(word_vector.shape)

注意:t-SNE是随机种子算法,设置tsne_seed可以获得可重复的结果。

单文本编码

编码单个文本时需要设置pca_dims=None

word_vector = textgen.encode_text_vectors("What is love?", pca_dims=None)
print(str(word_vector)[0:50])
print(word_vector.shape)

高级应用:获取PCA对象

可以获取PCA对象用于进一步分析或构建编码管道:

word_vector, pca = textgen.encode_text_vectors(texts, return_pca=True)
print(pca)

查看解释方差比:

pca.explained_variance_ratio_

在这个例子中,第一主成分解释了56.9%的方差,前两个主成分共解释了98.5%的方差。

构建文本转换管道

可以构建自定义的文本转换函数:

def transform_text(text, textgen, pca):
    text = textgen.encode_text_vectors(text, pca_dims=None)
    text = pca.transform(text)
    return text

single_encoded_text = transform_text("Never gonna give", textgen, pca)
print(single_encoded_text)

文本相似度计算

使用余弦相似度

from sklearn.metrics.pairwise import cosine_similarity

word_vectors = textgen.encode_text_vectors(texts)
similarity = cosine_similarity(single_encoded_text, word_vectors)
print(similarity)

使用textgenrnn内置方法

textgenrnn提供了更简便的相似度计算方法:

textgen.similarity("Never gonna give", texts)

默认使用PCA转换后的值计算相似度,也可以使用原始向量:

textgen.similarity("Never gonna give", texts, use_pca=False)

总结

textgenrnn的文本编码功能为自然语言处理任务提供了强大的工具。通过本文介绍的方法,您可以:

  1. 将文本转换为高维向量表示
  2. 使用PCA和t-SNE进行降维
  3. 计算文本间的语义相似度
  4. 构建自定义的文本处理管道

这些功能可以广泛应用于文本分类、聚类、推荐系统等场景。