Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Lưu ý: Mình khuyên các bạn nên vào thẳng notebook nha vì mình chuyển file ipynb sang html nên đôi khi có lỗi
Xin chào các bạn mình loser1(DM) đây! 👋
Hôm nay mình rất hào hứng chia sẻ với các bạn về hành trình học NLP (Xử lý Ngôn ngữ Tự nhiên) của mình qua khóa học Natural Language Processing Specialization trên DeepLearning.AI. Đặc biệt, mình sẽ tập trung vào những kiến thức từ Course 1, Week 1 về Logistic Regression – một nền tảng quan trọng trong việc xây dựng các mô hình NLP.
Có lẽ nhiều bạn cũng giống như mình, bắt đầu với NLP với rất nhiều câu hỏi và tò mò:
Qua blog này, mình muốn chia sẻ không chỉ kiến thức mà còn cả những trải nghiệm thực tế khi học course, những khó khăn mình đã gặp và cách mình vượt qua chúng. Hy vọng những ghi chép này sẽ giúp ích cho các bạn đang bắt đầu hành trình khám phá thế giới thú vị của NLP!
Cùng mình bắt đầu nhé với Series này nhá! 🚀
Explore my notebook and follow my AI journey on Facebook.
View Notebook Visit Fanpage
Trong bước đầu tiên, bạn sẽ nhận được các đặc trưng (features) và nhãn (labels). Mục tiêu của bạn là tối thiểu hóa hàm chi phí (cost function) bằng cách điều chỉnh các tham số (parameters hoặc weights). Quá trình này sử dụng các thuật toán tối ưu hóa như Gradient Descent để cập nhật trọng số (weights) và bias. Qua đó, bạn sẽ cải thiện độ chính xác của giá trị đầu ra (predicted values), sao cho chúng gần gũi nhất với giá trị thực tế (ground truth). Điều này giúp mô hình học được mối quan hệ giữa input và output.
Trong tuần đầu thì sài logistic regression để phân tích cảm xúc của một câu với các câu là các features
Note :
1 : positive sentiment
0 : negative sentiment
Ứng với mỗi tweet hoặc đoạn văn bản, bạn có thể biểu diễn nó dưới dạng các vector với kích thước V, trong đó V là kích thước của vocabulary (tập từ vựng). Mỗi từ trong từ vựng được gán một chỉ số (index). Nếu từ xuất hiện trong tweet, giá trị tại vị trí tương ứng sẽ là 1, nếu không thì sẽ là 0.
Ví dụ: Nếu bạn có tweet “I am happy because I am learning NLP”, và tập từ vựng là [“I”, “am”, “happy”, “because”, “learning”, “NLP”, “machine”], thì vector biểu diễn sẽ là:
# Vocabulary
vocab = ["I", "am", "happy", "because", "learning", "NLP", "machine"]
# Tweet
tweet = "I am happy because I am learning NLP"
# Biểu diễn vector
vector = [1 if word in tweet.split() else 0 for word in vocab]
print("Vector biểu diễn:", vector)
Như bạn có thể thấy, khi V càng lớn, vector trở nên thưa thớt hơn(sparse). Hơn nữa, chúng ta sẽ có nhiều đặc trưng hơn và sẽ phải huấn luyện θ với V tham số. Điều này có thể dẫn đến thời gian huấn luyện lâu hơn và thời gian dự đoán lớn hơn.
Cho một tập dữ liệu (corpus) gồm các tweet tích cực (positive) và tiêu cực (negative), nhiệm vụ của bạn là mã hóa mỗi tweet thành một vector đặc trưng. Trước đây, vector này có kích thước V (kích thước của vocabulary). Bây giờ, bạn sẽ mã hóa nó thành một vector kích thước 3, bao gồm:
Bias: Một giá trị cố định, thường là 1.
Positive Feature: Tần suất của các từ trong tweet xuất hiện trong lớp tích cực.
Negative Feature: Tần suất của các từ trong tweet xuất hiện trong lớp tiêu cực.
Để thực hiện điều này, bạn cần tạo một dictionary freqs, ánh xạ mỗi từ và lớp của nó (tích cực hoặc tiêu cực) với số lần từ đó xuất hiện trong lớp tương ứng.
# Tập dữ liệu (corpus)
corpus = [
("I am happy", "positive"),
("I am sad", "negative"),
("I am learning NLP", "positive"),
("I am not happy", "negative"),
]
# Tạo từ điển tần suất
from collections import defaultdict
freqs = defaultdict(lambda: {"positive": 0, "negative": 0})
for tweet, label in corpus:
for word in tweet.split():
freqs[word][label] += 1
print("Từ điển tần suất:", freqs)
Từ điển tần suất: defaultdict(<function <lambda> at 0x7d6b41b1ac20>, {'I': {'positive': 2, 'negative': 2}, 'am': {'positive': 2, 'negative': 2}, 'happy': {'positive': 1, 'negative': 1}, 'sad': {'positive': 0, 'negative': 1}, 'learning': {'positive': 1, 'negative': 0}, 'NLP': {'positive': 1, 'negative': 0}, 'not': {'positive': 0, 'negative': 1}})
Giả sử bạn có tweet “I am sad, I am not learning NLP” và muốn biểu diễn nó thành vector đặc trưng [bias, positive_feature, negative_feature].
# Tính vector đặc trưng
def extract_features(tweet, freqs):
words = tweet.split()
positive_feature = sum(freqs[word]["positive"] for word in words if word in freqs)
negative_feature = sum(freqs[word]["negative"] for word in words if word in freqs)
bias = 1
return [bias, positive_feature, negative_feature]
# Tweet mới
tweet = "I am sad I am not learning NLP"
features = extract_features(tweet, freqs)
print("Vector đặc trưng:", features)
Vector đặc trưng: [1, 10, 10]
Dưới đây là cách bạn có thể thực hiện bước tiền xử lý (preprocessing) trong xử lý văn bản, với các ví dụ chi tiết bằng tiếng Anh:
Khi tiền xử lý, bạn cần thực hiện các bước sau: