A identificação de texto parafraseado tem valor comercial em muitos casos de uso. Por exemplo, ao identificar paráfrases de frases, um sistema de resumo de texto pode remover informações redundantes. Outra aplicação é identificar documentos plagiados. Neste post, ajustamos um Abraçando o rosto transformador ligado Amazon Sage Maker para identificar pares de frases parafraseadas em poucos passos.
Um modelo verdadeiramente robusto pode identificar texto parafraseado quando o idioma usado pode ser completamente diferente e também identificar diferenças quando o idioma usado tem alta sobreposição lexical. Neste post, nos concentramos no último aspecto. Especificamente, verificamos se podemos treinar um modelo que possa identificar a diferença entre duas sentenças com alta sobreposição lexical e significados muito diferentes ou opostos. Por exemplo, as seguintes frases têm exatamente as mesmas palavras, mas significados opostos:
- Peguei um voo de Nova York para Paris
- Peguei um voo de Paris para Nova York
Visão geral da solução
Orientamos você pelas seguintes etapas de alto nível:
- Configure o ambiente.
- Prepare os dados.
- Tokenize o conjunto de dados.
- Ajuste o modelo.
- Implante o modelo e execute a inferência.
- Avalie o desempenho do modelo.
Se quiser pular a configuração do ambiente, você pode usar o seguinte bloco de anotações em GitHub e execute o código no SageMaker.
A Hugging Face e a AWS anunciaram uma parceria no início de 2022 que torna ainda mais fácil treinar modelos de Hugging Face no SageMaker. Esta funcionalidade está disponível através do desenvolvimento do Hugging Face Contêineres de aprendizado profundo da AWS (DLCs). Esses contêineres incluem Hugging Face Transformers, Tokenizers e a biblioteca Datasets, que nos permite usar esses recursos para trabalhos de treinamento e inferência. Para obter uma lista das imagens DLC disponíveis, consulte Imagens de recipientes de aprendizagem profunda disponíveis. Eles são mantidos e atualizados regularmente com patches de segurança. Você pode encontrar muitos exemplos de como treinar modelos Hugging Face com esses DLCs e o Abraçando Face SDK Python na sequência GitHub repo.
O conjunto de dados PAWS
Percebendo a falta de conjuntos de dados de pares de frases eficientes que exibem alta sobreposição lexical sem serem paráfrases, o original PAWS O conjunto de dados lançado em 2019 teve como objetivo fornecer à comunidade de processamento de linguagem natural (NLP) um novo recurso para treinar e avaliar modelos de detecção de paráfrase. Os pares de frases PAWS são gerados em duas etapas usando Wikipedia e os votos de Pares de perguntas do Quora (QQP) conjunto de dados. Um modelo de linguagem primeiro troca palavras em um par de sentenças com o mesmo Bag of Words (BOW) para gerar um par de sentenças. Uma etapa de retrotradução gera paráfrases com alta sobreposição de BOW, mas usando uma ordem de palavras diferente. O conjunto de dados PAWS final contém um total de 108,000 pares rotulados por humanos e 656,000 pares rotulados ruidosamente.
Nesta postagem, usamos o Rotulado PAWS-Wiki (Final) conjunto de dados de Hugging Face. Hugging Face já realizou a divisão de dados para nós, o que resulta em 49,000 pares de sentenças no conjunto de dados de treinamento e 8,000 pares de sentenças cada para os conjuntos de dados de validação e teste. Dois exemplos de pares de sentenças do conjunto de dados de treinamento são mostrados no exemplo a seguir. Um rótulo de 1 indica que as duas sentenças são paráfrases uma da outra.
Frase 1 | Frase 2 | O rótulo |
Embora intercambiáveis, as peças da carroceria dos 2 carros não são semelhantes. | Embora semelhantes, as partes da carroceria não são intercambiáveis nos 2 carros. | 0 |
Katz nasceu na Suécia em 1947 e mudou-se para Nova York com 1 ano de idade. | Katz nasceu em 1947 na Suécia e se mudou para Nova York com um ano de idade. | 1 |
Pré-requisitos
Você precisa preencher os seguintes pré-requisitos:
- Inscreva-se para uma conta da AWS se você não tiver uma. Para mais informações, veja Configurar os pré-requisitos do Amazon SageMaker.
- Comece a usar Instâncias de notebook SageMaker.
- configurar o direito Gerenciamento de acesso e identidade da AWS (IAM) permissões. Para mais informações, veja Funções do SageMaker.
Configure o ambiente
Antes de começarmos a examinar e preparar nossos dados para o ajuste fino do modelo, precisamos configurar nosso ambiente. Vamos começar girando uma instância de bloco de anotações do SageMaker. Escolha uma região da AWS em sua conta da AWS e siga as instruções para criar uma instância de notebook SageMaker. A instância do bloco de anotações pode levar alguns minutos para ser ativada.
Quando a instância do notebook estiver em execução, escolha conda_pytorch_p38
como seu tipo de kernel. Para usar o conjunto de dados Hugging Face, primeiro precisamos instalar e importar a biblioteca Hugging Face:
Em seguida, vamos estabelecer uma sessão do SageMaker. Usamos o padrão Serviço de armazenamento simples da Amazon (Amazon S3) bucket associado à sessão do SageMaker para armazenar o conjunto de dados PAWS e os artefatos de modelo:
Prepare os dados
Podemos carregar a versão Hugging Face do conjunto de dados PAWS com seu load_dataset()
comando. Essa chamada baixa e importa o script de processamento PAWS Python do repositório Hugging Face GitHub, que baixa o conjunto de dados PAWS do URL original armazenado no script e armazena os dados em cache como uma tabela Arrow na unidade. Veja o seguinte código:
Antes de começarmos a ajustar nosso modelo BERT pré-treinado, vejamos nossa distribuição de classe de destino. Para nosso caso de uso, o conjunto de dados PAWS possui rótulos binários (0 indica que o par de frases não é uma paráfrase e 1 indica que é). Vamos criar um gráfico de colunas para visualizar a distribuição de classes, conforme mostrado no código a seguir. Vemos que há um pequeno problema de desequilíbrio de classe em nosso conjunto de treinamento (56% de amostras negativas vs. 44% de amostras positivas). No entanto, o desequilíbrio é pequeno o suficiente para evitar o emprego de técnicas de mitigação de desequilíbrio de classe.
Tokenizar o conjunto de dados
Antes de começarmos o ajuste fino, precisamos tokenizar nosso conjunto de dados. Como ponto de partida, digamos que queremos ajustar e avaliar o roberta-base
transformador. nós selecionamos roberta-base
porque é um transformador de propósito geral que foi pré-treinado em um grande corpus de dados em inglês e freqüentemente mostrou alto desempenho em uma variedade de tarefas de NLP. O modelo foi originalmente introduzido no jornal RoBERTa: uma abordagem de pré-treinamento de BERT altamente otimizada.
Realizamos tokenização nas sentenças com um roberta-base
tokenizer do Hugging Face, que usa codificação de par de bytes em nível de byte para dividir o documento em tokens. Para obter mais detalhes sobre o tokenizador RoBERTa, consulte RobertaTokenizer. Como nossas entradas são pares de sentenças, precisamos tokenizar ambas as sentenças simultaneamente. Como a maioria dos modelos BERT exige que a entrada tenha um comprimento fixo de entrada tokenizada, definimos os seguintes parâmetros: max_len=128
e truncation=True
. Veja o seguinte código:
A última etapa de pré-processamento para ajustar nosso modelo BERT é converter o trem tokenizado e os conjuntos de dados de validação em tensores PyTorch e carregá-los em nosso bucket S3:
Afinar o modelo
Agora que terminamos a preparação de dados, estamos prontos para ajustar nosso pré-treinado roberta-base
modelo na tarefa de identificação de paráfrase. Podemos usar a classe SageMaker Hugging Face Estimator para iniciar o processo de ajuste fino em duas etapas. A primeira etapa é especificar os hiperparâmetros de treinamento e as definições de métrica. A variável de definições de métrica informa ao Hugging Face Estimator quais tipos de métricas extrair dos logs de treinamento do modelo. Aqui, estamos interessados principalmente em extrair as métricas do conjunto de validação em cada época de treinamento.
A segunda etapa é instanciar o Hugging Face Estimator e iniciar o processo de ajuste fino com o .fit()
método:
O processo de ajuste fino leva aproximadamente 30 minutos usando os hiperparâmetros especificados.
Implantar o modelo e realizar a inferência
O SageMaker oferece várias opções de implantação, dependendo do seu caso de uso. Para endpoints persistentes em tempo real que fazem uma previsão por vez, recomendamos usar Serviços de hospedagem em tempo real do SageMaker. Se você tiver cargas de trabalho com períodos ociosos entre surtos de tráfego e puder tolerar partidas a frio, recomendamos usar Inferência sem servidor. Os endpoints sem servidor iniciam automaticamente os recursos de computação e os expandem dependendo do tráfego, eliminando a necessidade de escolher tipos de instância ou gerenciar políticas de dimensionamento. Demonstramos como implantar nosso modelo Hugging Face ajustado para um ponto de extremidade de inferência em tempo real e um ponto de extremidade de inferência sem servidor.
Implante em um endpoint de inferência em tempo real
Você pode implantar um objeto de treinamento na hospedagem de inferência em tempo real no SageMaker usando o .deploy()
método. Para obter uma lista completa dos parâmetros aceitos, consulte Modelo de rosto abraçado. Para começar, vamos implantar o modelo em uma instância, passando os seguintes parâmetros: initial_instance_count
, instance_type
e endpoint_name
. Veja o seguinte código:
O modelo leva alguns minutos para ser implantado. Após a implantação do modelo, podemos enviar registros de amostra do conjunto de dados de teste não visto para o endpoint para inferência.
Implantar em um endpoint de inferência sem servidor
Para implantar nosso objeto de treinamento em um endpoint sem servidor, precisamos primeiro especificar um arquivo de configuração sem servidor com memory_size_in_mb
e max_concurrency
argumentos:
memory_size_in_mb
define o tamanho total da RAM do endpoint sem servidor; o tamanho mínimo da RAM é de 1024 MB (1 GB) e pode ser dimensionado para até 6144 MB (6 GB). Geralmente, você deve escolher um tamanho de memória que seja pelo menos tão grande quanto o tamanho do seu modelo. max_concurrency
define a cota para quantas invocações simultâneas podem ser processadas ao mesmo tempo (até 50 invocações simultâneas) para um único terminal.
Também precisamos fornecer o URI da imagem de inferência Hugging Face, que você pode recuperar usando o seguinte código:
Agora que temos o arquivo de configuração sem servidor, podemos criar um endpoint sem servidor da mesma forma que nosso endpoint de inferência em tempo real, usando o .deploy()
método:
O endpoint deve ser criado em alguns minutos.
Executar inferência de modelo
Para fazer previsões, precisamos criar o par de sentenças adicionando o [CLS]
e [SEP]
tokens especiais e subseqüentemente enviar a entrada para os endpoints do modelo. A sintaxe para inferência em tempo real e inferência sem servidor é a mesma:
Nos exemplos a seguir, podemos ver que o modelo é capaz de classificar corretamente se o par de sentenças de entrada contém sentenças parafraseadas.
O seguinte é um exemplo de inferência em tempo real.
Veja a seguir um exemplo de inferência sem servidor.
Avalie o desempenho do modelo
Para avaliar o modelo, vamos expandir o código anterior e enviar todos os 8,000 registros de teste não vistos para o terminal em tempo real:
Em seguida, podemos criar um relatório de classificação usando as previsões extraídas:
Obtemos as seguintes pontuações de teste.
Podemos observar que roberta-base
tem uma pontuação F1 macro-média combinada de 92% e um desempenho ligeiramente melhor na detecção de sentenças que são paráfrases. o roberta-base
modelo tem um bom desempenho, mas é uma boa prática calcular o desempenho do modelo usando pelo menos um outro modelo.
A tabela a seguir compara roberta-base
resultados de desempenho no mesmo conjunto de teste em relação a outro transformador de ajuste fino chamado paraphrase-mpnet-base-v2
, um transformador de sentença pré-treinado especificamente para a tarefa de identificação de paráfrase. Ambos os modelos foram treinados em uma instância ml.p3.8xlarge.
Os resultados mostram que roberta-base
tem uma pontuação F1 1% maior com treinamento e tempos de inferência muito semelhantes usando hospedagem de inferência em tempo real no SageMaker. A diferença de desempenho entre os modelos é relativamente pequena, no entanto, roberta-base
é, em última análise, o vencedor, pois tem métricas de desempenho marginalmente melhores e tempos de treinamento e inferência quase idênticos.
Precisão | Recordar | Pontuação F1 | Tempo de treinamento (faturável) | Tempo de inferência (conjunto de teste completo) | |
Roberta-base | 0.92 | 0.93 | 0.92 | 18 minutos | 2 minutos |
parafraseando-mpnet- base-v2 |
0.92 | 0.91 | 0.91 | 17 minutos | 2 minutos |
limpar
Quando terminar de usar os endpoints do modelo, você poderá excluí-los para evitar cobranças futuras:
Conclusão
Nesta postagem, discutimos como criar rapidamente um modelo de identificação de paráfrase usando transformadores Hugging Face no SageMaker. Ajustamos dois transformadores pré-treinados, roberta-base
e paraphrase-mpnet-base-v2
, usando o conjunto de dados PAWS (que contém pares de sentenças com alta sobreposição lexical). Demonstramos e discutimos os benefícios da inferência em tempo real versus implantação de inferência sem servidor, sendo esta última um novo recurso que visa cargas de trabalho intensas e elimina a necessidade de gerenciar políticas de dimensionamento. Em um conjunto de teste inédito com 8,000 registros, demonstramos que ambos os modelos alcançaram uma pontuação F1 superior a 90%.
Para expandir esta solução, considere o seguinte:
- Tente ajustar com seu próprio conjunto de dados personalizado. Se você não tiver rótulos de treinamento suficientes, poderá avaliar o desempenho de um modelo ajustado como o demonstrado nesta postagem em um conjunto de dados de teste personalizado.
- Integre esse modelo ajustado em um aplicativo downstream que requer informações sobre se duas sentenças (ou blocos de texto) são paráfrases uma da outra.
Feliz edifício!
Sobre os autores
Bala Krishnamoorthy é Cientista de Dados da AWS Professional Services, onde gosta de aplicar aprendizado de máquina para resolver problemas de negócios de clientes. Ele é especialista em casos de uso de processamento de linguagem natural e trabalhou com clientes em setores como software, finanças e saúde. Em seu tempo livre, ele gosta de experimentar novas comidas, assistir a comédias e documentários, malhar no Orange Theory e estar na água (remo, snorkeling e, esperançosamente, mergulho em breve).
Ivan Cui é cientista de dados da AWS Professional Services, onde ajuda os clientes a criar e implantar soluções usando aprendizado de máquina na AWS. Ele trabalhou com clientes em diversos setores, incluindo software, finanças, farmacêutico e saúde. Em seu tempo livre, ele gosta de ler, passar o tempo com sua família e maximizar seu portfólio de ações.
- Coinsmart. A melhor troca de Bitcoin e criptografia da Europa.
- Platoblockchain. Inteligência Metaverso Web3. Conhecimento Ampliado. ACESSO LIVRE.
- CryptoHawk. Radar Altcoin. Teste grátis.
- Fonte: https://aws.amazon.com/blogs/machine-learning/identify-paraphrased-text-with-hugging-face-on-amazon-sagemaker/
- '
- "
- 000
- 10
- 100
- 2019
- 2022
- 84
- Sobre
- Acesso
- Conta
- alcançado
- em
- Todos os Produtos
- já
- Amazon
- anunciou
- Outro
- Aplicação
- Aplicando
- aproximadamente
- argumentos
- disponível
- AWS
- ser
- Benefícios
- corpo
- fronteira
- construir
- negócio
- chamada
- capaz
- carros
- casos
- acusações
- Escolha
- Cidades
- classe
- classificação
- código
- Coluna
- combinado
- comunidade
- completamente
- Computar
- confiança
- Containers
- contém
- poderia
- crio
- criado
- personalizadas
- cliente
- Clientes
- dados,
- cientista de dados
- demonstrar
- demonstraram
- Dependendo
- implantar
- implantado
- desenvolvimento
- detalhes
- Detecção
- Desenvolvimento
- diferente
- distribuição
- documentários
- INSTITUCIONAIS
- de downloads
- distância
- eficiente
- Ponto final
- Inglês
- Meio Ambiente
- estabelecer
- avaliar
- exemplo
- apresentar
- Expandir
- Rosto
- família
- Característica
- financiar
- Primeiro nome
- vôo
- Foco
- seguir
- seguinte
- comida
- Gratuito
- cheio
- função
- funcionalidade
- futuro
- propósito geral
- geralmente
- gerar
- GitHub
- Bom estado, com sinais de uso
- maior
- saúde
- altura
- ajuda
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Alta
- superior
- hospedagem
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTTPS
- identificação
- identificar
- identificar
- Dados de identificação:
- imagem
- incluir
- Incluindo
- indústrias
- INFORMAÇÕES
- entrada
- instalar
- interessado
- emitem
- IT
- Empregos
- Rótulos
- língua
- grande
- lançamento
- aprendizagem
- Biblioteca
- Lista
- carregar
- máquina
- aprendizado de máquina
- FAZ
- gerencia
- Memória
- Métrica
- ML
- modelo
- modelos
- mais
- a maioria
- múltiplo
- natural
- negativo
- New York
- Cidade de Nova Iorque
- caderno
- Oferece
- otimizado
- Opções
- ordem
- Outros
- próprio
- Papel
- Paris
- Google Cloud
- Passagem
- Patches
- atuação
- períodos
- Farmacêutica
- ponto
- políticas
- pasta
- positivo
- prática
- predição
- Previsões
- problemas
- processo
- em processamento
- profissional
- fornecer
- questão
- quora
- RAM
- rand
- Leitura
- em tempo real
- recomendar
- registros
- liberado
- Denunciar
- repositório
- requerer
- recurso
- Recursos
- Resultados
- retorno
- Execute
- corrida
- Escala
- dimensionamento
- Cientista
- segurança
- selecionado
- Serverless
- Serviços
- conjunto
- contexto
- semelhante
- simples
- Tamanho
- pequeno
- Software
- sólido
- solução
- Soluções
- RESOLVER
- especial
- especializada
- especificamente
- Passar
- Spin
- divisão
- começo
- começado
- começa
- estoque
- armazenamento
- loja
- Subseqüentemente
- supply
- Suécia
- .
- Target
- tarefas
- técnicas
- conta
- teste
- Através da
- tempo
- tokenization
- tokenized
- Tokens
- topo
- tocha
- tráfego
- Training
- Tradução
- us
- usar
- validação
- valor
- variedade
- Ver
- Água
- O Quê
- se
- Wikipedia
- dentro
- sem
- palavras
- trabalhou
- trabalhar
- trabalhando fora