Topic Modeling là gì

Latent Dirichlet Allocation
Latent Dirichlet Allocation

Topic Modeling là gì? Tại sao chúng ta cần nó?

Trong thế giới Big Data, dữ liệu luôn luôn tăng dần mỗi ngày khiến cho việc tìm kiếm những thông tin cần thiết đối với từng cá nhân ngày càng khó khăn. Để giải quyết vấn đề này, ta cần có các công cụ và kĩ thuật để tổ chức, tìm kiếm và hiểu được ý nghĩa của thông tin lộn xộn đó. Topic modeling là một trong các công cụ giúp ta thực hiện được việc này:

  • Khám phá các pattern topics xuất hiện trong tập văn bản.
  • Phân loại và gán nhãn các văn bản dựa vào các topic đã được định nghĩa.
  • Sử dụng các nhãn này để tổ chức, tìm kiếm và tổng hợp văn bản.

Có nhiều kĩ thuật được sử dụng để thu được topic models như LDA và TextRank. Bài viết này tập trung giải thích Latent Dirichlet Allocation (LDA), một phương pháp thông dụng trong topic modeling.

Latent Dirichlet Allocation (LDA)

lda_image

Khi áp dụng thuật toán LDA trên tập huấn luyện (ngữ liệu/corpus), ta sẽ thu được xác suất tương ứng cho từng từ trong văn bản. Từ đó, LDA sẽ gom nhóm các từ này thành từng topics. Lưu ý, số lượng topics được ta xác định trước, tên của topics do chúng ta đặt tên sau khi gom nhóm được.

Ví dụ, ta có tập hợp các văn bản sau:

  • Document 1: I like to eat broccoli and bananas.
  • Document 2: I ate a banana and spinach smoothie for breakfast.
  • Document 3: Chinchillas and kittens are cute.
  • Document 4: My sister adopted a kitten yesterday.
  • Document 5: Look at this cute hamster munching on a piece of broccoli.

Ta xác định trước số lượng topics là 2 và thu được kết quả như bên dưới

  • Document 1 and 2: 100% Topic A
  • Document 3 and 4: 100% Topic B
  • Document 5: 60% Topic A, 40% Topic B
  • Topic A: 30% broccoli, 15% bananas, 10% breakfast, 10% munching, …
  • Topic B: 20% chinchillas, 20% kittens, 20% cute, 15% hamster, …

Ta có thể đặt tên cho topic 1 là thực phẩm và topic 2 là thú cưng. Từ ví dụ trên, ta có thể thấy mô hình LDA sẽ khám phá ra các chủ đề khác nhau mà văn bản đó thể hiện và sự phân bổ các topics trong văn bản đó là bao nhiêu phần trăm. Nói cách khác, LDA là một mô hình bag-of-words.

Latent Semantic Analysis
Latent Semantic Analysis

Về cơ bản, LDA biểu diễn các văn bản thông qua sự pha trộn giữa các topics (mixtures of topics) có thể phát sinh ra được các từ với xác suất phân bố cụ thể. Giả sử các văn bản được hình thành như sau, khi bạn viết một văn bản:

  • Xác định số lượng các từ N xuất hiện trong từng văn bản. Ta có thể dùng Poisson distribution để xác định số N.
  • Chọn K topic cho văn bản dựa trên Dirichlet distribution. Ví dụ, ta có xác suất phân bố cho topic thực phẩm là 1/3 và thú cưng là 2/3.
  • Phát sinh từng từ w_i trong mỗi văn bản như sau:
    • Chọn ra một topic với xác suất đã tính được như trên (thực phẩm là 1/3 và thú cưng là 2/3.)
    • Sử dụng topic này để phát sinh từ w_i. Ví dụ, khi ta chọn topic là thực phẩm, ta phát sinh được từ “broccoli” với xác suất là 30%, “bananas” là 15%, …

Giả sử đây là mô hình phát sinh ra tập các văn bản, LDA sẽ cố gắng lục lọi lại trong văn bản này để tìm ra các topics tương ứng sao cho biểu diễn gần nhất cho các văn bản này.

Training

