রোডম্যাপ
PHASE 2 · অধ্যায় 11

টিএফ-আইডিএফ

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 এ আছে।

বাস্তব ব্যবহার

  • Search engine — query এর word এর TF-IDF দিয়ে relevant document rank করা হয়।
  • Keyword extraction — article থেকে important keyword বের করতে।
  • Document similarity — TF-IDF vector দিয়ে cosine similarity।
  • Recommendation system — content-based filtering এর foundation।
  • Plagiarism detection — দুই document এর TF-IDF compare করে।

ধাপে ধাপে বিশ্লেষণ

1
Step 1 — TF calculate করুন
TF(word, doc) = word এই doc এ কতবার / doc এর মোট word।
2
Step 2 — DF count করুন
DF(word) = কতগুলো document এ word টা আছে।
3
Step 3 — IDF calculate করুন
IDF(word) = log(Total documents / DF)।
4
Step 4 — Multiply
TF-IDF = TF × IDF — final importance score।
5
Step 5 — Vector হিসেবে use করুন
প্রতিটা document = TF-IDF vector — ML model এ feed করুন।

Python কোড

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।

সাধারণ ভুল

  • TF-IDF কে probability ভাবা — এটা একটা importance weight, probability না।
  • Test data এ fit_transform call করা — train data এর vocab/idf এই freeze থাকা উচিত।
  • Stop words না সরানো — এদের IDF কম, কিন্তু TF অনেক বেশি, false high score আসতে পারে।
  • TF-IDF কে magic ভাবা — semantic similarity বুঝতে পারে না (e.g., 'car' vs 'automobile')।
  • Sparse vector কে dense এ convert করে memory নষ্ট করা — sparse matrix ই keep করুন।

অনুশীলন

  1. ৫টা news headline দিয়ে TF-IDF matrix বানান। প্রতিটা headline এর top keyword বের করুন।
  2. Bangla text এ TF-IDF apply করুন (custom tokenizer ব্যবহার করে)।
  3. একই corpus এ BoW এবং TF-IDF compare করুন — important word এর order কতটা বদলায়?

ছোট প্রজেক্ট

Mini Project: Document Search Engine

১০টা Wikipedia article (or যেকোনো article) এর collection নিন। TfidfVectorizer দিয়ে সব document encode করুন। User একটা query input দিবে — সেটাকেও transform করুন। Cosine similarity দিয়ে সবচেয়ে relevant top-৩ document return করুন। এটা একটা mini-Google! পরের chapter এ similarity শিখে আরও refine করবেন।

সারাংশ

  • TF-IDF = TF × IDF — frequency এবং rarity এর smart combination।
  • Common word (the, is) এর score কম, rare word এর বেশি।
  • Search, keyword extraction, similarity — সবার core।
  • Limitation: semantic বোঝে না — সেটা solve করে Embedding (পরের chapter)।