Crea il tuo motore di ricerca basato sulla PNL con BM25

Contenuti

Motore di ricerca NLP con BM25

introduzione

Come possono scansionare tutto via Internet e restituire risultati pertinenti in un attimo? Circa 5,43,00,000 risultati (0,004 secondi). Bene, lavorare sul concetto di strisciare e Indicizzazione.

  • strisciare: I bot automatici cercano pagine nuove o aggiornate. E memorizzare le informazioni chiave come: URL, qualificazione, parole chiave, eccetera. delle pagine da utilizzare in seguito.
  • Indicizzazione: I dati acquisiti dalla traccia vengono analizzati come: di cosa parla la pagina?. Il contenuto chiave, le immagini e i file video presenti nella pagina vengono utilizzati nella procedura. Queste informazioni vengono indicizzate e archiviate per essere restituite in seguito per una query di ricerca.

Perché, ogni volta che chiediamo loro di trovare qualcosa per noi, non stanno scansionando Internet in lungo e in largo, ma semplicemente scansionando quegli URL indicizzati nel passaggio 2.

Bene, oggi lavoreremmo su come sviluppare un piccolo prototipo, molto equivalente alla funzionalità di indicizzazione di qualsiasi motore di ricerca. Utilizzeremmo un set di dati di tweet in #COVID e proveremmo a indicizzarli in base al nostro termine di ricerca.

UN. Importazione del pacchetto

importa panda come pd
da rank_bm25 import *

Cos'è BM25?

BM25 è un semplice pacchetto Python e può essere utilizzato per indicizzare i dati, tweet nel nostro caso, in base alla query di ricerca. Funziona sul concetto di TF / IDF, In altre parole.

  • TF o frequenza di terminazione: brevemente, indica il numero di occorrenze del termine di ricerca nel nostro tweet
  • Inverti la frequenza del documento o IDF: misura la pertinenza del termine di ricerca. Da quando TF ritiene che tutti i termini siano ugualmente importanti, perché, non possiamo usare solo le frequenze dei termini per calcolare il peso di una definizione nel suo testo. Dovremmo soppesare i termini frequenti mentre ci espandiamo sui termini rari che mostrano la loro rilevanza per il tweet.

Una volta eseguita la query, BM25 mostrerà la pertinenza del tuo termine di ricerca con ciascuno dei tweet. Puoi ordinarli per indicizzare quelli più rilevanti.

B. Preparare i tuoi tweet

Dal momento che questa non è una discussione sull'API di Twitter, iniziare a utilizzare un feed basato su Excel. Puoi ripulire i tuoi dati di testo in questi passaggi chiave per rendere la tua ricerca più solida.

1. Tokenizzazione:

Dividi la frase in parole. In modo che ogni parola possa essere considerata in modo univoco.

da nltk.tokenize import word_tokenize
frase = "Jack è un tipo acuto"
parole = word_tokenize(frase)
Stampa(parole)
Produzione: ['Jack', 'affilato', 'mente', 'compagno']

2. Elimina caratteri speciali:

Elimina i caratteri speciali dai tuoi tweet

def spl_chars_removal(lst):
    lst1=lista()
    per elemento in lst:
        str=””
        str = re.sub(“[-9a-zA-Z]","",elemento)
        lst1.append(str)
    ritorna lst1

3. Elimina le parole vuote:

Le parole vuote sono parole comuni (è, per, il, eccetera.) nei tweet. Queste parole non significano alcuna rilevanza poiché non aiutano a distinguere due tweet. abituato a Gensim pacchetto per cancellare le mie parole irrilevanti, puoi anche testarlo usando nltk, ma ho trovato Gensim molto più veloce di altri.

Inoltre, è possibile aggiungere facilmente nuove parole all'elenco delle parole non significative., nel caso in cui i tuoi dati siano specificamente circondati da quelle parole e si verificano molte volte.

#aggiungere parole alle stopword
da nltk.tokenize import word_tokenize
da gensim.parsing.preprocessing import STOPWORDS
#aggiunta di parole personalizzate all'elenco di parole stop predefinite
all_stopwords_gensim = STOPWORDS.union(set(['malattia']))
def stopwprds_removal_gensim_custom(lst):
    lst1=lista()
    per str in lst:
        text_tokens = word_tokenize(str)
        tokens_senza_sw = [parola per parola in text_tokens if not word in all_stopwords_gensim]
        str_t = “ “.join(tokens_senza_sw)
        lst1.append(str_t)
 
    ritorna lst1

4. Normalizzazione:

La normalizzazione del testo è la procedura per trasformare un testo in una forma canonica (standard). Come esempio, la parola “bene” e “Dio” può essere trasformato in “bene”, la sua forma canonica. Un altro esempio è la mappatura di parole quasi identiche come “parole vuote”, “parole vuote” e “parole vuote” a solo “parole vuote”.

Questa tecnica è essenziale per testi ad alto volume come i commenti sui social media., messaggi di testo e commenti sui post del blog dove prevalgono le abbreviazioni, errori di ortografia e l'uso di parole che non sono nel vocabolario (oov). Le persone tendono a scrivere commenti in forma stenografica e, perché, questa pre-elaborazione diventa molto importante.

GreggioStandardizzato
sì, ydayieri
tomo, 2moro, 2mrw, tmrwmattina
brbtorno subito

5. Derivato:

Procedura per trasformare le parole nella loro forma radice. È la procedura per ridurre l'inflessione delle parole (come esempio, i problemi, i problemi) alla sua forma radice (come esempio, i problemi). Il “radice” in questa circostanza potrebbe non essere una vera radice di parola, ma semplicemente una forma canonica della parola originale.

Lo stemming utilizza una procedura euristica che taglia le estremità delle parole nella speranza di trasformare correttamente le parole nella loro forma radice. Deve essere rivisto, poiché nell'esempio seguente puoi vedere che “Macchina” Si trasforma in “Macchine”, “e” viene tagliato nella procedura di bypass..

import nltk
da nltk.stem
import PorterStemmer
ps = PorterStemmer() frase = "Il machine learning è fantastico"
per la parola nella frase.split():
    Stampa(ps.stem(parola))

Produzione: ['Macchina', 'Apprendimento', 'fresco']

C. Tokenizzazione dei tweet ed esecuzione di BM25

Questo è il fulcro in cui eseguiamo la query di ricerca. Cerchiamo tweet in base alla parola “vaccino” basato sull'utente. Además se puede ingresar una frase y lo hará con fluidez a misura que convertimos nuestro término de búsqueda en la segunda línea a continuación.

tokenized_corpus = [doc.split("") per il documento in lst1]

bm25 = BM25Okapi (tokenized_body)

domanda = "vaccino" ## Inserisci la tua query di ricerca

tokenized_query = query.split (“”)

Puoi controllare l'associazione di ogni tweet con il tuo termine di ricerca usando .get_scores funzione.

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

Per entrare n = 5 Su .get_top_n otterremmo altri cinque tweet associati come risultato. Puoi inserire il valore di n in base alle tue esigenze.

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

df_search = df[df['Testo'].raggio (documenti)]

df_search.head ()

D. I primi cinque tweet associati

Superiore 5 tweetTwittato da
@ MikeCarlton01 Riguardo ai finanziamenti #ABC, cercato i documenti di bilancio. Dopo i precedenti tagli massicci, avuto $ 4.7 ulteriori milioni di fondi (.00044% molto meno dell'inflazione).

#rifiuti Morrison $ Più costoso & amplificatore; servizi inefficaci, come esempio, l'inutile app #Covid; #vaccino per la consegna dell'assistenza agli anziani; consulenze per l'implementazione di vaccini.

MORRIGAN
@TonyHWindsor @barriecassidy @ 4corners @ abc730 Per il loro prezioso lavoro, #ABC ha ottenuto $ 4.7M extra in fondi (.00044% molto meno dell'inflazione).

Mentre #Morrison Govt spende come un marinaio ubriaco comprando a caro prezzo & amplificatore; servizi tra pari inefficaci (P. non., inutile app #Covid; Consegna del vaccino #agedcare; lancio del vaccino) #auspol

MORRIGAN
Passerà un mese dalla mia guarigione dal #Covid. Adesso vado a vaccinare 😎😎😎😎Simi Elizabeth😃
RT @pradeepkishan: Che politico spregevole è #ArvindKejariwal! Quando l'accumulo di ossigeno è venuto alla luce, la loro propaganda si è rivolta alla carenza di vaccini. È più pericoloso del #COVID stesso! @BJP4India @TajinderBaggap.hariharan
RT @AlexBerenson: TL: DR – Alla prova del vaccino #Covid per adolescenti di @pfizer, 4 oh 5 (la cifra esatta è nascosta) a partire dal 1,100 i bambini che hanno ricevuto il vaccino hanno avuto gravi effetti collaterali, rispetto a 1 che ha ricevuto il placebo.

@US_FDA non ha rivelato dettagli specifici, quindi non abbiamo idea di cosa fossero o se seguono uno schema. https://t.co/n5igf2xXFN

Sagezza

E. Casi d'uso aggiuntivi BM25

Ci possono essere molti casi d'uso in cui è richiesta una funzione di ricerca. Uno dei più rilevanti è l'analisi del PDF e lo sviluppo di una funzione di ricerca sul contenuto del PDF.

Questo è uno dei casi più utilizzati per BM25. Mentre il mondo si sposta lentamente verso una migliore strategia dei dati e tecniche di archiviazione efficienti, i vecchi documenti PDF possono essere recuperati in modo efficiente utilizzando algoritmi come BM25.

Spero che ti sia piaciuto leggerlo e che ti sia stato utile. Grazie amici!

Link di riferimento

Il supporto mostrato in questo post non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.