Cree su propio motor de búsqueda basado en PNL con BM25

Contenidos

Motor de búsqueda nlp con BM25

Introducción

¿Cómo pueden escanear todo por medio de Internet y devolver resultados relevantes en solo Aproximadamente 5,43,00,000 resultados (0,004 segundos). Bueno, trabajan en el concepto de Arrastrándose y Indexación.

  • Arrastrándose: Los bots automatizados buscan páginas nuevas o actualizadas. Y almacena la información clave como: URL, título, palabras clave, etc. de las páginas que se utilizarán más adelante.
  • Indexación: Los datos capturados del rastreo se analizan como: de qué se trata la página. El contenido clave, las imágenes y los archivos de video de la página se usan en el procedimiento. Esta información se indexa y almacena para ser devuelta más tarde para una consulta de búsqueda.

Por eso, cada vez que les pedimos que busquen algo por nosotros, no están escaneando a lo largo y ancho de Internet, sino simplemente escaneando esas URL indexadas en el paso 2.

Bueno, hoy trabajaríamos en cómo desarrollar un pequeño prototipo, muy equivalente a la funcionalidad de indexación de cualquier motor de búsqueda. Estaríamos usando un conjunto de datos de tweets en #COVID e intentaríamos indexarlos según nuestro término de búsqueda.

A. Importación de paquetes

import pandas as pd
from rank_bm25 import *

¿Qué es BM25?

BM25 es un paquete de Python simple y se puede usar para indexar los datos, tweets en nuestro caso, en función de la consulta de búsqueda. Funciona sobre el concepto de TF / IDF, dicho de otra forma.

  • TF o frecuencia de término: resumidamente, indica el número de apariciones del término de búsqueda en nuestro tweet
  • Frecuencia de documento inverso o IDF: mide la relevancia de su término de búsqueda. Puesto que TF considera que todos los términos son igualmente importantes, por eso, no podemos utilizar solo frecuencias de términos para calcular el peso de una definición en su texto. Tendríamos que sopesar los términos frecuentes mientras ampliamos los términos raros que muestran su relevancia para el tweet.

Una vez que ejecute la consulta, BM25 mostrará la relevancia de su término de búsqueda con cada uno de los tweets. Puede ordenarlos para indexar los más relevantes.

B. Preparando tus tweets

Dado que esta no es una discusión sobre la API de Twitter, comenzará a utilizar un feed basado en Excel. Puede limpiar sus datos de texto en estos pasos clave para que la búsqueda sea más sólida.

1. Tokenización:

Dividir la oración en palabras. Para que cada palabra se pueda considerar de forma única.

from nltk.tokenize import word_tokenize
sentence = “Jack is a sharp minded fellow”
words = word_tokenize(sentence)
print(words)
Output: ['Jack', 'sharp', 'minded', 'fellow']

2. Borrar caracteres especiales:

Borrar los caracteres especiales de sus tweets

def spl_chars_removal(lst):
    lst1=list()
    for element in lst:
        str=””
        str = re.sub(“[⁰-9a-zA-Z]”,” “,element)
        lst1.append(str)
    return lst1

3. Borrar palabras vacías:

Las palabras vacías son palabras de uso común (es, para, el, etc.) en los tweets. Estas palabras no significan ninguna relevancia puesto que no ayudan a distinguir dos tweets. solía Gensim paquete para borrar mis palabras irrelevantes, además puede probarlo usando nltk, pero encontré a Gensim mucho más rápido que otros.

Además se pueden agregar fácilmente nuevas palabras a la lista de palabras vacías, en caso de que sus datos estén concretamente rodeados de esas palabras y ocurran muchas veces.

#adding words to stopwords
from nltk.tokenize import word_tokenize
from gensim.parsing.preprocessing import STOPWORDS
#adding custom words to the pre-defined stop words list
all_stopwords_gensim = STOPWORDS.union(set([‘disease’]))
def stopwprds_removal_gensim_custom(lst):
    lst1=list()
    for str in lst:
        text_tokens = word_tokenize(str)
        tokens_without_sw = [word for word in text_tokens if not word in all_stopwords_gensim]
        str_t = “ “.join(tokens_without_sw)
        lst1.append(str_t)
 
    return lst1

4. Normalización:

La normalización de texto es el procedimiento de transformar un texto en una forma canónica (estándar). A modo de ejemplo, la palabra «bueno» y «gud» se puede transformar en «bueno», su forma canónica. Otro ejemplo es el mapeo de palabras casi idénticas como «palabras vacías», «palabras vacías» y «palabras vacías» a solo «palabras vacías».

Esta técnica es esencial para textos ruidosos como comentarios de redes sociales, mensajes de texto y comentarios en publicaciones de blogs donde prevalecen las abreviaturas, los errores ortográficos y el uso de palabras que no están en el vocabulario (oov). La gente tiende a escribir comentarios de forma taquigráfica y, por eso, este procesamiento previo se torna muy importante.

