通过限制语料库文档的字大小来进行潜在Dirichlet分配(LDA)性能

时间:2016-04-17 06:18:14

标签: python tokenize lda gensim corpus

我使用python(gensim包)中的Latent Dirichlet分配(LDA)生成了yelp data组客户评论的主题。在生成令牌时,我只从评论中选择长度为> = 3的字词(使用RegexpTokenizer):

from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w{3,}')
tokens = tokenizer.tokenize(review)

这将允许我们在创建语料库文档时过滤掉长度小于3的嘈杂单词。

如何过滤掉这些词会影响LDA算法的性能?

2 个答案:

答案 0 :(得分:0)

一般来说,对于英语,一个和两个字母的单词不会添加有关该主题的信息。如果他们没有增加价值,他们应该在预处理步骤中删除。与大多数算法一样,较少的数据会加快执行时间。

答案 1 :(得分:0)

小于3的单词被视为停用词。 LDA构建主题,因此,请想象您生成了以下主题:

[我,他,她,他们,我们和/或……]

相比:

[鲨鱼,公牛,大白鲨,锤头鲸,鲸鲨]

哪个更能说明问题?这就是为什么删除停用词很重要的原因。这是我的方法:

# Create functions to lemmatize stem, and preprocess

# turn beautiful, beautifuly, beautified into stem beauti 
def lemmatize_stemming(text):
    stemmer = PorterStemmer()
    return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos='v'))

# parse docs into individual words ignoring words that are less than 3 letters long
# and stopwords: him, her, them, for, there, ect since "their" is not a topic.
# then append the tolkens into a list
def preprocess(text):
    result = []
    for token in gensim.utils.simple_preprocess(text):
        newStopWords = ['your_stopword1', 'your_stopword2']
        if token not in gensim.parsing.preprocessing.STOPWORDS and token not in newStopWords and len(token) > 3:
            nltk.bigrams(token)
            result.append(lemmatize_stemming(token))
    return result