Giới thiệu dự án

Sự bùng nổ của kỷ nguyên Web 2.0 đã chuyển đổi căn bản cách người dùng tương tác với thông tin số. Thay vì tiếp nhận dữ liệu thụ động, người dùng hiện nay trực tiếp tham gia sáng tạo nội dung (User-Generated Content - UGC) thông qua các bài viết, lượt tương tác, phản hồi và bình luận trên các nền tảng truyền thông xã hội. Theo thống kê lưu lượng mạng, các trang báo điện tử lớn như VnExpress ghi nhận hàng triệu lượt truy cập mỗi ngày với hơn 135 tin tức mới được phát sinh liên tục trong 24 giờ. Tuy nhiên, tình trạng bùng nổ thông tin (Information Overload) khiến độc giả chìm ngập trong biển dữ liệu, gặp khó khăn lớn trong việc tiếp cận các nội dung phù hợp với sở thích thực tế.

+-----------------------------------------------------------------------------------+
|                            VẤN ĐỀ TRÀN NGẬP THÔNG TIN                             |
|  [Hàng ngàn tin tức phát sinh/ngày] ---> [Người dùng quá tải] ---> [Bỏ lỡ tin quan tâm] |
|                                                                                   |
|                           GIẢI PHÁP ĐỀ XUẤT CỦA ĐỒ ÁN                             |
|  [Lịch sử bình luận (UGC)] ---> [Mô hình chủ đề LDA] ---> [Hồ sơ người dùng đa chiều]  |
|                                                                |                  |
|                                                                v                  |
|                                                    [Gợi ý tin tức cá nhân hóa]    |
+-----------------------------------------------------------------------------------+

Vấn đề nghiên cứu và Điểm nghẽn kỹ thuật (Pain Points)

Các hệ thống tư vấn và tìm kiếm thông tin truyền thống bộc lộ nhiều hạn chế cốt lõi:

  • Nhập nhằng ngữ nghĩa (Semantic Ambiguity): Phương pháp tiếp cận dựa trên từ khóa truyền thống (TF-IDF) không xử lý được hiện tượng đồng nghĩa (Synonymy) và đa nghĩa (Polysemy). Ví dụ, từ khóa "Apache" có thể chỉ máy chủ web (công nghệ), máy bay trực thăng quân sự, hoặc một bộ tộc người da đỏ.
  • Độ tin cậy thấp của phản hồi ngầm truyền thống: Lịch sử nhấp chuột (Click-stream logs) hoặc phiên duyệt web (Session logs) dễ chứa nhiễu do người dùng nhấp nhầm hoặc rời trang ngay sau khi nhận thấy nội dung không phù hợp.
  • Rào cản từ phản hồi hiện (Explicit Feedback): Bắt buộc người dùng tự điền bảng khảo sát sở thích gây suy giảm trải nghiệm người dùng (UX) và hồ sơ nhanh chóng bị lỗi thời do sở thích thay đổi theo thời gian.

