Rilevamento di novità testuali.  Come utilizzare la covarianza minima… |  di Ilia Teimouri |  Ottobre 2023

 | Intelligenza-Artificiale

Come utilizzare il determinante della covarianza minima (MCD) per rilevare nuovi titoli di notizie

fotografato da Ali Shah Lakhani SU Unsplash.

Nell’era dell’informazione di oggi, siamo quotidianamente inondati di articoli di notizie. Molti di questi articoli sono semplicemente delle riformulazioni degli stessi fatti, ma alcuni contengono informazioni veramente nuove che possono avere un impatto notevole sul nostro processo decisionale. Ad esempio, qualcuno che desidera investire in Meta potrebbe voler concentrarsi su articoli che contengono informazioni esclusive, piuttosto che su quelli che semplicemente ribadiscono dati pubblicati in precedenza. È fondamentale essere in grado di distinguere tra notizie nuove e notizie ridondanti, in modo da poter prendere decisioni informate senza essere sopraffatti dal diluvio di informazioni.

Qui è dove rilevamento della novità Vieni a sederti. Il rilevamento delle novità si riferisce al compito di identificare dati nuovi o sconosciuti che differiscono dai dati visualizzati in precedenza. È una tecnica di apprendimento non supervisionato utilizzata per rilevare anomalie, valori anomali o nuovi modelli nei dati. L’idea chiave è costruire un modello di dati “normali” e quindi utilizzare quel modello per identificare i punti dati che si discostano dalla normalità.

Nel contesto degli articoli di notizie, ciò comporta il rilevamento se un articolo contiene nuove informazioni che non sono disponibili altrove. Per fare questo, possiamo forse sviluppare una linea di base di ciò che è noto o disponibile, e poi confrontare le nuove informazioni con quella linea di base. Se ci sono differenze significative tra le nuove informazioni e lo scenario di base, allora possiamo dire che l’informazione è nuova.

Determinante minimo della covarianza (MCD)

Il metodo MCD (Minimum Covariance Determinant) è una tecnica per stimare la matrice di covarianza di un set di dati. Può essere utilizzato per creare una forma ellittica che incapsula la modalità centrale di una distribuzione gaussiana e tutti i punti dati che si trovano al di fuori di questa forma possono essere considerati novità (a volte indicati come anomalie). Il metodo MCD è particolarmente utile per set di dati rumorosi o che presentano valori anomali, poiché può aiutare a identificare punti dati insoliti che potrebbero non adattarsi al modello generale dei dati. (vedi esempio).

MCD può essere utilizzato per rilevare novità nei titoli delle notizie. Sebbene il metodo possa essere generalizzato ad articoli interi, il nostro obiettivo è fornire un esempio conciso di applicazione della MCD per il rilevamento di novità su testi brevi. MCD è uno stimatore affidabile di posizione e dispersione multivariata, che lo rende particolarmente adatto per identificare valori anomali in dati ad alta dimensione come il testo. Su un set di dati di titoli di notizie, MCD apprenderà un modello di titoli “normali” basato sulla covarianza. Possiamo quindi utilizzare questo modello per valutare nuovi titoli e contrassegnare quelli che si discostano significativamente dalla norma come potenziali storie nuove o anomale. Il codice di esempio e gli esperimenti illustreranno come funziona nella pratica il rilevamento delle novità MCD.

Approccio graduale

Incorporamento: Nell’apprendimento automatico utilizziamo incorporamento come un modo per rappresentare i dati in una forma più compatta ed efficiente. L’incorporamento trasforma i dati grezzi in una rappresentazione a dimensione inferiore che cattura le caratteristiche più importanti dei dati.

L’incorporamento del testo è un tipo specifico di incorporamento utilizzato per trasformare i dati di testo in una rappresentazione vettoriale. Prende in considerazione la semantica e le relazioni tra parole, frasi e frasi e le converte in una rappresentazione numerica che cattura il significato del testo. Ciò ci consente di eseguire operazioni come la ricerca di testo simile, il raggruppamento di testo in base al significato semantico e altro ancora.

Supponiamo di raccogliere i seguenti titoli su Meta negli ultimi due mesi:

news = (
"Mark Zuckerberg touts potential of remote work in metaverse as Meta threatens employees for violating return-to-office mandate",
"Meta Quest 3 Shows Us the Metaverse Dream isn’t Dead Yet",
"Meta has Apple to thank for giving its annual VR conference added sizzle this year",
"Meta launches AI chatbots for Instagram, Facebook and WhatsApp",
"Meta Launches AI Chatbots for Snoop Dogg, MrBeast, Tom Brady, Kendall Jenner, Charli D’Amelio and More",
"Llama 2: why is Meta releasing open-source AI model and are there any risks?",
"Meta's Mandatory Return to Office Is 'a Mess'",
"Meta shares soar on resilient revenue and $40bn in buybacks",
"Facebook suffers fresh setback after EU ruling on use of personal data",
"Facebook owner Meta hit with record €1.2bn fine over EU-US data transfers"
)

