Выделение скрытого распределения Дирихле (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