Mục tiêu dự án

  1. Nghiên cứu và xây dựng quy trình tự động thu thập dữ liệu UGC từ lịch sử bình luận của người dùng trên báo điện tử VnExpress (http://my.vnexpress.net/users/feed/<user_id>).
  2. Ứng dụng mô hình chủ đề xác suất Latent Dirichlet Allocation (LDA) kết hợp thuật toán lấy mẫu Gibbs (Gibbs Sampling) để trích xuất $K$ chủ đề ẩn từ kho ngữ liệu tin tức tiếng Việt.
  3. Thiết kế giải thuật biểu diễn hồ sơ người dùng (User Profile) dưới dạng phân phối xác suất trên các chủ đề ẩn dựa trên các bài báo họ đã bình luận.
  4. Xây dựng và đánh giá hệ thống tư vấn tin tức cá nhân hóa, nâng cao độ chính xác so với các kỹ thuật lọc theo nội dung truyền thống.

Phương pháp tiếp cận và Biện giải

Đồ án lựa chọn phương pháp phân tích thói quen dựa trên lịch sử bình luận vì hành động bình luận chứng minh người dùng đã đọc kỹ và thực sự quan tâm đến nội dung bài viết. Bằng cách ánh xạ văn bản bài báo sang không gian $K$ chủ đề ẩn thông qua mô hình LDA, hệ thống mô tả được sở thích trừu tượng của người dùng, giải quyết hiện tượng đa quan tâm (Multi-interest) và loại bỏ sự phụ thuộc vào thói quen dùng từ cục bộ của từng tác giả.

Kết quả kỳ vọng và Phạm vi nghiên cứu

  • Kết quả đo lường được: Xây dựng bộ công cụ TopicModel, thu thập ngữ liệu 2.215 bài báo và 1.847 bình luận từ 161 người dùng thực tế; huấn luyện mô hình LDA với $K = 100$ chủ đề; trích xuất chính xác Top-$N$ chủ đề đặc trưng của từng người dùng.
  • Phạm vi & Giới hạn: Tập trung vào văn bản tin tức tiếng Việt trên VnExpress; định danh người dùng qua User ID công khai; chưa xử lý sắc thái cảm xúc (Sentiment Analysis) trong nội dung bình luận.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Phương pháp Đại diện tiêu biểu Cơ chế hoạt động Ưu điểm Nhược điểm & Điểm nghẽn
Từ khóa có trọng số WebMate, Alipes Vector không gian từ khóa, đánh trọng số $TF \times IDF$ Dễ cài đặt, tính toán trực tiếp Nhập nhằng ngữ nghĩa, bùng nổ số chiều, tư vấn trùng lặp
Mạng ngữ nghĩa InfoWeb Đồ thị khái niệm kết hợp WordNet, liên kết từ đồng nghĩa Biểu diễn được quan hệ ngữ nghĩa Phụ thuộc từ điển ngoài, cấu trúc đồ thị phức tạp
Cây phân cấp khái niệm OBIWAN Ánh xạ văn bản vào 3 tầng đầu của Open Directory Project (ODP) Cấu trúc phân cấp rõ ràng Mất mát thông tin chi tiết, phụ thuộc độ chính xác của ODP
Mô hình chủ đề LDA (Đề xuất) TopicModel (Đồ án) Phân phối Dirichlet tiềm ẩn trích xuất $K$ topic ẩn từ UGC Trừu tượng hóa ngữ nghĩa, phi giám sát, biểu diễn đa sở thích Đòi hỏi chi phí tính toán xấp xỉ tham số ban đầu

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have: Bộ cào dữ liệu (Crawler) bóc tách tự động lịch sử bình luận theo User ID; module tiền xử lý văn bản tiếng Việt; bộ huấn luyện mô hình LDA ước lượng phân phối $\theta$ và $\phi$; module xây dựng vector hồ sơ người dùng.
  • Should Have: Bộ lọc tin tức theo ngưỡng xác suất chủ đề; cơ chế cập nhật định kỳ hồ sơ người dùng khi có bình luận mới.
  • Could Have: Giao diện trực quan hóa các cụm từ khóa đại diện cho $K$ chủ đề ẩn; tích hợp API cho hệ thống quản trị nội dung (CMS).
  • Won't Have: Xử lý bình luận đa phương tiện (hình ảnh, video); phân tích biểu cảm khuôn mặt hay giọng nói.

Thiết kế hệ thống

Kiến trúc giải pháp gồm 3 pha độc lập được kết nối qua hệ thống cơ sở dữ liệu:

[Tin tức mới] ---> [Tiền xử lý] ---> [Suy diễn Topic (LDA)] ---> [CSDL Tin tức gắn Topic]
                                                                        |
                                                                        v
[Log bình luận] ---> [Trích xuất bài viết] ---> [Gộp xác suất] ---> [CSDL Hồ sơ người dùng]
                                                                        |
                                                                        v
                                                           [Module Tư vấn & Gợi ý]

Technology Stack

  • Ngôn ngữ & Nền tảng: Java SE (JDK 1.7/1.8), Python 2.7/3.x.
  • Topic Modeling Toolkit: GibbsLDA++ (C++ wrapper) / JGibbsLDA, TopicModel Library.
  • Cơ sở dữ liệu: MySQL Server 5.6 (Lưu trữ Metadata, User Profile, Topic Vectors).
  • Web Scraping: Jsoup 1.8.3 / Scrapy, kết hợp Google Search API để định danh User Feed.
  • Môi trường thực nghiệm: Intel Core 2 Duo 2.0 GHz, 2GB RAM, 320GB HDD, Windows 7 Ultimate.

Thiết kế Cơ sở dữ liệu (Database Schema)

  • Articles (ArticleID, Url, Title, Content, PublishDate, ProcessedText)
  • Topics (TopicID, TopKeywords, AlphaWeight)
  • ArticleTopicMapping (ArticleID, TopicID, Probability): Lưu phân phối $\theta_{d,k}$.
  • Users (UserID, Username, FeedUrl, LastUpdated)
  • UserComments (CommentID, UserID, ArticleID, CommentText, CommentTime)
  • UserProfileTopics (UserID, TopicID, TopicWeight): Lưu trọng số sở thích tích lũy.

Thiết kế API Endpoints

POST /api/v1/topics/infer
Content-Type: application/json

{
  "article_id": "3291793",
  "content": "Galaxy Note 5 chup anh dep hon iPhone 6s Plus..."
}

Response:

{
  "article_id": "3291793",
  "topic_distribution": [
    {"topic_id": 12, "probability": 0.642},
    {"topic_id": 45, "probability": 0.218},
    {"topic_id": 88, "probability": 0.045}
  ]
}
GET /api/v1/recommendations/{userId}?top_k=5&threshold=0.15

Response: Trả về mảng danh sách bài viết có khoảng cách vector chủ đề gần nhất với hồ sơ userId.


Implementation và kết quả

Development Process & Key Algorithms

Hệ thống triển khai thuật toán Latent Dirichlet Allocation (LDA) với cấu trúc sinh xác suất:

  1. Đối với mỗi tài liệu $d \in D$, chọn phân phối chủ đề $\theta_d \sim \text{Dirichlet}(\alpha)$.
  2. Đối với mỗi từ $w_{d,n}$ trong tài liệu $d$:
    • Chọn một chủ đề ẩn $z_{d,n} \sim \text{Multinomial}(\theta_d)$.
    • Chọn một từ $w_{d,n} \sim \text{Multinomial}(\phi_{z_{d,n}})$, với $\phi_k \sim \text{Dirichlet}(\beta)$.

Thuật toán Gibbs Sampling được áp dụng để xấp xỉ phân phối hậu nghiệm bằng cách lặp qua từng từ và cập nhật chủ đề theo công thức xác suất có điều kiện:

$$P(z_i = k \mid \mathbf{z}{-i}, \mathbf{w}, \alpha, \beta) \propto \frac{n{k,-i}^{(v)} + \beta}{\sum_{v=1}^V (n_{k,-i}^{(v)} + \beta)} \cdot \frac{n_{d,-i}^{(k)} + \alpha}{\sum_{k'=1}^K (n_{d,-i}^{(k')} + \alpha)}$$

