aprender | Extracción de características con TF-IDF

Ahora, está buscando tf-idf, entonces puede estar familiarizado con la extracción de características y lo que es. TF-IDF, que significa Frecuencia de término – Frecuencia de documento inversa . Es una de las técnicas más importantes utilizadas para la recuperación de información para representar qué tan importante es una palabra o frase específica para un documento determinado. Tomemos un ejemplo, tenemos una string o bolsa de palabras (BOW) y tenemos que extraer información de ella, entonces podemos usar este enfoque.

El valor de tf-idf aumenta en proporción al número de veces que aparece una palabra en el documento pero muchas veces es compensado por la frecuencia de la palabra en el corpus, lo que ayuda a ajustar con respecto a que algunas palabras aparecen con mayor frecuencia en general .
TF-IDF utiliza dos métodos estadísticos, el primero es la frecuencia de término y el otro es la frecuencia de documento inversa. La frecuencia de términos se refiere al número total de veces que un término t aparece en el documento doc contra (por) el número total de todas las palabras en el documento y la frecuencia inversa del documento mide cuánta información proporciona la palabra. Mide el peso de una palabra dada en todo el documento. IDF muestra qué tan común o rara es una palabra determinada en todos los documentos.
TF-IDF se puede calcular como tf * idf

Tf*Idf no convierte directamente los datos sin procesar en características útiles. En primer lugar, convierte strings sin procesar o conjuntos de datos en vectores y cada palabra tiene su propio vector. Luego, usaremos una técnica particular para recuperar la función, como la similitud de coseno, que funciona en vectores, etc. Como sabemos, no podemos pasar la string directamente a nuestro modelo. Entonces, tf*idf nos proporciona valores numéricos de todo el documento.
Para extraer características de un documento de palabras, importamos:

from sklearn.feature_extraction.text import TfidfVectorizer

Aporte :

1st Sentence - "hello i am pulkit"
2nd Sentence - "your name is akshit"


Código: código de Python para encontrar las medidas de similitud

# importing libraries
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.metrics import pairwise_distances
from sklearn.metrics.pairwise import euclidean_distances
from scipy.spatial import distance
import pandas as pd
import numpy as np
   
## Converting 3D array of array into 1D array
def arr_convert_1d(arr):
    arr = np.array(arr)
    arr = np.concatenate( arr, axis=0 )
    arr = np.concatenate( arr, axis=0 )
    return arr
   
## Cosine Similarity
cos = []
def cosine(trans):
    cos.append(cosine_similarity(trans[0], trans[1]))
   
## Manhatten Distance
manhatten = []
def manhatten_distance(trans):
    manhatten.append(pairwise_distances(trans[0], trans[1], 
                                        metric = 'manhattan'))
   
## Euclidean Distance
euclidean = []
def euclidean_function(vectors):
    euc=euclidean_distances(vectors[0], vectors[1])
    euclidean.append(euc)
   
# This Function finds the similarity between two 
# sentences by using above functions.
  
## TF - IDF
def tfidf(str1, str2):
    ques = []
    # You have to provide the dataset. Link of the dataset 
    # is given in the end of this article. 
    # and if you are using a different dataset then adjust 
    # it according to your dataset's columns and rows
    dataset = pd.read_csv('C:\\Users\\dell\\Desktop\\quora_duplicate_questions.tsv', 
                          delimiter='\t',encoding='utf-8')
      
    x = dataset.iloc[:, 1:5]
    x = x.dropna(how = 'any')
      
    for k in range(len(x)):
        for j in [2, 3]:
            ques.append(x.iloc[k, j])
    vect = TfidfVectorizer()
    # Fit the your whole dataset. After all, this'll 
    # produce the vectors which is based on words in corpus/dataset
    vect.fit(ques)
   
    corpus = [str1,str2]
    trans = vect.transform(corpus)
   
    euclidean_function(trans)
    cosine(trans)
    manhatten_distance(trans)
    return convert()
   
def convert():
    dataf = pd.DataFrame()
    lis2 = arr_convert_1d(manhatten)
    dataf['manhatten'] = lis2
    lis2 = arr_convert_1d(cos)
    dataf['cos_sim'] = lis2
    lis2 = arr_convert_1d(euclidean)
    dataf['euclidean'] = lis2
    return dataf
   
newData = pd.DataFrame(); 
str1 = "hello i am pulkit"
str2 = "your name is akshit"
newData = tfidf(str1,str2);
print(newData);

Producción :


   manhatten  cos_sim  euclidean
0   2.955813      0.0   1.414214         
 

Conjunto de datos: enlace de Google Drive
Nota: el conjunto de datos es grande, por lo que tardará entre 30 y 40 segundos en producir una salida y si va a ejecutar como está, entonces no funcionará. Solo funciona cuando copia este código en su IDE y proporciona su conjunto de datos en la función tfidf.

Publicación traducida automáticamente

Artículo escrito por PulkitDahiya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *