Crie seu próprio mecanismo de pesquisa baseado em PNL com BM25

Conteúdo

Motor de pesquisa Nlp com BM25

Introdução

Como eles podem escanear tudo pela internet e retornar resultados relevantes em apenas Aproximadamente 5,43,00,000 resultados (0,004 segundos). Nós vamos, trabalhar no conceito de Rastejando e Indexando.

  • Rastejando: Os bots automatizados procuram por páginas novas ou atualizadas. E armazene as principais informações como: URL, qualificação, palavras chave, etc. das páginas para serem usadas mais tarde.
  • Indexando: Os dados capturados do rastreamento são analisados ​​como: sobre o que é a página. O conteúdo principal, as imagens e arquivos de vídeo na página são usados ​​no procedimento. Essas informações são indexadas e armazenadas para serem retornadas posteriormente para uma consulta de pesquisa.

Por isso, toda vez que pedimos a eles que encontrem algo para nós, eles não estão examinando toda a extensão da internet, mas apenas digitalizando esses urls indexados na etapa 2.

Nós vamos, hoje trabalharíamos em como desenvolver um pequeno protótipo, muito equivalente à funcionalidade de indexação de qualquer mecanismo de pesquisa. Estaríamos usando um conjunto de dados de tweets em #COVID e tentaríamos indexá-los com base em nosso termo de pesquisa.

UMA. Importação de pacote

importar pandas como pd
from rank_bm25 import *

O que é BM25?

BM25 é um pacote Python simples e pode ser usado para indexar os dados, tweets no nosso caso, com base na consulta de pesquisa. Funciona no conceito TF / IDF, Em outras palavras.

  • TF ou frequência de terminação: resumidamente, indica o número de ocorrências do termo de pesquisa em nosso tweet
  • Reverter a frequência do documento ou IDF: mede a relevância do seu termo de pesquisa. Sendo que TF considera que todos os termos são igualmente importantes, por isso, não podemos usar apenas frequências de termo para calcular o peso de uma definição em seu texto. Teríamos que pesar os termos frequentes enquanto expandimos os termos raros que mostram sua relevância para o tweet.

Depois de executar a consulta, BM25 mostrará a relevância do seu termo de pesquisa com cada um dos tweets. Você pode classificá-los para indexar os mais relevantes.

B. Preparando seus tweets

Uma vez que esta não é uma discussão na API do Twitter, comece a usar um feed baseado em Excel. Você pode limpar seus dados de texto nestas etapas principais para tornar sua pesquisa mais robusta.

1. Tokenización:

Divida a frase em palavras. Para que cada palavra possa ser considerada de forma única.

de nltk.tokenize import word_tokenize
frase = “Jack é um sujeito perspicaz”
words = word_tokenize(frase)
imprimir(palavras)
Saída: ['Jack', 'sharp', 'minded', 'fellow']

2. Excluir caracteres especiais:

Exclua caracteres especiais de seus tweets

def spl_chars_removal(lst):
    lst1 = lista()
    para o elemento em lst:
        str = ””
        str = re.sub(“[⁰-9a-zA-Z]”,”“,elemento)
        lst1.append(str)
    return lst1

3. Apagar palavras vazias:

Palavras vazias são palavras comuns (isto é, para, a, etc.) em tweets. Estas palavras não significam nenhuma relevância, uma vez que não ajudam a distinguir dois tweets. costumava ser Gensim pack para apagar minhas palavras irrelevantes, você também pode testá-lo usando nltk, mas descobri o Gensim muito mais rápido do que outros.

Além disso, novas palavras podem ser facilmente adicionadas à lista de palavras irrelevantes., caso seus dados estejam especificamente cercados por essas palavras e elas ocorram muitas vezes.

#adicionar palavras a palavras irrelevantes
de nltk.tokenize import word_tokenize
de gensim.parsing.preprocessing import STOPWORDS
#adicionar palavras personalizadas à lista de palavras irrelevantes predefinidas
all_stopwords_gensim = STOPWORDS.union(definir(['doença']))
def stopwprds_removal_gensim_custom(lst):
    lst1 = lista()
    para str in lst:
        text_tokens = word_tokenize(str)
        tokens_without_sw = [palavra por palavra em text_tokens se não palavra em all_stopwords_gensim]
        str_t = ““ .join(tokens_without_sw)
        lst1.append(str_t)
 
    return lst1

4. Normalização:

A normalização de texto é o procedimento de transformar um texto em uma forma canônica (padrão). Como um exemplo, palavra “Nós vamos” e “Deus” pode ser transformado em “Nós vamos”, sua forma canônica. Outro exemplo é o mapeamento de palavras quase idênticas como “palavras vazias”, “palavras vazias” e “palavras vazias” para apenas “palavras vazias”.