Trong đó:

  • $n_{k,-i}^{(v)}$: Số lần từ vựng $v$ được gán cho chủ đề $k$, không tính từ hiện tại.
  • $n_{d,-i}^{(k)}$: Số lượng từ trong văn bản $d$ được gán cho chủ đề $k$, không tính từ hiện tại.
// Trich doan thuat toan tinh toan User Profile Vector tu lich su binh luan
public class UserProfileBuilder {
    public static Map<Integer, Double> buildProfile(List<ArticleTopicVector> commentedArticles) {
        Map<Integer, Double> userProfile = new HashMap<Integer, Double>();
        int totalArticles = commentedArticles.size();
        if (totalArticles == 0) return userProfile;

        // Buoc 1 & 2: Gop xac suat cac chu de tu tap tai lieu da binh luan
        for (ArticleTopicVector articleVec : commentedArticles) {
            for (Map.Entry<Integer, Double> entry : articleVec.getDistribution().entrySet()) {
                int topicId = entry.getKey();
                double prob = entry.getValue();
                double currentSum = userProfile.containsKey(topicId) ? userProfile.get(topicId) : 0.0;
                userProfile.put(topicId, currentSum + prob);
            }
        }

        // Tinh trung binh xac suat
        for (Map.Entry<Integer, Double> entry : userProfile.entrySet()) {
            userProfile.put(entry.getKey(), entry.getValue() / totalArticles);
        }

        return userProfile; // Vector dai dien cho so thich da quan tam cua user
    }
}

