无论是在日常生活,还是在技术领域,文本处理都是一个扮演着重要角色的问题。而 gensim doc2vec 是一个十分优秀的 Python 包,可以在无监督文本分析中扮演着重要角色。在本文中,我们将从几个方面对这个神奇的 Python 包进行讲解,以帮助大家更好地理解这个工具。
一、安装和导入 gensim doc2vec
在使用 gensim doc2vec 之前,需要首先进行安装。可以使用 pip 或者 conda 来进行安装,具体请参考以下命令行操作。
pip install gensim
安装完成之后,我们可以使用以下代码对 gensim doc2vec 进行导入。
import gensim
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
二、生成文本向量
在使用 doc2vec 之前,我们需要将文本转换成向量形式。这里我们使用 TaggedDocument
来完成这个任务。TaggedDocument
接受两个参数,第一个是包含所有单词的列表,第二个是文本的标识符。在下面的例子中,我们使用了两个 TaggedDocument
来生成文本向量。
data = ["I love machine learning. Its awesome.",
"I love coding in python",
"I love building chatbots",
"they chat amagingly well"]
tagged_data = [TaggedDocument(words=word_tokenize(_d.lower()), tags=[str(i)]) for i, _d in enumerate(data)]
首先我们定义需要进行处理的文本数据,然后使用 Tokenize
将文本数据转换成单词列表,再使用 TaggedDocument
对单词列表进行标记化操作,将其转换成向量形式。
三、训练 doc2vec 模型
在生成向量之后,我们需要对这些向量进行处理,在这里我们使用 Doc2Vec
模型,来获得更好的结果。模型的训练需要一些参数,如矢量大小,窗口大小等。下面的代码展示了如何使用 gensim doc2vec 中的 Doc2Vec
类进行模型训练。
max_epochs = 100
vec_size = 20
alpha = 0.025
model = Doc2Vec(vector_size=vec_size,
alpha=alpha,
min_alpha=0.00025,
min_count=1,
dm=1)
model.build_vocab(tagged_data)
for epoch in range(max_epochs):
model.train(tagged_data,
total_examples=model.corpus_count,
epochs=model.iter)
model.alpha -= 0.0002
model.min_alpha = model.alpha
在上述代码中,我们定义模型的一些参数,如矢量大小、学习率等等。然后使用 build_vocab
函数对模型进行初始化,再使用 train
函数对模型进行训练。在这里我们循环 100 次,对文本向量进行处理,并且逐步降低学习率来获得更好的结果。
四、使用模型进行预测
在模型训练完成之后,我们可以使用模型对新的文本进行预测。下面的代码演示了如何使用训练好的模型对新的文本进行预测。
test_data = word_tokenize("I love chatbots".lower())
v1 = model.infer_vector(test_data)
print("V1_infer", v1)
在这段代码中,我们将 "I love chatbots" 转换成单词列表,然后使用 infer_vector
函数对其进行转换,得到一个向量形式的结果。
五、可视化文档向量
在获得了文本向量之后,我们可以将其可视化以便更好地理解数据。这里我们使用 t-SNE 算法进行可视化操作。下面是代码实现过程:
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
def tsne_plot(model):
"Creates and TSNE model and plots it"
labels = []
tokens = []
for word in model.wv.vocab:
tokens.append(model[word])
labels.append(word)
tsne_model = TSNE(perplexity=40, n_components=2, init='pca', n_iter=2500, random_state=23)
new_values = tsne_model.fit_transform(tokens)
x = []
y = []
for value in new_values:
x.append(value[0])
y.append(value[1])
plt.figure(figsize=(16, 16))
for i in range(len(x)):
plt.scatter(x[i], y[i])
plt.annotate(labels[i],
xy=(x[i], y[i]),
xytext=(5, 2),
textcoords='offset points',
ha='right',
va='bottom')
plt.show()
tsne_plot(model)
在上述代码中,我们使用 TSNE 函数进行数据降维,并对降维结果进行可视化操作。最后我们使用 plt.show()
函数将可视化结果展示出来。
小结
在本文中,我们从安装和导入、生成文本向量、训练 doc2vec 模型、使用模型进行预测以及可视化文档向量等多个方面对 gensim doc2vec 进行了详细的讲解。doc2vec 作为神经网络算法的代表,具有很高的自学能力和挖掘能力。在实际应用中,它可以用来构建语言模型、关键词提取、文本分类等等。