Parte II – Tipos de Técnicas de Vetorização

Neste artigo, discutiremos a vetorização – uma técnica de PNL, e entenderemos seu significado com um guia completo sobre diferentes tipos de vetorização.

Discutimos os conceitos fundamentais de pré-processamento de PNL e limpeza de texto. Examinamos os fundamentos da PNL, suas diversas aplicações e técnicas como tokenização, normalização, padronização e limpeza de texto.

Antes de discutirmos a vetorização, vamos revisar o que é tokenização e como ela difere da vetorização.

O que é tokenização?

A tokenização é o processo de dividir sentenças em unidades menores chamadas tokens. O token ajuda os computadores a compreender e trabalhar com texto facilmente.

EX. ‘Este artigo é bom’

Tokens- [‘This’, ‘article’, ‘is’, ‘good’.]

O que é vetorização?

Como sabemos, os modelos e algoritmos de aprendizado de máquina compreendem dados numéricos. A vetorização é um processo de conversão de dados textuais ou categóricos em vetores numéricos. Ao converter dados em dados numéricos, você pode treinar seu modelo com mais precisão.

Por que precisamos de vetorização?

❇️ Tokenização e vetorização têm importâncias diferentes no processamento de linguagem natural (NPL). A tokenização divide as frases em pequenos tokens. A vetorização o converte em um formato numérico para que o modelo de computador/ML possa entendê-lo.

❇️ A vetorização não é útil apenas para convertê-la para a forma numérica, mas também para capturar o significado semântico.

❇️ A vetorização pode reduzir a dimensionalidade dos dados e torná-los mais eficientes. Isso pode ser muito útil ao trabalhar em um grande conjunto de dados.

❇️ Muitos algoritmos de aprendizado de máquina requerem entrada numérica, como redes neurais, para que a vetorização possa nos ajudar.

Existem diferentes tipos de técnicas de vetorização, que entenderemos neste artigo.

Saco de Palavras

Se você tem um monte de documentos ou frases e deseja analisá-los, um Saco de Palavras simplifica esse processo tratando o documento como um saco cheio de palavras.

A abordagem do saco de palavras pode ser útil na classificação de textos, análise de sentimentos e recuperação de documentos.

Suponha que você esteja trabalhando em muito texto. Um pacote de palavras o ajudará a representar dados de texto, criando um vocabulário de palavras exclusivas em nossos dados de texto. Depois de criar o vocabulário, ele codificará cada palavra como um vetor baseado na frequência (quantas vezes cada palavra aparece naquele texto) dessas palavras.

Esses vetores consistem em números não negativos (0,1,2…..) que representam o número de frequências naquele documento.

O saco de palavras envolve três etapas:

Etapa 1: Tokenização

Isso quebrará os documentos em tokens.

Ex – (Frase: “Adoro Pizza e adoro Hambúrgueres”)

Etapa 2: separação única de palavras/criação de vocabulário

Crie uma lista de todas as palavras exclusivas que aparecem em suas frases.

[“I”, “love”, “Pizza”, “and”, “Burgers”]

Etapa 3: contagem de ocorrências de palavras/criação de vetores

Esta etapa contará quantas vezes cada palavra do vocabulário é repetida e armazenará em uma matriz esparsa. Na matriz esparsa, cada linha de um vetor de sentença cujo comprimento (as colunas da matriz) é igual ao tamanho do vocabulário.

Importar ContagemVectorizer

Vamos importar o CountVectorizer para treinar nosso modelo Bag of Words

from sklearn.feature_extraction.text import CountVectorizer

Criar vetorizador

Nesta etapa, vamos criar nosso modelo usando CountVectorizer e treiná-lo usando nosso documento de texto de exemplo.

# Sample text documents
documents = [
    "This is the first document.",
    "This document is the second document.",
    "And this is the third one.",
    "Is this the first document?",
]

# Create a CountVectorizer 
cv = CountVectorizer()
# Fit and Transform
X = cv.fit_transform(documents)

Converter para um array denso

Nesta etapa, converteremos nossas representações em um array denso. Além disso, obteremos nomes ou palavras de recursos.

