Выделение скрытого распределения Дирихле (LDA) за счет ограничения размера слова для корпусных документов

Я генерировал темы с набором данных о клиентах, используя распределение скрытого дирихле (LDA) в python(пакет gensim). При создании токенов я выбираю из рецензий только слова длиной>= 3 (используя RegexpTokenizer):

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

Это позволит нам отфильтровать зашумленные слова длиной менее 3, создавая корпусный документ.

Как фильтрация этих слов повлияет на производительность с помощью алгоритма LDA?

1 ответ

Вообще говоря, для английского языка одно- и двухбуквенные слова не добавляют информацию по теме. Если они не увеличивают ценность, их следует удалить на этапе предварительной обработки. Как и большинство алгоритмов, меньшее количество данных ускорит время выполнения.

Слова длиной менее 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

Другие вопросы по тегам