Conheça o Phi-3, um Modelo Linguagem Compacto
Nos últimos anos, o progresso notável da IA pode ser amplamente atribuído aos esforços para ampliar os conjuntos de dados e modelos cada vez maiores. Os LLMs aumentaram de tamanho de meros bilhões de parâmetros há apenas cinco anos (GPT-2 tinha 1,5 bilhões de parâmetros) para trilhões de parâmetros atualmente.
O direcionamento para esse esforço é em parte devido as melhorias que são obtidas ao treinar modelos com quantidade de dados cada vez maiores. Ou seja, ao aumentar o tamanho de um modelo de linguagem (adicionando mais parâmetros) e ao treinar com mais dados, o desempenho do modelo tende a melhorar o desempenho de maneira previsível e consistente — o que é conhecido como scaling laws.
No entanto, essa teoria agora é desafiada pela existência de novos modelos menores que permitem interagir com dados de novas maneiras.
Em trabalhos anteriores sobre os modelos phi, foi mostrado que uma combinação de dados da web disponível publicamente e dados sintéticos criados por LLM, possibilita um desempenho em modelos menores que normalmente só era visto em modelos muito maiores.
Um exemplo é modelo linguístico phi-2 (de 2.7 bilhões de parâmetros), que teve desempenho similar a de modelos 25 vezes maiores treinados com dados regulares.
Bootcamp LLM4Devs
📚 Você é dev e quer criar aplicações baseadas em LLMs?
No próximo dia 13/07/2024 (sábado), vai rolar um bootcamp online de 4h de duração, sobre desenvolvimento de aplicações baseadas em LLMs. Vai ser super hands on!
Alguns dos tópicos abordados:
🟠 Entendendo sobre LLMs
🟣 Testando prompts e engenharia de prompts
🔵 Entendendo de embeddings
🟢 Comparando dados por similaridade
🟡 Conectando com um banco vetorial
E tem mais! Se inscrevendo no bootcamp, você ganha acesso a três cursos sobre LLMs.
Interessou? Clique aqui e saiba mais:
Small language models
Os "small language models" (SLMs), ou pequenos modelos de linguagem, são uma classe de modelos que possuem um número relativamente pequeno de parâmetros em comparação com osLLMs. Enquanto os LLMs, como o GPT-3, possuem bilhões ou até trilhões de parâmetros, os SLMs têm uma quantidade significativamente menor, muitas vezes na faixa de milhões a poucos bilhões de parâmetros.
A principal vantagem dos SLMs é a sua eficiência. Devido ao menor número de parâmetros, eles requerem menos poder computacional e memória para treinamento e execução, tornando-os mais acessíveis para organizações com recursos limitados. Essa eficiência permite que os SLMs sejam implantados em dispositivos locais, como smartphones e computadores pessoais, sem a necessidade de conexão constante à nuvem. Isso não apenas reduz a latência nas respostas, mas também aumenta a privacidade dos dados, pois as informações não precisam ser enviadas para servidores remotos.
Apesar de seu tamanho menor, os SLMs podem ser altamente eficazes em uma variedade de tarefas de processamento de linguagem natural. Isso é possível graças a técnicas avançadas de treinamento que utilizam dados de alta qualidade e novos métodos de filtragem. Por exemplo, os SLMs podem ser treinados com conjuntos de dados cuidadosamente selecionados e sinteticamente gerados, permitindo que eles alcancem desempenho semelhante ao de modelos maiores em tarefas específicas.
Além disso, os SLMs são mais facilmente ajustáveis para aplicações especializadas. Organizações podem personalizar esses modelos para atender a necessidades específicas com menos esforço e recursos do que seriam necessários para adaptar um LLM. Isso os torna ideais para cenários onde a rapidez na resposta e a execução local são cruciais, como em sistemas de suporte ao cliente, dispositivos de IoT e aplicativos em áreas remotas com conectividade limitada.
Phi-3-mini, o estado da arte do SLMs
O modelo phi-3-mini é um SLM open source lançado mais recentemente pela Microsoft. O phi-3-mini é baseado em uma arquitetura decoder-only do transformer, com comprimento de contexto de 4.000 tokens. Também foi introduzido uma versão de contexto mais longo, chamada phi-3-mini-128K, que usa a técnica LongRope para estender o comprimento do contexto para 128.000 tokens.
O phi-3-mini é construído de forma semelhante ao Llama-2 e usa o mesmo tokenizador com um vocabulário de 320.641 palavras. Isso significa que todos os pacotes desenvolvidos para a família de modelos Llama-2 podem ser adaptados diretamente para o phi-3-mini. O modelo foi treinado usando bfloat16 com um total de 3,3 trilhões de tokens. O modelo já está ajustado para conversação.
O modelo phi-3-small, com 7 bilhões de parâmetros, utiliza o tokenizador tiktoken, que melhora a tokenização multilíngue, com um vocabulário de 100.352 palavras e um comprimento de contexto padrão de 8192 tokens. Ele segue a arquitetura padrão de um decoder-only com 7 bilhões de parâmetros.
Graças ao seu tamanho pequeno, o phi-3-mini pode ser quantizado para 4 bits, ocupando apenas cerca de 1,8 GB de memória. De acordo com o relatório oficial, o modelo foi testado após quantização e implantado em um iPhone 14 com chip A16 Bionic, rodando nativamente no dispositivo e totalmente offline, alcançando mais de 12 tokens por segundo.
Em termos de capacidades de modelos de linguagem grandes (LLM), embora o modelo phi-3-mini alcance um nível de compreensão e raciocínio linguístico semelhante ao de modelos muito maiores, ele ainda é fundamentalmente limitado pelo seu tamanho para certas tarefas.
Hello world com o Phi-3-mini
O modelo phi-3-mini está disponível no huggingface, logo pode ser acessado usando a sua API oficial. Para esse exemplo, utilizaremos o LangChain para comunicar com o modelo phi-3-mini no huggingface.
O código abaixo configura e utiliza um modelo de linguagem da HuggingFace para gerar texto a partir de um prompt específico.
from langchain_community.llms import HuggingFaceEndpoint
import os
from dotenv import load_dotenv
load_dotenv()
os.environ["HUGGINGFACEHUB_API_TOKEN"] = os.getenv("HG")
model = HuggingFaceEndpoint(repo_id="microsoft/Phi-3-mini-4k-instruct", task="text-generation", temperature=0.9)
prompt = f"""
<|user|>
How to explain Internet for a medieval knight?<|end|>
<|assistant|>
"""
response = model.invoke(prompt)
print(response)
Inicialmente, o código importa as bibliotecas necessárias e carrega as variáveis de ambiente a partir de um arquivo `.env` usando `load_dotenv()`.
Em seguida, ele define a variável de ambiente `HUGGINGFACEHUB_API_TOKEN` com o valor da variável `HG` carregada do arquivo `.env`, o que é necessário para autenticar a API da Hugging Face. Você precisa criar um token no HuggingFace para acessar sua API.
O código então cria uma instância do modelo `HuggingFaceEndpoint` especificando o identificador do repositório do modelo (`repo_id`) e a tarefa que ele deve realizar (`task`), que no caso é a geração de texto. Também definimos o parâmetro `temperature` para ajustar a criatividade da resposta gerada pelo modelo.
Depois, o código define um prompt, que neste caso é uma pergunta sobre como explicar a Internet para um cavaleiro medieval. Perceba os tokens especiais que são utilizados por esse modelo.
Por fim, usamos o método `invoke()` do modelo, ele gera uma resposta para o prompt e imprime essa resposta.
Conclusão
O progresso notável da IA nos últimos anos se deve, em grande parte, aos esforços para aumentar os modelos e os conjuntos de dados. LLMs cresceram de bilhões de parâmetros para trilhões, melhorando o desempenho de maneira previsível através das chamadas "leis de escala". No entanto, a introdução de novos modelos menores que interagem de maneiras inovadoras com os dados desafiou essa teoria. Trabalhos anteriores mostraram que a combinação de dados disponíveis na web e dados sintéticos gerados por LLMs pode permitir que modelos menores alcancem um desempenho anteriormente reservado a modelos maiores. Um exemplo disso é o modelo phi-2, que com 2,7 bilhões de parâmetros conseguiu um desempenho semelhante ao de modelos 25 vezes maiores.
Os "small language models" (SLMs) destacam-se pela eficiência, requerendo menos recursos computacionais e podendo ser implementados localmente em dispositivos como smartphones. Embora menores, eles podem ser altamente eficazes em diversas tarefas de processamento de linguagem natural, especialmente com técnicas de treinamento avançadas e filtragem de dados.
O modelo phi-3-mini, por exemplo, é um SLM baseado em uma arquitetura transformer decoder-only, com comprimento de contexto estendido e alta adaptabilidade para aplicações especializadas. Ele pode ser quantizado para ocupar apenas 1,8 GB de memória, funcionando eficientemente em dispositivos como o iPhone 14. Assim, os SLMs oferecem uma alternativa poderosa e eficiente aos LLMs, combinando desempenho robusto com acessibilidade e versatilidade para diversas aplicações práticas.