Giả sử bạn có một tập các văn bản. Bạn chọn được cho mình số lượng topic K để khám phá. Bạn muốn sử dụng LDA để tìm ra các topic phù hợp cho từng văn bản và các từ tương ứng cho từng topic đó. Bạn làm điều đó như thế nào? Phương pháp lấy mẫu Collapsed Gibbs là một trong những cách mà mô hình LDA dùng để học các topics từ văn bản. Tiến trình được thực hiện như sau:

  • Duyệt qua từng văn bản và gán một cách ngẫu nhiên các từ trong văn bản vào một trong K topics.
  • Lúc này, ta đã có được giá trị khởi tạo cho mô hình gồm các topic biểu diễn trong văn bản và sự phân bố các từ cho từng topics (mặc dù chưa được tốt lắm).
  • Vì vậy để cải thiện mô hình ở bước đầu, ta sẽ duyệt qua từng văn bản d (document)
    • Duyệt qua từng từ w trong d.
      • Đối với mỗi topic t, ta tính hai đại lượng: 1) p(topic \ t | document \ d) là tỉ số các từ trong văn bản d được gán cho topic t. 2) p(word \ w | topic \ t) là tỉ số mà topic t gán cho các văn bản thông qua từ w. Tiếp theo, ta  cập nhật từ w vào topic mới, trong đó topic t có xác suất bằng p(topic \ t | document \ d) * p(word \ w | topic \ t).

Sau khi lặp lại các bước trên nhiều lần, mô hình dường như đạt được trạng thái ổn định. Khi đó, ta có thể sử dụng kết quả này để xác định tỉ lệ phân bố của các topic bên trong từng văn bản (bằng cách đếm xác suất các từ của từng topic có trong văn bản đó) và phân bố của các từ tương ứng bên trong từng topic (bằng cách đếm tỉ lệ các từ được gán cho từng topic overall).

Trong một ngữ cảnh khác

Giả sử bạn vừa mới chuyển tới một thành phố mới. Bạn là một fan anime và hip hop, nên bạn muốn biết những người giống mình thường đi chơi ở đâu. Tất nhiên bạn không thể nào đi hỏi bất kỳ ai, vậy bạn sẽ làm gì?

Ta sẽ quy về bài toán tương tự như Topic modeling: bạn chọn ra hàng loạt những tụ điểm khác nhau (documents), ghi chú lại một vài người (words) thường lui tới đây (ví dụ A thường lui tới các siêu thị và công viên, B thường lui tới rạp chiếu phim và công viên, …). Điều quan trọng là bạn không biết thể loại (topics) của những tụ điểm này là gì và những người bạn ghi chú, họ thuộc thể loại nào.

Vì vậy, bạn tự đặt ra K thể loại để tìm hiểu (nghĩa là bạn muốn biết hầu hết mọi người sẽ thuộc thể loại nào trong số này) và đoán xem tại sao bạn lại thấy những người này hay lui tới những địa điểm đã đề ra. Ví dụ, bạn đoán rằng A thường lui tới các siêu thị là bởi vì những người thích thể loại X thường lui tới đây; và bạn thấy A ra công viên là bởi vì bạn bè của A thích thể loại Y nên rủ A ra đây. Khi bạn thấy B tại rạp chiếu phim, bạn đoán rằng những người thích thể loại Z thường hay đi xem phim, và cứ thế cho những người khác.

Tất nhiên, những dự đoán ban đầu không bao giờ đúng 100% bởi vì bạn chỉ đoán một cách ngẫu nhiên. Nên bạn cần điều chỉnh lại độ chính xác của mô hình.

  • Chọn ra một địa điểm và một người (ví dụ A ở siêu thị).
  • Tại sao A thường đến siêu thị? Có lẽ bởi vì những người có cùng sở thích đang ở siêu thị nhắn tin cho A ra. Nói cách khác, càng có nhiều người có cùng sở thích X đang ở siêu thị và A có sở thích X càng nhiều bao nhiêu, thì xác suất A hay đi siêu thị do sở thích X là rất cao.
  • Do đó, ta cập nhật lại mức độ dự đoán tại sao A lại đi siêu thị bằng một con số xác suất nào đó bạn thấy phù hợp nhất.

Đi đến từng địa điểm và từng người một hết lần này đến lần khác. Kết quả dự đoán của bạn ngày càng tiến bộ (cuối cùng, nếu bạn nhận ra có nhiều con mọt sách hay lui tới nhà sách và bạn nghi rằng A cũng rất là mọt sách thì bạn dám cá rằng A thường hay lui tới các hiệu sách là bởi vì bạn bè của A cũng như vậy. Nhờ vào thông tin tương tự, bạn có thể xác định được tại sao mọi người lại thường hay lui tới những địa điểm mà họ hay đến).

  • Với mỗi thể loại k_i, i \in K, bạn có thể đếm được số người có cùng thể loại, nhờ vậy bạn có thể đặt tên cho thể loại đó. Bằng cách quan sát những người này, ta cũng có thể xác định được thể loại này là gì (ví dụ, nếu thể loại X có nhiều người cao ráo mặc quần áo thể thao hay tụ tập ở khu bóng rổ, bạn có thể đoán ngay X là thể loại “vận động viên bóng rổ”).
  • Với mỗi địa điểm P thuộc nhóm sở thích C, bạn có thể tính được tỉ lệ số người ở P bởi vì C là bao nhiêu. Ví dụ, bạn có thể tính được những người hay lui tới nhà sách thường có 10% là hip hop, 50% là anime fan, 10% là dân thời trang, và 30% là sinh viên đại học.

