Detección de novedades textuales.  Cómo utilizar la covarianza mínima… |  de Ilia Teimouri |  octubre de 2023

Cómo utilizar el determinante mínimo de covarianza (MCD) para detectar titulares de noticias novedosos

Foto por Ali Shah Lakhani en desempaquetar.

En la era de la información actual, nos vemos inundados de artículos de noticias a diario. Muchos de estos artículos son simplemente reformulaciones de los mismos hechos, pero algunos contienen información genuinamente nueva que puede tener un impacto importante en nuestra toma de decisiones. Por ejemplo, alguien que quiera invertir en Meta puede querer centrarse en artículos que contengan información exclusiva, en lugar de aquellos que simplemente reiteran datos publicados anteriormente. Es crucial poder distinguir entre noticias novedosas y noticias redundantes, para que podamos tomar decisiones informadas sin sentirnos abrumados por la avalancha de información.

Aquí es donde detección de novedad Ven a sentarte. La detección de novedades se refiere a la tarea de identificar datos nuevos o desconocidos que difieren de los datos vistos anteriormente. Es una técnica de aprendizaje no supervisada que se utiliza para detectar anomalías, valores atípicos o nuevos patrones en los datos. La idea clave es construir un modelo de datos “normales” y luego utilizar ese modelo para identificar puntos de datos que se desvían de lo normal.

En el contexto de los artículos de noticias, esto implica detectar si un artículo contiene información nueva que no está disponible en otros lugares. Para hacer esto, tal vez podamos desarrollar una línea de base de lo que se sabe o está disponible y luego comparar la nueva información con esa línea de base. Si existen diferencias significativas entre la información nueva y la línea de base, entonces podemos decir que la información es novedosa.

Determinante de covarianza mínima (MCD)

El método del Determinante de Covarianza Mínima (MCD) es una técnica para estimar la matriz de covarianza de un conjunto de datos. Se puede utilizar para crear una forma elíptica que encapsule el modo central de una distribución gaussiana, y cualquier punto de datos que se encuentre fuera de esta forma se puede considerar como novedades (a veces denominadas anomalías). El método MCD es particularmente útil para conjuntos de datos que son ruidosos o tienen valores atípicos, ya que puede ayudar a identificar puntos de datos inusuales que pueden no ajustarse al patrón general de los datos. (ver ejemplo).

MCD se puede utilizar para detectar novedades en los titulares de noticias. Si bien el método se puede generalizar a artículos completos, nuestro objetivo es proporcionar un ejemplo conciso de la aplicación de MCD para la detección de novedades en textos breves. MCD es un estimador sólido de ubicación y dispersión multivariada, lo que lo hace muy adecuado para identificar valores atípicos en datos de alta dimensión, como el texto. A partir de un conjunto de datos de titulares de noticias, MCD aprenderá un modelo de titulares “normales” basado en la covarianza. Luego podemos usar este modelo para obtener nuevos titulares y marcar aquellos que se desvían significativamente de la norma como posibles historias novedosas o anómalas. El código de muestra y los experimentos ilustrarán cómo funciona en la práctica la detección de novedades de MCD.

Enfoque paso a paso

Incrustación: En el aprendizaje automático utilizamos incrustar como una forma de representar datos de una forma más compacta y eficiente. La incrustación transforma los datos sin procesar en una representación de dimensiones inferiores que captura las características más importantes de los datos.

La incrustación de texto es un tipo específico de incrustación que se utiliza para transformar datos de texto en una representación vectorial. Tiene en cuenta la semántica y las relaciones entre palabras, frases y oraciones, y las convierte en una representación numérica que captura el significado del texto. Esto nos permite realizar operaciones como buscar texto similar, agrupar texto según su significado semántico y más.

Supongamos que reunimos los siguientes titulares sobre Meta en los últimos meses:

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"
]

Podemos usar OpenAI para generar incrustaciones de texto para cada una de las oraciones como:

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)

El text-embedding-ada-002 modelo de OpenAI es un modelo de integración de vanguardia que toma una oración como entrada y genera un vector de incrustación de longitud 1536. El vector representa el significado semántico de la oración de entrada y puede usarse para tareas como similitud semántica, clasificación de texto y más. La última versión del modelo incorpora técnicas de representación de lenguaje de última generación para producir incrustaciones robustas y altamente precisas. Si no tiene acceso a OpenAI, puede utilizar otros modelos de integración como Transformadores de oraciones.

Una vez que producimos la incrustación, creamos una variable matricial que almacena una representación matricial de las incrustaciones del df[‘embedding’] columna. Esto se hace utilizando el vstack función de la NumPy biblioteca, que apila todos los vectores (cada uno de los cuales representa una sola oración) en la columna verticalmente para crear una matriz. Esto nos permite utilizar operaciones matriciales en el siguiente paso.

Calcular MCD: Usamos las incrustaciones como características y calculamos el MCD para estimar la ubicación y la forma de la nube de datos central (modo central de una distribución gaussiana multivariada).

Ajustar una envolvente elíptica: Luego ajustamos una envolvente elíptica al modo central utilizando el MCD calculado. Esta envoltura actúa como límite para separar los puntos normales de los novedosos.

Predecir oraciones novedosas: Finalmente, utilizamos la envolvente elíptica para clasificar las incrustaciones. Los puntos que se encuentran dentro del sobre se consideran normales y los puntos que se encuentran fuera se consideran nuevos o anómalos.

Para hacer todo esto utilizamos EllipticEnvelope clase de scikit-learn en Python para aplicar el 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 es un parámetro que puede ajustar dependiendo de cuántas oraciones espera que sean novedosas. Representa la proporción de valores atípicos en el conjunto de datos. El predict El método devuelve una serie de etiquetas, donde 1 denota puntos interiores (puntos normales), y -1 denota valores atípicos (puntos novedosos).

Además, para visualizar las incrustaciones de alta dimensión en 2D y ahorrar tiempo de cálculo, utilizamos PCA para proyectar los vectores de incrustación de alta dimensión a un espacio 2D de menor dimensión, lo denotamos por reduced_matrix.

Podemos ver eso novel_indices salidas array([8, 9])que son los índices de oraciones que se consideran novedosas.

Trazando el resultado: nosotros Puede visualizar el resultado trazando las incrustaciones y la envolvente elíptica. Los valores interiores (puntos normales) se pueden trazar con un color o marcador, y los valores atípicos (puntos nuevos) se pueden trazar con otro. La envolvente elíptica se puede visualizar trazando la elipse que corresponde a la distancia de Mahalanobis.

Para lograr la visualización nosotros:

  1. Extraiga la ubicación y la matriz de covarianza del modelo de envolvente elíptica ajustada.
  2. Calcule los valores propios y los vectores propios de la matriz de covarianza para determinar la orientación y las longitudes de los ejes de la elipse.
  3. Calcule la distancia de Mahalanobis de cada muestra desde el centro del modelo de elipse ajustado.
  4. Determine una distancia umbral basada en el parámetro de contaminación, que especifica el porcentaje esperado de valores atípicos.
  5. Escale el ancho y el alto de la elipse según el umbral de distancia de Mahalanobis.
  6. Etiquete los puntos dentro de la elipse como valores interiores y los exteriores como valores atípicos.
  7. Traza los valores internos y atípicos, agregando el parche de elipse escalado.
  8. Anote cada punto de datos con su índice para identificar valores atípicos.
# 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()

Finalmente, obtenemos la visualización de valores internos y atípicos como:

Trazar la envolvente y los puntos etiquetados como valores internos o atípicos

Ahora visitemos los titulares, 8 y 9 son:

Facebook sufre un nuevo revés tras el fallo de la UE sobre el uso de datos personales.

Meta, propietario de Facebook, recibe una multa récord de 1.200 millones de euros por transferencias de datos entre la UE y EE. UU.

Ambos titulares están relacionados con los esfuerzos de la Unión Europea para regular cómo Meta usa y transfiere datos personales en sus plataformas.

Mientras que los titulares internos tratan principalmente sobre cómo Meta está apostando por la IA y la realidad virtual. El enfoque en la IA es evidente en el lanzamiento de un nuevo chatbot de IA, y el enfoque en la realidad virtual es evidente en el lanzamiento de los nuevos auriculares Meta Quest 3. También puede observar que los titulares 0.º y 6.º tratan sobre la configuración del trabajo desde casa y, por lo tanto, están más cerca entre sí en la trama.

Resumen

En esta publicación hemos mostrado cómo se puede distinguir entre puntos normales y puntos novedosos según la distribución. En resumen, los puntos normales son los puntos que se encuentran en la región de alta densidad de la distribución de datos, es decir, están cerca de la mayoría de los otros puntos en el espacio de características. Mientras tanto, los puntos novedosos son los puntos que se encuentran en la región de baja densidad de la distribución de datos, es decir, que están lejos de la mayoría de los otros puntos en el espacio de características.

En el contexto de MCD y envolvente elíptica, los puntos normales son puntos que se encuentran dentro de la envolvente elíptica, que se ajusta al modo central de la distribución de datos. Mientras que los puntos novedosos se encuentran fuera de la envoltura elíptica.

Aprendimos también que existen parámetros que están influyendo en el resultado de la MCD, estos son:

  • Límite: El límite o umbral de decisión es crucial para determinar si un punto es normal o novedoso. Por ejemplo, en el método de la envolvente elíptica, los puntos dentro de la envolvente se consideran normales y los que están fuera se consideran novedosos.
  • Parámetro de contaminación: Este parámetro, utilizado a menudo en métodos de detección de novedades, define la proporción de datos que se espera que sean novedosos o contaminados. Afecta la estanqueidad de la envoltura o umbral, influyendo en si un punto se clasifica como normal o novedoso.

También debemos tener en cuenta que en el caso de artículos nuevos, dado que cada noticia proviene de una semana diferente, el método de detección de novedad debe considerar el aspecto temporal de la noticia. Si el método no tiene en cuenta inherentemente el orden temporal, es posible que deba incorporar este aspecto manualmente, por ejemplo considerando el cambio en los temas o sentimientos a lo largo del tiempo, lo que estaría fuera del alcance de esta publicación.