4 métodos de processamento comuns para dados de treinamento de modelos de linguagem grandes

Este artigo foi compartilhado pela Huawei Cloud Community " Uma breve discussão sobre como processar dados de treinamento de grandes modelos de linguagem, um dos métodos comuns de processamento de dados ", autor: Hua Shanghua_Lancer.

O treinamento de grandes modelos de linguagem requer trilhões de dados de vários tipos. Como construir dados massivos de "alta qualidade" desempenha um papel crucial no treinamento de grandes modelos de linguagem. Embora, em setembro de 2023, não houvesse uma análise teórica e explicação muito boa de grandes modelos, e também faltasse uma explicação e definição rigorosa dos dados de treinamento de modelos de linguagem. No entanto, a maioria dos pesquisadores geralmente concorda que os dados de treinamento são um dos principais fatores que afetam o desempenho de grandes modelos de linguagem e a capacidade de generalização das amostras. A julgar por pesquisas anteriores, os dados de pré-treinamento precisam cobrir vários tipos, incluindo dados de rede, livros, artigos, enciclopédias e mídias sociais, etc., e também precisam cobrir tantos campos, idiomas, culturas e perspectivas quanto possível para melhorar grandes modelos de linguagem, capacidade de generalização e adaptabilidade. Este artigo apresentará as fontes e os métodos de processamento dos dados de treinamento de grandes modelos de linguagem atualmente comuns, a análise do impacto dos dados de pré-treinamento em grandes modelos de linguagem e as coleções comuns de dados de código aberto.

1. Fonte de dados

Há um artigo que apresenta especificamente as principais fontes de dados usadas pelo OpenAI para treinar GPT-3, incluindo o conjunto de dados CommonCrawl filtrado, WebText2, Books1, Books2 e Wikipedia em inglês e outros conjuntos de dados. Os dados originais do CommonCrawl são 45 TB e, após a filtragem, apenas 570 GB de dados são retidos. O corpus acima é segmentado por elementos de palavras e contém aproximadamente 500 bilhões de elementos de palavras no total.

A fim de garantir que o modelo utilize mais dados de alta qualidade para treinamento, durante o treinamento GPT-3, diferentes pesos amostrais são definidos de acordo com diferentes fontes de corpus. Depois de completar o treinamento de 300 bilhões de elementos de palavras, o número médio de rodadas de treinamento para o corpus da Wikipédia em inglês foi de 3,4, enquanto CommonCrawl e Books 2 tiveram apenas 0,44 e 0,43 rodadas.

Como o processo de filtragem do conjunto de dados CommonCrawl é complicado e complicado, os pesquisadores da empresa Meta usaram um método de misturar dados RoBERTa, Pile [68] e PushShift.io Reddit ao treinar o modelo OP. Como a maioria desses conjuntos de dados contém dados em inglês, o OPT também extraiu alguns dados em outros idiomas do conjunto de dados CommonCrawl e os adicionou ao corpus de treinamento.

As fontes de dados necessárias para o treinamento de grandes modelos linguísticos geralmente podem ser divididas em duas categorias: dados gerais e dados profissionais. Os dados gerais (GeneralData) incluem páginas da web, livros, notícias, textos de conversas e outros conteúdos. Os dados gerais têm características de grande escala, diversidade e fácil aquisição, podendo apoiar a construção de modelagem de linguagem e capacidades de generalização de grandes modelos de linguagem.

Dados especializados incluem dados como dados multilíngues, dados científicos, códigos e dados específicos de domínio. Ao introduzir dados profissionais na fase de pré-treinamento, as capacidades de resolução de tarefas de grandes modelos de linguagem podem ser efetivamente fornecidas. A Figura 3.1 mostra a distribuição dos tipos de quantidade usados ​​por alguns modelos típicos de grandes linguagens. Pode-se observar que existe uma enorme lacuna na distribuição dos tipos de treinamento de diferentes modelos de linguagem de grande porte.Em setembro de 2023, a proporção de distribuição dos tipos de dados não era amplamente reconhecida.

Distribuição de tipos de quantidade usados ​​por modelos típicos de linguagem grande

1.1 Dados gerais

Os dados gerais geralmente representam uma proporção muito alta de dados de treinamento de modelos grandes, incluindo principalmente páginas da web, livros, textos de conversas e outros tipos, fornecendo dados de treinamento diversificados e em grande escala para modelos grandes. As páginas da Web são a maior categoria de dados gerais. Com a popularização em larga escala da Internet, as pessoas criaram enormes quantidades de dados por meio de diversos tipos de sites e aplicativos, como sites, fóruns, blogs e APPs.

Segundo dados divulgados pelo Google em 2016, seu mecanismo de busca processou mais de 130 trilhões de páginas web. O enorme conteúdo contido nos dados das páginas da web permite que os modelos de linguagem adquiram diversos conhecimentos linguísticos e aprimorem suas capacidades de generalização. Rastrear e processar esse enorme conteúdo da web não é uma tarefa fácil, por isso alguns pesquisadores criaram conjuntos de dados da web de código aberto, incluindo ClueWeb09[70], ClueWeb12, SogouT-16, CommonCrawl, etc. No entanto, embora esses dados de rede rastreados contenham uma grande quantidade de texto de alta qualidade, como a Wikipédia, eles também contêm uma grande quantidade de texto de baixa qualidade, como spam. Portanto, como filtrar e processar páginas da web para melhorar a qualidade dos dados é muito importante para o treinamento com grandes modelos de linguagem.

Texto de conversa refere-se ao conteúdo de texto que contém comunicação entre dois ou mais participantes. Os dados de conversas incluem conversas escritas, transcrições de bate-papos, postagens em fóruns, comentários em mídias sociais, etc. Algumas pesquisas atuais também mostram que os dados do diálogo podem efetivamente melhorar as capacidades de diálogo dos modelos de linguagem e potencialmente melhorar o seu desempenho numa variedade de tarefas de perguntas e respostas. Os dados de conversas podem ser construídos em mídias sociais, fóruns, grupos de e-mail, etc. por meio de processos como coleta, limpeza e fusão.

Em comparação com os dados de páginas da web, os dados de conversas são mais difíceis de coletar e processar e a quantidade de dados é relativamente pequena. Conjuntos de dados de conversação comuns incluem PushShift.io Reddit, Ubuntu Dialogue Corpus, Douban Conversation Corpus, Chromium Conversations Corpus, etc. Além disso, a literatura [75] também propôs o método UltraChat de usar um grande modelo de linguagem para gerar automaticamente dados de diálogo.

Os livros são uma das principais formas de acumular conhecimento humano. Dos clássicos antigos aos escritos acadêmicos modernos, os livros carregam pensamentos humanos ricos e diversos. Os livros geralmente contêm uma ampla variedade de vocabulário, incluindo termos técnicos, expressões literárias e vocabulário sobre uma variedade de tópicos.

Usando dados de livros para treinamento, o modelo linguístico pode ser exposto a vocabulário diversificado, melhorando assim sua compreensão de diferentes campos e tópicos. Comparados com outros corpora, os livros são também a mais importante, ou mesmo a única fonte de dados para a linguagem escrita de textos longos. Os livros fornecem frases e parágrafos completos, permitindo que o modelo de linguagem aprenda as conexões entre os contextos. Isso é importante para que o modelo compreenda estruturas complexas, relações lógicas e coerência semântica nas frases. Os livros cobrem uma variedade de gêneros e estilos, incluindo ficção, trabalhos científicos, registros históricos e muito mais. Ao usar dados de livros para treinar modelos de linguagem, o modelo pode aprender diferentes estilos e expressões de escrita, melhorando a capacidade de modelos de linguagem grandes em vários tipos de texto. Devido a fatores de direitos autorais, existem muito poucos conjuntos de dados de livros de código aberto.A pesquisa de modelo de linguagem grande de código aberto existente geralmente usa os conjuntos de dados Books3 e Bookcorpus2 fornecidos no conjunto de dados Pile [68].

2.1 Dados profissionais

A proporção de dados profissionais em grandes modelos de linguagem geralmente é baixa, mas os dados profissionais desempenham um papel muito importante na melhoria das capacidades específicas de grandes modelos de linguagem em tarefas posteriores. Existem muitos tipos de dados profissionais. Resumi três tipos de dados profissionais atualmente usados ​​por grandes modelos de linguagem, incluindo dados multilíngues, textos científicos e códigos.

Os dados multilíngues (texto multilíngue) desempenham um papel crucial na melhoria da compreensão linguística e na geração de capacidades multilíngues de grandes modelos linguísticos. Além do texto na língua-alvo, o treinamento atual em grandes modelos linguísticos geralmente requer a integração de corpora multilíngues.

Por exemplo, o corpus de pré-treinamento do BLOO contém 46 idiomas, enquanto o corpus de treinamento do PaLM contém dados em 122 idiomas. Pesquisas anteriores descobriram que, por meio do treinamento misto multilíngue, o modelo de pré-treinamento pode construir automaticamente associações semânticas entre vários idiomas até certo ponto. Portanto, o treinamento misto com dados multilíngues pode efetivamente melhorar as capacidades de tarefas como tradução, resumo multilíngue e resposta a perguntas multilíngues. Além disso, uma vez que diferentes tipos de conhecimento em diferentes línguas têm diferentes dificuldades de aquisição, os dados multilingues também podem aumentar eficazmente a diversidade dos dados e a riqueza do conhecimento.

Texto Científico inclui livros didáticos, artigos, enciclopédias e outros recursos relacionados. Esses dados desempenham um papel importante na melhoria de grandes modelos de linguagem na compreensão do conhecimento científico. As fontes de dados de textos científicos incluem principalmente artigos arXiv, artigos PubMed, livros didáticos, material didático e páginas de ensino da web. Como o campo científico envolve muitas áreas profissionais e o formulário de dados é complexo, geralmente é necessário pré-processar fórmulas, fórmulas químicas, sequências de proteínas, etc. com símbolos específicos.

Por exemplo, as fórmulas podem ser expressas usando a sintaxe LaTeX, as estruturas químicas podem ser expressas usando SMILES (Simplified Molecular Input Line Entry System) e as sequências de proteínas podem usar códigos de uma ou três letras. Isso pode converter dados em diferentes formatos em um formato unificado, permitindo que os modelos de linguagem processem e analisem melhor os dados de textos científicos.

Os dados de código são dados de treinamento necessários para tarefas de geração de programas. Pesquisas e resultados recentes do ChatGPT mostram que grandes modelos de linguagem podem efetivamente melhorar a geração de código por meio do pré-treinamento em grandes quantidades de código. Os dados de código incluem não apenas o código do programa em si, mas também uma grande quantidade de informações de anotação. Os dados de código apresentam algumas diferenças significativas em comparação com o texto em linguagem natural. Código é uma linguagem de formatação que corresponde a dependências de longo alcance e lógica de execução precisa. A estrutura sintática do código, as palavras-chave e os paradigmas de programação específicos desempenham um papel importante em seu significado e funcionalidade. As principais fontes de dados de código são comunidades de perguntas e respostas de programação (como Stack Exchange) e repositórios públicos de software (como GitHub). Os dados da comunidade de perguntas e respostas sobre programação incluem perguntas feitas por desenvolvedores, respostas de outros desenvolvedores e exemplos de código relacionados. Esses dados fornecem contexto rico e cenários de uso de código do mundo real. Os dados em repositórios de software públicos contêm uma grande quantidade de código-fonte aberto, abrangendo diversas linguagens e campos de programação. Muitos dos códigos nessas bases de código passaram por rigorosa revisão de código e testes de uso real, portanto, possuem certa qualidade e confiabilidade.

2. Processamento de dados

Pesquisas relevantes sobre grandes modelos de linguagem mostram que a qualidade dos dados tem um grande impacto no modelo. Portanto, após a coleta de vários tipos de dados, os dados precisam ser processados ​​para remover dados de baixa qualidade, dados duplicados, informações prejudiciais, privacidade pessoal e outros conteúdos [14, 85]. O processo típico de processamento de dados é mostrado na Figura 3.1, que inclui principalmente várias etapas, como filtragem de qualidade, remoção de redundância, eliminação de privacidade e segmentação de palavras. Esta seção apresentará o conteúdo acima por sua vez.

Figura 2.1 Fluxograma típico de processamento de dados de modelo de linguagem grande

1. Filtragem de baixa qualidade

A qualidade dos dados na Internet é desigual. Quer seja o relatório do cofundador da OpenAI, Andrej Karpathy, no Microsoft Build 2023 ou alguma pesquisa atual, está demonstrado que a qualidade dos dados de treinamento tem um impacto muito importante no desempenho de grandes modelos de linguagem . Portanto, como remover dados de baixa qualidade dos dados coletados torna-se um passo importante no treinamento de grandes modelos de linguagem. Os métodos de filtragem de dados de baixa qualidade usados ​​no treinamento de modelos de linguagem de grande porte podem ser amplamente divididos em duas categorias: métodos baseados em classificadores e métodos baseados em heurísticas. O objetivo dos métodos baseados em classificadores é treinar um modelo de julgamento de qualidade de texto e usar o modelo para identificar e filtrar dados de baixa qualidade.

Todos os modelos GPT-3, PALM e GLam usam métodos baseados em classificador ao construir dados de treinamento. Usando o Classificador Linear Baseado em Hash de Recursos (Classificador Linear Baseado em Hash de Recursos), o julgamento da qualidade do texto pode ser concluído de forma muito eficiente. O classificador é treinado utilizando um conjunto selecionado de textos (Wikipedia, livros e alguns sites selecionados), com o objetivo de atribuir pontuações mais altas a páginas web semelhantes aos dados de treinamento. Use este classificador para avaliar a qualidade do conteúdo das páginas da web. Em aplicações práticas, você também pode usar a distribuição de Pareto para obter amostras de páginas da Web e selecionar limites apropriados com base em suas pontuações para selecionar um conjunto de dados apropriado.

No entanto, alguns estudos também descobriram que os métodos baseados em classificadores podem eliminar textos de alta qualidade contendo dialetos ou línguas faladas, perdendo assim um certo grau de diversidade. Os métodos baseados em heurística eliminam texto de baixa qualidade por meio de um conjunto de regras cuidadosamente projetadas. BLOOM e Gopher adotam métodos baseados em heurística. Essas regras heurísticas incluem principalmente:

• Filtragem de idioma: se um modelo de idioma grande se concentrar apenas em um ou alguns idiomas, ele poderá filtrar significativamente o texto em outros idiomas nos dados.