# Get the feature names/words
feature_names = vectorizer.get_feature_names_out()

# Convert to dense array
X_dense = X.toarray()

Vamos imprimir a matriz de termos do documento e apresentar palavras

# Print the DTM and feature names
print("Document-Term Matrix (DTM):")
print(X_dense)
print("\nFeature Names:")
print(feature_names)

Documento – Matriz de Prazos (DTM):

Matriz

Nomes de recursos:

Palavras características

Como você pode ver, os vetores consistem em números não negativos (0,1,2…) que representam a frequência das palavras no documento.

Temos quatro exemplos de documentos de texto e identificamos nove palavras exclusivas desses documentos. Armazenamos essas palavras exclusivas em nosso vocabulário, atribuindo-lhes ‘Nomes de recursos’.

Em seguida, nosso modelo Bag of Words verifica se a primeira palavra única está presente em nosso primeiro documento. Se estiver presente, atribui o valor 1, caso contrário, atribui 0.

Se a palavra aparecer várias vezes (por exemplo, 2 vezes), ela atribui um valor correspondente.

Por exemplo, no segundo documento, a palavra ‘documento’ se repete duas vezes, então seu valor na matriz será 2.

Se quisermos uma única palavra como característica da chave do vocabulário – representação Unigram.

n – gramas = Unigramas, bigramas…….etc.

Existem muitas bibliotecas como o scikit-learn para implementar um conjunto de palavras: Keras, Gensim e outras. Isso é simples e pode ser útil em diversos casos.

