Tự học Deep Learning – Bài 1: Làm quen với Deep Learning

ngày 27-09-2024

Deep Learning – Công nghệ của tương lai

Bạn có bao giờ tự hỏi làm thế nào mà điện thoại của bạn có thể nhận diện khuôn mặt của bạn trong tích tắc, hoặc trợ lý ảo có thể hiểu và trả lời câu hỏi của bạn một cách thông minh? Đằng sau những "phép màu" công nghệ này là một lĩnh vực đang thay đổi cách chúng ta tương tác với thế giới: Deep Learning
Hãy thử tưởng tượng… Sáng thức dậy, điện thoại của bạn đã tự động điều chỉnh báo thức dựa trên lịch và tình trạng giao thông. Trên đường đi làm, hệ thống điều hướng thông minh đề xuất tuyến đường tối ưu, tránh các điểm tắc nghẽn giao thông. Tại công ty, hệ thống an ninh nhận diện khuôn mặt bạn để tự động mở cửa, chấm công. Bạn có nhiều việc phải làm nhưng đã có trợ lý ảo giúp bạn sắp xếp lịch họp, tóm tắt nội dung cuộc họp, các tài liệu văn bản cần đọc, gợi ý các ý tưởng giải quyết vấn đề,… giúp bạn thực việc công việc hiệu quả hơn. Chiều về, dựa trên dữ liệu sức khỏe và hoạt động trong ngày của bạn, ứng dụng đề xuất một bữa tối cân bằng dinh dưỡng và phù hợp với lượng calories bạn cần. Bạn còn được gợi ý công thức nấu ăn sử dụng nguyên liệu có sẵn trong tủ lạnh, đảm bảo bữa ăn không chỉ ngon miệng mà còn tối ưu cho sức khỏe của bạn. Nghỉ ngơi thôi, bạn mở ứng dụng xem phim và wow nó gợi ý bộ phim đúng gu bạn đến không ngờ. Bạn buồn ngủ rồi, đồng hồ thông minh sẽ cho bạn biết chu kỳ ngủ của bạn, đồng thời kết nối với các thiết bị trong nhà  để tự động điều chỉnh giúp tối ưu chất lượng giấc ngủ. Bạn sẽ trở thành “ông hoàng” với cuộc sống chất lượng hơn, tận hưởng từng giây phút một cách trọn vẹn hơn. Với Deep Learning, mỗi khoảnh khắc trong ngày của bạn sẽ trở thành trải nghiệm thú vị. Thế giới viễn tưởng trong phim ảnh trước kia đang bước dần vào cuộc sống của chúng ta nhờ sức mạnh của Deep Learning.
Deep Learning còn là chìa khóa mở ra tiềm năng vô hạn của trí tuệ nhân tạo để giải quyết những thách thức lớn nhất của nhân loại. Trong lĩnh vực y tế, Deep Learning có thể giúp bác sĩ phát hiện ung thư ở giai đoạn sớm nhất, khi cơ hội chữa trị còn rất cao. Deep Learning còn hỗ trợ các nhà khoa học trong việc thiết kế thuốc mới, rút ngắn thời gian từ phòng thí nghiệm đến giường bệnh, mang lại hy vọng cho hàng triệu bệnh nhân trên toàn cầu. Các mô hình Deep Learning đang giúp chúng ta hiểu rõ hơn về biến đổi khí hậu, dự đoán chính xác hơn về thời tiết và đề xuất các giải pháp hiệu quả để giảm thiểu tác động của con người lên “mẹ trái đất”.  Trong giáo dục, một ngày nào đó mỗi học sinh sẽ có một "người thầy AI" riêng, hiểu rõ phong cách học tập, điểm mạnh và điểm yếu để từ đó có lộ trình học tập tối ưu, cá nhân hóa cho người học. Nhờ đó không những nâng cao hiệu quả học tập mà còn khơi dậy niềm đam mê khám phá kiến thức ở mỗi cá nhân. …
Tự học Deep Learning - Bài 1: Làm quen với Deep Learning
Deep Learning đang mở ra một kỷ nguyên mới nơi mà ranh giới giữa điều không tưởng và tính khả thi ngày càng trở nên mờ nhạt. Bằng cách tìm hiểu, ứng dụng Deep Learning, chúng ta không chỉ nắm được công nghệ của tương lai, mà còn chung tay, viết nên những trang mới trong lịch sử tiến bộ của nhân loại.

Giải quyết bài toán phân loại email cùng Deep Learning

Deep Learning, một nhánh của Machine Learning, là kỹ thuật cho phép máy tính "học" từ dữ liệu thông qua các mô hình neural network nhiều lớp, mô phỏng cách thức hoạt động của não bộ con người. Không giống như các phương pháp Machine Learning truyền thống đòi hỏi sự can thiệp đáng kể của con người trong việc xác định đặc trưng (feature engineering), Deep Learning có khả năng tự động trích xuất các đặc trưng phức tạp từ dữ liệu thô.
Để bước đầu hình dung được cách giải quyết vấn đề với Deep Learning, chúng ta sẽ cùng giải quyết bài toán phân loại email thành "spam" hoặc "không spam" qua ba cách tiếp cận:

