Algoritmo BlazingText - SageMaker IA da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Algoritmo BlazingText

O algoritmo BlazingText do Amazon SageMaker AI fornece implementações altamente otimizadas dos algoritmos Word2vec e de classificação de texto. O algoritmo Word2vec é útil para várias tarefas posteriores de processamento de linguagem natural (NLP), como análise de sentimento, reconhecimento de entidades nomeadas, tradução automática, etc. A classificação de texto é uma tarefa importante para aplicativos que realizam pesquisas na web, recuperação de informações, classificação e classificação de documentos.

O algoritmo Word2vec mapeia palavras para vetores distribuídos de alta qualidade. A representação vetorial resultante de uma palavra é chamada de incorporação da palavra. Palavras semanticamente semelhantes correspondem a vetores próximos uns dos outros. Dessa forma, incorporações de palavras capturam as relações semânticas entre as palavras.

Muitos aplicativos de processamento de linguagem natural (NLP) aprendem incorporações de palavras por meio de treinamentos em grandes coleções de documentos. Essas representações vetoriais pré-treinadas fornecem informações sobre semântica e distribuições de palavras que normalmente melhoram a generalização de outros modelos que são posteriormente treinados em uma quantidade mais limitada de dados. A maioria das implementações do algoritmo Word2vec é otimizada para arquiteturas de CPU de vários núcleos. Isso torna difícil dimensionar para grandes conjuntos de dados.

Com o algoritmo BlazingText, você pode dimensionar facilmente para grandes conjuntos de dados. Semelhante ao Word2vec, ele fornece as arquiteturas de treinamento Skip-gram e CBOW (Continuous Bag-of-Words). A implementação do BlazingText do algoritmo supervisionado de classificação de texto de várias classes e vários rótulos estende o classificador de texto fastText para usar aceleração de GPU com kernels CUDA personalizados. Você pode treinar um modelo em mais de um bilhão de palavras em alguns minutos usando uma CPU de vários núcleos ou uma GPU. Além disso, é possível obter desempenho equivalente aos algoritmos de classificação de texto de deep learning de última geração.

O algoritmo BlazingText não é paralelizável. Para obter mais informações sobre parâmetros relacionados ao treinamento, consulte Caminhos de registro do Docker para algoritmos integrados do SageMaker.

Os algoritmos BlazingText do SageMaker AI fornecem os seguintes recursos:

  • Treinamento acelerado do classificador de texto fastText em CPUs de vários núcleos ou em uma GPU e Word2Vec em GPUs usando kernels CUDA altamente otimizados. Para obter mais informações, consulte BlazingText : dimensionamento e aceleração do Word2Vec usando várias GPUs.

  • Vetores de palavras enriquecidos com informações de subpalavras, aprendendo representações vetoriais para n-gramas de caracteres. Essa abordagem permite que o BlazingText gere vetores significativos para palavras fora do vocabulário (OOV), representando seus vetores como a soma dos vetores de n-gramas de caracteres (subpalavras).

  • Um batch_skipgram mode para o algoritmo Word2Vec que permite treinamentos mais rápidos e computação distribuída entre vários nós de CPU. Esse batch_skipgram mode faz minilotes usando a estratégia de compartilhamento de amostras negativas para converter operações BLAS de nível 1 em operações BLAS de nível 3. Isso aproveita eficientemente as instruções de multiplicação-adição de arquiteturas modernas. Para obter mais informações, consulte este artigo sobre paralelização do Word2Vec em memória compartilhada e distribuída.

Para resumir, os seguintes modos têm suporte pelo BlazingText em instâncias de tipos diferentes:

Modos

Word2Vec

(Aprendizagem não supervisionada)

Classificação de texto

(Aprendizagem supervisionada)

Instância de CPU única

cbow

Skip-gram

Batch Skip-gram

supervised

Instância de GPU única (com 1 ou mais GPUs)

cbow

Skip-gram

supervised com uma GPU

Várias instâncias de CPU

Batch Skip-gram Nenhum