Chương trình minh hoạ

Ta có thể tham khảo một chương trình minh hoạ tại đây.


import numpy as np
import lda
import lda.datasets
X = lda.datasets.load_reuters()
vocab = lda.datasets.load_reuters_vocab()
titles = lda.datasets.load_reuters_titles()
X.shape
X.sum()
model = lda.LDA(n_topics=20, n_iter=1500, random_state=1)
model.fit(X)  # model.fit_transform(X) is also available
topic_word = model.topic_word_  # model.components_ also works
n_top_words = 8
for i, topic_dist in enumerate(topic_word):
	topic_words = np.array(vocab)[np.argsort(topic_dist)][:-(n_top_words+1):-1]
	print('Topic {}: {}'.format(i, ' '.join(topic_words)))

Topic 0: british churchill sale million major letters west britain
Topic 1: church government political country state people party against
Topic 2: elvis king fans presley life concert young death
Topic 3: yeltsin russian russia president kremlin moscow michael operation
Topic 4: pope vatican paul john surgery hospital pontiff rome
Topic 5: family funeral police miami versace cunanan city service
Topic 6: simpson former years court president wife south church
Topic 7: order mother successor election nuns church nirmala head
Topic 8: charles prince diana royal king queen parker bowles
Topic 9: film french france against bardot paris poster animal
Topic 10: germany german war nazi letter christian book jews
Topic 11: east peace prize award timor quebec belo leader
Topic 12: n't life show told very love television father
Topic 13: years year time last church world people say
Topic 14: mother teresa heart calcutta charity nun hospital missionaries
Topic 15: city salonika capital buddhist cultural vietnam byzantine show
Topic 16: music tour opera singer israel people film israeli
Topic 17: church catholic bernardin cardinal bishop wright death cancer
Topic 18: harriman clinton u.s ambassador paris president churchill france
Topic 19: city museum art exhibition century million churches set

Phân bố giữa document-topic được truy xuất thông qua model.doc_topic_.

doc_topic = model.doc_topic_
for i in range(10):
	print("{} (top topic: {})".format(titles[i], doc_topic[i].argmax()))

0 UK: Prince Charles spearheads British royal revolution. LONDON 1996-08-20 (top topic: 8)
1 GERMANY: Historic Dresden church rising from WW2 ashes. DRESDEN, Germany 1996-08-21 (top topic: 13)
2 INDIA: Mother Teresa's condition said still unstable. CALCUTTA 1996-08-23 (top topic: 14)
3 UK: Palace warns British weekly over Charles pictures. LONDON 1996-08-25 (top topic: 8)
4 INDIA: Mother Teresa, slightly stronger, blesses nuns. CALCUTTA 1996-08-25 (top topic: 14)
5 INDIA: Mother Teresa's condition unchanged, thousands pray. CALCUTTA 1996-08-25 (top topic: 14)
6 INDIA: Mother Teresa shows signs of strength, blesses nuns. CALCUTTA 1996-08-26 (top topic: 14)
7 INDIA: Mother Teresa's condition improves, many pray. CALCUTTA, India 1996-08-25 (top topic: 14)
8 INDIA: Mother Teresa improves, nuns pray for "miracle". CALCUTTA 1996-08-26 (top topic: 14)
9 UK: Charles under fire over prospect of Queen Camilla. LONDON 1996-08-26 (top topic: 8)

Nguồn tham khảo

Advertisements