1. Cách tiếp cận Lập trình truyền thống

Bằng cách quan sát, tìm hiểu, lập trình viên sẽ phát hiện các đặc điểm của email “spam” và “không spam” như từ khóa đặc trưng (giảm giá, trúng thưởng, mua ngay, …), số lượng dấu chấm than, tỷ lệ chữ viết HOA,…
Sau đó lập trình viên sẽ:
  • Xác định danh sách quy tắc quan trọng, đặc trưng của email “spam”.
  • Viết chương trình kiểm tra trong email có phạm phải các các quy tắc “spam” không, ví dụ như có xuất hiện từ “giảm giá” không, có số lượng dấu ! có  >3 hay không,… 
  • Nếu vi phạm, email bị phân loại là spam. 
  • Ngược lại, phân loại email là không spam.
Cách tiếp cận này tuy dễ hiểu và kiểm soát được nhưng gặp phải nhược điểm lớn là “cứng nhắc”, các quy tắc sẽ cần phải được theo dõi, cập nhật và lập trình lại thường xuyên.
Đoạn code minh họa hàm kiểm tra email có spam hay không:
def is_spam(email):
    spam_keywords = ["giảm giá", "trúng thưởng", "click ngay"]
#Nếu email có các từ spam thì trả về True -> email là spam
    if any(keyword in email.lower() for keyword in spam_keywords):
        return True
#Nếu email có số lượng dấu ! nhiều hơn 3 thì trả về True -> email là spam
    if email.count("!") > 3:
        return True
    return False

2. Cách tiếp cận với Machine Learning

Nguyên lý của cách tiếp cận này là máy tính sẽ học từ dữ liệu để tạo ra mô hình dự đoán, cụ thể như sau:
  • Thu thập dữ liệu và gắn nhãn các email là “spam” và “không spam”. Tập dữ liệu này phải đủ nhiều để máy tính “học”.
  • Thực hiện tiền xử lý dữ liệu văn bản: xóa các ký tự đặc biệt, loại bỏ các ký tự như dấu câu, số, ký tự không cần thiết, chuyển đổi về chữ thường,…
  • Thực hiện feature engineering trên tập dữ liệu: tạo các đặc trưng để mô hình có thể học từ dữ liệu. Phương pháp phổ biến nhất là sử dụng Bag of Words (BoW) và TF-IDF. ( TF-IDF là một kỹ thuật phổ biến giúp xác định những từ nào mang nhiều thông tin, đặc trưng trong email)
  • Chọn một thuật toán Machine Learning (Naive Bayes, SVM, Logistic Regression,…)
  • Huấn luyện mô hình trên dữ liệu đã xử lý, tức là cho máy tính “học” trên dữ liệu. Kết quả ở bước này máy tính sẽ tìm ra quy luật đặc trưng cho các email “spam” và “không spam”.
  • Sử dụng kết quả có được để dự đoán trên email mới.
Bước 1: Đọc dữ liệu đã được thu thập, gán nhãn (spam/không spam) và tiền xử lý dữ liệu văn bản
data = pd.read_csv('email.csv')  # Giả sử dữ liệu email đã gán nhãn được lưu trong file email.csv
X = data['email_content']  # Nội dung email
y = data['label']  # Nhãn (spam/không spam)
Bước 2: Chia dữ liệu thành tập dữ liệu train và tập test theo tỷ lệ 80-20
# gán giá trị cho random_state để có kết quả giống nhau giữa những lần chạy
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Bước 3: Feature Engineering bằng cách sử dụng TF-IDF , kết quả trả về là tập dữ liệu X_train_tfidf đã được tính toán chỉ số TF-IDF  giúp xác định các từ "đặc trưng" cho mỗi email trong tập dữ liệu
# stop_words='english' để sử dụng các hư từ của tiếng Anh
tfidf_vectorizer = TfidfVectorizer(stop_words='english')
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)
Bước 4: Khởi tạo và huấn luyện mô hình Logistic Regression
lr_model = LogisticRegression(random_state=42)
lr_model.fit(X_train_tfidf, y_train)
Bước 5: Đánh giá tính chính xác của mô hình
from sklearn.metrics import classification_report
 
def evaluate_model(model, X_test, y_test):
    y_pred = model.predict(X_test)
    print(classification_report(y_test, y_pred))
    accuracy = accuracy_score(y_test, y_pred)
    return accuracy
 
lr_accuracy = evaluate_model(lr_model, X_test_tfidf, y_test)
print("Logistic Regression Accuracy:", lr_accuracy)
Bước 6: Dự đoán email mới dựa trên mô hình đã được huấn luyện từ bước trên
def predict_email(email_content, model, vectorizer):
    email_tfidf = vectorizer.transform([email_content])
    prediction = model.predict(email_tfidf)
    return "Spam" if prediction[0] == 1 else "Not Spam"
