Ứng dụng NLP vào việc xác định ý muốn người dùng (Intent Detection) và sửa lỗi chính tả trong tiếng Việt (Spell Correction)
Mở đầu
NLP không phải lĩnh vực mới, nhưng những ứng dụng của NLP thì chưa bao giờ có giới hạn. Cùng với sự phát triển và những thành công mới trong việc nghiên cứu, ứng dụng của NLP ngày càng được mở rộng. Nhận tiện đây, mình cũng giới thiệu đến với các bạn cái nhìn tổng quát về NLP, sau đó đi vào chi tiết, các kỹ thuật được áp dụng vào 2 bài toán rất hay là: Intent Detection và Spell Correction.
Intent Detection
Đưa bài toán Intent Detection về bài toán Text Classification với kỹ thuật chính mình sử dụng là BagOfWord để vector hoá câu, sau đó đánh lại trọng số với TF*IDF. Dùng một số thuật toán như NaiveBayes, SVM, SGDClassifier để giải quyết bài toán Classification.
Tại sao mình lại sử dụng BagOfWord? Sao không dùng một số phương pháp Word Embedding đạt được state of the art như dùng fastText hay Word2Vec. Lý do là lần này mình muốn viết 1 chương trình nhỏ, với số lượng cực ít data, và closed domain. Thật sự trong trường hợp bạn có lượng ít data và closed domain thì Word2Vec, fastText chưa chắc đã vượt qua được BagOfWord.
Nếu bạn muốn tìm hiểu kĩ hơn hãy xem slide bên dưới và đọc bài viết chi tiết của mình tại đây nhé.
Spell Correction
Bài toán này mình giải quyết bằng cách sử dụng Seq2Seq(LSTM Encoder + Decoder). Với pha Encoder mình kết hợp thêm biDirectional để tận dụng cả thông tin theo 2 chiều. Và kết hợp thêm kĩ thuật Attention với pha Decoder để nhấn mạnh những từ ngữ quan trọng.
Tại sao mình lại sử dụng phương pháp trên ?
Lý do cũng đơn giản là với phương pháp truyền thống thì bạn phải có một bộ từ điển lớn, với các câu có mối liên quan xa, độ chính xác thấp. Tốn rất nhiều công sức cho giai đoạn chuẩn bị từ điển. Ngoài ra còn vấn đề hiệu năng khi sửa lỗi số lượng lớn từ.
Với phương pháp trên, bạn sẽ không phải quan tâm đến việc tạo từ điển rắc rối. Tuy nhiên để tạo data train, bạn cần tạo noise(từ sai chính tả) cho data, nhưng vẫn còn khoẻ chán so với việc xây dự bộ từ điển.
Tài liệu
Tổng kết
NLP là một trong những lĩnh vực khó nhất trong Machine Learning. Mặc dù với sự tiến bộ không ngừng của giới nghiên cứu nhưng vẫn còn 1 chặng đường không ngắn để có thể ứng dụng rộng rãi hơn. Và để đến lúc phổ biến thì tìm hiểu đâu còn nhiều ý nghĩa nữa phải không :D. Mong là những chia sẻ trên đây sẽ có ích cho những bạn có sở thích làm việc với NLP. Hẹn gặp lại các bạn ở các bài chia sẻ sau.!