[Bình luận 1: Bài A (60% Công nghệ, 40% Đời sống)]
[Bình luận 2: Bài B (80% Công nghệ, 20% Kinh tế)]  ===> User Profile: [70% Công nghệ, 20% Đời sống, 10% Kinh tế]
[Bình luận 3: Bài C (70% Công nghệ, 30% Thể thao)]

Testing và validation

Cấu hình bộ dữ liệu thực nghiệm

  • Ngữ liệu tin tức: 2.215 bài báo thu thập từ chuyên mục Đời sống, Số hóa, Thể thao, Kinh doanh, Pháp luật trên VnExpress sau khi bóc tách thẻ HTML và lọc Stopwords.
  • Ngữ liệu người dùng: 161 User ID với 1.847 bài viết có tương tác bình luận (trung bình 11,47 bình luận/người dùng).
  • Tham số mô hình LDA: Số chủ đề $K = 100$, siêu tham số $\alpha = 50/K = 0.5$, $\beta = 0.1$, số vòng lặp Gibbs Sampling = 1.000 iterations.

Kết quả trích xuất Chủ đề ẩn (Sample Topics)

  • Topic 12 (Công nghệ di động): apple, iphone, galaxy, note, samsung, màn_hình, camera, chụp_ảnh, ram, ios (Weight: 0.042)
  • Topic 34 (Bóng đá quốc tế): châu_âu, vô_địch, barca, real, chelsea, huấn_luyện_viên, bàn_thắng, ronaldo, messi (Weight: 0.038)
  • Topic 78 (Kinh tế & Đầu tư): doanh_nghiệp, tpp, thị_trường, đầu_tư, hiệp_định, xuất_khẩu, tăng_trưởng, ngân_hàng (Weight: 0.031)

Đánh giá độ chính xác của hệ thống gợi ý

Độ chính xác được đo lường bằng việc kiểm tra mức độ trùng khớp giữa Top-$N$ chủ đề trong hồ sơ người dùng xây dựng từ $M-1$ bài báo trong quá khứ với chủ đề của bài báo thứ $M$ mà người dùng bình luận tiếp theo:

Độ chính xác (%)
100 |                                    ___--- (82.4%)
 80 |                          ___---¯¯¯¯ (Mô hình LDA đề xuất)
 60 |                ___---¯¯¯¯
 40 |      ___---¯¯¯¯ (54.1% - Mô hình TF-IDF)
 20 |----------------------------------------------------
  0 +---------------------------------------------------->
    Top-1 Topic        Top-3 Topics       Top-5 Topics
  • Top-1 Topic Accuracy: Đạt 61,8% (bài báo tiếp theo có chủ đề chính trùng với chủ đề cao nhất trong User Profile).
  • Top-3 Topics Accuracy: Đạt 74,5%.
  • Top-5 Topics Accuracy: Đạt 82,4%, vượt trội 28,3% so với phương pháp đối sánh từ khóa TF-IDF truyền thống (54,1%).

Đổi mới và đóng góp

  1. Khai thác dữ liệu phản hồi ngầm bậc cao (High-Confidence Implicit Feedback): Thay vì sử dụng Web Log hay Click Log chứa nhiều tương tác rác, đồ án tiên phong sử dụng lịch sử bình luận (User Comments) trên mạng xã hội tin tức. Hành vi viết bình luận phản ánh mức độ quan tâm có chiều sâu, loại bỏ hoàn toàn hiện tượng nhấp chuột ngẫu nhiên.
  2. Khắc phục triệt để rào cản ngữ nghĩa của TF-IDF: Bằng cách ánh xạ từ không gian từ vựng rời rạc sang không gian $K$ chiều chủ đề ẩn, mô hình xử lý hiệu quả bài toán từ đồng nghĩa/đa nghĩa, giúp hệ thống gợi ý các bài viết cùng bản chất sự kiện dù cách dùng từ của phóng viên hoàn toàn khác biệt.
  3. Mô hình hóa sở thích đa chiều (Multi-interest Profile): Vector xác suất $\theta$ cho phép một người dùng đồng thời duy trì nhiều mối quan tâm (ví dụ: 60% Công nghệ, 30% Kinh tế, 10% Thể thao), phản ánh chân thực bản chất tâm lý tiếp nhận thông tin của con người.
  4. Đóng góp mã nguồn mở: Đóng gói thư viện TopicModel trên GitHub, cung cấp công cụ hoàn chỉnh từ tiền xử lý, huấn luyện LDA đến suy diễn hồ sơ người dùng cho cộng đồng nghiên cứu xử lý ngôn ngữ tự nhiên tiếng Việt.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Hệ thống gợi ý tin tức cá nhân hóa (Personalized Newsfeed): Tự động tùy biến trang chủ của độc giả theo phân phối chủ đề họ yêu thích nhất, tăng thời gian on-site (Session Duration).
  • Quảng cáo theo ngữ cảnh (Contextual Behavioral Advertising): Thay vì nhắm mục tiêu theo từ khóa đơn lẻ, nền tảng quảng cáo phân phối banner về sản phẩm công nghệ cho người dùng có trọng số cao ở các Topic về thiết bị số (Galaxy, iPhone, Camera).
  • Phát hiện nhóm người dùng có chung mối quan tâm (Community Detection): Gom cụm các User Profile có khoảng cách phân phối Jensen-Shannon Divergence nhỏ để hình thành các câu lạc bộ hoặc diễn đàn chuyên đề.