• Filtragem de indicadores: Texto de baixa qualidade também pode ser filtrado utilizando indicadores de avaliação. Por exemplo, um modelo de linguagem pode ser usado para calcular a perplexidade de um determinado texto, e esse valor pode ser usado para filtrar frases não naturais.

• Filtragem de recursos estatísticos: para conteúdo de texto, recursos estatísticos, incluindo distribuição de pontuação, proporção de símbolo para palavra (proporção de símbolo para palavra), comprimento de frase, etc., podem ser calculados, e esses recursos podem ser usados ​​para filtrar conteúdo de baixa qualidade. dados.

• Filtragem de palavras-chave: Com base em um conjunto específico de palavras-chave, elementos barulhentos ou inúteis do texto podem ser identificados e removidos, como tags HTML, hiperlinks e palavras ofensivas.

Antes do surgimento de grandes modelos de linguagem, muitas pesquisas relacionadas à avaliação da qualidade do texto (Avaliação da Qualidade do Texto) foram realizadas no campo do processamento de linguagem natural, que era usado principalmente em tarefas como mecanismos de busca, mídias sociais, sistemas de recomendação , classificação de publicidade e pontuação de ensaios.

Nos sistemas de pesquisa e recomendação, a qualidade do conteúdo dos resultados é um dos fatores importantes que afetam a experiência do usuário.Portanto, muitos trabalhos anteriores se concentraram em julgar a qualidade do conteúdo gerado pelo usuário (UGC). A pontuação automática de ensaios também é uma subtarefa importante no campo do julgamento da qualidade do artigo.Desde que o uso de classificadores bayesianos para previsão de classificação de ensaios foi proposto em 1998 [87], com base em SVM [88], CNN-RNN [89], BERT [90, 91] e outros métodos também foram propostos um após o outro e fizeram grandes progressos.

Esses métodos também podem ser aplicados para filtrar dados de pré-treinamento de modelos de linguagem grandes. No entanto, como a quantidade de dados de pré-treinamento é muito grande e a precisão do julgamento de qualidade não é muito alta, alguns métodos baseados em aprendizagem profunda e pré-treinamento não foram aplicados à filtragem de baixa qualidade.

2. Remoção de redundância

A literatura aponta que dados repetidos em grandes corpora de treinamento de modelos de linguagem reduzirão a diversidade de modelos de linguagem e poderão levar à instabilidade no processo de treinamento, afetando assim o desempenho do modelo. Portanto, é necessário processar as repetições no corpus pré-treinamento e retirar as partes redundantes. A Detecção de Duplicação de Texto, também conhecida como detecção de duplicação de texto, é uma das tarefas básicas no processamento de linguagem natural e recuperação de informações. Seu objetivo é encontrar duplicação de texto em diferentes granularidades, incluindo frases, parágrafos, documentos e outros níveis.

A remoção de redundância consiste em remover conteúdo duplicado em diferentes granularidades, incluindo duplicação de frases, documentos e conjuntos de dados. No nível das sentenças, a literatura afirma que sentenças contendo palavras ou frases repetidas provavelmente introduzirão padrões repetidos na modelagem da linguagem. Isto terá um impacto muito sério no modelo de linguagem, tornando o modelo propenso a cair em loops de repetição (RepetitionLoops) ao fazer previsões.

Por exemplo, utilizando o modelo GPT-2, para um determinado contexto: "Numa descoberta chocante, os cientistas descobriram uma manada de unicórnios que viviam num vale remoto e anteriormente inexplorado, na Cordilheira dos Andes. Ainda mais surpreendente para os investigadores foi o facto de que os unicórnios falavam um inglês perfeito.” Se você usar Beam Search e definir b = 32, o modelo produzirá a seguinte saída e entrará no modo de loop de repetição. “O estudo, publicado nos Proceedings of the National Academy of Sciences of the United States of America (PNAS), foi conduzido por pesquisadores da Universidad Nacional Autónoma de México (UNAM) e da Universidad Nacional Autónoma de México (UNAM/Universidad Nacional Autónoma de México/Universidad Nacional Autónoma de México/Universidad Nacional Autónoma de México/Universidad Nacional Autónoma de México/Universidad Nacional Autónoma de...". Como loops repetidos têm um impacto muito grande na qualidade do texto gerado pelo modelo de linguagem, estes as inclusões precisam ser removidas do corpus pré-treinamento. Frases que repetem palavras ou frases extensivamente.

A filtragem em nível de frase também é realizada durante o processo de construção do RefinedWeb. O método de filtragem proposto na literatura é utilizado para extrair e filtrar strings idênticas que excedem um determinado comprimento entre documentos. Dados dois documentos xi e xj, existe uma substring comum de comprimento k xa...a+ki = xb...b+kj. Quando k  50, filtre uma das substrings. A chave para a correspondência de substring comum é como completar a correspondência de string de forma eficiente.O documento [64] converte todo o documento D em uma sequência de string longa S e, em seguida, constrói uma matriz de sufixos (Suffix Array) A da sequência S.

