Annoy

Cómo resumir artículos de arXiv y descubrir artículos similares

A visual guide on summarizing arXiv articles and finding related research papers.

Introducción

El volumen de artículos de investigación en plataformas como arXiv puede ser abrumador para los académicos que intentan mantenerse actualizados con los últimos hallazgos. Este tutorial te guiará a través del proceso de resumir artículos largos de arXiv en puntos clave e identificar documentos similares. Estas acciones pueden ayudar a los investigadores a comprender rápidamente la esencia de un artículo y contextualizarlo dentro del discurso académico más amplio, asegurando una comprensión integral y evitando esfuerzos de investigación redundantes.

Este artículo tiene dos partes:

  • Generación de los embeddings y construcción del índice Annoy
  • Consulta del índice para obtener artículos relacionados y generar resúmenes

Parte 1: Construcción del Índice Annoy

Requisitos previos

Antes de comenzar, asegúrate de tener Python 3.9 y pip instalados en tu sistema.

Pasos

Instalación de Paquetes de Python

Instala los siguientes paquetes de Python usando pip:

pip install numpy pandas sentence-transformers annoy flask openai

Alternativamente, puedes crear un requirements.txt y instalar los paquetes usando el comando:

pip install -r requirements.txt

con el siguiente contenido:

numpy
pandas
sentence-transformers
annoy
flask
openai

Conjunto de datos arXiv de Kaggle

Para continuar, crea una cuenta de Kaggle y descarga el conjunto de datos de arXiv con metadatos limitados de este conjunto. Después de descargar, descomprime el archivo para encontrar un archivo JSON.

Preprocesar los Datos

Carga tu conjunto de datos y préprocesalo en el formato deseado. Aquí, estamos leyendo un archivo JSON que contiene metadatos de ArXiv y concatenando títulos y resúmenes con un separador '[SEP]':

Generar Embeddings usando SBERT

Inicializa el modelo SBERT y genera embeddings para tus datos preprocesados. Estamos usando el modelo allenai-specter, especialmente entrenado para artículos científicos. Para aproximadamente ~2 millones de artículos de arXiv hasta diciembre de 2022, se tardó:

  • Más de 8 horas en RTX3080
  • 6 horas en RTX4090
  • 1.5 horas en A100 (nube)

Ajusta el batch_size según la memoria de tu GPU:

Tiempo de GPU para generar embeddings:
RTX 3080 (16GB) - 8 horas
RTX 4090 (16GB) - 5 horas
A100 (80GB) (en la nube) - 1 hora

Indexar Embeddings con Annoy

Una vez que tengas los embeddings, el siguiente paso es indexarlos para una búsqueda de similitud rápida. Estamos utilizando la biblioteca Annoy por su eficiencia:

Alternativamente, si no tienes GPU y estás de acuerdo con el instantáneo de arXiv hasta diciembre de 2022, puedes usar URLs públicas de S3 para descargar los conjuntos de datos necesarios:

descripción del conjunto de datos
URL de S3
annoy_index.ann
Índice Annoy de 2M artículos de arXiv usando el archivo arxiv-metadata-oai-snapshot.json
URL de S3: enlace 

arxiv-metadata-oai-snapshot.json
Conjunto de datos de 2M artículos de Arxiv descargados de Kaggle
URL de S3: enlace 

embeddings.npy
Archivo numpy de embeddings. Contiene embeddings serializados de todos los 2M artículos
URL de S3: enlace

Parte 2: Resumir y Buscar Artículos Similares en Arxiv

Descripción

Este tutorial te guiará a través del proceso de resumir un artículo largo de arXiv en puntos clave, generando una idea basada en él e identificando documentos similares. Haremos uso de:

  • Transformadores de Oraciones para embeddings
  • Annoy para indexación
  • La API de OpenAI para generar el resumen

Requisitos previos

Antes de proceder, asegúrate de tener lo siguiente:

  • Python 3+
  • Flask para crear un endpoint
  • Conocimiento de JSON, Annoy y Transformadores de Oraciones

Pasos

Paso 1: Configuración e Instalación de Dependencias

Primero, instala los paquetes requeridos:

pip install flask

Paso 2: Cargar y Preprocesar los Metadatos de Arxiv

Para resumir y encontrar artículos similares, necesitamos los metadatos del conjunto de datos. La función de preprocesamiento hace esto al:

  • Cargar los datos JSON
  • Extraer títulos y resúmenes
  • Combinarlos en oraciones

Paso 3: Generar Índice Annoy

Annoy (Aproximación de Vecinos Más Cercanos Oh Sí) se utiliza para buscar vectores similares en grandes conjuntos de datos. Aquí, cargamos un índice Annoy dado un nombre de archivo.

Paso 4: Función de Búsqueda

La función de búsqueda toma una consulta, calcula su embedding usando Transformadores de Oraciones y luego encuentra las coincidencias más cercanas en nuestro índice Annoy.

Paso 5: Mostrar Resultados

Una vez que hemos encontrado las coincidencias más cercanas, necesitamos formatearlas y mostrarlas.

Paso 6: Usar OpenAI para Resumir

Usamos la API de OpenAI para generar un resumen del artículo de Arxiv. El artículo, su título, resumen y contenido de la página se envían a OpenAI.

Paso 7: Endpoint de Flask

Creamos un endpoint en Flask que procesa la URL de Arxiv, resume el artículo, busca artículos similares y devuelve una respuesta HTML formateada.

Paso 8: Ejecutar el Servidor Flask

Finalmente, ejecuta tu aplicación Flask. Luego, abre un navegador y navega a:

http://127.0.0.1:5000/search?q=ARXIV_URL

sustituyendo ARXIV_URL por la URL del artículo de Arxiv que deseas.

Conclusión

Ahora has creado una herramienta que resume artículos de Arxiv y encuentra artículos similares basados en su contenido. Esta herramienta se puede ampliar con otras características o integrarse en aplicaciones más grandes para ayudar a investigadores y académicos.

¡Explora más tutoriales de IA para todos los niveles de experiencia y pon a prueba tus habilidades en Hackatones de IA en la comunidad lablab.ai!

Referencia del Tutorial:

1. GitHub: arxiv-related-articles-summarizer

Puede que te interese

Visual representation of AI model training techniques and efficiencies.
Illustration of building a chatbot using Anthropic Claude with 100,000 tokens.

Dejar un comentario

Todos los comentarios se revisan antes de su publicación.

Este sitio está protegido por hCaptcha y se aplican la Política de privacidad de hCaptcha y los Términos del servicio.