Possiamo utilizzare OpenAI per generare l’incorporamento di testo per ciascuna frase come:

def get_embedding(text, 
model = 'text-embedding-ada-002'):
text = text.replace("\n", " ")
return openai.Embedding.create(input = (text), engine = model)('data')(0)('embedding')

df('embedding') = df.news.apply(lambda x: get_embedding(x))
df('embedding') = df('embedding').apply(np.array)

matrix = np.vstack(df('embedding').values)
matrix.shape

# Output: (10, 1536)

IL text-embedding-ada-002 modello da OpenAI è un modello di incorporamento all’avanguardia che accetta una frase come input e restituisce un vettore di incorporamento di lunghezza 1536. Il vettore rappresenta il significato semantico della frase di input e può essere utilizzato per attività quali somiglianza semantica, classificazione del testo e altro. L’ultima versione del modello incorpora tecniche di rappresentazione del linguaggio all’avanguardia per produrre incorporamenti altamente accurati e robusti. Se non hai accesso a OpenAI, puoi utilizzare altri modelli di incorporamento come Trasformatori di frasi.

Una volta prodotto l’incorporamento, creiamo una variabile matrice che memorizza una rappresentazione matriciale degli incorporamenti dal file df(‘embedding’) colonna. Questo viene fatto utilizzando il vstack funzione da NumPy libreria, che impila verticalmente tutti i vettori (ognuno dei quali rappresenta una singola frase) nella colonna per creare una matrice. Ciò ci consente di utilizzare le operazioni sulle matrici nel passaggio successivo.

Calcola MCD: Utilizziamo gli incorporamenti come caratteristiche e calcoliamo l’MCD per stimare la posizione e la forma della nuvola di dati centrale (modalità centrale di una distribuzione gaussiana multivariata).

Adatta una busta ellittica: Quindi adattiamo un inviluppo ellittico al modo centrale utilizzando l’MCD calcolato. Questo inviluppo funge da confine per separare i punti normali da quelli nuovi.

Prevedere frasi nuove: Infine, utilizziamo l’inviluppo ellittico per classificare gli inglobamenti. I punti che si trovano all’interno della busta sono considerati normali, mentre i punti che si trovano all’esterno sono considerati nuovi o anomali.

Per fare tutto questo, utilizziamo EllipticEnvelope classe da scikit-learn in Python per applicare l’MCD:

# Reduce the dimensionality of the embeddings to 2D using PCA
pca = PCA(n_components=2)
reduced_matrix = pca.fit_transform(matrix)
reduced_matrix.shape

# Fit the Elliptic Envelope (MCD-based robust estimator)
envelope = EllipticEnvelope(contamination=0.2)
envelope.fit(reduced_matrix)

# Predict the labels of the sentences
labels = envelope.predict(reduced_matrix)

# Find the indices of the novel sentences
novel_indices = np.where(labels == -1)(0)
novel_indices

#Output: array((8, 9))

contamination è un parametro che puoi regolare a seconda di quante frasi ti aspetti siano nuove. Rappresenta la percentuale di valori anomali nel set di dati. IL predict Il metodo restituisce un array di etichette, dove 1 denota inliers (punti normali), e -1 denota valori anomali (punti nuovi).

Inoltre, per visualizzare gli incorporamenti ad alta dimensione in 2D e risparmiare tempo di calcolo, utilizziamo PCA per proiettare i vettori di incorporamento ad alta dimensione in uno spazio 2D a dimensione inferiore, lo indicheremo con reduced_matrix.

Possiamo vederlo novel_indices uscite array((8, 9))quali sono gli indici delle frasi che risultano nuove.

Tracciare il risultato: Noi può visualizzare il risultato tracciando le immersioni e l’inviluppo ellittico. Gli inlier (punti normali) possono essere tracciati con un colore o indicatore e gli outlier (punti nuovi) possono essere tracciati con un altro. L’inviluppo ellittico può essere visualizzato tracciando l’ellisse che corrisponde alla distanza di Mahalanobis.

Per ottenere la visualizzazione:

  1. Estrarre la matrice di posizione e covarianza del modello di inviluppo ellittico adattato.
  2. Calcolare gli autovalori e gli autovettori della matrice di covarianza per determinare l’orientamento e le lunghezze degli assi dell’ellisse.
  3. Calcola la distanza Mahalanobis di ciascun campione dal centro del modello di ellisse adattato.
  4. Determinare una distanza soglia in base al parametro di contaminazione, che specifica la percentuale prevista di valori anomali.
  5. Ridimensionare la larghezza e l’altezza dell’ellisse in base alla distanza della soglia Mahalanobis.
  6. Etichetta i punti all’interno dell’ellisse come interni e l’esterno come valori anomali.
  7. Traccia gli inlier e gli outlier, aggiungendo la patch dell’ellisse ridimensionata.
  8. Annotare ciascun punto dati con il relativo indice per identificare i valori anomali.
# Extract the location and covariance of the central mode
location = envelope.location_
covariance = envelope.covariance_

# Compute the angle, width, and height of the ellipse
eigenvalues, eigenvectors = np.linalg.eigh(covariance)
order = eigenvalues.argsort()(::-1)
eigenvalues, eigenvectors = eigenvalues(order), eigenvectors(:, order)
vx, vy = eigenvectors(:, 0)
theta = np.arctan2(vy, vx)

# Compute the width and height of the ellipse based on the eigenvalues (variances)
width, height = 2 * np.sqrt(eigenvalues)

# Compute the Mahalanobis distance of the reduced 2D embeddings
mahalanobis_distances = envelope.mahalanobis(reduced_matrix)

# Compute the threshold based on the contamination parameter
threshold = np.percentile(mahalanobis_distances, (1 - envelope.contamination) * 100)

# Scale the width and height of the ellipse based on the Mahalanobis distance threshold
width, height = width * np.sqrt(threshold), height * np.sqrt(threshold)

# Plot the inliers and outliers
inliers = reduced_matrix(labels == 1)
outliers = reduced_matrix(labels == -1)

# Re-plot the inliers and outliers along with the elliptic envelope with annotations
plt.scatter(inliers(:, 0), inliers(:, 1), c='b', label='Inliers')
plt.scatter(outliers(:, 0), outliers(:, 1), c='r', label='Outliers', marker='x')
ellipse = Ellipse(location, width, height, angle=np.degrees(theta), edgecolor='k', facecolor='none')
plt.gca().add_patch(ellipse)

# Annotate each point with its index
for i, (x, y) in enumerate(reduced_matrix):
plt.annotate(str(i), (x, y), textcoords="offset points", xytext=(0, 5), ha='center')

plt.title('Novelty Detection using MCD with Annotations')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.grid(True)
plt.show()

Infine, otteniamo la visualizzazione degli inlier e degli outlier come:

Tracciare l’inviluppo e i punti etichettati come inlier o outlier

Ora visitiamo i titoli, 8 e 9 sono:

Facebook subisce una nuova battuta d’arresto dopo la sentenza dell’UE sull’uso dei dati personali.

Meta, proprietario di Facebook, è stato multato con una multa record di 1,2 miliardi di euro per trasferimenti di dati UE-USA.

Entrambi i titoli sono legati agli sforzi dell’Unione Europea per regolamentare il modo in cui Meta utilizza e trasferisce i dati personali sulle proprie piattaforme.

Mentre i titoli più interni riguardano principalmente il modo in cui Meta sta andando all-in con l’intelligenza artificiale e la realtà virtuale. L’attenzione all’intelligenza artificiale è evidente nel rilascio di un nuovo chatbot AI e l’attenzione alla realtà virtuale è evidente nel rilascio del nuovo visore Meta Quest 3. Puoi anche notare che i titoli 0 e 6 riguardano il lavoro da casa e quindi sono più vicini tra loro nella trama.

Riepilogo

In questo post abbiamo mostrato come si possa distinguere tra Punti Normali e Punti Nuovi in ​​base alla distribuzione. In breve, i punti normali sono i punti che si trovano nella regione ad alta densità della distribuzione dei dati, ovvero sono vicini alla maggior parte degli altri punti nello spazio delle caratteristiche. Nel frattempo, nuovi punti Questi sono i punti che si trovano nella regione a bassa densità della distribuzione dei dati, cioè sono lontani dalla maggior parte degli altri punti nello spazio delle caratteristiche.

Nel contesto di MCD e inviluppo ellittico, i punti normali sono punti che si trovano all’interno dell’inviluppo ellittico, che è adattato alla modalità centrale della distribuzione dei dati. Mentre i nuovi punti si trovano all’esterno dell’involucro ellittico.

Abbiamo anche appreso che ci sono parametri che influenzano l’esito della MCD, questi sono:

  • Soglia: Il confine o soglia della decisione è cruciale nel determinare se un punto è normale o nuovo. Ad esempio, nel metodo dell’inviluppo ellittico, i punti all’interno dell’involucro sono considerati normali e quelli all’esterno sono considerati nuovi.
  • Parametro di contaminazione: Questo parametro, spesso utilizzato nei metodi di rilevamento delle novità, definisce la proporzione dei dati che si prevede siano nuovi o contaminati. Colpisce la tenuta dell’involucro o soglia, influenzando se un punto è classificato come normale o nuovo.

Dobbiamo anche notare che nel caso di nuovi articoli, poiché ogni articolo di notizie proviene da una settimana diversa, il metodo di rilevamento delle novità dovrebbe considerare l’aspetto temporale della notizia. Se il metodo non tiene conto intrinsecamente dell’ordine temporale, potrebbe essere necessario incorporare questo aspetto manualmente, ad esempio considerando il cambiamento degli argomenti o dei sentimenti nel tempo, il che andrebbe oltre lo scopo di questo post.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *