Swift para aprendizado de máquina: possibilidades e limitações na prática
O mundo do aprendizado de máquina (ML) por muito tempo foi associado exclusivamente ao Python — uma linguagem com um rico ecossistema de bibliotecas como TensorFlow, PyTorch e scikit-learn. No entanto, com o crescimento da popularidade do iOS e macOS, e com o surgimento de frameworks poderosos da Apple, a linguagem Swift começou a ocupar seu nicho em ML. Neste artigo, vamos analisar o quão adequado Swift é para tarefas de aprendizado de máquina, onde estão seus pontos fortes, onde estão suas limitações críticas, e fornecer exemplos práticos de código.
Por que Swift? Principais vantagens para ML
Swift é uma linguagem compilada, estaticamente tipada, desenvolvida pela Apple. Seus principais trunfos para ML são desempenho e segurança de tipos. Ao contrário do Python, que é interpretado e pode ser lento para cálculos pesados, Swift compila para código nativo, proporcionando um ganho de velocidade de 2 a 5 vezes em algoritmos idênticos. Além disso, Swift é perfeitamente integrado ao ecossistema da Apple: Core ML e Create ML permitem implantar modelos diretamente nos dispositivos dos usuários.
Frameworks principais
- Core ML — framework principal para integrar modelos treinados em aplicativos iOS/macOS. Suporta modelos do TensorFlow, PyTorch e ONNX.
- Create ML — ferramenta para treinar modelos simples (classificação de imagens, texto, regressão) sem escrever código ou com código mínimo em Swift.
- Swift for TensorFlow (S4TF) — projeto experimental do Google que permitia escrever redes neurais em Swift com integração total com TensorFlow. Infelizmente, o projeto foi congelado, mas suas ideias vivem em outras iniciativas.
- MLX — novo framework da Apple para aprendizado de máquina em dispositivos, otimizado para chips Apple Silicon.
Exemplo prático: classificação de imagens com Core ML
Vamos considerar um exemplo simples — carregar o modelo pré-treinado MobileNetV2 e classificar uma imagem. Este código funciona no iOS e macOS.
import CoreMLimport Visionimport UIKit
// Carregando o modeloguard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { fatalError("Não foi possível carregar o modelo")}
// Criando a requisiçãolet request = VNCoreMLRequest(model: model) { request, error in guard let results = request.results as? [VNClassificationObservation], let topResult = results.first else { print("Nenhum resultado") return } print("Classe mais provável: \\(topResult.identifier) com probabilidade \\(topResult.confidence)")}
// Carregando a imagemguard let image = UIImage(named: "cat.jpg"), let ciImage = CIImage(image: image) else { fatalError("Não foi possível carregar a imagem")}
let handler = VNImageRequestHandler(ciImage: ciImage)try? handler.perform([request])Este código demonstra como é fácil integrar ML em um aplicativo nativo. Tudo funciona "pronto para uso", sem necessidade de configurar o ambiente.
Criando um modelo em Swift com Create ML
Create ML permite treinar modelos diretamente no Xcode. Aqui está um exemplo de treinamento de um classificador de texto em Swift:
import CreateMLimport Foundation
// Carregando dados de um JSONlet data = try MLDataTable(contentsOf: URL(fileURLWithPath: "tweets.json"))
// Dividindo em conjuntos de treino e testelet (trainingData, testData) = data.randomSplit(by: 0.8, seed: 42)
// Criando e treinando o modelolet classifier = try MLTextClassifier(trainingData: trainingData, textColumn: "text", labelColumn: "sentiment")
// Avaliando a precisãolet evaluation = classifier.evaluation(on: testData)print("Precisão: \\(evaluation.classificationError)")
// Salvando o modelolet modelURL = URL(fileURLWithPath: "SentimentClassifier.mlmodel")try
```