5 thoughts on “Topic Modeling là gì

  1. Em chào anh, a có thể cho e hỏi một chút về topic modeling đk ko ạ?
    1. Topic modeling đóng vai trò gì trong data mining? Đầu tiên e nghĩ ns là một phương pháp của document clustering(unsupervised learning). Nhưng khi đọc một vài tài liệu thì thực sự không phải như vậy. ? A có thể giải thích giúp e chỗ này được ko ạ? Giữa topic modeling và clustering có quan hệ như thế nào? Hay chúng là 2 methods approach khác nhau trong text mining. ?

    2. E có 1 tập tài liệu nguồn ko rõ nguồn gốc, ko có category định dạng file doc,pdf sau đó e trích xuất ra raw text. Và định sử dụng topic modeling để phân loại chúng. Khi đó vs dữ liệu nguồn này sẽ ra được n topic vs các từ và xác suất tương ứng.
    E đang băn khoăn chỗ sử dụng ns ntn?
    Chương trình của e có tác dụng chống sao chép. Bình thường e sẽ upload 1 document lên sau đó ns sẽ chạy vào tất cả dữ liệu nguồn để so sánh. Bây h, em dùng topic modeling để phân loại dữ liệu nguồn thành các topics. Khi có kết quả thì em phải làm gì để ns chỉ chạy vào những documents nguồn mà gần vs tài liệu upload lên nhất chứ ko phải là chạy vào tất cả nữa? Nghĩa là cách sử dụng kết quả của topic modeling vào bài toán của e là ntn ạ? Hiện tại e ms chỉ xem xét đến các phương pháp so sánh sự tương đồng giữa tài liệu upload và các tài liệu nguồn vs các topics đã được học, để từ đó nhận diện được các documents nguồn nào cần phải so sánh.

    Em mong nhận được sự phản hồi và suggest từ anh!
    Thanks a!

    Like

    1. Hi em, anh sẽ trả lời vắn tắt như sau:
      1.
      Topic modeling đóng vai trò gì trong data mining? tổ chức, sắp xếp tài liệu.
      Topic modeling dựa trên phân bố của các từ đối với các topic để gom nhóm văn bản (xem LDA)
      Clustering dựa trên độ tương tự giữa các văn bản để gom nhóm (xem Tf-Idf).
      2.
      Topic modeling: sử dụng ma trận SVD để xác định topic mà văn bản thuộc về
      Clustering: sử dụng độ tương tự của văn bản so với kernel xác định được.
      Em có thể tham khảo hệ thống này https://ongxuanhong.wordpress.com/2017/01/10/he-thong-recommend-bai-nhac/

      Like

      1. Dạ, em cám ơn anh ạ.
        Em đã đọc qua phần sử dụng ma trận SVD nhưng phần cuối cùng em hơi khó hiểu.
        Bởi vì em cũng mới tìm hiểu về data mining để thực hiện đề tài khóa luận của mình cho nên nhiều khái niệm em cũng chưa clear hết với cả cách áp dụng.
        Hiện tại em vẫn còn hơi băn khoăn 1 chút, a có thể nói cụ thể hơn về phần phân loại văn bản sau khi có mô hình chủ đề ko ạ. ?? Hiện tại e chỉ nghĩ là:
        + Sau khi đã học ra được n-th topics. Thì vs mỗi tài liệu gửi lên. Sau khi được rút trích thì sẽ mỗi tài liệu
        được xác định bởi một vector n chiều(tương ứng vs n topics), với mỗi chiều là một topic và mỗi giá
        trị trong các chiều là trọng số xác suất của chủ đề tương ứng
        Trọng số xác suất này sử dụng hệ số cosine.
        Sau đó chọn lấy những chủ đề mà xác suất của ns lớn hơn một ngưỡng cho trước.
        + Sau đó e chọn các tài liệu nguồn có xác suất chủ đề giống vs chủ đề đã chọn là cao nhất. Bởi vì em dùng gibblda++ của thầy Hiếu cho dữ liệu nguồn thì ns sẽ cho out put 1 file có chứa từng document vs xác suất từng chủ đề của document đó.

        Như vậy e có đang đi đúng hướng ko ạ?
        Thanks a!

        Like

        1. Hi em, sau khi em áp dụng SVD em sẽ có ma trận biểu diễn các topic và ma trận biểu diễn các tài liệu. Khi em đưa vào một tài liệu cần xác định thuộc về topic nào em lấy vector của tài liệu đó (TF hoặc TF-IDF) nhân cho ma trận của topic. Giá trị thuộc về topic nào càng lớn thì tài liệu đó có nội dung chứa đựng topic này càng cao. Em có thể tham khảo hình này http://deliveryimages.acm.org/10.1145/2140000/2133826/figs/f1.jpg.
          gibblda++ của thầy Hiếu cũng như vậy: mỗi văn bản output sẽ đi kèm với xác suất topic chứa đựng trong nội dung văn bản đó.
          Cosine similarity là một hướng tiếp cận khác. Ở đây, ta không phân tích thành ma trận SVD mà áp dụng clustering với k topic mà em định gom nhóm. Từ đây em sẽ tính khoảng cách để xác định được các văn bản gần nó nhất.

          Like

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s