Tự học Deep learning - Bài 1: Làm quen với Deep Learing
So với cách lập trình các quy tắc, cách tiếp cận dùng Machine Learning cho phép máy tính rút ra các quy tắc từ dữ liệu nên có khả năng thích ứng tốt hơn, dễ dàng mở rộng phạm vi đa dạng của bài toán hơn. Tuy nhiên cách tiếp cận này không phù hợp khi không “hiểu” được ngữ cảnh để có cách trích xuất đặc trưng phù hợp, điều này đặc biệt cần thiết trong bài toán liên quan đến dữ liệu phi cấu trúc như văn bản, hình ảnh, âm thanh.

3. Cách tiếp cận với Deep Learning

Trong khi Machine Learning đã mang lại những tiến bộ đáng kể trong việc phân loại email spam, nhưng trước thực tế các chiến thuật spam ngày càng tinh vi đòi hỏi một phương pháp tiên tiến hơn, để có thể trích xuất các đặc trưng một cách tự động từ dữ liệu thô. Deep Learning dựa trên các mạng neural nhân tạo nhiều lớp đã ngày càng chứng minh được ưu thế vượt trội trong nhiều bài toán. Đặc biệt với bài tóan xử lý ngôn ngữ tự nhiên, trong đó ngữ cảnh và ngữ nghĩa đóng vai trò quan trọng. Deep Learning có thể phát hiện các mẫu tinh vi trong email spam mà các phương pháp Machine Learning chưa thể làm được. Các bước thực hiện bài toán phân loại email bằng Deep Learning:
  • Thu thập và gắn nhãn dữ liệu: Xác định email là spam hoặc không spam. Tập dữ liệu này nên đủ lớn và đa dạng để giúp mô hình học được các đặc điểm quan trọng trong nhiều ngữ cảnh.
  • Tiền xử lý dữ liệu văn bản, chuyển đổi văn bản thành chuỗi số có chiều dài bằng nhau (padding).
  • Xây dựng mô hình Deep Learning gồm nhiều lớp để học đặc trưng từ chuỗi văn bản. Trong đó có lớp Embedding layer cho phép chuyển đổi mỗi từ thành vector liên tục, nhờ đó mô hình có thể “học” được các đặc điểm ngữ nghĩa của các từ trong tập dữ liệu.
  • Huấn luyện mô hình trên dữ liệu 
  • Sử dụng kết quả mô hình để phân loại email mới.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping
 
# Bước 1: Đọc dữ liệu
data = pd.read_csv('spam_data.csv')  # Giả sử dữ liệu được lưu trong file CSV
X = data['email_content']  # Nội dung email
y = data['label']  # Nhãn (spam/không spam)
 
# Bước 2: Chia dữ liệu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
# Bước 3: Tiền xử lý dữ liệu văn bản
tokenizer = Tokenizer(num_words=10000)  # Số lượng từ tối đa trong từ điển
tokenizer.fit_on_texts(X_train)
 
# Token hóa và padding nội dung email
X_train_pad = pad_sequences(tokenizer.texts_to_sequences(X_train), maxlen=200)
X_test_pad = pad_sequences(tokenizer.texts_to_sequences(X_test), maxlen=200)
 
# Bước 4: Xây dựng mô hình Deep Learning
model = Sequential([
    Embedding(max_words, 100, input_length=max_len),
    LSTM(128, return_sequences=True),
    LSTM(64),
    Dense(64, activation='relu'),
    Dropout(0.5),
    Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Bước 5: Huấn luyện mô hình
history = model.fit(
    X_train_pad, y_train,
    epochs=10,
    batch_size=32,
    validation_split=0.1
)
 
# Bước 6: Đánh giá mô hình
loss, accuracy = model.evaluate(X_test_pad, y_test)
print(f"Test Accuracy: {accuracy:.4f}")
 
# Bước 7: Dự đoán email mới
def predict_email(email_content):
    # Tiền xử lý email mới
email_pad = pad_sequences(tokenizer.texts_to_sequences([email_content]), maxlen=max_len)    
    # Dự đoán
    prediction = model.predict(email_pad)
    return "Spam" if prediction[0][0] > 0.5 else "Not Spam"
Có thể bạn sẽ thấy nhiều chỗ trong đoạn mã lệnh Deep Learning trên khó hiểu, thử thách hơn. Nhưng bạn an tâm, chúng ta sẽ tìm hiểu kỹ hơn về Deep Learning trong Bài 2 –Deep Learning với Tensorflow và Keras. Trong phần này bạn chỉ cần thấy rằng, với Deep Learning chúng ta không cần thực hiện feature engineering vì hệ thống có thể tự “học”. 
Thực tế cũng chứng minh với bài toán phân loại email, các thuật toán Deep Learning hiệu quả hơn Machine Learning với các bài báo nghiên cứu khoa học uy tín, đã xuất bản như:
 
ai
Trung Tâm Tin Học
ai
Trung Tâm Tin Học
Chào mừng bạn đến với Trung Tâm Tin Học.
Bạn đang cần hỗ trợ thông tin gì ạ? Hãy Chat ngay với chúng tôi nhé.