Para obter mais informações sobre a matemática subjacente do BlazingText, consulte este artigo sobre dimensionamento e aceleração do Word2Vec do BlazingText usando várias GPUs.

Interface de entrada/saída para o algoritmo BlazingText

O algoritmo BlazingText espera um único arquivo de texto pré-processado com tokens separados por espaço. Cada linha no arquivo deve conter uma única frase. Se você precisar treinar em vários arquivos de texto, concatene-os em um único arquivo e faça upload desse arquivo no respectivo canal.

Formato de dados de treinamento e validação

Formato de dados de treinamento e validação para o algoritmo Word2Vec

Para o treinamento de Word2Vec, faça upload do arquivo no canal train. Nenhum outro canal é aceito. O arquivo deve conter uma frase de treinamento por linha.

Formato de dados de treinamento e validação para o algoritmo de classificação de texto

Para o modo supervisionado, você pode treinar com o modo de arquivo ou com o formato de texto manifesto aumentado.

Treinar com o modo de arquivo

Para o modo supervised, o arquivo de treinamento/validação deve conter uma frase de treinamento por linha, juntamente com os rótulos. Rótulos são palavras prefixadas pela string __label__. Aqui está um exemplo de um arquivo de treinamento/validação:

__label__4 linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp . __label__2 bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
nota

A ordem dos rótulos dentro da frase não importa.

Faça upload do arquivo de treinamento no canal de "treinamento" e, opcionalmente, faça upload do arquivo de validação no canal de "validação".

Treinar com o formato de texto manifesto aumentado

O modo supervisionado para instâncias de CPU também oferece suporte para o formato de manifesto aumentado, que permite fazer treinamentos no modo pipe sem a necessidade de criar arquivos RecordIO. Ao usar o formato, é necessário gerar um arquivo manifesto do S3 contendo a lista de frases e seus rótulos correspondentes. O formato de arquivo de manifesto deve estar no formato linhas JSON, em que cada linha representa uma amostra. As frases são especificadas usando a tag source, e o rótulo pode ser especificado usando a tag label. Ambas as tags source e label devem ser provisionadas com o valor do parâmetro AttributeNames conforme especificado na solicitação.

{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1} {"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}

O treinamento com vários rótulos também é compatível com a especificação de uma matriz de rótulos JSON.

{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]} {"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}

Para obter mais informações sobre arquivos manifestos aumentados, consulte Arquivos de Manifestos Aumentados em Trabalhos de Treinamento.

Artefatos de modelo e inferência

Artefatos de modelo para o algoritmo Word2Vec

Para o treinamento Word2Vec, os artefatos de modelo consistem em vectors.txt, que contém p mapeamento de palavras para vetores, e em vectors.bin, um binário usado pelo BlazingText para hospedagem, inferência ou ambos. vectors.txt armazena os vetores em um formato compatível com outras ferramentas, como o Gensim e o Spacy. Por exemplo, um usuário do Gensim pode executar os seguintes comandos para carregar o arquivo vectors.txt:

from gensim.models import KeyedVectors word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False) word_vectors.most_similar(positive=['woman', 'king'], negative=['man']) word_vectors.doesnt_match("breakfast cereal dinner lunch".split())

Se o parâmetro de avaliação estiver definido como True, um arquivo adicional, eval.json, será criado. Esse arquivo contém os resultados da avaliação de similaridade (utilizando coeficientes de correlação de Spearman) no conjunto de dados WS-353. É relatado o número de palavras do conjunto de dados WS-353 que não estão no corpo de treinamento.

Para solicitações de inferência, o modelo aceita um arquivo JSON contendo uma lista de strings e retorna uma lista de vetores. Se a palavra não for encontrada no vocabulário, a inferência retornará um vetor de zeros. Se subpalavras forem definidas como True durante o treinamento, o modelo poderá gerar vetores para palavras fora do vocabulário (OOV).

Solicitação JSON de amostra

Mime-type: application/json

{ "instances": ["word1", "word2", "word3"] }

Artefatos de modelo para o algoritmo de classificação de texto

