TF-IDF
Word importance মাপার সবচেয়ে classical এবং powerful technique।
BoW তে 'the' সবচেয়ে frequent — কিন্তু এটা কি important? না! আসল গুরুত্বপূর্ণ সেই word যেটা এই document এ আছে, কিন্তু অন্য document এ নেই। এই 'rare-but-relevant' word খুঁজে বের করার গণিত — TF-IDF।
TF-IDF (Term Frequency - Inverse Document Frequency) হলো একটা score, যা বলে — একটা word একটা specific document এ কতটা important। TF = এই document এ word টা কতবার আছে। IDF = পুরো corpus এ এই word কতটা rare। দুটোর গুণফলই TF-IDF। যত বেশি TF এবং যত বেশি rare — তত বেশি score।
ভাবুন একটা সংবাদপত্র — সব article এ 'the', 'is' আছে। তাই এগুলোর IDF কম, importance কম। কিন্তু একটা specific article এ 'volcano' word ১০ বার আছে এবং অন্য article এ নেই — তাহলে 'volcano' সেই article এর identity। TF-IDF এর কাজ এই identity-word গুলো highlight করা। Formula: TF-IDF = TF × log(N / DF), যেখানে N = total documents, DF = এই word যে কয়টা document এ আছে।
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
corpus = [
"Bangla NLP is amazing and growing fast",
"NLP and machine learning power AI",
"I love Bangla language and culture",
"Machine learning is the future",
]
tfidf = TfidfVectorizer(stop_words="english")
X = tfidf.fit_transform(corpus)
vocab = tfidf.get_feature_names_out()
df = pd.DataFrame(X.toarray(), columns=vocab, index=[f"Doc{i+1}" for i in range(len(corpus))])
print("TF-IDF Matrix (rounded):")
print(df.round(3))
# Top keyword per document
print("\nTop keyword per document:")
for i, row in enumerate(X.toarray()):
top_idx = row.argmax()
print(f"Doc{i+1}: '{vocab[top_idx]}' (score={row[top_idx]:.3f})")
# IDF values (rarer = higher)
import numpy as np
idf_df = pd.DataFrame({"word": vocab, "idf": tfidf.idf_})
print("\nIDF (high = rare word):")
print(idf_df.sort_values("idf", ascending=False).head(10))sklearn এর TfidfVectorizer BoW এর মত কাজ করে, কিন্তু count এর পরিবর্তে TF-IDF score দেয়। লক্ষ্য করুন — 'bangla' word টা শুধু Doc1 এবং Doc3 এ আছে, তাই তার IDF বেশি, score ও বেশি। 'machine' Doc2 এবং Doc4 দুটোতেই — IDF কম। `tfidf.idf_` দেখে আপনি বুঝতে পারবেন corpus এ কোন word rare আর কোন word common।
১০টা Wikipedia article (or যেকোনো article) এর collection নিন। TfidfVectorizer দিয়ে সব document encode করুন। User একটা query input দিবে — সেটাকেও transform করুন। Cosine similarity দিয়ে সবচেয়ে relevant top-৩ document return করুন। এটা একটা mini-Google! পরের chapter এ similarity শিখে আরও refine করবেন।