Phân cụm các tài liệu bằng cách sử dụng các chủ đề bắt nguồn từ Phân bổ Dirichlet tiềm ẩn


9

Tôi muốn sử dụng Latent Dirichlet Allocation cho một dự án và tôi đang sử dụng Python với thư viện gensim. Sau khi tìm thấy các chủ đề, tôi muốn phân cụm các tài liệu bằng thuật toán như k-mean (Lý tưởng nhất là tôi muốn sử dụng một chủ đề tốt cho các cụm chồng lấp để mọi khuyến nghị đều được hoan nghênh). Tôi quản lý để có được các chủ đề nhưng chúng ở dạng:

0,041 * Bộ trưởng + 0,041 * Khóa + 0,041 * khoảnh khắc + 0,041 * gây tranh cãi + 0,041 * Thủ tướng

Để áp dụng thuật toán phân cụm và sửa lỗi cho tôi nếu tôi sai, tôi tin rằng tôi nên tìm cách thể hiện mỗi từ dưới dạng một số bằng cách sử dụng tfidf hoặc word2vec.

Bạn có ý tưởng nào về cách tôi có thể "tước" thông tin văn bản từ ví dụ như một danh sách, để làm như vậy và sau đó đặt chúng trở lại để tạo ra phép nhân phù hợp không?

Chẳng hạn như cách tôi nhìn thấy nếu từ Bộ trưởng có trọng số tfidf là 0,042 và cứ như vậy đối với bất kỳ từ nào khác trong cùng một chủ đề tôi nên tính toán một cái gì đó như:

0,041 * 0,42 + ... + 0,041 * tfidf (Prime) và nhận kết quả sẽ được sử dụng sau này để phân cụm kết quả.

Cảm ơn bạn đã dành thời gian.


1
Như được giải thích trong hướng dẫn , bạn có thể thể hiện các tài liệu dưới dạng vectơ. Cụm các vectơ đó.
Emre

Tôi biết bạn đời nhưng tôi phải phân cụm chúng theo các chủ đề được tạo sau khi tôi áp dụng LDA vào bộ sưu tập của mình. Mỗi chủ đề nên được trình bày dưới dạng một vectơ để so sánh từng tài liệu với từng chủ đề và tìm chủ đề tương ứng hoặc chủ đề cho mỗi tài liệu.
Swan87

Bạn không phải biểu diễn mỗi từ dưới dạng vector. Bạn nhận được đại diện mới cho toàn bộ tài liệu bằng cách áp dụng chuyển đổi LDA mà bạn đã học cho kho văn bản . Để biết ví dụ với LSI, hãy xem liên kết này: radimrehurek.com/gensim/tut2.html Phần quan trọng là nơi họ áp dụng chuyển đổi LSI đã học cho toàn bộ kho văn bản với lsi [doc_bow]
Will Stanton

Câu trả lời:


4

Giả sử rằng LDA tạo ra một danh sách các chủ đề và ghi điểm theo từng chủ đề cho từng tài liệu, bạn có thể trình bày tài liệu và điểm số đó là một vectơ:

Document | Prime | Minister | Controversial | TopicN | ...
   1       0.041    0.042      0.041          ...
   2       0.052    0.011      0.042          ...

Để có được điểm số cho mỗi tài liệu, bạn có thể chạy tài liệu. như một túi từ, thông qua một mô hình LDA được đào tạo. Từ tài liệu gensim:

>>> lda = LdaModel(corpus, num_topics=100)  # train model
>>> print(lda[doc_bow]) # get topic probability distribution for a document

Sau đó, bạn có thể chạy phương tiện k trên ma trận này và nó sẽ nhóm các tài liệu tương tự nhau. K-mean theo mặc định là một thuật toán phân cụm cứng ngụ ý rằng nó phân loại mỗi tài liệu thành một cụm. Bạn có thể sử dụng các cơ chế phân cụm mềm sẽ cho bạn điểm xác suất mà tài liệu phù hợp trong một cụm - đây được gọi là phương tiện mờ . https://gist.github.com/mblondel/1451300 là một ý chính của Python cho thấy cách bạn có thể làm điều đó với scikit learn.

ps: Tôi không thể đăng nhiều hơn 2 liên kết


Tôi đã cố gắng làm điều đó cho "n" không có tài liệu nào nói chủ đề là t. Tuy nhiên, giả sử x không có tài liệu, tất cả các chủ đề t thăm dò không hiển thị chỉ một số (t- không) chủ đề mà trình duyệt hiển thị, trong đó 1 <= no <t. Nó không xảy ra khi tôi chạy thử nghiệm trên kích thước tài liệu nhỏ. Có phải vì nó hoàn toàn không in nếu đầu dò bằng 0?
Manish Ranjan

0

Bổ sung cho câu trả lời trước đó, tốt hơn hết là bạn không nên chạy km trực tiếp trên dữ liệu thành phần có nguồn gốc từ phân phối chủ đề lda, thay vào đó sử dụng một số chuyển đổi dữ liệu thành phần để chiếu chúng vào không gian euclid như ilr hoặc clr.

( Ví dụ )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.