Gestire le dipendenze di spaCy per il Natural Language Processing

Immagine di copertina

Nel mondo dello sviluppo Python, la gestione delle dipendenze è un aspetto cruciale per garantire la riproducibilità e la stabilità dei progetti. In questo articolo, esploreremo come utilizzare efficacemente il file requirements.txt, gestire le versioni delle librerie e installare i modelli per spaCy, una delle librerie più potenti per il Natural Language Processing.

Come si usa il file requirements.txt

Il file requirements.txt è lo standard de facto per specificare le dipendenze di un progetto Python. Questo file di testo semplice contiene l’elenco di tutti i pacchetti necessari per far funzionare correttamente l’applicazione.

Creazione di un file requirements.txt

Per creare un file requirements.txt a partire dall’ambiente attuale, puoi utilizzare pip:

pip freeze > requirements.txt

Questo comando genera automaticamente una lista di tutti i pacchetti installati con le loro versioni esatte.

Struttura e sintassi

Un file requirements.txt tipico ha questa struttura:

numpy==1.24.3
pandas>=1.5.0,<2.0.0
requests~=2.28.0
flask
spacy>=3.4.0

Installazione delle dipendenze

Per installare tutte le dipendenze specificate nel file requirements.txt, usa il seguente comando:

pip install -r requirements.txt

Alcuni consigli da seguire quando si tratta della gestione delle librerie Python sono:

  • Usare ambienti virtuali: Sempre isolare le dipendenze del progetto, così da evitare di avere conflitti all’interno dello stesso ambiente di sviluppo se si usano versioni o librerie diverse.
  • Specifica versioni critiche: Per librerie che cambiano API frequentemente o che sono fondamentali per il progetto, specifica versioni esatte o range di versione ristretti.
  • Mantieni il file aggiornato: Documenta ogni modifica significativa, aggiungendo o rimuovendo pacchetti dal requirements.txt. Eventualmente, …
  • …separa development e production: Considera file separati come requirements-dev.txt

Per esempio, un file ben strutturato che separa le dipendenze di produzione da quelle di sviluppo potrebbe apparire così:

# Core dependencies
flask==2.3.2
sqlalchemy>=1.4.0,<2.0.0
psycopg2-binary==2.9.6

# NLP dependencies
spacy>=3.6.0,<4.0.0
transformers>=4.21.0

# Development dependencies (optional)
pytest>=7.0.0
black>=22.0.0
flake8>=5.0.0

Gestione delle versioni delle librerie

La gestione delle versioni è fondamentale per evitare conflitti di dipendenze e garantire la compatibilità nel tempo.

Operatori di versioning

Python utilizza diversi operatori per specificare i vincoli di versione:

  • == (versione esatta): pandas==1.5.3
  • >= (maggiore o uguale): numpy>=1.20.0
  • <= (minore o uguale): matplotlib<=3.6.0
  • > e <** (maggiore/minore strict): scipy>1.8.0
  • ~= (compatible release): requests~=2.28.0 (equivale a >=2.28.0, ==2.28.*)
  • , (AND logico): django>=3.2,<4.0

Strategie di versioning

1. Pinning esatto

flask==2.3.2
numpy==1.24.3

Pro: Massima riproducibilità Contro: Difficile aggiornamento, possibili vulnerabilità di sicurezza

2. Range semantico

flask>=2.3.0,<3.0.0
numpy>=1.20.0,<2.0.0

Pro: Bilancio tra stabilità e aggiornamenti Contro: Possibili breaking changes minori

3. Compatible release

flask~=2.3.0
numpy~=1.24.0

Pro: Accetta patch e fix automaticamente Contro: Controllo limitato sulle versioni

Gestione dei conflitti

Quando si verificano conflitti di dipendenze, utilizza strumenti come:

# Controlla conflitti
pip check

# Risoluzione guidata con pip-tools
pip install pip-tools
pip-compile requirements.in

Installazione modelli spaCy

spaCy è una libreria avanzata per il Natural Language Processing che richiede modelli linguistici specifici per funzionare efficacemente. Offre diversi modelli pre-addestrati per varie lingue e compiti, modelli che spesso rappresentano un pre-requisito fondamentale per molte applicazioni NLP. Per questo, vediamo come installarli correttamente usando il file requirements.txt.

Tipi di modelli spaCy

spaCy offre diversi tipi di modelli per ogni lingua:

  • sm (small): ~15MB, veloce ma meno accurato
  • md (medium): ~50MB, buon compromesso
  • lg (large): ~500MB, più accurato ma più lento
  • trf (transformer): basato su transformer, massima accuratezza

La scelta del modello dipende dalle esigenze specifiche del progetto. Per installare i modelli nel modo “tradizionale” usando pip, si può seguire questo esempio:

# Modello inglese small
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.6.0/en_core_web_sm-3.6.0.tar.gz

# Modello inglese medium
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_md-3.6.0/en_core_web_md-3.6.0.tar.gz

# Modello italiano
pip install https://github.com/explosion/spacy-models/releases/download/it_core_news_sm-3.6.0/it_core_news_sm-3.6.0.tar.gz

Altrimenti, per una maggiore riproducibilità di esecuzione dell’ambiente, è possibile includere modelli spaCy nel requirements.txt:

spacy>=3.6.0,<4.0.0
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.6.0/en_core_web_sm-3.6.0.tar.gz
https://github.com/explosion/spacy-models/releases/download/it_core_news_sm-3.6.0/it_core_news_sm-3.6.0.tar.gz

A quel punto, sarà sufficiente caricare il modello come mostrato di seguito:


```python
import spacy

# Carica modello inglese
nlp_en = spacy.load("en_core_web_sm")

# Carica modello italiano
nlp_it = spacy.load("it_core_news_sm")

Conclusioni

La corretta gestione delle dipendenze e dei modelli spaCy è essenziale per sviluppare applicazioni Python robuste e scalabili. Utilizzando il file requirements.txt con versioning appropriato e automatizzando l’installazione dei modelli spaCy, puoi garantire che il tuo ambiente di sviluppo sia facilmente riproducibile e mantenibile nel tempo!


🔗 Leggi anche:

Conosci meglio chi ha scritto questo articolo

Serena Sensini

Ciao! Mi chiamo Serena Sensini e sono la creatrice di @ TheRedCode.it. Ho aperto questo blog nel 2021 per raccontare il mio lavoro e il mondo dell’informatica a parole semplici, in piccole pillole e alla portata di tutte le persone.

Sono un’ingegnera informatica specializzata in ambito AI & NLP. Di giorno lavoro come CTO @ Welyk e come Innovation & Emerging Technologies Leader @ Dedalus, mentre di notte scrivo e sono autrice di 5 libri -per ora-. 🖊️

Foto di Serena Sensini

Partners

Community, aziende e persone che supportano attivamente il blog

Vuoi diventare tech content creator? 🖊️

Se ti va di raccontare la tua esperienza nel mondo tech, questo è il posto giusto.

Cerchiamo voci autentiche, esempi pratici e punti di vista utili per chi legge.

Scrivici a collaborazioni[at]theredcode.it con una proposta: idea, taglio del contenuto e una breve presentazione. Non vediamo l'ora di leggere la tua esperienza!

Invia la tua idea