Porém, o Bag of Words é mais rápido, mas tem algumas limitações.

  • Atribui o mesmo peso a cada palavra, independentemente da sua importância. Em muitos casos, algumas palavras são mais importantes que outras.
  • O BoW simplesmente conta a frequência de uma palavra ou quantas vezes uma palavra aparece em um documento. Isto pode levar a uma tendência para palavras comuns como “o”, “e”, “é” etc., que podem não ter muito significado.
  • Documentos mais longos podem ter mais contagens de palavras e criar vetores maiores. Isso pode tornar a comparação um desafio. Pode criar uma matriz esparsa, o que não pode ser bom para a execução de projetos complexos de PNL.
  •   9 melhores editores de vídeo de código aberto que valem a pena experimentar

    Para resolver este problema podemos escolher abordagens melhores, uma delas é o TF-IDF. Vamos entender em detalhes.

    TF-IDF

    TF-IDF, ou Term Frequency – Inverse Document Frequency, é uma representação numérica para determinar a importância das palavras no documento.

    Por que precisamos do TF-IDF em vez do Bag of Words?

    Um saco de palavras trata todas as palavras igualmente e se preocupa apenas com a frequência de palavras únicas nas frases. O TF-IDF dá importância às palavras em um documento considerando tanto a frequência quanto a exclusividade.

    Palavras que são repetidas com muita frequência não superam as palavras menos frequentes e mais importantes.

    TF: A frequência do termo mede a importância de uma palavra em uma única frase.

    IDF: A frequência inversa do documento mede a importância de uma palavra em toda a coleção de documentos.

    TF = Frequência de palavras em um documento / Número total de palavras nesse documento

    DF = Documento contendo palavra c/Número total de documentos

    IDF = log(Número total de documentos / Documentos contendo a palavra w)

    IDF é recíproco de DF. A razão por trás disso é que quanto mais comum a palavra for em todos os documentos, menor será sua importância no documento atual.

    Pontuação final do TF-IDF: TF-IDF = TF * IDF

    É uma forma de descobrir quais palavras são comuns em um único documento e únicas em todos os documentos. Estas palavras podem ser úteis para encontrar o tema principal do documento.

    Por exemplo,

    Doc1 = “Eu adoro aprendizado de máquina”

    Doc2 = “Eu amo etechpt.com”

    Temos que encontrar a matriz TF-IDF para nossos documentos.

    Primeiro, criaremos um vocabulário de palavras únicas.

    Vocabulário = [“I,” “love,” “machine,” “learning,” “Geekflare”]

    Então, temos 5 cinco palavras. Vamos encontrar TF e IDF para essas palavras.

    TF = Frequência de palavras em um documento / Número total de palavras nesse documento

    TF:

    • Para “I” = TF para Doc1: 1/4 = 0,25 e para Doc2: 1/3 ≈ 0,33
    • Para “amor”: TF para Doc1: 1/4 = 0,25 e para Doc2: 1/3 ≈ 0,33
    • Para “Máquina”: TF para Doc1: 1/4 = 0,25 e para Doc2: 0/3 ≈ 0
    • Para “Aprendizado”: ​​TF para Doc1: 1/4 = 0,25 e para Doc2: 0/3 ≈ 0
    • Para “etechpt.com”: TF para Doc1: 0/4 = 0 e para Doc2: 1/3 ≈ 0,33

    Agora, vamos calcular o IDF.

    IDF = log(Número total de documentos / Documentos contendo a palavra w)

    IDF:

    • Para “I”: IDF é log(2/2) = 0
    • Para “amor”: IDF é log(2/2) = 0
    • Para “Máquina”: IDF é log(2/1) = log(2) ≈ 0,69
    • Para “Aprendizagem”: IDF é log(2/1) = log(2) ≈ 0,69
    • Para “etechpt.com”: IDF é log(2/1) = log(2) ≈ 0,69

    Agora, vamos calcular a pontuação final do TF-IDF:

    • Para “I”: TF-IDF para Doc1: 0,25 * 0 = 0 e TF-IDF para Doc2: 0,33 * 0 = 0
    • Para “amor”: TF-IDF para Doc1: 0,25 * 0 = 0 e TF-IDF para Doc2: 0,33 * 0 = 0
    • Para “Máquina”: TF-IDF para Doc1: 0,25 * 0,69 ≈ 0,17 e TF-IDF para Doc2: 0 * 0,69 = 0
    • Para “Aprendizagem”: TF-IDF para Doc1: 0,25 * 0,69 ≈ 0,17 e TF-IDF para Doc2: 0 * 0,69 = 0
    • Para “etechpt.com”: TF-IDF para Doc1: 0 * 0,69 = 0 e TF-IDF para Doc2: 0,33 * 0,69 ≈ 0,23

    A matriz TF-IDF fica assim:

            I     love   machine   learning   etechpt.com
    Doc1    0.0   0.0    0.17      0.17       0.0
    Doc2    0.0   0.0    0.0       0.0        0.23
    

    Os valores em uma matriz TF-IDF informam a importância de cada termo em cada documento. Valores altos indicam que um termo é importante em um documento específico, enquanto valores baixos sugerem que o termo é menos importante ou comum naquele contexto.

    TF-IDF é usado principalmente na classificação de texto, construção de recuperação de informações de chatbot e resumo de texto.

    Importar TfidfVectorizer

    Vamos importar o TfidfVectorizer do sklearn

    from sklearn.feature_extraction.text import TfidfVectorizer

    Criar vetorizador

    Como você pode ver, criaremos nosso modelo Tf Idf usando TfidfVectorizer.

    # Sample text documents
    text = [
        "This is the first document.",
        "This document is the second document.",
        "And this is the third one.",
        "Is this the first document?",
    ]
    
    # Create a TfidfVectorizer 
    cv = TfidfVectorizer()

    Criar Matriz TF-IDF

    Vamos treinar nosso modelo fornecendo texto. Depois disso, converteremos a matriz representativa em array denso.

    # Fit and transform to create the TF-IDF matrix
    X = cv.fit_transform(text)
    # Get the feature names/words
    feature_names = vectorizer.get_feature_names_out()
    
    # Convert the TF-IDF matrix to a dense array for easier manipulation (optional)
    X_dense = X.toarray()

    Imprima a matriz TF-IDF e palavras características

    # Print the TF-IDF matrix and feature words
    print("TF-IDF Matrix:")
    print(X_dense)
    print("\nFeature Names:")
    print(feature_names)
    

    Matriz TF-IDF:

    Palavras características

    Como você pode ver, esses inteiros de vírgula decimal indicam a importância das palavras em documentos específicos.

    Além disso, você pode combinar palavras em grupos de 2,3,4 e assim por diante usando n-gramas.

    Existem outros parâmetros que podemos incluir: min_df, max_feature, subliner_tf, etc.

    Até agora, exploramos técnicas básicas baseadas em frequência.

    Porém, o TF-IDF não pode fornecer significado semântico e compreensão contextual do texto.

    Vamos entender técnicas mais avançadas que mudaram o mundo da incorporação de palavras e quais são melhores para o significado semântico e a compreensão contextual.

    Word2Vec

    Word2vec é um popular incorporação de palavras (tipo de vetor de palavras e útil para capturar semelhanças semânticas e sintáticas) técnica em PNL. Foi desenvolvido por Tomas Mikolov e sua equipe do Google em 2013. Word2vec representa palavras como vetores contínuos em um espaço multidimensional.

    Word2vec visa representar palavras de uma forma que capte seu significado semântico. Os vetores de palavras gerados pelo word2vec são posicionados em um espaço vetorial contínuo.

    Ex – os vetores ‘Gato’ e ‘Cachorro’ estariam mais próximos do que os vetores de ‘gato’ e ‘menina’.

    Fonte: usna.edu

    Duas arquiteturas de modelo podem ser usadas pelo word2vec para criar incorporação de palavras.

    CBOW: Saco contínuo de palavras ou CBOW tenta prever uma palavra calculando a média do significado das palavras próximas. Ele pega um número fixo ou janela de palavras ao redor da palavra alvo, depois o converte em forma numérica (incorporação), calcula a média de tudo e usa essa média para prever a palavra alvo com a rede neural.

      Como faço para ocultar pedidos da Amazon de outros membros da família

    Ex- Alvo previsto: ‘Fox’

    Palavras da frase: ‘O’, ‘rápido’, ‘marrom’, ‘pula’, ‘sobre’, ‘o’

    Word2Vec

    • CBOW usa janela de tamanho fixo (número) de palavras como 2 (2 para a esquerda e 2 para a direita)
    • Converter para incorporação de palavras.
    • CBOW calcula a média da incorporação de palavras.
    • O CBOW calcula a média da incorporação de palavras nas palavras do contexto.
    • O vetor médio tenta prever uma palavra alvo usando uma rede neural.

    Agora, vamos entender como o skip-gram é diferente do CBOW.

    Skip-gram: É um modelo de incorporação de palavras, mas funciona de maneira diferente. Em vez de prever a palavra-alvo, o skip-gram prevê as palavras do contexto dadas as palavras-alvo.

    Skip-grams é melhor para capturar as relações semânticas entre palavras.

    Ex- ‘Rei – Homens + Mulheres = Rainha’

    Se quiser trabalhar com Word2Vec, você tem duas opções: treinar seu próprio modelo ou usar um modelo pré-treinado. Estaremos passando por um modelo pré-treinado.

    Importar gensim

    Você pode instalar o gensim usando pip install:

    pip install gensim

    Tokenize a frase usando word_tokenize:

    Primeiro, converteremos as frases em frases mais baixas. Depois disso, iremos tokenizar nossas frases usando word_tokenize.

    # Import necessary libraries
    from gensim.models import Word2Vec
    from nltk.tokenize import word_tokenize
    
    # Sample sentences
    sentences = [
        "I love thor",
        "Hulk is an important member of Avengers",
        "Ironman helps Spiderman",
        "Spiderman is one of the popular members of Avengers",
    ]
    
    # Tokenize the sentences
    tokenized_sentences = [word_tokenize(sentence.lower()) for sentence in sentences]
    

    Vamos treinar nosso modelo:

    Treinaremos nosso modelo fornecendo frases tokenizadas. Estamos usando 5 janelas para este modelo de treinamento, você pode adaptar conforme sua necessidade.

    # Train a Word2Vec model
    model = Word2Vec(sentences=tokenized_sentences, vector_size=100, window=5, min_count=1, sg=0)
    
    # Find similar words
    similar_words = model.wv.most_similar("avengers")
    # Print similar words
    print("Similar words to 'avengers':")
    
    for word, score in similar_words:
        print(f"{word}: {score}")

    Palavras semelhantes a ‘vingadores’:

    Semelhança Word2Vec

    Estas são algumas das palavras semelhantes a “vingadores” baseadas no modelo Word2Vec, juntamente com suas pontuações de similaridade.

    O modelo calcula uma pontuação de similaridade (principalmente similaridade de cosseno) entre os vetores de palavras de “vingadores” e outras palavras em seu vocabulário. A pontuação de similaridade indica o quão próximas duas palavras estão relacionadas no espaço vetorial.

    Ex-

    Aqui, a palavra ‘ajuda’ com semelhança de cosseno -0,005911458611011982 com a palavra ‘vingadores’. O valor negativo sugere que eles podem ser diferentes entre si.

    Os valores de similaridade de cosseno variam de -1 a 1, onde:

    • 1 indica que os dois vetores são idênticos e possuem similaridade positiva.
    • Valores próximos de 1 indicam alta similaridade positiva.
    • Valores próximos de 0 indicam que os vetores não estão fortemente relacionados.
    • Valores próximos de -1 indicam alta dissimilaridade.
    • -1 indica que os dois vetores são totalmente opostos e possuem uma semelhança negativa perfeita.

    Visite isto link se você deseja uma melhor compreensão dos modelos word2vec e uma representação visual de como eles funcionam. É uma ferramenta muito legal para ver o CBOW e o skip-gram em ação.

    Semelhante ao Word2Vec, temos o GloVe. GloVe pode produzir embeddings que requerem menos memória em comparação com Word2Vec. Vamos entender mais sobre o GloVe.

    Luva

    Vetores globais para representação de palavras (GloVe) é uma técnica como word2vec. É usado para representar palavras como vetores no espaço contínuo. O conceito por trás do GloVe é o mesmo do Word2Vec: ele produz embeddings contextuais de palavras levando em consideração o desempenho superior do Word2Vec.

    Por que precisamos do GloVe?

    Word2vec é um método baseado em janela e usa palavras próximas para entendê-las. Isso significa que o significado semântico da palavra-alvo só é afetado pelas palavras que a cercam nas frases, o que é um uso ineficiente das estatísticas.

    Enquanto o GloVe captura estatísticas globais e locais para incluir a incorporação de palavras.

    Quando usar GloVe?

    Use o GloVe quando desejar a incorporação de palavras que capture relacionamentos semânticos mais amplos e associação global de palavras.

    GloVe é melhor do que outros modelos em tarefas de reconhecimento de entidades nomeadas, analogia de palavras e similaridade de palavras.

    Primeiro, precisamos instalar o Gensim:

    pip install gensim

    Etapa 1: instalaremos bibliotecas importantes

    # Import the required libraries
    
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.manifold import TSNE
    import gensim.downloader as api  

    Etapa 2: importar modelo de luva

    import gensim.downloader as api
    glove_model = api.load('glove-wiki-gigaword-300')

    Etapa 3: recuperar a representação vetorial da palavra ‘fofo’

    glove_model["cute"]

    Vetor para a palavra ‘fofo’

    Esses valores capturam o significado da palavra e as relações com outras palavras. Valores positivos indicam associações positivas com determinados conceitos, enquanto valores negativos indicam associações negativas com outros conceitos.

    Em um modelo GloVe, cada dimensão no vetor de palavras representa um determinado aspecto do significado ou contexto da palavra.

    Os valores negativos e positivos nessas dimensões contribuem para o quão “fofo” está semanticamente relacionado a outras palavras no vocabulário do modelo.

    Os valores podem ser diferentes para modelos diferentes. Vamos encontrar algumas palavras semelhantes à palavra ‘menino’

    As 10 principais palavras semelhantes que a modelo considera mais semelhantes à palavra ‘menino’

    # find similar word
    glove_model.most_similar("boy")

    As 10 principais palavras semelhantes a ‘menino’

    Como você pode ver, a palavra mais semelhante a ‘menino’ é ‘menina’.

    Agora, tentaremos descobrir com que precisão o modelo obterá o significado semântico das palavras fornecidas.

    glove_model.most_similar(positive=['boy', 'queen'], negative=['girl'], topn=1)

    A palavra mais relevante para ‘rainha’

    Nosso modelo é capaz de encontrar relacionamentos perfeitos entre palavras.

    Definir lista de vocabulário:

    Agora, vamos tentar entender o significado semântico ou a relação entre as palavras usando um enredo. Defina a lista de palavras que deseja visualizar.

    # Define the list of words you want to visualize
    vocab = ["boy", "girl", "man", "woman", "king", "queen", "banana", "apple", "mango", "cow", "coconut", "orange", "cat", "dog"]
    

    Crie uma matriz de incorporação:

    Vamos escrever o código para criar a matriz de incorporação.

    # Your code for creating the embedding matrix
    EMBEDDING_DIM = glove_model.vectors.shape[1]
    word_index = {word: index for index, word in enumerate(vocab)}
    num_words = len(vocab)
    embedding_matrix = np.zeros((num_words, EMBEDDING_DIM))
    
    for word, i in word_index.items():
        embedding_vector = glove_model[word]
        if embedding_vector is not None:
            embedding_matrix[i] = embedding_vector

    Defina uma função para visualização t-SNE:

      Como encontrar a data de um dia específico do mês no Excel

    A partir deste código, definiremos a função para nosso gráfico de visualização.

    def tsne_plot(embedding_matrix, words):
        tsne_model = TSNE(perplexity=3, n_components=2, init="pca", random_state=42)
        coordinates = tsne_model.fit_transform(embedding_matrix)
    
        x, y = coordinates[:, 0], coordinates[:, 1]
    
        plt.figure(figsize=(14, 8))
        for i, word in enumerate(words):
            plt.scatter(x[i], y[i])
            plt.annotate(word,
                         xy=(x[i], y[i]),
                         xytext=(2, 2),
                         textcoords="offset points",
                         ha="right",
                         va="bottom")
        plt.show()
    

    Vamos ver como fica nosso Plot:

    # Call the tsne_plot function with your embedding matrix and list of words
    tsne_plot(embedding_matrix, vocab)
    

    Gráfico t-SNE

    Então, como podemos ver, existem palavras como ‘banana’, ‘manga’, ‘laranja’, ‘coco’ e ‘maçã’ no lado esquerdo do nosso gráfico. Considerando que ‘vaca’, ‘cachorro’ e ‘gato’ são semelhantes entre si porque são animais.

    Assim, nosso modelo também pode encontrar significado semântico e relações entre palavras!

    Apenas alterando o vocabulário ou criando seu modelo do zero, você pode experimentar palavras diferentes.

    Você pode usar esta matriz de incorporação como quiser. Ele pode ser aplicado apenas a tarefas de similaridade de palavras ou inserido na camada de incorporação de uma rede neural.

    GloVe treina em uma matriz de coocorrência para derivar significado semântico. Baseia-se na ideia de que as coocorrências palavra-palavra são uma peça essencial de conhecimento e que seu uso é uma forma eficaz de usar estatísticas para produzir incorporações de palavras. É assim que GloVe consegue adicionar “estatísticas globais” ao produto final.

    E isso é GloVe; Outro método popular de vetorização é o FastText. Vamos discutir mais sobre isso.

    Texto Rápido

    FastText é uma biblioteca de código aberto introduzida pela equipe de pesquisa de IA do Facebook para classificação de texto e análise de sentimentos. FastText fornece ferramentas para treinar a incorporação de palavras, que são palavras densas representadas por vetores. Isto é útil para capturar o significado semântico do documento. FastText suporta classificação multi-rótulo e multiclasse.

    Por que FastText?

    FastText é melhor que outros modelos devido à sua capacidade de generalizar para palavras desconhecidas, que faltavam em outros métodos. FastText fornece vetores de palavras pré-treinados para diferentes idiomas, o que pode ser útil em diversas tarefas onde precisamos de conhecimento prévio sobre as palavras e seu significado.

    FastText versus Word2Vec

    Como funciona?

    Conforme discutimos, outros modelos, como Word2Vec e GloVe, usam palavras para incorporação de palavras. Porém, o alicerce do FastText são letras em vez de palavras. O que significa que eles usam letras para incorporação de palavras.

    Usar caracteres em vez de palavras tem outra vantagem. Menos dados são necessários para treinamento. À medida que uma palavra se torna seu contexto, mais informações podem ser extraídas do texto.

    A incorporação de palavras obtida via FastText é uma combinação de incorporações de nível inferior.

    Agora, vamos ver como o FastText utiliza informações de subpalavras.

    Digamos que temos a palavra ‘leitura’. Para esta palavra, o caractere n-gramas de comprimento 3-6 seria gerado da seguinte forma:

    • O início e o fim são indicados por colchetes angulares.
    • O hash é usado porque pode haver um grande número de n gramas; em vez de aprender uma incorporação para cada n-grama distinto, aprendemos o total de incorporações B, onde B representa o tamanho do balde. O tamanho do balde de 2 milhões foi usado no artigo original.
    • Cada caractere n-grama, como “eadi”, é mapeado para um número inteiro entre 1 e B usando esta função hash, e esse índice possui a incorporação correspondente.
    • Fazendo a média dessas incorporações constituintes de n-gramas, a incorporação completa da palavra é então obtida.
    • Mesmo que essa abordagem de hashing resulte em colisões, ela ajuda em grande medida a lidar com o tamanho do vocabulário.
    • A rede usada no FastText é semelhante ao Word2Vec. Assim como aí, podemos treinar o FastText em dois modos – CBOW e skip-gram. Assim, não precisamos repetir essa parte aqui novamente.

    Você pode treinar seu próprio modelo ou usar um modelo pré-treinado. Usaremos um modelo pré-treinado.

    Primeiro, você precisa instalar o FastText.

    pip install fasttext

    Usaremos um conjunto de dados que consiste em textos conversacionais sobre algumas drogas e teremos que classificar esses textos em 3 tipos. Como acontece com o tipo de drogas às quais estão associadas.

    Conjunto de dados

    Agora, para treinar um modelo FastText em qualquer conjunto de dados, precisamos preparar os dados de entrada em um determinado formato, que é:

    __label__

    Vamos fazer isso também para nosso conjunto de dados.

    all_texts = train['text'].tolist()
    all_labels = train['drug type'].tolist()
    prep_datapoints=[]
    
    for i in range(len(all_texts)):
        sample="__label__"+ str(all_labels[i]) + ' '+ all_texts[i]
        prep_datapoints.append(sample)

    prep_datapoints

    Omitimos muito pré-processamento nesta etapa. Caso contrário, nosso artigo será muito grande. Em problemas do mundo real, é melhor fazer o pré-processamento para tornar os dados adequados para modelagem.

    Agora, grave os pontos de dados preparados em um arquivo .txt.

    with open('train_fasttext.txt','w') as f:
        for datapoint in prep_datapoints:
            f.write(datapoint)
            f.write('n')
        f.close()
    

    Vamos treinar nosso modelo.

    model = fasttext.train_supervised('train_fasttext.txt')

    Obteremos previsões de nosso modelo.

    O modelo prevê o rótulo e atribui uma pontuação de confiança a ele.

    Como acontece com qualquer outro modelo, o desempenho deste depende de uma variedade de variáveis, mas se você quiser ter uma ideia rápida de qual é a precisão esperada, FastText pode ser uma ótima opção.

    Conclusão

    Concluindo, métodos de vetorização de texto como Bag of Words (BoW), TF-IDF, Word2Vec, GloVe e FastText fornecem uma variedade de recursos para tarefas de PNL.

    Embora o Word2Vec capture a semântica das palavras e seja adaptável para uma variedade de tarefas de PNL, o BoW e o TF-IDF são simples e adequados para classificação e recomendação de texto.

    Para aplicações como análise de sentimentos, o GloVe oferece embeddings pré-treinados e o FastText se sai bem na análise em nível de subpalavra, tornando-o útil para linguagens estruturalmente ricas e reconhecimento de entidades.

    A escolha da técnica depende da tarefa, dos dados e dos recursos. Discutiremos as complexidades da PNL mais profundamente à medida que esta série avança. Feliz aprendizado!

    A seguir, confira os melhores cursos de PNL para aprender Processamento de Linguagem Natural.