Traffine I/O

Bahasa Indonesia

2023-01-20

TF-IDF

Apa itu TF-IDF

TF-IDF adalah singkatan dari Term Frequency - Inverse Document Frequency dan merupakan representasi vektor dari bahasa alami.

TF-IDF diperoleh dengan mengalikan TF dan IDF.

tf \space idf(t,d,D) = tf(t,d) \times idf(t,D)
  • t: kata
  • d: dokumen
  • D: kumpulan dokumen (korpus)

Term Frequency

TF (Term Frequency) mewakili frekuensi kemunculan sebuah kata. Kata-kata yang lebih sering muncul dianggap lebih penting, sedangkan kata-kata yang lebih jarang muncul dianggap kurang penting. Dengan kata lain, kata-kata yang sering muncul berguna untuk mengidentifikasi karakteristik dokumen. Ada beberapa definisi frekuensi kemunculan.

  • Berapa kali sebuah kata muncul dalam sebuah dokumen (hitungan mentah)
  • Frekuensi kemunculan yang disesuaikan dengan panjang dokumen (jumlah kemunculan sebuah kata dibagi dengan jumlah kata dalam dokumen)
  • Frekuensi kemunculan yang ditransformasikan ke dalam log (misalnya log(1 + jumlah mentah))
  • Frekuensi kemunculan boolean (1 jika istilah tersebut muncul dalam dokumen, 0 jika tidak)

Dalam kasus ini, kita akan menghitung TF sebagai jumlah kemunculan sebuah kata dibagi dengan jumlah kata dalam dokumen.

Misalkan kita memiliki dokumen berikut.

  • Dokumen 1: It is going to rain today. I like sound of rain.
  • Dokumen 2: Today I am going to watch Netflix.

TF adalah sebagai berikut.

TF (Dokumen 1) TF (Dokumen 2)
it \frac{1}{10}=0.1 0
is \frac{1}{10}=0.1 0
going \frac{1}{10}=0.1 \frac{1}{7}=0.14
to \frac{1}{10}=0.1 \frac{1}{7}=0.14
rain \frac{2}{10}=0.2 0
today \frac{1}{10}=0.1 \frac{1}{7}=0.14
i \frac{1}{10}=0.1 \frac{1}{7}=0.14
like \frac{1}{10}=0.1 0
sound \frac{1}{10}=0.1 0
of \frac{1}{10}=0.1 0
am 0 \frac{1}{7}=0.14
watch 0 \frac{1}{7}=0.14
Netflix 0 \frac{1}{7}=0.14

Inverse Document Frequency

IDF (Inverse Document Frequency) berfungsi sebagai penyaring untuk kata-kata umum seperti ini dan adalah. Kata-kata yang sering muncul di berbagai dokumen memiliki IDF yang rendah, sedangkan kata-kata yang jarang muncul memiliki IDF yang tinggi.

idf(t,D) = \log(\frac{N}{count(d \in D:t \in d)})
  • t: kata
  • D: dokumen
  • D: kumpulan dokumen (korpus)
  • N: jumlah d dalam D
  • count(d \in D:t \in d): jumlah dokumen d di mana kata t muncul

Misalkan Anda memiliki dokumen berikut ini.

  • Dokumen 1: It is going to rain today. I like sound of rain.
  • Dokumen 2: Today I am going to watch Netflix.

IDF akan terlihat seperti ini.

IDF
it \log(2/1)=0.3
is \log(2/1)=0.3
going \log(2/2)=0
to \log(2/2)=0
rain \log(2/1)=0.3
today \log(2/2)=0
i \log(2/2)=0
like \log(2/1)=0.3
sound \log(2/1)=0.3
of \log(2/1)=0.3
am \log(2/1)=0.3
watch \log(2/1)=0.3
Netflix \log(2/1)=0.3

Pustaka untuk menghitung TF-IDF

TF-IDF dapat dihitung dengan menggunakan pustaka utama berikut ini.

  • scikit-learn

https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html
https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html
https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfTransformer.html

  • TensorFlow(2.x)/ Keras

https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/text/Tokenizer#sequences_to_matrix

  • TensorFlow Extended(TFX)

https://www.tensorflow.org/tfx/transform/api_docs/python/tft/tfidf

Namun, rumusnya mungkin berbeda tergantung pada pustaka dan opsi yang ditentukan. Dalam pembelajaran mesin, fungsi TF-IDF dari scikit-learn sering digunakan.

Dalam contoh ini, kita menggunakan sklearn.feature_extraction.text.TfidfVectorizer untuk menghitung TF-IDF dari dokumen-dokumen berikut.

  • Dokumen 1: It is going to rain today. I like sound of rain.
  • Dokumen 2: Today I am going to watch Netflix.
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

document1 = "It is going to rain today. I like sound of rain."
document2 = "Today I am going to watch Netflix."

df = pd.DataFrame({'id': ["Document 1", "Docuemnt 2"],
                   'document': [document1, document2]
                   })

# calculate TF-IDF
tfidf_vectorizer = TfidfVectorizer(use_idf=True,lowercase=True)

# get TF-IDF score of all words in documents
tfidf_matrix = tfidf_vectorizer.fit_transform(df['document'])

# term list
terms = tfidf_vectorizer.get_feature_names()

# vectors of words
tfidfs = tfidf_matrix.toarray()
>> terms

['am',
 'going',
 'is',
 'it',
 'like',
 'netflix',
 'of',
 'rain',
 'sound',
 'to',
 'today',
 'watch']
>> tfidfs

array([[0.        , 0.28867513, 0.28867513, 0.28867513, 0.28867513,
        0.        , 0.28867513, 0.57735027, 0.28867513, 0.28867513,
        0.28867513, 0.        ],
       [0.40824829, 0.40824829, 0.        , 0.        , 0.        ,
        0.40824829, 0.        , 0.        , 0.        , 0.40824829,
        0.40824829, 0.40824829]])
df_tfidf = pd.DataFrame(tfidfs,
                  columns=terms,
                  index=["Document 1", "Document 2"]
                  )
display(df_tfidf)
am going is it like netflix of rain sound to today watch
Document 1 0 0.289 0.289 0.289 0.289 0 0.289 0.577 0.289 0.289 0.289 0
Document 2 0.408 0.408 0 0 0 0.408 0 0 0 0.408 0.408 0.408

Nilai-nilai di atas adalah nilai TF-IDF untuk setiap kata. TfidfVectorizer melakukan normalisasi secara internal.

Semakin tinggi nilai TF-IDF, semakin penting kata tersebut dalam dokumen.

Contoh penggunaan TF-IDF

IF-IDF digunakan dalam situasi berikut

  • Pengambilan informasi
  • Peringkasan teks
  • Ekstraksi kata kunci
  • Mencari dokumen yang mirip
  • Rekomendasi artikel terkait

Referensi

https://www.capitalone.com/tech/machine-learning/understanding-tf-idf/
https://medium.com/analytics-vidhya/tf-idf-term-frequency-technique-easiest-explanation-for-text-classification-in-nlp-with-code-8ca3912e58c3
https://monkeylearn.com/blog/what-is-tf-idf/
https://www.freecodecamp.org/news/how-to-process-textual-data-using-tf-idf-in-python-cd2bbc0a94a3/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!