EDIT: Tôi đã tìm thấy một vấn đề thú vị ở đây. This link cho thấy gensim sử dụng ngẫu nhiên trong cả hai bước đào tạo và suy luận. Vì vậy, những gì nó đề nghị ở đây là để thiết lập một hạt giống cố định để có được kết quả tương tự mỗi lần. Tại sao tôi nhận được cho mỗi chủ đề cùng một xác suất?Triển khai LDA gensim, khoảng cách giữa hai tài liệu khác nhau
Điều tôi muốn làm là tìm mọi người dùng twitter chủ đề của mình và tính toán sự giống nhau giữa người dùng twitter dựa trên những điểm tương đồng trong chủ đề. Có khả năng để tính toán các chủ đề tương tự cho mỗi người dùng trong gensim hoặc tôi có phải tính toán một từ điển của các chủ đề và cụm mỗi chủ đề người dùng?
Nói chung, đó là cách tốt nhất để so sánh hai người dùng twitter dựa trên khai thác mô hình chủ đề trong gensim? Mã của tôi là những điều sau đây:
def preprocess(id): #Returns user word list (or list of user tweet)
user_list = user_corpus(id, 'user_'+str(id)+'.txt')
documents = []
for line in open('user_'+str(id)+'.txt'):
documents.append(line)
#remove stop words
lines = [line.rstrip() for line in open('stoplist.txt')]
stoplist= set(lines)
texts = [[word for word in document.lower().split() if word not in stoplist]
for document in documents]
# remove words that appear only once
all_tokens = sum(texts, [])
tokens_once = set(word for word in set(all_tokens) if all_tokens.count(word) < 3)
texts = [[word for word in text if word not in tokens_once]
for text in texts]
words = []
for text in texts:
for word in text:
words.append(word)
return words
words1 = preprocess(14937173)
words2 = preprocess(15386966)
#Load the trained model
lda = ldamodel.LdaModel.load('tmp/fashion1.lda')
dictionary = corpora.Dictionary.load('tmp/fashion1.dict') #Load the trained dict
corpus = [dictionary.doc2bow(words1)]
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
corpus_lda = lda[corpus_tfidf]
list1 = []
for item in corpus_lda:
list1.append(item)
print lda.show_topic(0)
corpus2 = [dictionary.doc2bow(words2)]
tfidf2 = models.TfidfModel(corpus2)
corpus_tfidf2 = tfidf2[corpus2]
corpus_lda2 = lda[corpus_tfidf2]
list2 = []
for it in corpus_lda2:
list2.append(it)
print corpus_lda.show_topic(0)
Returned xác suất chủ đề cho người dùng corpus (khi sử dụng như một corpus một danh sách các từ người dùng):
[(0, 0.10000000000000002), (1, 0.10000000000000002), (2, 0.10000000000000002),
(3, 0.10000000000000002), (4, 0.10000000000000002), (5, 0.10000000000000002),
(6, 0.10000000000000002), (7, 0.10000000000000002), (8, 0.10000000000000002),
(9, 0.10000000000000002)]
Trong trường hợp tôi sử dụng một danh sách các tweets người dùng , Tôi lấy lại các chủ đề được tính toán cho mỗi tweet.
Câu hỏi 2: Có ý nghĩa nào sau đây: đào tạo mô hình LDA với một số người dùng twitter và tính toán chủ đề cho mọi người dùng (với mọi tập tin người dùng), sử dụng mô hình LDA được tính trước?
Trong ví dụ được cung cấp, list[0]
trả về phân phối chủ đề có xác suất bằng nhau 0,1. Về cơ bản, mỗi dòng văn bản tương ứng với một tweet khác nhau. Nếu tôi tính toán kho văn bản với corpus = [dictionary.doc2bow(text) for text in texts]
, nó sẽ cho tôi xác suất cho mỗi tweet riêng biệt. Mặt khác, nếu tôi sử dụng corpus = [dictionary.doc2bow(words)]
như ví dụ, tôi sẽ chỉ có tất cả các từ của người dùng dưới dạng văn bản. Trong trường hợp thứ hai, gensim trả về cùng xác suất cho tất cả các chủ đề. Vì vậy, đối với cả hai người dùng, tôi nhận được cùng một bản phân phối chủ đề.
Nếu văn bản người dùng văn bản là danh sách các từ hoặc danh sách câu (danh sách các tweet)?
Về việc triển khai Qi He và Jianshu Weng ở trang 264, nó nói rằng: chúng tôi tổng hợp các tweet được xuất bản bởi twitterer riêng lẻ thành một tài liệu lớn. Do đó, mỗi tài liệu tương ứng với một twitterer. Ok tôi bối rối, nếu tài liệu sẽ là tất cả các tweet của người dùng thì tập tin chứa nội dung gì?
Có posibility trừ phân phối trên topivs để có được phân phối qua những lời ?? –