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