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

  1. Recopilar dades: Obtenir dades de xarxes socials com Twitter.
  2. Preprocessar dades: Netejar i transformar les dades per a l'anàlisi.
  3. Construir un model de Machine Learning: Utilitzar algoritmes de classificació per predir sentiments.
  4. Avaluar el model: Utilitzar mètriques d'avaluació per mesurar el rendiment del model.
  5. 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

  1. 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)

  1. 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]

  1. 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)

  1. 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}')

  1. 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)

  1. 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

Mòdul 2: Fonaments d'Estadística i Probabilitat

Mòdul 3: Preprocessament de Dades

Mòdul 4: Algoritmes de Machine Learning Supervisat

Mòdul 5: Algoritmes de Machine Learning No Supervisat

Mòdul 6: Avaluació i Validació de Models

Mòdul 7: Tècniques Avançades i Optimització

Mòdul 8: Implementació i Desplegament de Models

Mòdul 9: Projectes Pràctics

Mòdul 10: Recursos Addicionals

© Copyright 2024. Tots els drets reservats