Thử “chơi lớn” dạy máy tính “học” nhận diện ngoại ngữ bằng mạng LSTM

Xin chào tất cả anh em Mì AI, như vậy là chúng ta đã đi qua vài bài liên tiếp về Computer Vision rồi. Hôm nay mình xin đổi món cho anh em bằng một bài liên quan đến NLP, Word Embeding nhé. Chúng ta sẽ thử “chơi lớn” dạy máy tính “học” nhận diện ngoại ngữ bằng mạng LSTM xem nó ra sao 😀

Rồi, đại khái bài toán như sau. Chúng ta sẽ đưa cho máy tính một câu nói ví dụ “Tôi yêu Mì AI” hoặc “I love Vietnam” và máy tính sẽ nhận biết được ngôn ngữ sử dụng là gì. Ví dụ “Tôi yêu Mì AI” thì máy tính sẽ bảo “Tiếng Việt”, còn I love Vietnam thì máy tính bảo “Tiếng Anh chứ còn gì nữa”.

nhận diện ngoại ngữ

Dài dòng đủ rồi, giờ bắt đầu nào!

Phần 1. Chuẩn bị nguyên vật liệu

Như thường lệ chúng ta lại tạo thư mục MiAI_Lang_Detect để lưu nội dung bài này vào nhé. Sau khi tạo xong, các bạn gõ lệnh:

git clone https://github.com/thangnch/MiAI_Lang_Detect .

Các bạn chú ý dấu . cuối dòng. Đợi một lúc cho project tải về là xong. Bài này các bạn không phải tải weights hay làm gì thêm cả, mọi thứ có sẵn trong folder rồi.

Bây giờ chúng ta tiến hành cài đặt các thư viện cần thiết nhé. Chạy lệnh:

pip install -r setup.txt

Sau đó ngồi đợi 1 lúc là xong nhé.

Phần 2. Tư tưởng thuật toán nhận diện ngoại ngữ và khái niệm

Gọi là ăn Mì AI nhưng anh em cũng phải biết qua tý thuật toán nhận diện ngoại ngữ và khái niệm tý nhé, sau có gì còn chém nữa chứ. Mình đùa đó, biết để sửa và tối ưu theo ý mình cho model tốt hơn. 😀

Đại khái bài này mình làm như sau:

  1. Đọc file dữ liệu data.csv đính kèm. Gồm 2 cột: Câu và Ngôn ngữ. File này sẽ được dùng để train cho model.
  2. Chuyển đổi các câu thành các vector số bằng cách như sau (cái này gọi là word embeding nhé):
    • Chuyển đổi bảng vocab thành số, 1 word trong vocab sẽ ứng với 1 số nhất định. Ví dụ: “Anh” -> 0, “Yêu” -> 1 và “Em” ->2
    • Duyệt các từ trong câu, từ đầu đến hết, chuyển đổi từ đó thành số ứng với dữ liệu bên trên. Ví dụ câu “Anh yêu em” sẽ là “0 1 2” và câu “Em yêu anh” sẽ là “2 1 0”.
  3. Đưa các vector số và ngôn ngữ output vào mạng LSTM để train.
  4. Tiến hành precdict 1 câu input bằng cách:
    • Chuyển đổi câu input thành vector số
    • Đưa vào mạng đã train và nhận output đầu ra. Nếu probality < 1 mức nào đó (đang để 0.4) thì là không xác định được ngôn ngữ, còn lại thì hiển thị ngôn ngữ ra màn hình.
nhận diện ngoại ngữ

Rồi, bây giờ đến code nào. Chi tiết các bạn mở file detect_lang.py, trong đó mình đã comment kỹ từng dòng theo đúng tư tưởng thuật toán nêu trên rồi nhé.

Các bạn thấy khó hiểu phần nào thì comment trên group Mì AI Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup  để cùng trao đổi nhé.

Phần 3. Tiến hành train và test model

Các bạn chú ý, bài này mình sẽ chỉ làm với 3 ngôn ngữ: Tiếng Anh, Tiếng Ý và Tiếng Việt. Tuy nhiên, bạn có thể làm với bao nhiêu ngôn ngữ tùy ý nhé, cứ nhờ Google Translate là okie hết.

Để train model, bạn chạy lệnh sau:

python detect_lang.py train

Model sẽ train tầm 5 epochs. Lý do vì mình thấy với dữ liệu của minh thì 5 epochs là okie rồi, các bạn nếu thay đổi dữ liệu thì tăng giảm epochs tùy nhu cầu nhé. Khi nào các bạn thấy màn hình hiển thị như bên dưới là train xong:

Accuracy: 99.83%
Model trained and saved!

Model sẽ lưu file model.h5 ra folder MiAI_Lang_Detect , các bạn thấy có file là okie rồi.

Tiếp theo là test model. Các bạn chạy lệnh sau:

python detect_lang.py test "I love you"

Trong đó “I love you” là câu cần test, các bạn có thể đổi thành câu bất kì nhưng phải để trong dấu ngoặc kép nhé.

Như ví dụ trên mình chạy thì kết quả như sau:

Như vậy là các bạn đã biết cách chuyển đổi câu thành số để máy tính có thể xử lý được (note là còn nhiều loại embeding khác nhé như Word2Vec, Fasttext…). Và cũng đã biết sử dụng LSTM để phân loại ngôn ngữ và sau này áp dụng để phân loại cảm xúc, phân loại văn bản…

Chúc các bạn thành công!

Các bạn thấy khó hiểu phần nào thì comment trên group Mì AI Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup  để cùng trao đổi nhé.

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://ainoodle.vn
Youtube: http://bit.ly/miaiyoutube

mm
Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

4 Replies to “Thử “chơi lớn” dạy máy tính “học” nhận diện ngoại ngữ bằng mạng LSTM”

  1. áp dụng vào mô hình phân tích tình cảm tích cực hoặc tiêu cực thì làm thế nào anh !

Leave a Reply

Your email address will not be published. Required fields are marked *