Truy vấn văn bản – Document Retrieval

wikipedia

Giả sử bạn đang đọc một bài viết nào đó, hệ thống truy vấn văn bản sẽ giúp bạn tìm kiếm những bài viết tương tự như bài viết của bạn đang đọc. Vậy làm sao ta có thể tính được độ tương tự giữa các văn bản để tìm kiếm trong vô số các tài liệu có sẵn, tỷ lệ giống nhau về nội dung của các văn bản là bao nhiêu?

Trong bài viết này, ta sẽ sử dụng tập văn bản liên quan đến những người nổi tiếng download từ wikipedia (file csv đã xử lý có thể download ở đây) để xây dựng hệ thống truy vấn văn bản dựa trên nội dung đang đọc.

Notebooks: document_retrieval.ipynb

Advertisement

Một suy nghĩ 24 thoughts on “Truy vấn văn bản – Document Retrieval

  1. Chao ban. Dau tien rat cam on vi nhung kien thuc chia se tren blog nay. Minh hoc duoc rat nhieu dieu. Minh co 1 cau hoi lien quan cu the den bai viet nay. Trong phan mao dau cua muc Topic Modeling, ban co de cap den Categorizer va Clusterizer. Nhung o phan sau ban chi phat trien cac vi du cho classification. Neu minh muon tim hieu ve Topic Clustering thi ban co nguon tham khao nao huu ich khong. Cam on nhieu. Than ai.

    Thích

    1. Chào bạn,

      Cám ơn bạn đã quan tâm tới blog.
      Về phân loại văn bản nói riêng cũng như machine learning nói chung, về cơ bản ta có 2 hướng tiếp cận thường dùng đó là supervised (học từ dữ liệu được gán nhãn trước) và un-supervised (học từ dữ liệu không được gán nhãn trước) learning. Trong trường hợp này là categorizer và clusterizer. Categorizer được xếp vào bài toán muticlassification. Mình đề cập đến clusterizer liên quan đến phương pháp topic modeling. Ta sẽ cho máy tự gom nhóm các chủ đề theo thống kê từ vựng. Từ đó, ta quan sát và tự đặt tên lại cho các chủ đề vừa khai phá được.
      Bạn có thể tìm thấy các nguồn tham khảo ở bài viết này
      https://ongxuanhong.wordpress.com/2016/09/24/topic-modeling-la-gi/

      Đã thích bởi 2 người

  2. Cam on ban. Minh da doc qua bai viet nay truoc day nhung theo minh hieu o day la phan loai tu vung theo nhom chu khong hoan toan la phan loai chu de cua van ban, nhat la khi chieu dai cua cac van ban ngan (short sentences). Bai toan cua minh dai loai the nay: minh co cac ghi chu hien truong (Site observation) thuong rat ngan gon (1 den 2 cau rat ngan); muc tieu la phai phan loai cac ghi chu ay theo tung chu de voi so luong va noi dung cac chu de chua biet. Theo ban nen tiep can bai toan nay theo huong nao ? Than ai.

    Thích

    1. Mình nghĩ bạn nên thực nghiệm để quyết định được số lượng chủ đề cần phân loại. Dù là 1,2 câu ngắn nhưng nguyên lý vẫn không thay đổi vì từ vựng phản ánh chủ đề đang diễn đạt. Ta đề cập đến chính trị thì sẽ có các từ vựng tương ứng, tương tự nếu ta đề cập đến thời trang thì trong câu chắc chắn xuất hiện các từ vựng liên quan.
      Sau khi clustering ta vẫn chưa biết tên chủ đề là gì, nhờ vào từ vựng đã gom nhóm được mà ta đặt tên cho chủ đề. Từ đó, khi bạn nhập vào một câu mới có chứa các từ vựng liên quan, hệ thống sẽ tự động phân loại vào chủ đề bạn đã đặt tên.
      Do đó, thuật toán topic modeling luôn có tham số k để quyết định trước số lượng chủ đề bạn muốn gom nhóm.
      Hơn nữa, bạn có thể lựa chọn tập dữ liệu có nhiều câu để training không nhất thiết phải sử dụng tập dữ liệu chỉ có 1,2 câu.

      Thích

  3. Em chào anh ạ,
    Em muốn hỏi anh một chút về phần cuối cùng của bài viết : “Trong bài viết này, ta sẽ biểu diễn văn bản dưới dạng vector là TF hoặc TF-IDF. Sau đó, sử dụng feature vector này để gom nhóm văn bản bằng hai phương pháp là NMF (Non-Negative Matrix Factorization) và LDA (latent Dirichlet allocation).”
    Cách mà LDA áp dụng vector TF-IDF cụ thể ở chỗ nào và như nào ạ?
    Vì theo em tìm hiểu thì khi chạy bình thường LDA ( vs Gibblda ++ chẳng hạn) thì output cũng là các topic như trên.
    Thứ 2, là comment ở trên anh có nói là khi nhập câu mới thì hệ thống sẽ tự động phân loại??? A có thể giải thích giúp e một chút chỗ này ko ạ? Em cứ mơ hồ là mình phải tính xác xuất xuất hiện các topics trong câu đó, rồi mới kết luận được.

    Mong nhận sự phản hồi từ anh.
    Thanks a!

    Thích

    1. Hi em, việc chúng ta xây dựng các vector Tf-Idf cho từng văn bản nhằm mục đích tạo ra ma trận X là tập huấn luyện (dòng = vector Tf-Idf, cột = văn bản hoặc ngược lại ). Từ đây, em sẽ phân tách ra được 2 ma trận latent một là topic distributions over words (dòng = vector các từ, cột = topic), hai là document distributions over topics (dòng = topic, cột = văn bản).
      Em có thể tham khảo slide này https://www.slideshare.net/clauwa/topic-models-5274169.
      Nhập câu mới ở đây em cũng sẽ phân tích ra được vector Tf-Idf và sử dụng Cosine similarity để tìm kiếm tập các văn bản nào gần nó nhất hay topic nào nó thuộc về.

      Thích

  4. Em chào Anh,

    Rất cảm ơn anh đã chia sẻ các kiến thức.
    Em mới bắt đầu tìm hiểu python, em đã chạy đoạn code như phần chia sẻ bên trên của anh, nhưng nó báo lỗi ở đoạn #Load wiki data, cụ thể là dòng ” print people.head() ” ạ.

    Lỗi như sau:
    /usr/bin/python2.7 /home/hoanganh/PycharmProjects/hocpython/tfidf.py
    — people_wiki.csv found locally
    Traceback (most recent call last):
    File “/home/hoanganh/PycharmProjects/hocpython/tfidf.py”, line 35, in
    print (people.head())

    Anh xem giup em lỗi này là bị sao với ạ, em không biết phải sửa thế nào nữa.
    Em cảm ơn anh nhiều ạ.

    Thích

      1. E đã download file đó về rồi, và đang để cùng trong thư mục của file code này anh ạ.

        Nó có dòng thông báo này
        /usr/bin/python2.7 /home/hoanganh/PycharmProjects/hocpython/tfidf.py
        — people_wiki.csv found locally

        Tức là đã tìm thấy file people_wiki.csv đúng không ạ?

        Thích

  5. Bài viết của anh rất bổ ích.
    Anh cho em hỏi 1 chút, em bị lỗi này
    UnboundLocalError: local variable ‘df’ referenced before assignment
    Sau đó em có khai báo global cho biến df nhưng lại bị lỗi
    NameError: name ‘df’ is not defined
    Anh giải đáp giúp em với.
    Em cảm ơn.

    Thích

    1. tf-idf là dạng one-hot vector đã được chuẩn hoá lại. Em có thể quy về dạng. Cho tập dữ liệu D = {xi, yi} với i thuộc [1, m], biết {xi thuộc X là ma trận mxn, m là số mẫu, n là số feature}, ta muốn dự đoán yi.
      xi là tf-idf em tìm được cho mỗi statement.
      yi là nhãn của sentiment.
      Sau đó, áp dụng các thuật toán classification để giải.
      Em xem bài viết này nhé https://ongxuanhong.wordpress.com/2016/12/03/sentiment-analysis-co-ban/

      Thích

Trả lời

Điền thông tin vào ô dưới đây hoặc nhấn 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 Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s