Gần đây, tôi đã thực hiện lấy mẫu Gibbs cho mô hình chủ đề LDA trên Python bằng cách sử dụng gọn gàng, tham chiếu một số mã từ một trang web. Trong mỗi lần lặp của mẫu Gibbs, chúng tôi loại bỏ một (hiện hành) văn bản, lấy mẫu một chủ đề mới cho từ đó theo một phân phối xác suất hậu nghiệm có điều kiện suy ra từ mô hình LDA, và số lượng bản cập nhật word-đề, như sau:Thực hiện mô hình chủ đề bằng Python (numpy)
for m, doc in enumerate(docs): #m: doc id
for n, t in enumerate(doc): #n: id of word inside document, t: id of the word globally
# discount counts for word t with associated topic z
z = z_m_n[m][n]
n_m_z[m][z] -= 1
n_z_t[z, t] -= 1
n_z[z] -= 1
n_m[m] -= 1
# sample new topic for multinomial
p_z_left = (n_z_t[:, t] + beta)/(n_z + V * beta)
p_z_right = (n_m_z[m] + alpha)/(n_m[m] + alpha * K)
p_z = p_z_left * p_z_right
p_z /= numpy.sum(p_z)
new_z = numpy.random.multinomial(1, p_z).argmax()
# set z as the new topic and increment counts
z_m_n[m][n] = new_z
n_m_z[m][new_z] += 1
n_z_t[new_z, t] += 1
n_z[new_z] += 1
n_m[m] += 1
Trong đoạn mã trên, chúng ta lấy mẫu mới (đơn) z với hàm scipy đa thức.
Bây giờ, tôi muốn triển khai mô hình Chủ đề chung về tình cảm của this paper. Bây giờ, tôi sẽ cần các cấu trúc sau đây để theo dõi các tính cần thiết:
3D matrix containing # occurrences for a word for each topic, for each sentiment
3D matrix containing # occurrences for a topic, for each sentiment, for each document
2D matrix containing # occurrences for a topic, for each sentiment
2D matrix containing # occurrences for a sentiment for each document
Và bây giờ đến vấn đề: trong sampler Gibbs này, đối với mỗi từ nhìn thấy trong một tài liệu cả một chủ đề mới và một nhãn tình cảm là bây giờ lấy mẫu từ một hậu nghiệm có điều kiện (trang 4 phương trình 5 của bài báo). Làm thế nào tôi có thể "lấy mẫu 2 giá trị đó" trong Python bây giờ?
Cảm ơn trước ...
Vòng lặp 'for' đầu tiên là gì? có vẻ như tất cả những gì được thực hiện trong 'for' đầu tiên được hoàn tác vào thứ hai. – Netzsooc