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

One thought on “Topic Modeling là gì

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