Prevendo a próxima palavra em 5 etapas fáceis usando Python

Você deve ter observado que, ao digitar no seu celular, ele prevê a próxima palavra que você deseja usar. É um recurso que torna a digitação mais rápida e economiza tempo.

É mais conveniente. Esteja você enviando mensagens de texto, pesquisando na Internet ou escrevendo um e-mail, a previsão de texto pode ser muito útil. Mas você já se perguntou como seu celular sabe qual palavra sugerir a seguir?

Neste guia, mostrarei como criar previsões de palavras usando Python.

Para acompanhar facilmente, ter um conhecimento básico de PNL ajuda. Se você é novo nisso, não se preocupe; você pode obter rapidamente o básico em nosso artigo “PNL Simplificada”, onde explicamos de forma simples.

Aplicações de previsão da próxima palavra

  • A previsão da próxima palavra melhora a velocidade e a precisão da digitação em dispositivos móveis, tornando-a altamente benéfica para mensagens de texto e aplicativos de comunicação.
  • Os mecanismos de pesquisa usam texto preditivo para sugerir consultas de pesquisa, tornando mais fácil para os usuários encontrarem informações relevantes rapidamente.
  • Ajuda na correção automática de palavras com erros ortográficos e na redução de erros de digitação em vários aplicativos, incluindo processadores de texto e clientes de e-mail.
  • Desenvolvedores e programadores se beneficiam do texto preditivo ao escrever código, pois ele sugere funções, métodos e nomes de variáveis ​​relevantes.
  • As plataformas online e os serviços de streaming usam texto preditivo para recomendar conteúdo relevante aos usuários.
  • Vamos começar a aprender juntos sobre essa interessante técnica de PNL e como ela é útil, e passar por cada etapa com clareza.

    Preparação de dados

    Em primeiro lugar, precisamos importar as bibliotecas necessárias e importantes para o nosso projeto. Depois disso, definiremos um texto de exemplo, que será utilizado para treinamento. Você pode substituir este texto por quaisquer dados de texto de sua escolha.

    Você também pode usar um conjunto de dados com dados de texto, que pode ser facilmente encontrado no Kaggle ou em uma plataforma semelhante.

    # Import Necessary Libraries
    
    import nltk
    from nltk import ngrams
    from collections import defaultdict
    import random

    Dados de texto de amostra, que serão usados ​​para prever a próxima palavra.

    # Sample Text Data
    text = """
    Once upon a luminous, starry night in the quaint, enigmatic town of Serendipity, 
    a curious young explorer named Amelia embarked on an extraordinary adventure. 
    With her trusty magnifying glass in hand and an indomitable spirit, she embarked on a quest to discover the elusive Elysian treasure hidden deep within the labyrinthine forest. 
    As she ventured through the verdant woods, Amelia encountered an eccentric, talking squirrel named Percival, who spoke in riddles and guided her toward the treasure's whereabouts. 
    The forest was resplendent with bioluminescent flora, illuminating her path with a kaleidoscope of colors. 
    Amelia soon reached a precipice overlooking an awe-inspiring, cerulean waterfall, its cascading waters echoing a melodious serenade. 
    Beside the waterfall stood a colossal, moss-covered stone with cryptic inscriptions. 
    With Percival's guidance, she deciphered the ancient runes and uncovered the entrance to the treasure trove. 
    Inside, she discovered an opulent chest adorned with intricate, golden filigree. 
    Upon opening it, a symphony of shimmering jewels, radiant gemstones, and glistening artifacts greeted her with an ethereal glow. 
    The Elysian treasure was hers, a testament to her dauntless courage and insatiable curiosity. 
    Amelia's return to Serendipity was celebrated with jubilant revelry, and her remarkable journey became a legend, inspiring others to embark on their own adventures in the wondrous realm of imagination and discovery.
    """
    

    Você pode substituir este texto conforme sua necessidade.

      Alternar entre a tela inicial e o menu inicial na área de trabalho

    Tokenização

    Iremos pré-processar nosso texto e tokenizá-lo. Tokenização é o processo de quebrar o texto em palavras ou tokens individuais. Usamos a biblioteca nltk em Python para tokenizar nosso texto.

    Para garantir que nosso modelo se concentre nas palavras e ignore maiúsculas e minúsculas ou pontuação, realizamos o pré-processamento. Esta etapa envolve converter todas as palavras em minúsculas e remover qualquer pontuação.

    import nltk
    
    # Tokenize the text into words
    words = nltk.word_tokenize(text)
    
    # Preprocess the words (convert to lowercase, remove punctuation)
    words = [word.lower() for word in words if word.isalnum()]
    
    words

    Após o pré-processamento e tokenização, obteremos todas as palavras em letras minúsculas e sem pontuação.

    Palavras tokenizadas

    Construindo N-gramas

    Nesta etapa, criaremos N-gramas, que são sequências de N palavras em processamento de linguagem natural (PNL).

      Quantos tipos de teclas em um teclado de computador

    Em nosso código, criaremos bigramas, onde N é igual a 2, o que significa que cada N-grama consistirá em pares de palavras.

    Esta é uma etapa fundamental na construção de um modelo de previsão para a próxima palavra porque nos permite analisar sequências de palavras e prever a próxima palavra com base no contexto fornecido pelas N-1 palavras anteriores.

    # Define the order of the N-gram model (N=2 for bigrams)
    N = 2
    
    # Create N-grams from the tokenized words
    ngrams_list = list(ngrams(words, N))
    
    # Create a defaultdict to store N-grams and their frequency
    ngram_freq = defaultdict(int)
    for ngram in ngrams_list:
        ngram_freq[ngram] += 1

    Esses N-gramas servem como blocos de construção para treinar e implementar nosso modelo de previsão da próxima palavra.

    Definir Função

    Nesta etapa, criamos uma função chamada ‘predict_next_word’ que adivinha a próxima palavra em uma frase com base em um prefixo fornecido (uma sequência de palavras).

    Esta função é crucial no modelo de previsão da próxima palavra, pois pega o contexto fornecido pelo prefixo e o utiliza para fazer uma previsão sobre a próxima palavra mais provável.

    Vou explicar o que acontece neste processo em palavras simples:

    • A função analisa todos os pares de palavras (bigramas) em nossos dados de texto que começam com o prefixo fornecido (as palavras antes da palavra que falta).
    • Ele conta com que frequência cada palavra aparece nesses pares e os classifica por frequência, da mais para a menos comum.
    • A função então sugere a palavra que ocorre com mais frequência como a próxima palavra após o prefixo fornecido.
    # Define Function
    def predict_next_word(prefix):
        # Filter N-grams that start with the given prefix
        matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix]
    
        if not matching_ngrams:
            return "No prediction available."
    
        # Sort N-grams by frequency in descending order
        sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)
    
        # Select the N-gram with the highest frequency as the prediction
        prediction = sorted_ngrams[0][0][-1]
    
        return prediction

    É uma parte crucial do modelo de previsão da próxima palavra, pois nos permite gerar sugestões contextualmente relevantes para a próxima palavra em uma determinada sequência de texto.

      Como redefinir o Samsung Galaxy S8 sem uma conta do Google

    Teste

    Este código permite testar o modelo com sua própria entrada. Você digita algumas palavras, pressiona Enter e o modelo prevê a próxima palavra. Se você digitar algo inválido, será solicitado que você tente novamente.

    # You can use this code snippet to interactively test the model with user input
    user_input = input("Enter a prefix for next-word prediction: ").lower().split()
    if len(user_input) != N - 1:
        print("Please enter a valid prefix.")
    else:
        prefix = tuple(user_input)
        prediction = predict_next_word(prefix)
        print(f"Next word prediction: {prediction}")

    Nosso código criará esse tipo de interface. Onde você pode escrever prefixos e pressionar enter.

    Insira o prefixo

    Depois de entrar, você receberá sua próxima palavra

    Palavra Predita

    É uma forma de demonstrar como o modelo de previsão da próxima palavra pode ser usado na prática.

    Desafios:

  • A precisão da previsão da próxima palavra depende muito do tamanho e da qualidade dos dados de treinamento. Dados limitados ou ruidosos podem levar a previsões menos precisas.
  • Se uma palavra no texto de entrada não existir nos dados de treinamento, ela não poderá ser prevista com precisão.
  • A pontuação pode afetar a precisão da previsão, especialmente em idiomas como o inglês, onde os limites das palavras podem ser ambíguos.
  • A tokenização ou pré-processamento incorreto pode levar a previsões incorretas.
  • Muitas palavras têm múltiplos significados e o contexto nem sempre pode eliminá-las.
  • Como melhorar a precisão

  • Usar um conjunto de dados maior e mais diversificado melhora a compreensão do modelo de vários contextos e palavras.
  • Considere usar N-gramas de ordem superior (por exemplo, trigramas) para obter mais contexto, mas equilibre-o com a disponibilidade de dados.
  • Colete feedback do usuário e melhore continuamente o modelo com base no uso no mundo real.
  • Avalie regularmente o desempenho do modelo com métricas apropriadas e ajuste as estratégias de acordo.
  • Você pode implementar modelos baseados em redes neurais, como LSTM ou Transformer, para modelagem de contexto mais complexa.
  • Palavras Finais

    No mundo do Processamento de Linguagem Natural, prever a próxima palavra é uma habilidade valiosa. Com essas 5 etapas simples do Python, você ganhou uma ferramenta poderosa para comunicação mais rápida e tecnologia mais inteligente.

    Continue explorando e usando esse conhecimento para aprimorar suas experiências linguísticas. A jornada apenas começou!

    Você também pode explorar algumas das melhores maneiras de baixar arquivos de um URL usando Python.