Essa técnica é essencial para textos em alto volume, como comentários em mídias sociais., mensagens de texto e comentários em postagens de blog onde as abreviações prevalecem, erros de grafia e o uso de palavras que não estão no vocabulário (oov). As pessoas tendem a escrever comentários em taquigrafia e, por isso, este pré-processamento se torna muito importante.

Bruto Normalizado
sim, yday o dia de ontem
tomo, 2moro, 2mrw, tmrw Manhã
brb Volto em seguida

5. Derivado:

Procedimento para transformar palavras em sua forma raiz. É o procedimento de redução da inflexão das palavras (como um exemplo, problemas, problemas) à sua forma de raiz (como um exemplo, problemas). o “raiz” nesta circunstância pode não ser uma palavra raiz real, mas simplesmente uma forma canônica da palavra original.

Stemming usa um procedimento heurístico que corta as pontas das palavras na esperança de transformá-las corretamente em sua forma raiz. Deve ser revisado, já que no exemplo a seguir você pode ver que “Máquina” Ele se transforma em “Carros”, “e” é cortado no procedimento de desvio..

importar nltk
de nltk.stem
import PorterStemmer
ps = PorterStemmer() frase = “Aprendizado de máquina é legal”
por palavra em frase. dividida():
    imprimir(ps.stem(palavra))

Produção: ['Carro', 'Aprendendo', 'legal']


C. Tokenização de tweets e execução de BM25

Esta é a peça central onde executamos a consulta de pesquisa. Procuramos tweets com base na palavra “vacina” baseado no usuário. Além disso, você pode inserir uma frase e isso o fará fluentemente à medida que convertermos nosso termo de pesquisa para a segunda linha abaixo.

tokenized_corpus = [doc.split(”“) para doc em lst1]

bm25 = BM25Okapi (tokenized_body)

consulta = "vacina" ## Digite sua consulta de pesquisa

tokenized_query = query.split (“”)


Você pode verificar a associação de cada tweet com o seu termo de pesquisa usando .get_scores Função.

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

Ao entrar n = 5 sobre .get_top_n obteríamos mais cinco tweets associados como resultado. Você pode colocar o valor de n de acordo com suas necessidades.

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

df_search = df[df['Texto'].raio (docs)]

df_search.head ()


D. Cinco principais tweets associados

Principal 5 tweets Tweetado por
@ MikeCarlton01 Sobre o financiamento #ABC, procurei os documentos de orçamento. Depois de cortes massivos anteriores, conseguiu $ 4.7 milhões adicionais em fundos (.00044% muito menos que a inflação).

#Resíduos de Morrison $ Mais caro & amplificador; serviços ineficazes, como um exemplo, o aplicativo #Covid inútil; #agedcare vacina de entrega; consultorias de implementação de vacinas.

MORRIGAN
@TonyHWindsor @barriecassidy @ 4corners @ abc730 Por seu trabalho inestimável, #ABC conseguiu $ 4.7Extra M em fundos (.00044% muito menos que a inflação).

Enquanto #Morrison Govt gasta como um marinheiro bêbado comprando a preços caros & amplificador; serviços de pares ineficazes (p. não., app #Covid inútil; #agedcare entrega de vacina; lançamento de vacina) #Auspol

MORRIGAN
Vai ser um mês após minha recuperação de #Covid. Agora vou vacinar 😎😎😎😎 Simi Elizabeth😃
RT @pradeepkishan: Que político desprezível é #ArvindKejariwal! No momento em que o acúmulo de oxigênio veio à tona, sua propaganda se voltou para a escassez de vacinas. É mais perigoso do que o próprio #COVID! @ BJP4India @TajinderBagga p.hariharan
RT @AlexBerenson: TL: DR – No ensaio de vacina #Covid para adolescentes de @pfizer, 4 o 5 (a figura exata está escondida) a partir de 1,100 crianças que tomaram a vacina tiveram efeitos colaterais graves, Em comparação com 1 quem recebeu placebo.

@US_FDA não revelou detalhes específicos, então não temos ideia do que eles eram ou se seguem algum padrão. https://t.co/n5igf2xXFN

Sabedoria

E. Casos de uso BM25 adicionais

Pode haver muitos casos de uso em que uma função de pesquisa é necessária. Um dos mais relevantes é a análise do PDF e o desenvolvimento de uma função de pesquisa sobre o conteúdo do PDF..

Este é um dos casos mais usados ​​para BM25. Conforme o mundo muda lentamente em direção a uma melhor estratégia de dados e técnicas de armazenamento eficientes, documentos PDF antigos podem ser recuperados com eficiência usando algoritmos como BM25.

Espero que você tenha gostado de ler isso e achado útil. Obrigado amigos!

Links de referência

A mídia mostrada nesta postagem não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.

Datapeaker