In the previous post about detecting the category of an input text, we have presented to you how to build a simple Naive Bayes classifier for Text classification. In this post, we will show you a more advanced way to find the topic of a given context.
Introduction
Graphical representation of LDA [1]
Suppose we have 5 different sentences (from A to E):
- A: Mứt khoai lang kén lăn dừa vừa ngon lại độc đáo.
- B: Hương vị thơm ngon, hấp dẫn và nóng hổi của từng món bò đều có thể khiến bạn ngất ngây khi thưởng thức.
- C: Hai nam diễn viên Chí Trung và Mạnh Dũng góp mặt trong hậu trường buổi tập của các “Táo”.
- D: Nghệ sĩ Chí Trung là người tích cực hé lộ hậu trường Táo quân 2016 nhất.
- E: Bắt gặp nghệ sĩ Chí Trung ăn phở bò vỉa hè.
If you could understand Vietnamese, it is easy to realize that:
- The first two sentences (A and B) are about local Vietnamese foods
- The following two sentences (C and D) are about local Vietnamese celebrities
- The last sentence (E) is the mixture of Vietnamese foods and Vietnamese celebrities (we could say: 75% about celebrities and 25% about Vietnamese foods).
From the above input, we could also define some important keywords for Vietnamese foods category and Vietnamese celebrities category:
- Vietnamese foods: Mứt, khoai lang, dừa, thơm, ngon, nóng hổi, bò, món
- Vietnamese celebrities: diễn viên, Chí Trung, Mạnh Dũng, hậu trường, Táo, Nghệ sĩ
As you may see, it is very easy for us to define those keywords, but what if our corpus has thousands of documents, each document has hundreds of sentences and thousands of words. We cannot do it manually by ourselves. In fact, there is a technique called: Latent DirichletAllocation (LDA) that helps us detect the important keywords for each category.
LDA model
In LDA model, we assume each document is a set of words that are derived from a mixture of topics. Therefore, in order to produce a document, we:
- Decide the number of words in the document (suppose it is N)
- Choose a mixture of topics for the document (suppose we have K topics, this is a Dirichlet distribution over K topics)
- Each word in the document is generated by:
- Randomly choose a topic (according to the mixture of topic above)
- Randomly choose a word from the selected topic.
- For example, we choose Vietnamese foods topic by random and then, from the distribution of words in this topic, we also choose “bò”
This is the generative model for documents, LDA’s job is to take the documents as its input and then try to find the topics.
How LDA learns the topics [2]
To initiate LDA, we have to predefine the number of topics (K). Using Gibbs’ sampling, the process will be:
- Go through each document in the input, randomly assign the topic for each word in the document as one of K topics. This is a rough sampling step which gives us a very bad distribution of topics and words. To improve it, we have to repeat the following steps
- For each document d
- For each word w
- For each topic t, compute:
- p(t|d) = the proportion of words in d that are assigned to t
- p(w|t) = the proportion of topic t for all documents that derived from word w
- Reassign w to a new topic t’ where t’ is chosen from p(t|d)*p(w|t). This is the probability that topic t generates word w
- For each topic t, compute:
- (To be more specific, we assume all the words except w has been correctly assigned. We need to update the correct topic for w according to the generative model)
- For each word w
- Repeating the above step for a large number of times, we will reach a steady state in which all the assignments are quite acceptable.
- Now, we can estimate:
- the mixture of topics for each document: count the proportion of words assigned to each topic inside the document
- the distribution of words in each topic: count the proportion of words assigned to each topic in overall
How we apply LDA
In order to apply LDA into we have to:
- Build a segmentation service (in Vietnamese language, segmented input is always better than non-segmented one). Of course, we also have to segment the testing input too
- Find the stopwords in the context and remove them (stopwords are the set of words that appear in almost all document)
- Run LDA algorithm to find topics
Results with Eva.vn
Here is our input for training and the stopwords files:
You can always try our service here: https://engineer.beecost.com/topicmodel/?f=text&url=http://eva.vn/am-nhac/fan-an-can-lau-mo-hoi-cho-nathan-lee-sau-dem-dien-c256a251711.html.
Just simply change the URL variable in the query params into a different Eva’s URL and find the result yourself. (Note that: the context that we used are crawled from Eva.vn and we only have the content parser for Eva.vn. Don’t try links from different websites, our service will not work properly)
Example:
- By training the input documents into 100 different topics, we received a model in which top 15 words for each topic is the following:
[code language=”text” collapse=”true” light=”true”]
0 cha nuôi thương khóc cuộc_đời nỗi đơn_thân tâm_sự một_mình buồn yêu_thương may_mắn cậu câu_chuyện cha_mẹ
1 ipad màn_hình pro tablet mini inch lenovo máy windows laptop microsoft usd surface máy_tính máy_tính_bảng
2 nám công_nghệ điều_trị phương_pháp thẩm_mỹ thanh_mai collagen trẻ_hóa căng viện lão_hóa làm_đẹp vết laser nếp_nhăn
3 rửa quần_áo vệ_sinh bẩn lau giặt vết mùi vải bát mẹo khô khăn tẩy giấm
4 bánh bột kem trứng nướng nhân trộn hỗn_hợp sữa kẹo khuôn nguyên_liệu tươi trung_thu bánh_quy
5 iphone apple ứng_dụng người_dùng thiết_bị điện_thoại màn_hình plus tính_năng ios công_nghệ android phiên_bản pin nút
6 suy_nghĩ con_người cơ_hội xã_hội kinh_nghiệm đam_mê quan_điểm nghề mong_muốn kế_hoạch may_mắn tính_cách cá_nhân cảm_xúc ý_kiến
7 mang_thai thai_nhi thai_kỳ thai em_bé non nguy_cơ nghén bầu_bí sảy siêu_âm tử_cung cân thai_phụ máu
8 giảm_cân sau_sinh tập vóc_dáng cân chế_độ ăn_uống tập_luyện béo thể_dục yoga thân_hình bí_quyết rạn thon
9 tắm lạnh nhiệt_độ mùa_đông nắng khăn bỉm sơ_sinh quần_áo mồ_hôi mát điều_hòa chăn thấm thời_tiết
10 trái_tim phong nỗi mãi cuộc_đời thụy buồn cảm_xúc cô_đơn tim cười gió yêu_thương quân con_người
11 clip facebook cộng_đồng đăng_tải đoạn lượt cá_nhân xã_hội cư_dân video bình_luận nghìn elly đăng chụp
12 công_ty quy_định quản_lý y_tế yêu_cầu giám_đốc xã_hội cơ_quan cấp phó trường_hợp xử_lý trung_tâm dân đơn_vị
13 hương diễm huyền mai giang á_hậu hoa_hậu trúc văn hoàng_anh thúy lưu tràm idol thanh_huyền
14 minh linh hằng hoàng thùy thúy lan nga hạnh dung siêu_mẫu xuân vĩnh người_mẫu khang
15 vân ngô diệp long bích phi hữu đinh loan lương bảo hugo quân lợi kiến
16 yến hải dương hoàng quyên đức hiền phúc hùng oanh dũng kim kết_hôn phạm đan
17 xăng xăng_dầu lít điện thị_trường usd dầu doanh_nghiệp kinh_doanh quỹ mặt_hàng xuất_khẩu công_ty sản_xuất tài_chính
18 tuấn tâm hưng trung nhạc_sĩ lam lập tít bùi nghệ_sĩ nhạc minh bảo tường kiều
19 phẫu_thuật thẩm_mỹ mũi khuôn_mặt nâng cằm kéo dao ngực gương_mặt nhan_sắc làm_đẹp line hàn_quốc tiêm
20 dạy cha_mẹ đồ_chơi thông_minh trẻ_em giáo_dục phụ_huynh người_lớn bậc đọc phương_pháp ngôn_ngữ con_cái trò_chơi trí
21 hoa_hậu duyên thảo gương_mặt nhan_sắc người_mẫu mỹ_nhân trẻ_trung showbiz trang_điểm sang_trọng thân_hình vóc_dáng làng sexy
22 giáng_sinh noel tặng dịp trang_trí quà món_quà thông đón sinh_nhật mùa không_khí trung_thu ngày_lễ búp_bê
23 nhân_vật đạo_diễn điện_ảnh the sản_xuất đóng truyền_hình diễn_xuất tác_phẩm xuất_sắc câu_chuyện ra_mắt rạp cảnh cảnh_quay
24 khách_hàng com thương_hiệu công_ty chất_lượng website tặng hcm công_nghệ facebook địa_chỉ tư_vấn hệ_thống quận chi_tiết
25 chuối trái chín hạt nho trái_cây dưa_hấu dưa dâu_tây nấm táo hoa_quả cam cà_chua kiwi
26 chú mèo chó chim nàng thỏ ngựa động_vật rắn rừng loài vua công_chúa thú chàng
27 cửa_hàng khách_hàng chợ khách có_giá nghìn trung_quốc thị_trường chủ chất_lượng quảng_cáo mua_sắm kinh_doanh nhân_viên nhu_cầu
28 thịt hành thái rửa tôm xào gia_vị nồi canh nấu muối đun rau tỏi mắm
29 nàng chàng quan_hệ hôn_nhân mối tình_dục chàng_trai chuyện_ấy hẹn_hò kết_hôn người_yêu anh_chàng đồng_tính cô_nàng bạn_đời
30 nghiên_cứu nguy_cơ ung_thư rượu khoa_học mắc máu nguyên_nhân tiểu_đường nhóm thuốc bia tế_bào thần_kinh rối_loạn
31 lưu lâm huỳnh trương phạm băng_băng châu dương thần thi minh phi tiểu fan mịch
32 mứt dừa chanh sữa ngâm bếp đun nguyên_liệu dứa nồi muối sữa_chua thơm nước_cốt sôi
33 trường đại_học sinh_viên thi tốt_nghiệp thí_sinh học_sinh môn ngành giáo_dục quốc_gia thpt đào_tạo giỏi học_tập
34 món_ăn quán thịt vịt bánh thưởng_thức nướng ngọt bún thơm hương_vị phở chế_biến ẩm_thực thực_khách
35 thịt chiên dầu trứng bột gạo muối cơm chảo chín nguyên_liệu tôm viên trộn miếng
36 son môi trang_điểm phấn khuôn_mặt đậm kem che khuyết_điểm đánh hồng làm_đẹp thỏi_son bóng make
37 trồng vườn loài hồng chậu hoa_hồng bông lan ban_công sen khu sắc thảo cành rực_rỡ
38 victoria kim beckham ngôi_sao jennifer kardashian secret kate rihanna angelina taylor jolie cánh thiên_thần jenner
39 sách nhật cuốn nhật_bản đọc tác_giả viết tác_phẩm câu_chuyện xuất_bản nghệ_thuật độc_giả daisy ikebana jen
40 răng tủ_lạnh thực_phẩm bảo_quản ngăn nhiệt_độ nước_hoa nấu bếp thịt mùi vi_khuẩn túi lạnh nồi
41 thực_phẩm thịt sản_xuất giả lợn kiểm_tra hóa_chất cơ_sở thị_trường trung_quốc chức_năng cơ_quan mẫu bẩn tiêu_dùng
42 vitamin thực_phẩm chứa dinh_dưỡng bổ_sung canxi giàu béo sữa cung_cấp protein sắt rau hạt axit
43 chùa bàn_thờ phật cúng thờ tượng vua ban hương bát tổ_tiên đất dòng_họ hoàng_hậu ngôi
44 tác_dụng gừng trà chữa tỏi trị rượu thuốc muối ngâm mật_ong mùi độc nghệ hoàn
45 cậu cô_bé đáng_yêu nhí nhóc công_chúa minh dễ_thương tập thiên_thần mẫu tiểu thích_thú lực em_bé
46 lâm vương tịnh băng nhật gia cậu nguyên hải hải_yến trân trí minh huyền long
47 đầu_tư dự_án usd ngân_hàng thị_trường giao_dịch căn_hộ chủ chung_cư đất phiên bất_động_sản lãi_suất khách_hàng sàn
48 cháu mẹ_chồng chăm dâu bảo cơm ông_bà hôm con_cái nuôi nấu chiều bác sau_này khóc
49 đám_cưới cô_dâu váy_cưới chú_rể nhẫn hôn_lễ kết_hôn cầu_hôn lãng_mạn lễ_cưới trọng_đại văn tiệc_cưới baby angela
50 trồng rau đất vườn tưới chậu hạt thu_hoạch thùng gieo phân mầm hạt_giống xốp rau_muống
51 ung_thư vắc_xin tiêm y_tế nhiễm điều_trị mắc virus tiêm_chủng sởi dịch tử_vong xuất_huyết bệnh_nhân trường_hợp
52 tết đào bưởi quất dịp ngày_tết vườn bonsai trồng linh_chi phật_thủ lộc gốc cành có_giá
53 xăm móng sơn mái_tóc rụng nhuộm nail dầu_gội gội_đầu bóng gàu mượt bạc mọc gội
54 trường học_sinh cô_giáo giáo_viên phụ_huynh đánh nhà_trường tiểu_học thầy mầm_non cháu giáo_dục nữ_sinh dạy thầy_cô
55 nghệ_sĩ truyền_hình hài xuân nghệ_thuật sân_khấu nghề đạo_diễn danh_hài nsưt hoài trịnh táo_quân kim_chi đóng
56 may_mắn thủy tranh hướng vận con_giáp mệnh mùi sự_nghiệp sửu hợp thân hợi hỏa tài_vận
57 hồng áo_dài nhung thị hoa_hậu từ_thiện hân may miu trương đặng truyền_thống tham_dự xuân bà_nội
58 sơ_sinh khóc giấc_ngủ tư_thế động_tác lưng bài_tập tập thẳng em_bé thức dậy thở giây gối
59 kim lee young hyun hee min park jung song won tae fan soo hye jin
60 sữa sữa_mẹ hút bình nuôi sau_sinh công_thức ngực dinh_dưỡng pha em_bé vắt nguồn sữa_bột sơ_sinh
61 du_lịch biển khu thành_phố du_khách khách_sạn chuyến đảo núi pháp khách lễ_hội địa_điểm tham_quan bãi_biển
62 pháp trung_quốc khủng_bố tổng_thống nga new tấn_công quốc_gia ấn_độ thành_phố paris vanga đức châu_âu cảnh_sát
63 ngôi biệt_thự căn khu tầng xây_dựng căn_hộ kiến_trúc sang_trọng tòa_nhà rộng vườn xây đại_gia lâu_đài
64 bệnh_viện bệnh_nhân điều_trị máu cháu phẫu_thuật cấp_cứu trường_hợp khám viện khoa nặng ghép cứu hiến
65 không_gian căn phòng_ngủ ngôi tường bếp nội_thất phòng_khách bàn trang_trí căn_hộ ánh_sáng giường cửa diện_tích
66 chất_liệu họa_tiết thanh_lịch ren chân_váy đầm vải mẫu sang_trọng gam_màu công_sở áo_khoác tinh_tế phụ_kiện cổ_điển
67 phong_thủy cửa hướng năng_lượng vị_trí phòng_ngủ ngôi khí may_mắn gương xấu bếp tài_lộc treo hóa_giải
68 em_bé chào_đời sinh_nở cơn bệnh_viện mang_thai sản_phụ chuyển_dạ phương_pháp sau_sinh đau_đẻ sơ_sinh song_sinh thai_kỳ may_mắn
69 quần sơ_mi giày áo_khoác jeans cá_tính tín_đồ chân_váy phụ_kiện ống denim xu_hướng phối phố cô_nàng
70 thảo cường phan dư_luận showbiz đại_gia lên_tiếng scandal tin_đồn thủy_tiên cá_nhân vinh công khẳng_định quan_hệ
71 nhiếp_ảnh gia chụp chụp_ảnh khoảnh_khắc cô_dâu ngọt_ngào ngắm ghi chú_rể đáng_yêu chàng_trai câu_chuyện lãng_mạn kỉ_niệm
72 trứng tránh_thai thuốc tinh_trùng thụ_thai rụng bao_cao_su thai tử_cung vô_sinh sinh_sản thụ_tinh kinh_nguyệt phương_pháp chu_kỳ
73 dân thị quê nghề nghèo làng liên huyện tỉnh văn ngôi đất kiếm bà_con xóm
74 công_an điều_tra cơ_quan huyện thị nạn_nhân tỉnh cảnh_sát cháu giết đối_tượng vụ_việc hành_vi bắt vụ_án
75 chia_tay người_yêu chấp_nhận ly_hôn đau_khổ tình mong hôn_nhân buồn quan_hệ quen yêu_thương mối cảm_ơn mối_tình
76 hàn_quốc hàn eun hye truyền_hình kim lee song nhân_vật cô_dâu choi diễn_xuất woo fan màn_ảnh
77 phương khánh quỳnh chi trinh trương ánh nhã lan kiều angela ngân thi huy bảo
78 hoa_hậu phạm hương cuộc_thi hoàn_vũ thí_sinh khuê top lan miss đại_diện chung_kết giải nhan_sắc thị
79 kem chống mỹ_phẩm nắng dưỡng dầu thành_phần kem_dưỡng khô chứa rửa dưỡng_ẩm bảo_vệ bôi dạng
80 người_mẫu show ntk trình_diễn bst sàn fashion mạnh sưu_tập mẫu tuần_lễ cường paris xuân new
81 dân tai_nạn cháy giao_thông cầu hiện_trường khu_vực xe_máy quận rơi nạn_nhân ô_tô lực_lượng khu tầng
82 mưa nhiệt_độ cấp gió mây dông thấp tỉnh mạnh trời mưa_rào nắng rét biển khu_vực
83 thí_sinh giám_khảo món_ăn top quốc thử_thách đầu_bếp masterchef tập vietnam tuyết cuộc_thi đội vua project
84 đàn_bà ngoại_tình lấy_chồng người_chồng bảo kiếm xấu giàu nhiêu kia chấp_nhận giàu_có dám khổ yêu_thương
85 ngực giày áo_ngực chiều_cao gót áo_tắm maxi dây lưng bikini áo_lót ngắn nội_y ren lót
86 cháo dặm thức_ăn bữa nấu dinh_dưỡng bữa_ăn cơm đồ_ăn món_ăn ăn_uống rau bát thực_phẩm thịt
87 tết tàu hành_khách máy_bay thưởng doanh_nghiệp khách hãng hàng_không bến_xe dịp tuyến vận_tải nghỉ chuyến_bay
88 galaxy samsung máy màn_hình note nexus thiết_bị edge điện_thoại smartphone google công_nghệ người_dùng camera cảm_biến
89 lông_mày lông khuôn_mặt làm_đẹp lông_mi trào_lưu cong cạo kính xu_hướng hữu_ích nốt_ruồi chạm dày chuyên_gia
90 bảo hôm điện_thoại đấy cười khóc câu kia hắn thằng chỗ dám cửa nói_chuyện trả_lời
91 mái_tóc tết xoăn búi đuôi buộc ngắn nàng mái tóc_mái kẹp lệch cô_nàng lọn_tóc thẳng
92 bình cắm giấy bông cánh miếng dây tranh dán kéo sợi dao trang_trí vải tỉa
93 âm_đạo máu tử_cung dấu_hiệu vùng_kín tình_dục tiểu chảy kinh_nguyệt nguyên_nhân triệu_chứng dịch hiện_tượng vùng vệ_sinh
94 ca_khúc âm_nhạc tùng nhạc hát hiếu sơn sân_khấu the nhóm nhi fan nhạc_sĩ bài_hát biểu_diễn
95 mụn dầu mặt_nạ trị rửa hỗn_hợp chanh trứng mật_ong đắp vùng vết phương_pháp thoa dưỡng
96 hoài giám_khảo thí_sinh linh nhảy quang sân_khấu tiết_mục hát đàm thi trấn cuộc_thi giọng_hát ca_khúc
97 túi thương_hiệu giày túi_xách hàng_hiệu mẫu chanel đầm sưu_tập có_giá phụ_kiện nhã dior trang_sức tín_đồ
98 thuốc sốt viêm tiêu_chảy điều_trị dấu_hiệu mũi triệu_chứng kháng_sinh dị_ứng nguy_hiểm nặng cảm hô_hấp trường_hợp
99 smartphone camera máy màn_hình inch ra_mắt android htc ram chip one bộ_nhớ lumia trang_bị phân_giải
[/code]
- Testing a website in Eva.vn, we received:
[code language=”text” collapse=”true” light=”true”]
input: nathan lee lạnh_lùng diện hàng_hiệu khủng nathan lee trốn thành_phố đón giao_thừa một_mình trên biển trần lập phản_bác tin_đồn nguy_kịch trước liveshow bận_rộn với lịch diễn dày_đặc cùng khâu chuẩn_bị cho nhiều dự_án âm_nhạc lớn sắp ra_mắt trong năm 2016 nathan lee vẫn tiếp_tục có nhiều đêm nhạc riêng trên cả nước mới đây nam ca_sĩ xuất_hiện bảnh_bao phong_độ trong vòng_vây người hâm_mộ tại một phòng trà lớn ở tp hcm mặc dù khá mệt_mỏi vì làm_việc quá sức thời_gian qua nam ca_sĩ điển_trai vẫn vui_vẻ thân_thiện khi gặp_gỡ các fan của mình nathan lee không làm khán_giả thất_vọng khi thể_hiện tuyệt_vời gần 20 ca_khúc bằng cả 3 ngôn_ngữ anh pháp việt ông_hoàng opera biến_hóa ngoạn_mục với nhiều dòng_nhạc khác nhau từ những bản tình_ca quốc_tế bất_hủ tới những bản bolero ngọt_ngào day_dứt trước khi làm nổ tung sân_khấu với những bản hit dance do chính anh sáng_tác như xinh say mdd với giọng_hát đẹp đầy nội_lực cùng phong_cách máu_lửa nathan lee đã cống_hiến cho khán_giả một đêm nhạc thật_sự đã tai đã mắt fan hâm_mộ của nam ca_sĩ tận_tình chăm_sóc thần_tượng lau mồ_hôi cho anh sau khi đêm nhạc kết_thúc vào lúc quá nửa đêm được biết nathan lee sẽ phát_hành mv mới cùng một album khá bí_hiểm vào tháng 2 tới nam ca_sĩ chia_sẻ lee rất may_mắn vì có những khán_giả tuyệt_vời luôn đồng_hành cùng lee trong mọi hoàn_cảnh thời_điểm này lee rất sung_sức và đang tập_trung chuẩn_bị cho nhiều dự_án nghệ_thuật mới hy_vọng mọi người sẽ tiếp_tục đón_nhận những sản_phẩm âm_nhạc tâm_huyết của lee trong năm nay
====================================================================================
Predicted Category: Category: 94 with probability: 85.41%
====================================================================================
94 ca_khúc âm_nhạc tùng nhạc hát hiếu sơn sân_khấu the nhóm nhi fan nhạc_sĩ bài_hát biểu_diễn
====================================================================================
[/code]
What can we do with this
Apply our LDA to a document, we will receive a vector of 100 dimensions (each dimension represent the probability of the document generated by a topic). In other words, we have successfully vectorized the document.
Since we focus mainly on Recommender System, this is a great news for us because we could calculate the distance between two vectorized documents. To be more precisely, this distance represents the similarity of the two given documents. The smaller the distance is, the more similar the documents are.
Based on this result, we could build a content-based Recommender System. The system takes a document as the input. It will then compute the most similar documents in our database using the distance mentioned above. Those similar documents are the recommended output for user.
Reference:
[1] http://salsahpc.indiana.edu/b649proj/proj3.html
[2] http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/