19 July, 2019
E.Blog #3: Chatbot "hiểu" tiếng người
Từ lâu, fanpage chúng mình đã được trang bị 1 chatbot đơn giản để hướng dẫn người muốn đăng dự án, cuộc thi của họ lên page.
Fanpage sử dụng 1 form điền để dễ quản lý thông tin theo 1 mẫu cố định. Tuy nhiên lại có 1 tình huống “khó xử” xảy ra, vẫn có 1 vài bạn không điền form đăng dự án mà lại copy-paste thẳng vào inbox page, và cuối cùng thì admin lại phải giải thích rằng bạn ấy phải điền form đăng dự án.
Tất nhiên cả bạn editor lẫn mình đều ko thoải mái vì cứ phải reply thủ công. Vậy là mình bắt tay vào làm 1 module nhỏ để giải quyết tình trạng này.
Bài toán
Như vậy cái khó đó là, module này phải “đọc hiểu” nội dung tin nhắn người ta nhắn tới. Mà để làm máy “hiểu” tiếng người thì chắc là ko dễ rồi. Ngoài ra, mình còn gặp 1 đống khó khăn về kỹ thuật như:
- Thuật toán phải đơn giản (vì mình ko có nhiều thời gian)
- Thuật toán phải làm cách nào đó tự “học” từ các mẫu tin nhắn có sẵn, vì mình ko thể code thủ công kiểu if … then … else được
- Không thể dùng machine learning (vì mình có quá ít dữ liệu)
Nghiên cứu
Để chuẩn bị dữ liệu phục vụ nghiên cứu, mình đã nhờ bạn editor (bạn Lê Việt Phong) tổng hợp lại 25 tin nhắn mẫu.
Ý tưởng đầu tiên xuất hiện trong đầu mình đó là hãy thử đếm xem từ ngữ nào được nhắc lại nhiều lần nhất trong tất cả các đoạn văn. Sau 1 hồi code mình đã nhận được 1 “bảng xếp hạng” như sau:
Như vậy từ “các” được dùng nhiều nhất (VD như “các bạn”, “các dự án”, “các hoạt động”,…). Tuy nhiên sau 1 hồi xem kỹ, mình thấy có vài đoạn văn không hề có từ này:
Vậy là mình chuyển sang phương án tiếp theo. Thay vì xem từ nào đc dùng nhiều nhất, thì mình sẽ xếp hạng theo mức độ “thông dụng” của 1 từ ngữ. Giả dụ mình có 25 đoạn văn, thì có thể từ “chào” có thể có mặt trong 24 trên tổng số 25 đoạn văn chẳng hạn (đây là ví dụ thôi nhé).
Sau 1 hồi chỉnh sửa lại code, mình nhận lại đc 1 bảng xếp hạng gồm những từ không khác phương án 1 mấy (chỉ đảo thứ tự thôi thì phải)
Khá bất ngờ khi từ “thông” được sử dụng nhiều nhất (tới 24/25 tin nhắn ?? 😀 ??) và sau đó đến từ “mình”, “là”, “được” góp mặt ở 23/25 tin nhắn.
Áp dụng
Sau khi đã cảm thấy hài lòng với top 10 từ thông dụng ở trên, mình quyết định là nếu tin nhắn nào có 7 trên tổng số 10 từ đó thôi thì sẽ cho chatbot tự động reply tin nhắn nhắc nhở. Kết quả là, sau hơn 2 tháng hoạt động, thuật toán này vẫn chạy chính xác gần như 100%
Lời cuối: Chỉ là 1 thuật toán rất đơn giản, nhưng nhiều thuật toán đơn giản như vậy, mỗi cái 1 việc, lại giúp đỡ admin rất nhiều trong công việc quản lý fanpage.