A matriz contém uma lista ordenada lexicograficamente de todos os sufixos na sequência. Especificamente, a matriz de sufixos A é uma matriz de inteiros, onde cada elemento representa a posição inicial de um sufixo em S. Na ordem lexicográfica, os elementos de A são organizados em ordem lexicográfica de sufixos. Por exemplo, os sufixos da sequência "banana" incluem "banana", "anana", "nana", "ana", "na" e "a", e a matriz de sufixos correspondente A é [6, 4, 2, 1, 5, 3]. De acordo com a matriz A, a mesma substring pode ser facilmente encontrada. Se S i..i+|s| = S j..j+|s|, então i e j devem estar próximos na matriz A.

Um método de construção de array de sufixo paralelo é projetado na literatura. Para o corpus de treinamento Wiki-40B (contendo aproximadamente 4 GB de conteúdo de texto), usando um servidor com CPU de 96 núcleos e 768 GB de memória, o cálculo pode ser concluído em 2,3 minutos . Para uma coleta de dados C4 contendo 350 GB de texto, foram necessárias apenas 12 horas para concluir a construção da matriz de sufixos. No nível do documento, a maioria dos grandes modelos de linguagem depende de semelhanças de características de superfície entre documentos (como taxa de sobreposição de n-gramas) para detectar e remover documentos duplicados [33, 37, 64, 94].

LLaMA adota o modelo de processamento da CCNet, primeiro dividindo o documento em parágrafos e normalizando cada parágrafo convertendo todos os caracteres em caracteres minúsculos, substituindo números por espaços reservados e removendo toda pontuação e acentos Unicode. Em seguida, calcule um código hash para cada parágrafo usando o método SHA-1, usando os primeiros 64 dígitos como chave. Finalmente, use as chaves de cada parágrafo para fazer julgamentos de repetição. O RefinedWeb [64] primeiro remove menus, títulos, rodapés, anúncios e outros conteúdos da página, e apenas extrai o conteúdo principal da página. Nesta base, a filtragem é realizada ao nível do documento, utilizando um método semelhante ao mencionado na literatura, utilizando sobreposição de n-gramas para medir a similaridade de frases, parágrafos e documentos. Se o grau de duplicação exceder um limite predefinido, parágrafos ou documentos duplicados serão filtrados.

Além disso, também pode haver uma certa quantidade de duplicação no nível do conjunto de dados.Por exemplo, muitos grandes conjuntos de pré-treinamento de modelos de linguagem incluirão GitHub, Wikipedia, C4 e outros conjuntos de dados. Atenção especial também deve ser dada ao fato de o corpus de pré-treinamento se misturar ao corpus de teste, causando contaminação do conjunto de dados. Ao realmente gerar dados de pré-treinamento, a duplicação precisa ser removida dos três níveis de conjunto de dados, documento e frase, o que desempenha um papel importante na melhoria do treinamento de modelos de linguagem [14, 96]

3. Eliminação da privacidade

Uma vez que a grande maioria dos dados pré-formação provém da Internet, contêm inevitavelmente conteúdos gerados pelo utilizador que envolvem informações sensíveis ou pessoais (Informações Pessoais Identificáveis, PII), o que pode aumentar o risco de fugas de privacidade. Conforme mostrado na Figura 2.2, o prefixo "East Stroudsburg Stroudsburg" é inserido e o modelo de linguagem completa o nome, endereço de e-mail, número de telefone, número de fax e endereço real com base nisso. Essas informações são aprendidas pelo modelo no corpus de pré-treinamento. Portanto, é muito necessário remover conteúdo que contenha informações de identificação pessoal do corpus pré-treinamento.

A maneira mais direta de excluir dados privados é usar um algoritmo baseado em regras. O processo de construção do BigScience ROOTS Corpus usa um exemplo de obtenção de dados privados de um grande modelo de linguagem baseado no reconhecimento de entidade nomeada. O algoritmo de reconhecimento de entidade nomeada é usado para detectar nomes, endereços e informações pessoais, como números de telefone, e excluí-los ou substituí-los. Este método usa um modelo baseado em Transformer e o combina com tecnologia de tradução automática, que pode processar texto em mais de 100 idiomas e eliminar informações privadas. Este algoritmo está integrado na biblioteca de classes muliwai.

Figura 2.2 Exemplo de obtenção de dados privados de um grande modelo de linguagem

Segmentação de 4 palavras

O processamento tradicional de linguagem natural geralmente usa palavras como unidade básica de processamento, e os modelos dependem de um vocabulário predeterminado V. Ao codificar a sequência de palavras de entrada, essas palavras representam que o modelo só pode processar palavras que existem no vocabulário. Portanto, durante o uso, se você encontrar palavras não registradas que não estão no vocabulário, o modelo não poderá gerar representações correspondentes para elas e poderá apenas dar a essas palavras não registradas (Fora do vocabulário, OOV) uma representação universal padrão.

No modelo de aprendizagem profunda, o modelo de representação de palavras adicionará um identificador padrão "[UNK]" (desconhecido) ao vocabulário antecipadamente para representar a palavra desconhecida e usará o vetor de [UNK] como a matriz de representação de palavras durante o treinamento processo. Uma parte é treinada em conjunto, introduzindo algum mecanismo correspondente para atualizar os parâmetros do vetor [UNK]. Quando utilizado, para todas as palavras não registradas, o vetor de [UNK] é utilizado como vetor de representação dessas palavras.

Além disso, modelos de representação de palavras baseados em vocabulário fixo são sensíveis à escolha do tamanho do vocabulário. Quando o tamanho do vocabulário é muito pequeno, a proporção de palavras não registradas é alta, o que afeta o desempenho do modelo. Quando o tamanho do vocabulário é muito grande, um grande número de palavras de baixa frequência aparece no vocabulário e os vetores de palavras dessas palavras são difíceis de aprender completamente. Idealmente, o modelo de representação de palavras deve ser capaz de cobrir a maioria das palavras de entrada e evitar o problema de escassez de dados causado por um vocabulário excessivamente grande.

Para aliviar o problema das palavras não registradas, alguns trabalhos constroem vetores de representação de palavras utilizando informações de nível de subpalavras. Uma solução direta é estabelecer uma representação em nível de caractere para a entrada e obter a representação de cada palavra através de uma combinação de vetores de caracteres para resolver o problema de escassez de dados. No entanto, padrões de formação de palavras, como raízes e afixos em palavras, geralmente abrangem vários caracteres, e é difícil para métodos baseados em representação de caracteres aprenderem padrões com grandes extensões.

Para aprender completamente esses padrões de formação de palavras, os pesquisadores propuseram o método de tokenização de subpalavras na tentativa de aliviar o problema de palavras não registradas apresentado acima. O modelo de representação de tokens mantém uma lista de vocabulário de tokens, na qual existem palavras completas e informações parciais de palavras na forma de "c", "re", "ing", etc., que são chamadas de subpalavras. O modelo de representação de token calcula uma representação vetorial de comprimento fixo para cada token no vocabulário para uso por modelos downstream. Para uma sequência de palavras de entrada, o modelo de representação de token divide cada palavra em tokens dentro do vocabulário.

Por exemplo, divida a palavra “renascido” em “re” e “nascido”. O modelo então consulta a representação de cada token e reorganiza a entrada em uma sequência de representações de token. Quando o modelo downstream precisa calcular a representação de uma palavra ou frase, ele pode sintetizar as representações de token no intervalo correspondente na representação necessária. Portanto, o modelo de representação de elementos de palavras pode resolver melhor o problema de palavras não registradas em sistemas de processamento de linguagem natural. O objetivo da tokenização é segmentar o texto original em uma sequência de tokens. A segmentação de tokens também é uma etapa crucial no pré-processamento de dados.

O modelo Byte Pair Encoding (BPE) [99] é um modelo comum de token de subpalavra. O vocabulário usado por este modelo contém as palavras mais comuns e subpalavras que ocorrem com frequência. Em uso, as palavras comuns geralmente estão localizadas no próprio vocabulário do BPE, enquanto as palavras raras geralmente podem ser decompostas em vários elementos de palavras incluídos no vocabulário do BPE, reduzindo assim enormemente a proporção de palavras não registradas. O algoritmo BPE consiste em duas partes: (1) determinação do vocabulário de elementos de palavras; (2) método de segmentação de palavras inteiras em elementos de palavras e fusão de elementos de palavras em palavras inteiras. O processo de cálculo é mostrado na Figura 4.

Primeiro, determine a lista de palavras e a frequência de palavras de toda a palavra no corpus, depois divida cada palavra em uma sequência de caracteres únicos e adicione o símbolo "</w>" no final da sequência como um identificador do final da palavra. Por exemplo, a palavra "baixo" é dividida na sequência "l␣o␣w␣</w>". Os elementos da sequência segmentados são chamados de bytes, ou seja, cada palavra é segmentada em uma sequência de bytes. Depois disso, de acordo com os pares de bytes adjacentes de cada sequência de bytes e a frequência da palavra da palavra, a frequência de cada par de bytes adjacente é contada, o par de bytes com a frequência mais alta é mesclado e adicionado ao vocabulário como uma nova palavra element e mesclar os pares de bytes em todas as palavras em um novo byte único. Conforme mostrado na Figura 4, na primeira iteração, o par de bytes com maior frequência é (e, s), então "es" é adicionado ao vocabulário como um elemento de palavra, e o adjacente (e, s) em todas as sequências são s) pares de bytes são combinados em es bytes. Repita esta etapa até que o tamanho do vocabulário do token BPE atinja o valor padrão especificado ou até que não haja pares de bytes que possam ser mesclados.