O treinamento com saídas supervisionadas cria um arquivo model.bin que pode ser consumido pela hospedagem de BlazingText. Para inferência, o modelo BlazingText aceita um arquivo JSON contendo uma lista de frases e retorna uma lista de rótulos previstos e pontuações de probabilidade correspondentes. Cada frase deve ser uma string com tokens separados por espaço, palavras ou ambos.

Solicitação JSON de amostra

Mime-type: application/json

{ "instances": ["the movie was excellent", "i did not like the plot ."] }

Por padrão, o servidor retorna apenas uma previsão, aquela com a maior probabilidade. Para recuperar as k principais previsões, você pode definir k na configuração, da seguinte maneira:

{ "instances": ["the movie was excellent", "i did not like the plot ."], "configuration": {"k": 2} }

Para BlazingText, os parâmetros content-type e accept devem ser iguais. Para a transformação em lote, ambos precisam ser application/jsonlines. Se eles forem diferentes, o campo Accept será ignorado. O formato para a entrada é:

content-type: application/jsonlines {"source": "source_0"} {"source": "source_1"} if you need to pass the value of k for top-k, then you can do it in the following way: {"source": "source_0", "k": 2} {"source": "source_1", "k": 3}

O formato para a saída é:

accept: application/jsonlines {"prob": [prob_1], "label": ["__label__1"]} {"prob": [prob_1], "label": ["__label__1"]} If you have passed the value of k to be more than 1, then response will be in this format: {"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]} {"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}

Para os modos supervisionado (classificação de texto) e não supervisionado (Word2Vec), os binários (*.bin) produzidos pelo BlazingText podem ser consumidos de forma cruzada pelo fastText, e vice-versa. Você pode usar binários produzidos pelo BlazingText e pelo fastText. Da mesma forma, é possível hospedar os binários de modelos criados com o fastText usando BlazingText.

Aqui está um exemplo de como usar um modelo gerado com BlazingText com fastText:

#Download the model artifact from S3 aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz #Unzip the model archive tar -xzf model.tar.gz #Use the model archive with fastText fasttext predict ./model.bin test.txt

No entanto, os binários só são compatíveis quando o treinamento em CPU e GPU única; o treinamento em várias GPUs não produzirá binários.

Recomendação de instâncias do EC2 para o algoritmo BlazingText

Para os modos cbow e skipgram, o BlazingText é compatível com uma instância de CPU ou GPU. Ambos os modos oferecem suporte para a aprendizagem de incorporações subwords. Para alcançar a velocidade mais alta sem comprometer a precisão, recomendamos que você use uma instância ml.p3.2xlarge.

Para o modo batch_skipgram, BlazingText é compatível com uma ou várias instâncias de CPU. Ao treinar em várias instâncias, defina o valor do campo S3DataDistributionType do objeto S3DataSource que você passa à API CreateTrainingJob como FullyReplicated. O BlazingText cuida da distribuição dos dados entre as máquinas.

Para o modo de classificação de texto supervisionado, uma instância C5 é recomendada se o conjunto de dados de treinamento é menor que 2 GB. Para conjuntos de dados maiores, use uma instância com uma única GPU. O BlazingText suporta instâncias P2, P3, G4dn e G5 para treinamento e inferência.

Blocos de anotações de amostra do BlazingText

Para ver um caderno de exemplo que treina e implanta o algoritmo BlazingText do SageMaker AI para gerar vetores de palavras, consulte Learning Word2Vec Word Representations using BlazingText. Para obter instruções para criar e acessar instâncias de caderno Jupyter que você pode utilizar para executar o exemplo no SageMaker AI, consulte Instâncias de SageMaker notebook da Amazon. Depois de criar e abrir uma instância de caderno, escolha a guia Exemplos do SageMaker AI para ver uma lista de todos os exemplos do SageMaker AI. Os blocos de anotações de exemplo de modelagem de tópicos que usam o Blazing Text estão localizados na seção Introdução a algoritmos da Amazon. Para abrir um caderno, escolha a guia Uso e depois escolha Criar cópia.