Phát hiện ngôn ngữ lập trình cực kỳ đơn giản với Machine learning
Hôm nay trời thanh gió mát, Lập trình không khó sẽ cùng các bạn đi xây dựng một chương trình có thể dự đoán ngôn ngữ lập trình khi cung cấp cho nó code. Ý tưởng có vẻ khá to, nhưng đơn giản lắm. Cùng mình bắt tay vào triển khai nhé. Dự đoán ngôn ngữ lập trình Ý tưởng bài toán dự đoán ...
Hôm nay trời thanh gió mát, Lập trình không khó sẽ cùng các bạn đi xây dựng một chương trình có thể dự đoán ngôn ngữ lập trình khi cung cấp cho nó code. Ý tưởng có vẻ khá to, nhưng đơn giản lắm. Cùng mình bắt tay vào triển khai nhé.
Dự đoán ngôn ngữ lập trình
Ý tưởng bài toán dự đoán ngôn ngữ lập trình rất đơn giản: hãy đưa cho tôi một đoạn code. Tôi sẽ cho bạn biết code này được viết bởi ngôn ngữ lập trình nào!
Trên thực tế, khi bạn nhìn vào một source code bạn có thể đoán được ngôn ngữ lập trình nào được dùng để tạo ra đoạn code đó không? Câu trả lời là không, nếu bạn chưa biết tới ngôn ngữ đó. Nhưng nếu bạn đã sử dụng qua, bạn có thể dễ dàng biết đó là ngôn ngữ nào. Tại sao bạn lại có thể đoán được: Tất nhiên là nhìn vào cú pháp của đoạn code để tìm ra các đặc trưng của mỗi ngôn ngữ phải không nào? Chẳng hạn như:
- Ngôn ngữ Python: định nghĩa hàm bằng từ khóa def, không có cặp ngoặc {}, sử dụng câu lệnh import, có dòng if __name__ == __main__,…
- Ngôn ngữ C++: khai báo thư viện dùng #include, có cout, cin huyền thoại,…
Mỗi ngôn ngữ đều có những đặc điểm riêng. Và việc của chúng ta là tìm cách xây dựng một chương trình có thể làm điều đó.
Ở góc nhìn của machine learning, đây thực chất là bài toán phân loại văn bản(document classification) nhiều lớp. Và mỗi một lớp sẽ là một ngôn ngữ lập trình. Trong bài viết này, mình sẽ cùng các bạn từng bước xây dựng một chương trình dự đoán ngôn ngữ lập trình hoàn chỉnh. Chúng ta sẽ đi qua các phần:
- Chuẩn bị dữ liệu
- Tiền xử lý
- Train mô hình sử dụng Fasttext
- Xây dựng giao diện với Flask
Các bạn đừng quá lo lắng nếu không biết nhiều về machine learning. Bài viết này được viết là dành cho những người không chuyên. Bây giờ chúng ta sẽ đi vào từng phần chi tiết nhé.
1. Chuẩn bị dữ liệu
Dữ liệu là thứ không thể thiếu đối với máy học. Bây giờ chúng ta cần đi kiếm cho mỗi ngôn ngữ một kho code. Mình giả sử mỗi ngôn ngữ lập trình có tầm 1000 đoạn code là ok. Chúng ta sẽ cố gắng phân loại càng nhiều ngôn ngữ lập trình càng tốt. Nhưng điều đó còn phụ thuộc vào dữ liệu ^^.
Tìm kiếm ý tưởng
Nghĩ đến code là mình nghĩ ngay tới StackOverFlow, lên đó lượn 1 hồi cũng nghĩ ra cách để kiếm dữ liệu cực kỳ ez. Ý tưởng như sau:
Đầu tiên, vào trang Tags của họ để lấy các tags về, các ngôn ngữ lập trình có tags nằm trong top đầu luôn, nên chúng ta chỉ cần lấy khoảng 5 trang đầu là lấy được hầu hết ngôn ngữ lập trình rồi.
Triển khai ý tưởng
Để làm được điều này thì mình sử dụng thư viện requests trong Python để crawl data. Sau đó extract lấy tags và url tới các tags đó. Mục đích là để lọc các bài viết theo thẻ tags. Tất nhiên, sẽ có lẫn một số tags không phải ngôn ngữ lập trình, lọc tay qua 1 lượt chưa mất tới 5 phút