fbpx Stemming là gì? Ngram là gì? Skip to main content
steemming

Stemming là gì? Ngram là gì?

 

🧠 1. STREMMING LÀ GÌ?

Stemming là quá trình rút gọn từ về gốc (stem) bằng cách loại bỏ hậu tố, tiền tố hoặc đuôi để làm cho các từ liên quan về ngữ nghĩa được đưa về cùng một dạng.

Ví dụ:

"connect", "connecting", "connected", "connection" → "connect"

🧾 2. VÌ SAO CẦN STEMMING?

  • Trong thực tế, một từ có thể có nhiều biến thể, nhưng tất cả đều mang ý nghĩa tương tự.

  • Khi xử lý văn bản, bạn muốn các biến thể đó được xem là một từ duy nhất → giúp tăng hiệu quả thống kê và học máy.


🛠 3. CÁCH DÙNG STEMMING TRONG PYTHON

from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

stemmer = PorterStemmer()

sentence = "The system is connecting to multiple connections and was previously connected."

tokens = word_tokenize(sentence)

for token in tokens:
    print(f"{token:>12} → {stemmer.stem(token)}")

Kết quả:

   connecting → connect
  connections → connect
     connected → connect

🚀 4. ỨNG DỤNG THỰC TẾ CỦA STEMMING

✅ 4.1. Phân loại log máy chủ (Log Classification)

Mục tiêu: Phân tích log và phân loại thành lỗi (ERROR), cảnh báo (WARNING), thông tin (INFO)

Dữ liệu log:

2025-11-26 10:02:12 ERROR Connection failed for user admin
2025-11-26 10:03:55 INFO User admin connected successfully

→ Từ "connection", "connected", "connecting", "connects" → đều sẽ được stem thành "connect".

Giúp mô hình ML hiểu rằng các lỗi liên quan đến kết nối đều giống nhau về ý nghĩa.


✅ 4.2. Phân tích phản hồi khách hàng (Sentiment Analysis)

Dùng stemming để chuẩn hóa từ vựng giúp mô hình dễ học hơn.

Ví dụ:

"The product is disappointing and disappointing!"
→ stemming → ["product", "disappoint", "disappoint"]

→ Giúp thống kê từ khóa chính xác, giảm nhiễu dữ liệu.


✅ 4.3. Tìm kiếm văn bản (Search Engine / Full Text Search)

Stemming giúp cải thiện kết quả tìm kiếm, ví dụ:

Người dùng tìm: connect
→ Tài liệu chứa "connected", "connecting", "connection" cũng sẽ được trả về.

→ Được dùng trong:

  • Elasticsearch (có built-in stemmer)

  • Apache Lucene / Solr


✅ 4.4. Lọc spam email / tin nhắn

Chuẩn hóa từ như "viagra", "viagras", "viagralike" → stem về "viagra" để mô hình dễ nhận diện spam.


✅ 4.5. Trích xuất chủ đề (Topic Modeling)

Dùng trước khi áp dụng LDA hoặc NMF để giảm số lượng từ cần học.


⚠️ 5. HẠN CHẾ CỦA STEMMING

  • Không phân biệt từ đồng âm (playing vs playground)

  • Có thể tạo ra từ không đúng ngữ pháp

  • Không chính xác như lemmatization (dùng từ điển để phân tích ngữ pháp)


📌 6. KHI NÀO NÊN DÙNG STEMMING?

Tình huống Nên dùng
Văn bản lớn, không cần ngữ pháp ✅ Stemming
Tìm kiếm, phân loại log, phân tích lỗi ✅ Stemming
Ứng dụng ngôn ngữ học sâu ❌ Dùng lemmatization tốt hơn

📦 GỢI Ý THÊM CHO BẠN

  • PorterStemmer – đơn giản, phổ biến

  • SnowballStemmer – mở rộng cho nhiều ngôn ngữ

  • LancasterStemmer – mạnh hơn nhưng cắt "dữ dội" hơn


🔤 N-gram là gì?

N-gram là một chuỗi gồm N từ liên tiếp nhau (hoặc ký tự liên tiếp) trong một đoạn văn bản. Đây là một kỹ thuật phổ biến trong xử lý ngôn ngữ tự nhiên (NLP) dùng để nắm bắt ngữ cảnh cục bộ, giúp máy hiểu mối quan hệ giữa các từ.


📚 Ví dụ cơ bản:

Giả sử bạn có câu:

"Tôi đang học Python"

Loại n-gram Kết quả
Unigram (1-gram) ["Tôi", "đang", "học", "Python"]
Bigram (2-gram) ["Tôi đang", "đang học", "học Python"]
Trigram (3-gram) ["Tôi đang học", "đang học Python"]

🔧 Mục đích sử dụng:

Mục tiêu Cách sử dụng
💬 Hiểu ngữ cảnh N-gram nắm bắt các từ gần nhau (ví dụ: "máy học", "trí tuệ nhân tạo")
🔍 Tìm cụm từ phổ biến Tìm các bigram phổ biến trong tập dữ liệu lớn
🤖 Train mô hình NLP N-gram dùng để tạo đặc trưng (features) cho mô hình ML
📨 Phân loại văn bản Dựa vào chuỗi từ liên tiếp để phân tích chủ đề hoặc cảm xúc
📈 Dự đoán từ kế tiếp Mô hình gợi ý từ dựa trên n-gram (như bàn phím điện thoại)

🛠 Cách tạo n-gram bằng Python

▶️ Dùng nltk:

import nltk
from nltk.util import ngrams
from nltk.tokenize import word_tokenize

sentence = "Tôi đang học xử lý ngôn ngữ tự nhiên"
tokens = word_tokenize(sentence)

bigrams = list(ngrams(tokens, 2))
print(bigrams)

Kết quả:

[('Tôi', 'đang'), ('đang', 'học'), ('học', 'xử'), ('xử', 'lý'), ('lý', 'ngôn'), ('ngôn', 'ngữ'), ('ngữ', 'tự'), ('tự', 'nhiên')]

▶️ Dùng CountVectorizer trong scikit-learn:

from sklearn.feature_extraction.text import CountVectorizer

text = ["tôi đang học xử lý ngôn ngữ tự nhiên"]
vectorizer = CountVectorizer(ngram_range=(2, 2))  # bigram

X = vectorizer.fit_transform(text)
print(vectorizer.get_feature_names_out())

Kết quả:

['đang học' 'học xử' 'ngôn ngữ' 'tự nhiên' 'tôi đang' 'xử lý' 'lý ngôn']

✅ Khi nào nên dùng N-gram?

Trường hợp Dùng N-gram
Văn bản ngắn (log, tweet) ✅ bigram hoặc trigram giúp bổ sung ngữ cảnh
Phân loại văn bản ✅ n-gram giúp nhận diện cụm từ đặc trưng
Dự đoán từ tiếp theo ✅ trigram, 4-gram
Dịch máy hoặc chatbot ✅ để hiểu mối quan hệ giữa các từ

⚠️ Lưu ý:

  • N càng lớn, mô hình càng hiểu ngữ cảnh tốt hơn → nhưng cũng dễ gây bùng nổ đặc trưng (high dimensionality).

  • Thường dùng n = 1 → 3 là hợp lý.


📌 Tổng kết:

Thuật ngữ Ý nghĩa
N-gram Một chuỗi gồm N từ liên tiếp
Unigram 1 từ (độc lập)
Bigram 2 từ liên tiếp
Trigram 3 từ liên tiếp

 

About

Công ty thiết kế web app chuyên thiết kế web và các dịch vụ maketing digital, seo, google adword...