【发布时间】:2020-11-17 13:52:56
【问题描述】:
我正在尝试训练 Doc2Vec 模型以创建多标签文本分类器。
为了做到这一点,我选择了一个包含大约 70000 篇文章的数据集,每篇文章包含 1500 到 2000 个单词。
这些文章分为 5 类。
在设置我的输入时,我选择了我的文档的标签作为相应的标签。
我已经这样做了:
tagged_article = data.apply(lambda r: TaggedDocument(words=r['article'].split(), tags=[r.labels]), axis=1)
然后我用以下行代码训练了我的模型:
model_dbow = Doc2Vec(dm=1, vector_size=300, negative=5, min_count=10, workers=cores)
model_dbow.build_vocab([x for x in tqdm(tagged_article.values)])
print("Training the Doc2Vec model for ", no_epochs, "number of epochs" )
for epoch in range(no_epochs):
model_dbow.train(utils.shuffle([x for x in tqdm(tagged_article.values)]),total_examples=len(tagged_article.values), epochs=1)
model_dbow.alpha -= 0.002
model_dbow.min_alpha = model_dbow.alpha
之后我创建了一个逻辑回归模型来预测每篇文章的标签。
为此,我创建了以下函数:\
def vec_for_learning(model, tagged_docs):
sents = tagged_docs.values
targets, regressors = zip(*[(doc.tags[0], model.infer_vector(doc.words, steps=inference_steps)) for doc in tqdm(sents)])
return targets, regressors
y_train, X_train = vec_for_learning(model_dbow, tagged_article)
logreg = LogisticRegression(solver='lbfgs',max_iter=1000)
logreg.fit(X_train, y_train)
不幸的是,我得到了一个非常糟糕的结果。事实上,我的准确率是 22%,F1 分数是 21%
你能解释一下为什么我会得到这些糟糕的结果吗?
【问题讨论】:
标签: python nlp data-science gensim doc2vec