Tokenização no Processamento de Linguagem Natural

Publicados: 2020-12-01

Ao lidar com dados textuais, a etapa mais básica é tokenizar o texto. 'Tokens' podem ser considerados como palavras individuais, frases ou qualquer unidade mínima. Portanto, quebrar as sentenças em unidades separadas não é nada além de Tokenização.

Ao final deste tutorial, você terá o conhecimento do seguinte:

  • O que é Tokenização
  • Diferentes tipos de tokenizações
  • Diferentes maneiras de tokenizar

A tokenização é a etapa mais fundamental em um pipeline de PNL.

Mas por que isso?

Essas palavras ou tokens são posteriormente convertidos em valores numéricos para que o computador possa entendê-los e compreendê-los. Esses tokens são limpos, pré-processados ​​e depois convertidos em valores numéricos pelos métodos de “Vetorização”. Esses vetores podem então ser alimentados aos algoritmos de aprendizado de máquina e redes neurais.

A tokenização pode não ser apenas no nível da palavra, mas também no nível da frase. Ou seja, o texto pode ser tokenizado com palavras como tokens ou frases como tokens. Vamos discutir algumas maneiras de executar a tokenização.

Índice

Python Split()

A função split() do Python retorna a lista de tokens divididos pelo caractere mencionado. Por padrão, ele divide as palavras por espaços.

Tokenização de palavras

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas de PNL.”
Tokens = Mystr.split()

#Saída:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial.' , 'Nós' , 'somos' , 'aprendizagem' , 'diferente' , 'tokenização' , 'métodos' , 'e' , 'maneiras?' , 'Tokenização' , 'é' , 'essencial' , 'em' , 'PNL' , 'tarefas'. ]

Tokenização de sentença

O mesmo texto pode ser dividido em frases passando o separador como “.”.

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas de PNL.”

Tokens = Mystr.split( “.” )

#Saída:
>> [ 'Este é um tutorial de tokenização' , ' Estamos aprendendo diferentes métodos e maneiras de tokenização? A tokenização é essencial nas tarefas de PNL' , ]

Embora isso pareça simples e direto, tem muitas falhas. E se você notar, ele se divide após o último “.” também. E não considera o "?" como um indicador da próxima frase porque leva apenas um caractere, que é “.”.

Dados de texto em cenários da vida real são muito sujos e não são bem colocados em palavras e frases. Muito texto de lixo pode estar presente, o que tornará muito difícil para você tokenizar dessa maneira. Portanto, vamos avançar para formas melhores e mais otimizadas de tokenização.

Deve ler: As 10 principais técnicas de aprendizado profundo que você deve conhecer

Expressão regular

Expressão Regular (RegEx) é uma sequência de caracteres usada para corresponder a um padrão de caracteres. Usamos RegEx para encontrar certos padrões, palavras ou caracteres para substituí-los ou fazer qualquer outra operação neles. Python tem o módulo re que é usado para trabalhar com RegEx. Vamos ver como podemos tokenizar o texto usando re .

Tokenização de palavras

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”