CrudoNormalizado
sí, ydayel dia de ayer
tomo, 2moro, 2mrw, tmrwmañana
brbVuelvo enseguida

5. Derivado:

Procedimiento de transformación de las palabras a su forma raíz. Es el procedimiento de reducir la inflexión de las palabras (a modo de ejemplo, problemas, problemas) a su forma raíz (a modo de ejemplo, problemas). La «raíz» en esta circunstancia puede no ser una palabra raíz real, sino simplemente una forma canónica de la palabra original.

Stemming utiliza un procedimiento heurístico que corta los extremos de las palabras con la esperanza de transformar correctamente las palabras en su forma raíz. Debe revisarse, puesto que en el siguiente ejemplo puede ver que «Machine» se transforma en «Machin», «e» se corta en el procedimiento de derivación..

import nltk
from nltk.stem
import PorterStemmer
ps = PorterStemmer() sentence = “Machine Learning is cool”
for word in sentence.split():
    print(ps.stem(word))

Producción: [‘Machin’, ‘Learning’, ‘cool’]

C. Tokenización de tweets y ejecución de BM25

Esta es la pieza central donde ejecutamos la consulta de búsqueda. Buscamos los tweets basados ​​en la palabra «vacuna» basado en el usuario. Además se puede ingresar una frase y lo hará con fluidez a medida que convertimos nuestro término de búsqueda en la segunda línea a continuación.

tokenized_corpus = [doc.split(” “) for doc in lst1]

bm25 = BM25Okapi (cuerpo_tokenizado)

query = “vacuna” ## Ingresa la consulta de búsqueda

tokenized_query = query.split («»)

Puede verificar la asociación de cada tweet con su término de búsqueda usando .get_scores función.

doc_scores = bm25.get_scores(tokenized_query)
print(doc_scores)

Al entrar n = 5 en .get_top_n obtendríamos cinco tweets más asociados como nuestro resultado. Puede poner el valor de n según sus necesidades.

docs = bm25.get_top_n (consulta_tokenizada, lst1, n = 5)

df_search = df[df[‘Text’].isin (docs)]

df_search.head ()

D. Los cinco tweets asociados principales

Top 5 tweetsTuiteado por
@ MikeCarlton01 Con respecto a la financiación de #ABC, buscó los documentos presupuestarios. Después de recortes masivos anteriores, obtuvo $ 4.7 millones adicionales en fondos (.00044% mucho menos que la inflación).

#Morrison desperdicia $ Ms en costosos & amp; servicios ineficaces, a modo de ejemplo, la aplicación #Covid inútil; vacuna de entrega #agedcare; consultorías implementación de vacunas.

MORRIGAN
@TonyHWindsor @barriecassidy @ 4corners @ abc730 Por su invaluable trabajo, #ABC obtuvo $ 4.7M extra en fondos (.00044% mucho menos que la inflación).

Mientras que #Morrison Govt gasta como un marinero borracho en comprar a precios caros & amp; servicios ineficaces de compañeros (p. ej., aplicación #Covid inútil; entrega de vacuna #agedcare; lanzamiento de la vacuna) #auspol

MORRIGAN
Va a pasar un mes después de mi recuperación de #Covid. Ahora iré a vacunar 😎😎😎😎Simi Elizabeth😃
RT @pradeepkishan: ¡Qué político despreciable es #ArvindKejariwal! En el momento en que la acumulación de oxígeno salió a la luz, su propaganda pasó a la escasez de vacunas. ¡Es más peligroso que el propio #COVID! @ BJP4India @TajinderBaggap.hariharan
RT @AlexBerenson: TL: DR – En el ensayo de la vacuna #Covid para adolescentes de @pfizer, 4 o 5 (la cifra exacta está oculta) de 1,100 niños que recibieron la vacuna tuvieron efectos secundarios graves, en comparación con 1 que recibió placebo.

@US_FDA no reveló detalles específicos, por lo que no tenemos idea de cuáles eran o si siguen algún patrón. https://t.co/n5igf2xXFN

Sagezza

E. Casos de uso adicionales de BM25

Puede haber muchos casos de uso en los que se requiera una función de búsqueda. Uno de los más relevantes es el análisis del PDF y el desarrollo de una función de búsqueda sobre el contenido del PDF.

Este es uno de los casos más utilizados para BM25. A medida que el mundo cambia lentamente hacia una mejor estrategia de datos y técnicas de almacenamiento eficientes, los documentos PDF antiguos se pueden recuperar de manera eficiente usando algoritmos como BM25.

Espero que haya disfrutado leyendo esto y le haya resultado útil. ¡Gracias amigos!

Links de referencia

Los medios que se muestran en este post no son propiedad de DataPeaker y se usan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.