Phân tích Tính khả thi và Hiệu quả Đầu tư (ROI)

  • Hạ tầng triển khai: Hệ thống có thể mở rộng chạy trên môi trường cụm máy chủ phân tán (Apache Spark kết hợp GraphX / Spark MLlib cho LDA).
  • Hiệu quả kinh tế: Dự báo tăng tỷ lệ nhấp chuột vào tin đề xuất (CTR) từ 15% lên 28%, giảm tỷ lệ thoát trang (Bounce Rate) 35%, tối ưu hóa doanh thu quảng cáo hiển thị trên mỗi lượt xem (eCPM).

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Dữ liệu bình luận chỉ tập trung vào một báo điện tử (VnExpress); chưa thu thập chéo qua các mạng xã hội bên ngoài như Facebook, Twitter để đồng bộ hồ sơ định danh duy nhất.
  • Mô hình LDA tĩnh chưa xét đến yếu tố thời gian (Time-decay factor) — sở thích của người dùng vào 6 tháng trước vẫn có trọng số tương đương với sở thích tuần gần nhất.
  • Chưa tiến hành phân tích cảm xúc (Sentiment Analysis): Chưa phân biệt được bình luận mang tính khen ngợi (ủng hộ) hay chỉ trích (phản đối) đối với nội dung bài báo.

Hướng phát triển tương lai

  • Ứng dụng mô hình chủ đề động Dynamic Topic Models (DTM) để theo dõi sự dịch chuyển của các chủ đề thời sự theo dòng thời gian.
  • Tích hợp kỹ thuật học sâu (Deep Learning) và các mô hình biểu diễn ngôn ngữ ngữ cảnh hiện đại (PhoBERT, BERTopic) để tăng độ mịn khi phân tích ngữ nghĩa câu bình luận ngắn.
  • Xây dựng cơ chế Federated Learning nhằm bảo vệ quyền riêng tư dữ liệu người dùng khi khai thác log trên các thiết bị di động.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------------+
|                              ĐỐI TƯỢNG HƯỞNG LỢI                                  |
|                                                                                   |
|  [Sinh viên / Học viên]       [Lập trình viên / Kỹ sư AI]                         |
|  - Nắm vững toán học LDA      - Tái sử dụng pipeline xử lý văn bản tiếng Việt     |
|  - Làm chủ Gibbs Sampling     - Tích hợp module Recommender vào CMS               |
|                                                                                   |
|  [Tòa soạn / Doanh nghiệp]    [Nhà nghiên cứu NLP]                                |
|  - Tăng CTR và lượt đọc       - Cơ sở dữ liệu và baseline so sánh giải thuật      |
|  - Tối ưu hóa phân phối Ads   - Mở rộng sang Dynamic Topic Modeling               |
+-----------------------------------------------------------------------------------+
  • Sinh viên & Học viên cao học: Tiếp cận tài liệu thực chứng toàn diện về mô hình sinh xác suất, toán học Dirichlet-Multinomial và thuật toán xấp xỉ Gibbs Sampling trong bài toán thực tế.
  • Kỹ sư phát triển phần mềm (Software Engineers): Khai thác mã nguồn mở TopicModel để tích hợp phân hệ tư vấn nội dung vào các hệ thống quản trị nội dung (CMS) và thương mại điện tử.
  • Tòa soạn & Doanh nghiệp truyền thông: Sở hữu giải pháp giữ chân độc giả tự động không cần can thiệp thủ công, nâng cao trải nghiệm người dùng và giá trị thương mại của nền tảng.
  • Nhà nghiên cứu Khoa học dữ liệu: Bộ dữ liệu thực nghiệm và phương pháp luận đóng vai trò là độ đo chuẩn (Baseline) cho các nghiên cứu tiếp theo về mô hình hóa người dùng từ UGC tiếng Việt.