Tokens = re.findall( “[\w']+” , Mystr)

#Saída:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'diferente' , 'tokenization' , 'methods' , 'and' , 'maneiras' , 'Tokenização' , 'é' , 'essencial' , 'em' , 'PNL' , 'tarefas' ]

Então, o que aconteceu aqui?

A função re.findall() corresponde a todas as sequências que combinam com ela e as armazena em uma lista. A expressão “[\w]+” significa que qualquer caractere – seja alfabeto ou números ou sublinhado (“_”). O símbolo “+” significa todas as ocorrências do padrão. Então, essencialmente, ele verificará todos os caracteres e os colocará na lista como um token quando atingir um espaço em branco ou qualquer outro caractere especial além de um sublinhado.

Observe que a palavra “NLP's” é uma única palavra, mas nossa expressão regex a dividiu em “NLP” e “s” por causa do apóstrofo.

Tokenização de sentença

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”

Tokens = re.compile( '[.!?] ' ).split(Mystr)

#Saída:
>> [ 'Este é um tutorial de tokenização' , 'Estamos aprendendo diferentes métodos e formas de tokenização' , 'Tokenização é essencial em tarefas de PNL.' ]

Agora, aqui combinamos vários caracteres de divisão em uma condição e chamamos a função re.split. Portanto, quando atingir qualquer um desses 3 caracteres, ele o tratará como uma frase separada. Esta é uma vantagem do RegEx sobre a função de divisão do python, onde você não pode passar vários caracteres para dividir.

Leia também: Aplicações do Processamento de Linguagem Natural

Tokenizadores NLTK

Natural Language Toolkit (NLTK) é uma biblioteca Python especificamente para lidar com tarefas de NLP. O NLTK consiste em funções e módulos integrados que são feitos para alguns processos específicos do pipeline completo de NLP. Vamos dar uma olhada em como o NLTK lida com a tokenização.

Tokenização de palavras

O NLTK possui um módulo separado, NLTK.tokenize, para lidar com tarefas de tokenização. Para tokenização de palavras, um dos métodos em que consiste é word_tokenize.

de nltk.tokenize importar word_tokenize

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”
word_tokenize(Mystr)

#Saída:
>>[ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , '.' , 'Nós' , 'somos' , 'aprendizagem' , 'diferente' , 'tokenização' , 'métodos' , ',' , 'e' , 'maneiras' , '?' , 'Tokenização' , 'é' , 'essencial' , 'em' , 'PNL' , 'tarefas' , '.' ]

Observe que word_tokenize considerou as pontuações como tokens separados. Para evitar que isso aconteça, precisamos remover todas as pontuações e caracteres especiais antes desta etapa em si.

Tokenização de sentença

de nltk.tokenize importar sent_tokenize

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”
sent_tokenize(Mystr)

#Saída:
>> [ 'Este é um tutorial de tokenização.' , 'Estamos aprendendo diferentes métodos e formas de tokenização?' , 'Tokenização é essencial em tarefas de PNL.' ]

Tokenizadores SpaCy

SpaCy é provavelmente uma das bibliotecas mais avançadas para tarefas de PNL. Consiste em suporte para quase 50 idiomas. Portanto, o primeiro passo é baixar o núcleo para o idioma inglês. Em seguida, precisamos importar o módulo em inglês que carrega os vetores tokenizer, tagger, parser, NER e word.

Tokenização de palavras

de spacy.lang.en importar inglês

nlp = Inglês()
Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”
meu_doc = nlp(Mystr)

Fichas = []
para token em my_doc:
Tokens.append(token.text)
Fichas

#Saída:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , '.' , 'Nós' , 'somos' , 'aprendizagem' , 'diferente' , 'tokenização' , 'métodos' , ',' , 'e' , 'maneiras' , '?' , 'Tokenização' , 'é' , 'essencial' , 'em' , 'PNL' , “'s” , 'tarefas' , '.' ]

Aqui, quando chamamos a função nlp com MyStr passada, ela cria a palavra tokens para ela. Em seguida, indexamos por meio deles e os armazenamos em uma lista separada.

Tokenização de sentença

de spacy.lang.en importar inglês

nlp = Inglês()
sent_tokenizer = nlp.create_pipe( 'sentencizer' )
nlp.add_pipe(sent_tokenizer)

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”

meu_doc = nlp(Mystr)

Enviados = []
para envio em doc.sents:
Enviados.append(enviado.texto)
Enviados

#Saída:
>> [ 'Este é um tutorial de tokenização.' , 'Estamos aprendendo diferentes métodos e formas de tokenização?' , “A tokenização é essencial nas tarefas da PNL.” ]

Para tokenização de sentença, chame o método creat_pipe para criar o componente sentencizer que cria tokens de sentença. Em seguida, adicionamos o pipeline ao objeto nlp. Quando passamos a string de texto para o objeto nlp, ele cria tokens de sentença para ele desta vez. Agora eles podem ser adicionados a uma lista da mesma forma que no exemplo anterior.

Tokenização Keras

Keras é uma das estruturas de aprendizado profundo mais preferidas atualmente. Keras também oferece uma classe dedicada para tarefas de processamento de texto – keras.preprocessing.text. Esta classe tem a função text_to_word_sequence que cria tokens de nível de palavra a partir do texto. Vamos dar uma olhada rápida.

de keras.preprocessing.text import text_to_word_sequence

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”
Tokens = text_to_word_sequence(Mystr)
Fichas

#Saída:
>> [ 'this' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'we' , 'are' , 'learning' , 'diferente' , 'tokenization' , 'methods' , 'and' , 'caminhos' , 'tokenização' , 'é' , 'essencial' , 'em' , “nlp's” , 'tarefas' ]

Observe que ele tratou a palavra “NLP's” como um único token. Além disso, este tokenizer keras colocou todos os tokens em minúsculas, o que é um bônus adicional.

Gensim Tokenizer

Gensim é outra biblioteca popular para lidar com tarefas baseadas em NLP e modelagem de tópicos. A classe gensim.utils oferece um método tokenize, que pode ser usado para nossas tarefas de tokenização.

Tokenização de palavras

de gensim.utils import tokenize
Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”

list(tokenize(Mystr))

#Saída:
>> [ 'This' , 'is' , 'a' , 'tokenization' , 'tutorial' , 'We' , 'are' , 'learning' , 'diferente' , 'tokenization' , 'methods' , 'and' , 'maneiras' , 'Tokenização' , 'é' , 'essencial' , 'em' , 'NLP' , 's' , 'tarefas' ]

Tokenização de sentença

Para tokenização de sentença, usamos o método split_sentences da classe gensim.summarization.textcleaner .

de gensim.summarization.textcleaner importar split_sentences

Mystr = “Este é um tutorial de tokenização. Estamos aprendendo diferentes métodos de tokenização e maneiras? A tokenização é essencial nas tarefas da PNL.”

Tokens = split_sentences( Mystr )
Fichas

#Saída:
>> [ 'Este é um tutorial de tokenização.' , 'Estamos aprendendo diferentes métodos e formas de tokenização?' , “A tokenização é essencial nas tarefas da PNL.” ]

Antes de você ir

Neste tutorial, discutimos várias maneiras de tokenizar seus dados de texto com base em aplicativos. Essa é uma etapa essencial do pipeline de NLP, mas é necessário limpar os dados antes de prosseguir com a tokenização.

Se você estiver interessado em aprender mais sobre aprendizado de máquina e IA, confira o Diploma PG do IIIT-B e upGrad em aprendizado de máquina e IA, projetado para profissionais que trabalham e oferece mais de 450 horas de treinamento rigoroso, mais de 30 estudos de caso e atribuições, Status de ex-aluno do IIIT-B, mais de 5 projetos práticos práticos e assistência de trabalho com as principais empresas.

Lidere a revolução tecnológica orientada por IA

DIPLOMA PG EM APRENDIZAGEM DE MÁQUINA E INTELIGÊNCIA ARTIFICIAL
Saber mais