Phân cụm tài liệu

Phân cụm trong Python

Shaumik Daityari

Business Analyst

Phân cụm tài liệu: khái niệm

  1. Làm sạch dữ liệu trước khi xử lý
  2. Xác định độ quan trọng của thuật ngữ trong tài liệu (trong ma trận TF‑IDF)
  3. Phân cụm ma trận TF‑IDF
  4. Tìm thuật ngữ, tài liệu hàng đầu trong mỗi cụm
Phân cụm trong Python

Làm sạch và tách token

  • Chia văn bản thành token và làm sạch để xử lý
from nltk.tokenize import word_tokenize
import re

def remove_noise(text, stop_words = []):
    tokens = word_tokenize(text)

cleaned_tokens = [] for token in tokens: token = re.sub('[^A-Za-z0-9]+', '', token)
if len(token) > 1 and token.lower() not in stop_words: # Get lowercase cleaned_tokens.append(token.lower()) return cleaned_tokens
remove_noise("It is lovely weather we are having. I hope the weather continues.")
['lovely', 'weather', 'hope', 'weather', 'continues']
Phân cụm trong Python

Ma trận thuật ngữ–tài liệu và ma trận thưa

  • Hình thành ma trận thuật ngữ–tài liệu
  • Phần lớn phần tử trong ma trận là 0

Source

  • Tạo ma trận thưa

Source

Phân cụm trong Python

TF‑IDF (Tần suất thuật ngữ – Tần suất nghịch tài liệu)

  • Thước đo có trọng số: đánh giá độ quan trọng của một từ trong tài liệu thuộc một tập hợp
from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vectorizer = TfidfVectorizer(max_df=0.8, max_features=50, min_df=0.2, tokenizer=remove_noise)
tfidf_matrix = tfidf_vectorizer.fit_transform(data)
Phân cụm trong Python

Phân cụm với ma trận thưa

  • kmeans() trong SciPy không hỗ trợ ma trận thưa
  • Dùng .todense() để chuyển thành ma trận đặc
cluster_centers, distortion = kmeans(tfidf_matrix.todense(), num_clusters)
Phân cụm trong Python

Thuật ngữ hàng đầu theo cụm

  • Tâm cụm: danh sách có kích thước bằng số lượng thuật ngữ
  • Mỗi giá trị ở tâm cụm là độ quan trọng của thuật ngữ
  • Tạo từ điển và in các thuật ngữ nổi bật
terms = tfidf_vectorizer.get_feature_names_out()

for i in range(num_clusters):
    center_terms = dict(zip(terms, list(cluster_centers[i])))

sorted_terms = sorted(center_terms, key=center_terms.get, reverse=True)
print(sorted_terms[:3])
['room', 'hotel', 'staff']

['bad', 'location', 'breakfast']
Phân cụm trong Python

Một số lưu ý thêm

  • Xử lý siêu liên kết, biểu tượng cảm xúc, v.v.
  • Chuẩn hoá từ (run, ran, running -> run)
  • .todense() có thể không phù hợp với tập dữ liệu lớn
Phân cụm trong Python

Tiếp theo: bài tập!

Phân cụm trong Python

Preparing Video For Download...