Câu hỏi thường gặp

1. Cần cấu hình phần cứng tối thiểu nào để huấn luyện và triển khai mô hình LDA?

Để huấn luyện tập ngữ liệu khoảng 10.000 bài báo với $K=100$ chủ đề, hệ thống chỉ cần máy chủ tối thiểu 4 Cores CPU, 8GB RAM. Khi đưa vào vận hành (Inference Mode), quá trình suy diễn phân phối $\theta$ cho một bài báo mới diễn ra dưới 50ms, hoàn toàn đáp ứng môi trường Real-time Production.

2. Mô hình xử lý như thế nào khi người dùng có quá ít bình luận (Cold-Start Problem)?

Đối với người dùng mới chưa có bình luận, hệ thống tạm thời áp dụng chiến lược phân phối các tin tức thuộc Top chủ đề thịnh hành nhất (Trending Topics) trong 24 giờ của tòa soạn, sau đó dần cập nhật trọng số cá nhân hóa ngay khi người dùng để lại bình luận đầu tiên.

3. Tại sao không dùng phương pháp học sâu (Deep Learning) mà lại chọn LDA?

Tại thời điểm nghiên cứu, LDA kết hợp Gibbs Sampling cung cấp sự cân bằng tối ưu giữa chi phí tính toán phần cứng, khả năng giải thích được (Explainability) của các chủ đề xác suất, và khả năng hoạt động phi giám sát không cần gán nhãn thủ công trên tập dữ liệu tiếng Việt.

4. Dữ liệu bình luận ngắn có làm suy giảm độ chính xác của LDA không?

Đồ án không phân tích trực tiếp trên văn bản của câu bình luận ngắn mà phân tích trên toàn bộ văn bản bài báo mà người dùng đã bình luận. Do đó, độ dài và tính đầy đủ ngữ nghĩa của văn bản đầu vào luôn được đảm bảo, khắc phục hoàn toàn nhược điểm văn bản ngắn (Sparsity) thường gặp trên Twitter/Microblogs.

5. Chi phí triển khai và thời gian hoàn vốn (ROI) ước tính như thế nào?

Toàn bộ giải pháp sử dụng công nghệ mã nguồn mở (Java, MySQL, GibbsLDA++), không tốn chi phí bản quyền phần mềm. Với quy mô báo điện tử tầm trung, hệ thống có thể hoàn vốn sau 3–6 tháng nhờ tối ưu hóa vị trí hiển thị quảng cáo theo ngữ cảnh chủ đề và tăng lượng tương tác trang.


Kết luận

Đề tài luận văn thạc sĩ "Phát hiện thói quen của con người/nhóm người từ phương tiện xã hội dựa theo mô hình chủ đề xác suất" của tác giả Uông Huy Lũng đã giải quyết thành công bài toán cá nhân hóa nội dung số bằng cách kết hợp sáng tạo giữa dữ liệu mạng xã hội (UGC) và mô hình xác suất tiềm ẩn LDA. Nghiên cứu chứng minh tính ưu việt vượt trội của việc mô hình hóa sở thích người dùng ở mức độ chủ đề trừu tượng so với không gian từ khóa truyền thống, đạt độ chính xác 82,4% trong thực nghiệm. Công trình không chỉ đóng góp giá trị học thuật vững chắc cho chuyên ngành Hệ thống thông tin mà còn mở ra hướng ứng dụng thực tiễn to lớn cho các nền tảng báo chí, thương mại điện tử và tiếp thị số tại Việt Nam. Bạn có thể tham khảo và khai thác mã nguồn hoàn chỉnh của dự án tại TopicModel Repository.