这是一个提问帖:
我的语料是365篇新闻报道,总字数不到15万字。
第一次尝试的时候把整个语料放在了一个列表里,没有区分文档,跑出来的主题词效果不错。
第二次把每一篇文章单独放进了一个列表里,最后效果很差,主题词重复率很高,不知道为什么。
这是第一次的代码:
import gensim
from gensim import models
### bag of words
texts = clean_corpus_1
# 生成词典或词袋bag of words
dictionary = gensim.corpora.Dictionary([texts])
# # 查看词典中的前十个单词
for i in range(10):
print('top 10: ', i, dictionary[i])
print('number of total words:', len(dictionary))
# # 查看前十个单词在多少个文档中出现过
for i in range(10):
print('number of docs: ', i, dictionary.dfs[i])
# 统计每篇文档中的所有单词,及其在当前文档中出现的次数
bow_corpus = [dictionary.doc2bow([text]) for text in texts]
# print('bow_corpus:', bow_corpus)
# 计算TF-IDF
tfidf = models.TfidfModel(bow_corpus)
corpus_tfidf = tfidf[bow_corpus]
# 查看第一个文件的单词和对应的TF-IDF权重
print('corpus_tfidf[0]:', corpus_tfidf[0])
### model training on bow_corpus
if __name__ == '__main__':
lda_model = gensim.models.LdaMulticore(bow_corpus, num_topics=10, id2word=dictionary, passes=2, workers=2)
for idx, word in lda_model.print_topics(num_words=20):
print('Topic: {} \nWords: {}'.format(idx, word))
### model training on tfidf
if __name__ == '__main__':
lda_model_tfidf = gensim.models.LdaMulticore(corpus_tfidf, num_topics=10, id2word=dictionary, passes=2, workers=4)
for idx, word in lda_model_tfidf.print_topics(num_words=20):
print('Topic: {} \nWords: {}'.format(idx, word))
第二次的代码除了把输入改成了文档集之外,没有其他改动,但是效果很差,是哪里出问题了吗?还是因为我的语料太小了?
做nlp需要海量的数据,少量的数据,根本任何情况都不奇怪。