Depois que o vocabulário do token é determinado, as palavras inteiras na sequência de palavras de entrada que não estão no vocabulário são segmentadas. O algoritmo BPE percorre os tokens no vocabulário em ordem do mais longo para o mais curto e usa cada token e A palavra inteira ou o a parte que não está completamente dividida em tokens na sequência atual é correspondida e é dividida na sequência do token e nas partes restantes. Por exemplo, para a palavra "mais baixo</w>", primeiro ela é dividida em uma sequência de "baixo", "est</w>" combinando o elemento de palavra "est</w>" e depois combinando o elemento word "low" ", determine a sequência cujo resultado final da segmentação é "low", "est</w>". Através deste processo, o BPE tenta dividir as palavras da sequência em tokens conhecidos. Depois de percorrer o vocabulário de elementos de palavras, para a sequência de elementos de palavras segmentadas, a representação de elementos de palavras é consultada para cada elemento de palavras para formar uma sequência de representação de elementos de palavras. Se aparecer um elemento de palavra não registrado, ou seja, um elemento de palavra que não aparece no vocabulário BPE, um método semelhante ao da palavra não registrada será usado para dar-lhe a mesma representação e, finalmente, a sequência de representação do elemento de palavra de entrada será obtida .

Além disso, o BPE em nível de byte é usado para melhorar a qualidade da segmentação de palavras de corpora multilíngues (como texto contendo caracteres não ASCII), tratando os bytes como símbolos básicos para fusão. Grandes modelos de linguagem, como GPT-2, BART e LLaMA, usam esse método de segmentação de palavras. O tamanho do vocabulário do LLaMA original é 32K e é treinado principalmente com base no inglês. Portanto, muitos caracteres chineses não aparecem diretamente no vocabulário. Bytes são necessários para suportar todos os caracteres chineses, que podem ser escritos por 2 ou 3 Byte Tokens.Um caractere chinês completo.

Para modelos de linguagem grandes que usam codificação de pares de bytes, a sequência de saída também é uma sequência de tokens. Para a saída original, o intervalo de cada palavra é determinado com base na posição do símbolo terminal </w>, os tokens dentro do intervalo são mesclados e a saída é remontada em uma sequência de palavras como resultado final. WordPiece também é um algoritmo comum de análise de elementos de palavras, originalmente usado em sistemas de pesquisa por voz. Posteriormente, este algoritmo serve como tokenizer do BERT.

WordPiece tem uma ideia muito semelhante ao BPE, ambos mesclando elementos de palavras consecutivas iterativamente, mas têm critérios de seleção ligeiramente diferentes para mesclar. Para mesclar, o WordPiece precisa primeiro treinar um modelo de linguagem e usar o modelo de linguagem para pontuar todos os pares de tokens possíveis. Em cada mesclagem, o par palavra-elemento que mais aumenta a probabilidade dos dados de treinamento é selecionado.

Figura 4 Processo de cálculo do vocabulário de tokens no modelo BPE

Como o Google não lançou uma implementação oficial de seu algoritmo WordPiece, o HuggingFace fornece um método de medição de escolha mais intuitivo em seu curso on-line de PNL: a pontuação de um par de tokens é dividida pela contagem de coocorrência dos dois tokens no corpus de treinamento como o produto de suas respectivas contagens de ocorrência. A fórmula de cálculo é a seguinte:

A análise de tokens Unigram é outro método de análise de tokens aplicado a modelos de linguagem grandes. T5 e mBART usam esse método para construir analisadores de tokens. Ao contrário do BPE e do WordPiece, a análise de tokens Unigram começa com um conjunto suficientemente grande de tokens possíveis e, em seguida, remove iterativamente os tokens da lista atual até que o tamanho de vocabulário desejado seja alcançado. Com base no modelo de linguagem Unigram treinado, o aumento na probabilidade do corpus de treinamento após a exclusão de uma palavra do vocabulário atual é usado como critério de seleção.

Para estimar o modelo Unigram, é utilizado o algoritmo Expectation-Maximization (EM): em cada iteração, o melhor método de segmentação de palavras atual é primeiro encontrado com base no modelo de linguagem antigo e, em seguida, a unidade Unigram é reestimada. para atualizar o modelo de linguagem. Nesse processo, algoritmos de programação dinâmica (como o algoritmo de Viterbi) são usados ​​para encontrar com eficiência a melhor maneira de decompor palavras, dado um modelo de linguagem. Tomando como exemplo o código de codificação de pares de bytes introduzido no curso HuggingFace PNL, apresentamos a construção e o uso . A implementação do código é a seguinte:

de transformadores importar AutoTokenizer
de coleções importar defaultdict
corpus = [
    "Este é o Curso Abraçando o Rosto.",
    "Este capítulo é sobre tokenização.",
    "Esta seção mostra vários algoritmos de tokenizer.",
    "Esperamos que você consiga entender como eles são treinados e geram tokens.",
]
# Use o tokenizer GPT-2 para dividir a entrada em palavras:
tokenizer = AutoTokenizer.from_pretrained("gpt2")
word_freqs = defaultdict(int)
para texto em corpus:
    palavras_com_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(texto)
    new_words = [palavra por palavra, deslocamento em palavras_com_deslocamentos]
    para palavra em new_words:
        palavra_freqs[palavra] += 1
# Calcule o dicionário básico, usando todos os caracteres do corpus:
alfabeto = []
para palavra em word_freqs.keys():
    para letra em palavra:
        se a letra não estiver no alfabeto:
            alfabeto.append(letra)
alfabeto.sort()
# Adicione um token especial no início do dicionário. Existe apenas um token especial ``<|endoftext|>'' no GPT-2 para indicar o final do texto.
vocabulário = ["<|endoftext|>"] + alfabeto.copy()

# Divida as palavras em caracteres
splits = {palavra: [c para c em palavra] para palavra em word_freqs.keys()}
A função #compute_pair_freqs é usada para calcular a frequência de todos os pares de tokens no dicionário
def computar_pair_freqs(divisões):
    pair_freqs=defaultdict(int)
    para palavra, frequência em word_freqs.items():
        dividir = divide[palavra]
        se len(dividir) == 1:
            continuar
        para i no intervalo(len(split) - 1):
            par = (dividir[i], dividir[i + 1])
            par_freqs[par] += frequência
    retornar pair_freqs

A função #merge_pair é usada para mesclar pares de tokens
def merge_pair(a, b, divide):
    para palavra em word_freqs:
        dividir = divide[palavra]
        se len(dividir) == 1:
            continuar
    eu = 0
    enquanto eu < len(dividir) - 1:
        se dividir[i] == a e dividir[i + 1] == b:
             dividir = dividir[:i] + [a + b] + dividir[i + 2:]
        outro:
            eu += 1
        divide[palavra] = dividir
    divisões de retorno
# Treinamento iterativo, sempre selecionando pares de palavras com as pontuações mais altas para mesclar até que o tamanho do dicionário atinja a meta definida:
tamanho_vocabulário = 50

enquanto len(vocab) < vocab_size:
    pair_freqs = computar_pair_freqs(divisões)
    melhor_par = ""
    max_freq = Nenhum
    para par, freq em pair_freqs.items():
        se max_freq for Nenhum ou max_freq <freq:
            melhor_par = par
            frequência_max = frequência
    divisões = merge_pair(*melhor_par, divisões)
    mescla[melhor_par] = melhor_par[0] + melhor_par[1]
    vocab.append(melhor_par[0] + melhor_par[1])
# Após a conclusão do treinamento, a função tokenize é usada para segmentar o texto fornecido em tokens.
def tokenizar(texto):
    pre_tokenize_result = tokenizer._tokenizer.pre_tokenizer.pre_tokenize_str(texto)
    pre_tokenized_text = [palavra por palavra, deslocamento em pre_tokenize_result]
    splits = [[l para l em palavra] para palavra em pre_tokenized_text]
    para par, mescle em merges.items():
        para idx, divida em enumerar (divisões):
            eu = 0
            enquanto eu < len(dividir) - 1:
                se dividir[i] == par[0] e dividir[i + 1] == par[1]:
                    dividir = dividir[:i] + [mesclar] + dividir[i + 2:]
                outro:
                    eu += 1
            divisões[idx] = divisão
    retornar soma(divisões, [])
tokenize("Este não é um token.")

A classe transformadora do Huggingface integrou muitos tokenizadores e pode ser usada diretamente. Por exemplo, usar o tokenizer BERT para obter o código do token da entrada “Eu tenho uma nova GPU!” é o seguinte:

>>> da importação de transformadores BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
>>> tokenizer.tokenize("Tenho uma nova GPU!")
["i", "tenho", "a", "novo", "gp", "##u", "!"]

Ok, o que foi dito acima é sobre métodos comuns de processamento de dados de treinamento de modelos de linguagem grande. Se você quiser saber mais sobre modelos de linguagem grande, continue me seguindo!

Clique para seguir e conhecer as novas tecnologias da Huawei Cloud o mais rápido possível~

Tang Xiaoou, fundador do SenseTime, faleceu aos 55 anos. Em 2023, o PHP estagnou . O sistema Hongmeng está prestes a se tornar independente e muitas universidades criaram "aulas de Hongmeng". A versão para PC do Quark Browser iniciou testes internos . ByteDance foi "banido" pela OpenAI. A empresa iniciante de Zhihuijun foi refinanciada, com um valor de mais de 600 milhões de yuans e uma avaliação pré-monetária de 3,5 bilhões de yuans. Os assistentes de código de IA são tão populares que nem conseguem competir na programação classificações de idiomas O modem 5G e a tecnologia de radiofrequência do Mate 60 Pro estão muito à frente No Star, No Fix MariaDB se separa do SkySQL e se forma como uma empresa independente
{{o.nome}}
{{m.nome}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10322498
Recomendado
Clasificación