Introducció
L'anàlisi de sentiments és una tècnica de processament del llenguatge natural (NLP) que s'utilitza per determinar si les dades textuals expressen sentiments positius, negatius o neutres. En aquest projecte, aplicarem tècniques de Machine Learning per analitzar els sentiments en publicacions de xarxes socials.
Objectius del Projecte
- Recopilar dades: Obtenir dades de xarxes socials com Twitter.
- Preprocessar dades: Netejar i transformar les dades per a l'anàlisi.
- Construir un model de Machine Learning: Utilitzar algoritmes de classificació per predir sentiments.
- Avaluar el model: Utilitzar mètriques d'avaluació per mesurar el rendiment del model.
- Desplegar el model: Implementar el model en un entorn de producció.
Requisits Previs
- Coneixements bàsics de Python.
- Familiaritat amb biblioteques com Pandas, Numpy, Scikit-learn, i NLTK.
- Accés a una API de xarxes socials (per exemple, Twitter API).
Passos del Projecte
- Recopilar Dades
1.1. Configuració de l'API de Twitter
Per obtenir dades de Twitter, necessitarem configurar l'API de Twitter. Això implica crear una aplicació a Twitter Developer i obtenir les claus d'API.
import tweepy # Configuració de les claus d'API consumer_key = 'your_consumer_key' consumer_secret = 'your_consumer_secret' access_token = 'your_access_token' access_token_secret = 'your_access_token_secret' # Autenticació amb l'API de Twitter auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth)
1.2. Recopilació de Tweets
Utilitzarem l'API de Twitter per recopilar tweets que continguin certes paraules clau.
# Funció per obtenir tweets def obtenir_tweets(paraula_clau, nombre_tweets): tweets = tweepy.Cursor(api.search, q=paraula_clau, lang="ca").items(nombre_tweets) tweets_list = [[tweet.text, tweet.created_at, tweet.user.screen_name] for tweet in tweets] return tweets_list # Exemple de recopilació de tweets tweets = obtenir_tweets('Machine Learning', 100)
- Preprocessar Dades
2.1. Neteja de Text
El text dels tweets pot contenir enllaços, mencions, hashtags, etc. que necessitem eliminar.
import re def netejar_text(text): text = re.sub(r'http\S+', '', text) # Eliminar enllaços text = re.sub(r'@\w+', '', text) # Eliminar mencions text = re.sub(r'#\w+', '', text) # Eliminar hashtags text = re.sub(r'\W', ' ', text) # Eliminar caràcters especials text = text.lower() # Convertir a minúscules return text # Aplicar la funció de neteja tweets_netejats = [netejar_text(tweet[0]) for tweet in tweets]
2.2. Tokenització i Lemmatització
Utilitzarem la biblioteca NLTK per tokenitzar i lemmatitzar el text.
import nltk from nltk.tokenize import word_tokenize from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer nltk.download('punkt') nltk.download('stopwords') nltk.download('wordnet') lemmatizer = WordNetLemmatizer() stop_words = set(stopwords.words('catalan')) def preprocessar_text(text): tokens = word_tokenize(text) tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words] return ' '.join(tokens) # Aplicar la funció de preprocessament tweets_preprocessats = [preprocessar_text(tweet) for tweet in tweets_netejats]
- Construir un Model de Machine Learning
3.1. Vectorització del Text
Convertirem el text preprocessat en vectors numèrics utilitzant TF-IDF.
from sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer(max_features=5000) X = vectorizer.fit_transform(tweets_preprocessats).toarray()
3.2. Etiquetatge de Dades
Per a aquest projecte, etiquetarem manualment una mostra de tweets com a positius, negatius o neutres.
# Exemple d'etiquetatge manual y = [1 if 'positiu' in tweet else 0 for tweet in tweets_preprocessats] # 1 per positiu, 0 per negatiu/neutre
3.3. Entrenament del Model
Utilitzarem un algorisme de classificació com la Regressió Logística.
from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # Divisió de les dades en conjunts d'entrenament i prova X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # Entrenament del model model = LogisticRegression() model.fit(X_train, y_train)
- Avaluar el Model
4.1. Mètriques d'Avaluació
Utilitzarem mètriques com l'exactitud, la precisió, el recall i el F1-score per avaluar el rendiment del model.
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # Prediccions y_pred = model.predict(X_test) # Càlcul de mètriques accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) print(f'Exactitud: {accuracy}') print(f'Precisió: {precision}') print(f'Recall: {recall}') print(f'F1-score: {f1}')
- Desplegar el Model
5.1. Implementació en Producció
Podem utilitzar frameworks com Flask per crear una API que permeti fer prediccions en temps real.
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/predict', methods=['POST']) def predict(): data = request.get_json(force=True) text = data['text'] text_clean = preprocessar_text(netejar_text(text)) text_vector = vectorizer.transform([text_clean]).toarray() prediction = model.predict(text_vector) return jsonify({'sentiment': 'positiu' if prediction[0] == 1 else 'negatiu'}) if __name__ == '__main__': app.run(debug=True)
- Consideracions Ètiques i de Privacitat
És important tenir en compte les implicacions ètiques i de privacitat quan es treballa amb dades de xarxes socials. Assegureu-vos de complir amb les polítiques de privacitat de les plataformes i de respectar la privacitat dels usuaris.
Conclusió
En aquest projecte, hem après a recopilar, preprocessar i analitzar sentiments en dades de xarxes socials utilitzant tècniques de Machine Learning. Hem construït un model de classificació, l'hem avaluat i hem vist com desplegar-lo en un entorn de producció. Aquest projecte proporciona una base sòlida per a l'anàlisi de sentiments i pot ser ampliat per incloure més dades i tècniques avançades.
Curs de Machine Learning
Mòdul 1: Introducció al Machine Learning
- Què és el Machine Learning?
- Història i evolució del Machine Learning
- Tipus de Machine Learning
- Aplicacions del Machine Learning
Mòdul 2: Fonaments d'Estadística i Probabilitat
- Conceptes bàsics d'estadística
- Distribucions de probabilitat
- Inferència estadística
- Teorema de Bayes
Mòdul 3: Preprocessament de Dades
Mòdul 4: Algoritmes de Machine Learning Supervisat
- Regressió lineal
- Regressió logística
- Arbres de decisió
- Màquines de suport vectorial (SVM)
- K-Veïns més propers (K-NN)
- Xarxes neuronals
Mòdul 5: Algoritmes de Machine Learning No Supervisat
- Clustering: K-means
- Clustering jeràrquic
- Anàlisi de components principals (PCA)
- Anàlisi d'agrupament DBSCAN
Mòdul 6: Avaluació i Validació de Models
Mòdul 7: Tècniques Avançades i Optimització
- Ensemble Learning
- Gradient Boosting
- Xarxes neuronals profundes (Deep Learning)
- Optimització d'hiperparàmetres
Mòdul 8: Implementació i Desplegament de Models
- Frameworks i biblioteques populars
- Implementació de models en producció
- Manteniment i monitoratge de models
- Consideracions ètiques i de privacitat
Mòdul 9: Projectes Pràctics
- Projecte 1: Predicció de preus d'habitatges
- Projecte 2: Classificació d'imatges
- Projecte 3: Anàlisi de sentiments a xarxes socials
- Projecte 4: Detecció de fraus