Neste artigo, você aprenderá como o scikit-ollama conecta a interface do scikit-learn com modelos Ollama executados localmente para realizar classificação de texto zero-shot; nenhuma API de nuvem é necessária.
Os tópicos que cobriremos incluem:
- O que é scikit-ollama e como ele se relaciona com o scikit-llm e o ecossistema scikit-learn.
- Como carregar um conjunto de dados de sentimento de crítica de filme e instanciar um classificador zero-shot apoiado por um modelo Llama 3 native.
- Como o padrão de ajuste/previsão funciona no contexto da classificação orientada por LLM de disparo zero e o que ele realmente faz nos bastidores.
Não vamos perder mais tempo.

Introdução
Modelo de linguagem grande A integração (LLM) em fluxos de trabalho tradicionais de aprendizado de máquina não só é possível hoje em dia, mas também transforma a forma como trabalhamos com esses modelos, tanto em termos de custo quanto de segurança. Depender apenas de APIs de nuvem comercial com gargalos de cotas e tráfego — bem como preocupações com privacidade de dados — não é mais a única abordagem a ser seguida, e scikit-ollama tem muito a dizer sobre isso. Esta biblioteca, amplamente baseada no scikit-llm, preenche a lacuna entre a sintaxe amigável do scikit-learn usada para treinar e usar modelos clássicos de aprendizado de máquina e o poder dos LLMs – especificamente modelos gratuitos instalados localmente em execução no Ollama.
Este artigo explora como configurar essa integração para construir um classificador zero-shot altamente prático para previsão de sentimentos em resenhas de filmes, usando um modelo native do Llama 3 em execução em sua máquina.
Passo a passo
Primeiro, como o scikit-ollama só é compatível com Python 3.9 ou superior, verifique a versão do Python atualmente instalada em seu ambiente de desenvolvimento native ou digital; o meu é um ambiente digital configurado dentro do Visible Studio Code:
Se você tiver o Python 3.8 ou inferior, certifique-se de instalar ou mudar para uma versão mais recente do Python antes de continuar. Em seguida, instale o scikit-ollama:
pip instalar scikit-ollama
pip instalar scikit–ollama |
Depois de instalado, podemos começar a codificar.
Scikit-LLM fornece seu próprio catálogo de conjuntos de dados em seu datasets módulo. Usaremos um desses conjuntos de dados baseados em texto, especificamente um para classificação de sentimentos de resenhas de filmes. Este é o código necessário para carregar os dados e exibir um exemplo de revisão junto com o rótulo de sentimento associado:
from skllm.datasets import get_classification_dataset # Carregando um conjunto de dados de análise de sentimento de demonstração contendo resenhas de filmes # Os rótulos esperados são: “positivo”, “negativo”, “neutro” X, y = get_classification_dataset() print(f”Pattern textual content: {X(0)} nLabel: {y(0)}”)
de skllm.conjuntos de dados importar get_classificação_conjunto de dados # Carregando um conjunto de dados de análise de sentimento de demonstração contendo resenhas de filmes # Os rótulos esperados são: “positivo”, “negativo”, “neutro” X, sim = get_classification_dataset() imprimir(f“Texto de exemplo: {X(0)} nRótulo: {y(0)}”) |
Saída:
Exemplo de texto: Fiquei absolutamente impressionado com as performances em ‘Summer time’s Finish’. A atuação foi excelente e o enredo me prendeu do início ao fim. Uma experiência cinematográfica verdadeiramente cativante que eu recomendo fortemente. Rótulo: positivo
Amostra texto: EU period absolutamente explodido ausente por o apresentações em ‘Verão’é Fim‘. O atuando period principal–entalhe, e o trama tive meu agarrado de começar para terminar. UM verdadeiramente cativante cinematográfico experiência que EU seria altamente recomendar. Rótulo: positivo |
Agora, para o próprio scikit-ollama. Você precisará ter o Ollama instalado localmente em sua máquina. Siga as instruções deste artigo para fazer isso e certifique-se de instalar o modelo que deseja usar neste guia. Para extrair um modelo, execute o seguinte comando em seu terminal:
O código abaixo importa o scikit-ollama ZeroShotOllamaClassifier class para instanciar um classificador de sentimento compatível apoiado por um modelo native de Ollama – llama3:newest. Certifique-se de ter este modelo instalado em sua máquina antes de continuar:
from skollama.fashions.ollama.classification.zero_shot import ZeroShotOllamaClassifier # Inicializando o classificador com nosso modelo Ollama native: llama3:newest clf = ZeroShotOllamaClassifier(mannequin=”llama3:newest”)
de skollama.modelos.ollama.classificação.tiro_zero importar ZeroShotOllamaClassificador # Inicializando o classificador com nosso modelo native Ollama: llama3:newest clf = ZeroShotOllamaClassificador(modelo=“lhama3:mais recente”) |
UM esclarecimento muito importante sobre o que acabamos de fazer. llama3:newest é um LLM de uso geral, originalmente desenvolvido para fazer muito mais do que classificar texto: você pode conversar com ele, debater ideias e muito mais. Então, por que o estamos usando para instanciar um classificador zero-shot? Ao fazer isso, o scikit-ollama — junto com o scikit-llm nos bastidores — reformula nossa tarefa de classificação pretendida em um immediate de geração de texto que é sintaticamente restritode modo que o modelo native produza apenas o que é necessário, agindo como um modelo clássico de aprendizado de máquina faria em termos de formato de saída, ao mesmo tempo em que aplica o poderoso raciocínio baseado em linguagem para o qual foi construído.
Este é o núcleo do valor do scikit-ollama e do scikit-llm: unir o poder dos LLMs com a simplicidade da interface do scikit-learn para tarefas preditivas como classificação.
É hora de aplicar o tradicional ritual de dois estágios do aprendizado de máquina: ajustar e prever. Embora o ajuste de um modelo normalmente envolva a atualização de pesos em um conjunto de dados rotulado, no contexto da classificação orientada por LLM de tiro zero não há atualização de peso actual. O match() A chamada é utilizada apenas para registrar os rótulos de classificação dos candidatos, orientando o modelo para aprendizagem in-contexto:
# “Ajustar” o modelo se resume a apenas fornecer a lista de rótulos candidatos clf.match(None, (“positivo”, “negativo”, “neutro”))
# “Ajustar” o modelo se resume a apenas fornecer a lista de rótulos candidatos clf.ajustar(Nenhum, (“positivo”, “negativo”, “neutro”)) |
Ao ligar para o predict() e passando por um conjunto de revisões de texto, a instância native do Ollama processa cada entrada como um immediate e analisa a saída para garantir que ela seja mapeada para um dos rótulos de classificação zero-shot, tudo nos bastidores.
O código abaixo gera previsões no conjunto de dados e imprime os três primeiros resultados. Observe que na primeira execução, é esperado um pequeno atraso no carregamento enquanto o modelo é inicializado, acompanhado por uma barra de progresso:
# Gerando e mostrando previsões em nosso conjunto de dados previsões = clf.predict(X) para texto, previsão em zip(X(:3), previsões(:3)): print(f”Textual content: ‘{textual content}'”) print(f”Predicted Sentiment: {prediction}n”)
# Gerando e mostrando previsões em nosso conjunto de dados previsões = clf.prever(X) para texto, previsão em zip(X(:3), previsões(:3)): imprimir(f“Texto: ‘{texto}'”) imprimir(f“Sentimento previsto: {predição}n”) |
Saída:
Texto: ‘Fiquei absolutamente impressionado com as performances em ‘Summer time’s Finish’. A atuação foi excelente e o enredo me prendeu do início ao fim. Uma experiência cinematográfica verdadeiramente cativante que eu recomendo fortemente.” Sentimento Previsto: positivo Texto: ‘Os efeitos especiais em ‘Star Battles: Nebula Battle’ eram de outro mundo. Eu senti como se estivesse realmente no espaço. O enredo foi incrivelmente envolvente e me deixou querendo mais. Excelente filme. Sentimento Previsto: positivo Texto: ”The Misplaced Symphony’ foi uma aula magistral em desenvolvimento de personagens e narrativa. A trilha sonora period assustadoramente bela e complementava perfeitamente as cenas intensas e emocionais. Parabéns ao diretor e ao elenco por criarem tal obra-prima.’ Sentimento previsto: positivo
Texto: ‘Fiquei absolutamente impressionado com as performances em’Verão‘enviar’. O atuando period principal–entalhe, e o trama tive meu agarrado de começar para terminar. UM verdadeiramente cativante cinematográfico experiência que EU seria altamente recomendar.‘ Sentimento previsto: positivo Texto: ‘O especial efeitos em ‘Batalhas Estelares: Conflito de Nebulosa’ eram fora de esse mundo. EU sentido como EU period na verdade em espaço. O enredo period incrivelmente envolvente e esquerda meu querendo mais. Excelente filme.‘ Sentimento previsto: positivo Texto: ‘‘A Sinfonia Perdida’ period um masterclass em personagem desenvolvimento e contar histórias. O pontuação period assustadoramente lindo e complementado o intenso, emocional cenas perfeitamente. Parabéns para o diretor e elenco para criando tal um obra de arte.‘ Previsto Sentimento: positivo |
O modelo native produz apenas o que se destina, agindo como um modelo clássico de aprendizado de máquina faria em termos de formato de saída, ao mesmo tempo em que aplica o poderoso raciocínio interno baseado na linguagem para o qual foi construído.
Você acabou de aproveitar um modelo native do Ollama para realizar uma tarefa de inferência específica, classificação de texto, inteiramente dentro dos limites de sua própria máquina.
Concluindo
Este artigo mostrou como trocar APIs LLM baseadas em nuvem por modelos Ollama locais para executar tarefas de inferência sem taxas de assinatura ou dados de texto confidenciais saindo de sua máquina. O ingrediente principal: a biblioteca scikit-ollama, que encapsula elegantemente essa integração native e a disponibiliza como apenas mais um pipeline do scikit-learn.