Maybe a simpler solution like below would help? I am not a fan of topic modeling because i feel results wont be worth the effort.
To understand what the people are talking about here:
- Use ngram frequency analysis to get common topics being discussed.
- If sentiment score makes sense, try a good hugging face pipeline to get sentiment score. (If you have bandwidth try your own sentiment model)
- Now build your ngram analysis on positive and negative sentiment separately and have a feel of what the people are generally happy about and what they are disappointed on.
Here is an example for huggingface model with +ve, -ve and neutral flags:
# pip install -q transformers
from transformers import pipeline
sentiment_pipeline = pipeline(model="finiteautomata/bertweet-base-sentiment-analysis")
data = ["I love you", "I hate you"]
sentiment_pipeline(data)
Below is snippet example on how you can get ngram frequencies:
Play with ngram_range parameter to get bigram and trigrams only eg: (2,3) etc..
from sklearn.feature_extraction.text import CountVectorizer
word_vectorizer = CountVectorizer(ngram_range=(1,3), analyzer='word', lowercase=True, stop_words="english")
sparse_matrix = word_vectorizer.fit_transform(text_list)
frequencies = sum(sparse_matrix).toarray()[0]
f = pd.DataFrame(frequencies, index=word_vectorizer.get_feature_names(), columns=['frequency']).sort_values("frequency", ascending=False)
I would also suggest to look at aspect based sentiment analysis and check if there are any pretrained models you can use.