3. Traitement du langage naturel par Python 3-1. Important outil d'extraction de mots Analyse TF-IDF [définition originale]

⑴ L'idée de TF-IDF

⑵ Définition de la valeur TF-IDF

** Fréquence d'occurrence $ tf $ multipliée par l'indice de rareté $ idf $ **

** La fréquence d'occurrence $ tf $ et le coefficient $ idf $ sont définis comme suit **

(3) Mécanisme de calcul basé sur la définition originale

#Import de la bibliothèque de calculs numériques
from math import log
import pandas as pd
import numpy as np

➀ Préparer la liste de données de mots

docs = [
        ["Mot 1", "Mot 3", "Mot 1", "Mot 3", "Mot 1"],
        ["Mot 1", "Mot 1"],
        ["Mot 1", "Mot 1", "Mot 1"],
        ["Mot 1", "Mot 1", "Mot 1", "Mot 1"],
        ["Mot 1", "Mot 1", "Mot 2", "Mot 2", "Mot 1"],
        ["Mot 1", "Mot 3", "Mot 1", "Mot 1"]
        ]

N = len(docs)

words = list(set(w for doc in docs for w in doc))
words.sort()

print("Nombre de documents:", N)
print("Mots cibles:", words)

image.png

➁ Définissez une fonction de calcul

#Définition de la fonction tf
def tf(t, d):
    return d.count(t)/len(d)
 
#Définition de la fonction idf
def idf(t):
    df = 0
    for doc in docs:
        df += t in doc
    return np.log10(N/df)
 
#Définition de la fonction tfidf
def tfidf(t, d):
    return tf(t,d) * idf(t)

➂ Observez le résultat du calcul de TF

#Calculer tf
result = []
for i in range(N):
    temp = []
    d = docs[i]
    for j in range(len(words)):
        t = words[j]     
        temp.append(tf(t,d))
    result.append(temp)
       
pd.DataFrame(result, columns=words)

image.png

➃ Observez les résultats du calcul IDF

#Calculer l'idf
result = []
for j in range(len(words)):
    t = words[j]
    result.append(idf(t))

pd.DataFrame(result, index=words, columns=["IDF"])

image.png

➄ Calcul TF-IDF

#Calculer tfidf
result = []
for i in range(N):
    temp = []
    d = docs[i]
    for j in range(len(words)):
        t = words[j]
        temp.append(tfidf(t,d))   
    result.append(temp)

pd.DataFrame(result, columns=words)

image.png

⑷ Calcul par scikit-learn

# scikit-apprendre TF-Importer la bibliothèque IDF
from sklearn.feature_extraction.text import TfidfVectorizer
#Liste unidimensionnelle
docs = [
        "Mot 1 Mot 3 Mot 1 Mot 3 Mot 1",
        "Mot 1 Mot 1",
        "Mot 1 Mot 1 Mot 1",
        "Mot 1 Mot 1 Mot 1 Mot 1",
        "Mot 1 Mot 1 Mot 2 Mot 2 Mot 1",
        "Mot 1 Mot 3 Mot 1 Mot 1"
        ]

#Générer un modèle
vectorizer = TfidfVectorizer(smooth_idf=False)
X = vectorizer.fit_transform(docs)

#Représenté dans un bloc de données
values = X.toarray()
feature_names = vectorizer.get_feature_names()
pd.DataFrame(values,
             columns = feature_names)

image.png

⑸ Reproduisez le résultat de scikit-learn

➀ Formule IDF modifiée

#Définition de la fonction idf
def idf(t):
    df = 0
    for doc in docs:
        df += t in doc
    #return np.log10(N/df)
    return np.log(N/df)+1
#Calculer l'idf
result = []
for j in range(len(words)):
    t = words[j]
    result.append(idf(t))

pd.DataFrame(result, index=words, columns=["IDF"])

image.png

➁ Observez le résultat du calcul de TF-IDF

#Calculer tfidf
result = []
for i in range(N):
    temp = []
    d = docs[i]
    for j in range(len(words)):
        t = words[j]
        temp.append(tfidf(t,d))   
    result.append(temp)

pd.DataFrame(result, columns=words)

image.png

➂ Régularisation L2 des résultats des calculs TF-IDF

#Calculer la valeur de la norme selon la définition uniquement dans le document 1 à titre d'essai
x = np.array([0.60, 0.000000, 0.839445])
x_norm = sum(x**2)**0.5
x_norm = x/x_norm
print(x_norm)

#Place-les et additionne-les pour s'assurer qu'ils sont 1
np.sum(x_norm**2)

image.png

# scikit-Importer la bibliothèque de régularisation d'apprentissage
from sklearn.preprocessing import normalize

#Régularisation L2
result_norm = normalize(result, norm='l2')

#Représenté dans un bloc de données
pd.DataFrame(result_norm, columns=words)

image.png

Recommended Posts

3. Traitement du langage naturel par Python 3-1. Important outil d'extraction de mots Analyse TF-IDF [définition originale]
3. Traitement du langage naturel par Python 1-1. Word N-gram
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Python: traitement du langage naturel
Créer un environnement pour le traitement du langage naturel avec Python
100 coups de traitement du langage avec Python 2015
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Étudiez le traitement du langage naturel avec Kikagaku
100 traitements de langage avec Python
[Traitement du langage naturel] Prétraitement avec le japonais
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
100 traitements de langage avec Python (chapitre 3)
Traitement du langage naturel japonais utilisant Python3 (4) Analyse des émotions par régression logistique
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Étude de cas sur le traitement du langage naturel: Fréquence des mots dans'Anne avec un E '
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
J'ai essayé le traitement du langage naturel avec des transformateurs.
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
Démarrer avec Python avec 100 coups sur le traitement du langage
Traitement d'image à partir de zéro avec python (4) Extraction de contour
Python: apprentissage profond du traitement du langage naturel: principes de base
Profitons du traitement du langage naturel à l'aide de l'API COTOHA
La première intelligence artificielle. Je voulais essayer le traitement du langage naturel, donc je vais essayer l'analyse morphologique en utilisant MeCab avec python3.
[Pour les débutants] Analyse du langage à l'aide de l'outil de traitement du langage naturel "GiNZA" (de l'analyse morphologique à la vectorisation)
100 traitements du langage naturel frappent Chapitre 4 Analyse morphologique (première moitié)
100 traitements du langage naturel frappent Chapitre 4 Analyse morphologique (seconde moitié)
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Le traitement du langage naturel à 100 coups
100 points de traitement du langage naturel Chapitre 5 Analyse des dépendances (premier semestre)
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Analyse des émotions avec traitement du langage naturel! J'ai essayé de prédire l'évaluation à partir du texte de l'avis
Traitement du langage naturel (données originales) avec Word2Vec développé par des chercheurs Google américains
Analyse vocale par python
RNN_LSTM2 Traitement du langage naturel
Traitement d'image avec Python
Analyse vocale par python
Analyse de données avec Python
[Pratique] Créez une application Watson avec Python! # 3 [Classification du langage naturel]
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
■ [Google Colaboratory] Prétraitement du traitement du langage naturel et janome
J'écrirai une explication détaillée à mort en résolvant 100 traitements de langage naturel Knock 2020 avec Python