如何改进我的文本主题分类器?

Posted

技术标签:

【中文标题】如何改进我的文本主题分类器?【英文标题】:How can improve my text topic classifier? 【发布时间】:2019-07-06 16:58:45 【问题描述】:

我正在开发一个可以标记句子或小问题的文本主题分类器。 到目前为止,它可以标记大约 30 个已知主题。

效果很好,但它开始混淆相似的问题。

例如这3个标签:

1) 标签 - backup_proxy_intranet: 如何为内网应用程序设置备份代理? ...以及 140 个包含“Intranet 应用程序的备份代理”的类似问题...

2) 标签 - smartman_intranet: 如何在我的智能手机中使用 Intranet 应用程序?和 ...以及 140 个包含“我的智能手机中的 Intranet 应用程序”的类似问题...

3) 标签-ticket_intranet:如何将ticket order 与intranet app 关联起来? ...以及 140 个包含“使用 Intranet 应用程序订购机票”的类似问题...

训练后这 3 个总是返回标签 backup_proxy_intranet。 我该怎么做才能将它们分开?

series = series.dropna()
series = shuffle(series)

X_stemmed = []
for x_t in series['phrase']:
    stemmed_text = [stemmer.stem(i) for i in word_tokenize(x_t)]
    X_stemmed.append(' '.join(stemmed_text))

x_normalized = []
for x_t in X_stemmed:
    temp_corpus=x_t.split(' ')
    corpus=[token for token in temp_corpus if token not in stops]
    x_normalized.append(' '.join(corpus))

X_train,X_test,y_train,y_test = train_test_split(x_normalized,series['target'],random_state=0,test_size=0.20)

vect = CountVectorizer(ngram_range=(1,3)).fit(X_train)
X_train_vectorized = vect.transform(X_train)

sampler = SMOTE()
model = make_pipeline(sampler, LogisticRegression())
print()
print("-->Model: ")
print(model)
print()
print("-->Training... ")
model.fit(X_train_vectorized,y_train)

filename = '/var/www/html/python/intraope_bot/lib/textTopicClassifier.model'
pickle.dump(model,open(filename, 'wb'))
filename2 = '/var/www/html/python/intraope_bot/lib/textTopicClassifier.vector'
pickle.dump(vect,open(filename2, 'wb'))

最好的问候!

【问题讨论】:

仅供参考,标签 2 和 3 相同。两者都是smartphone_intranet 你尝试过ngram_range吗?我也有点倾向于这是编程 stackexchange 的主题。我觉得这属于统计数据或其他内容 thks Ian,我尝试使用 (1,4), (1,5) 并没有看到显着的变化。 请告诉我,你能标记多个主题吗? 【参考方案1】:

我认为您可能想使用 sklearn 的 TfidfVectorizer:它应该可以帮助您提高分数!

>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> corpus = [
...     "Label - backup_proxy_intranet: How to set up a backup proxy for intranet app? ... and 140 similar questions containing 'backup proxy for intranet app'"
...     Label - smartphone_intranet: How to use intranet app in my smartphone? and ... and 140 similar questions containing 'intranet app in my smartphone'...
... ]
>>> vectorizer = TfidfVectorizer()
>>> X = vectorizer.fit_transform(corpus)
>>> print(vectorizer.get_feature_names())

【讨论】:

你好热带!我试过了,它提高了一点分数,但它仍然混淆标签 嗨@NicolasBolzan!你的混淆矩阵/分数是多少?【参考方案2】:

我也从 scikit learn 中使用多项式朴素贝叶斯得到了最好的结果

【讨论】:

以上是关于如何改进我的文本主题分类器?的主要内容,如果未能解决你的问题,请参考以下文章

改进流Python分类器并结合特征

文档主题生成模型(LDA)

如何评估我自己的文本分类器

sklearn中带有词袋和附加情感特征的文本分类器

如何使用对象检测模型改进 CoreML 图像分类器模型?

性能:提高朴素贝叶斯分类器的准确性