Menu iconMenu icon
NLP con Transformadores: Técnicas Avanzadas y Aplicaciones Multimodales

Proyecto 4: Pipeline de Reconocimiento de Entidades Nombradas (NER) con Ajuste Fino Personalizado

Paso 6: Implementar el Pipeline NER como API

Construir una API utilizando FastAPI para servir el pipeline NER. FastAPI es un framework web moderno y rápido para construir APIs con Python que ofrece documentación automática de API, validación de solicitudes y excelente rendimiento.

Al envolver nuestro pipeline NER en una API, podemos hacerlo accesible a través de HTTP, permitiendo que otras aplicaciones y servicios se integren fácilmente con nuestro sistema de reconocimiento de entidades nombradas. La API aceptará texto de entrada a través de solicitudes HTTP POST y devolverá las entidades identificadas en un formato JSON estructurado.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

# Initialize FastAPI
app = FastAPI()

# Define request model
class NERRequest(BaseModel):
    text: str

# Define API endpoint
@app.post("/ner")
def predict_entities(request: NERRequest):
    try:
        entities = ner_pipeline(request.text)
        return {"text": request.text, "entities": entities}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Aquí hay un desglose detallado:

1. Importaciones y Configuración

  • Importa FastAPI y HTTPException para crear el servicio web y manejar errores
  • Importa BaseModel de pydantic para la validación de datos de solicitud
  • Inicializa una nueva instancia de aplicación FastAPI

2. Definición del Modelo de Solicitud

  • Crea una clase NERRequest que hereda de BaseModel
  • Define un único campo requerido 'text' de tipo string que contendrá el texto de entrada para el reconocimiento de entidades

3. Punto Final de la API

  • Crea un punto final POST en "/ner"
  • Toma un objeto NERRequest como entrada
  • Procesa el texto utilizando el ner_pipeline previamente definido
  • Devuelve una respuesta JSON que contiene:
    • El texto de entrada original
    • Las entidades identificadas
  • Incluye manejo de errores que devuelve un código de estado 500 si el procesamiento falla

Cuando se implementa, otras aplicaciones pueden acceder a esta API para realizar tareas NER a través de solicitudes HTTP, facilitando la integración de la funcionalidad NER en otros sistemas y servicios.

Ejecutar la API localmente:

uvicorn app:app --reload

Probar la API:

curl -X POST "http://127.0.0.1:8000/ner" \
-H "Content-Type: application/json" \
-d '{"text": "Barack Obama was born in Hawaii."}'

Analicémoslo en detalle:

Estructura del Comando:

  • El comando utiliza cURL para enviar una solicitud POST a un punto final de API local (http://127.0.0.1:8000/ner)
  • Incluye un encabezado Content-Type que especifica que el cuerpo de la solicitud es JSON
  • El cuerpo de la solicitud contiene un objeto JSON con un campo "text" que contiene el texto de ejemplo "Barack Obama was born in Hawaii."

Respuesta Esperada:

La API devolverá una respuesta JSON que contiene:

  • El texto de entrada original
  • Un arreglo "entities" que enumera cada entidad identificada con:
  • La palabra o frase detectada
  • El tipo de entidad (por ejemplo, "PER" para persona, "LOC" para ubicación)
  • Una puntuación de confianza que indica la certeza del modelo

Este punto final es parte de un servicio FastAPI que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas en el texto de entrada.

Respuesta:

{
  "text": "Barack Obama was born in Hawaii.",
  "entities": [
    {"word": "Barack Obama", "entity_group": "PER", "score": 0.98},
    {"word": "Hawaii", "entity_group": "LOC", "score": 0.95}
  ]
}

Este código muestra la respuesta JSON de un punto final de la API de Reconocimiento de Entidades Nombradas (NER). Analicémoslo:

Estructura:

  • La respuesta contiene dos campos principales:
    • "text": Muestra el texto de entrada original que fue analizado ("Barack Obama was born in Hawaii.")
    • "entities": Un arreglo que contiene las entidades nombradas identificadas

Entidades Identificadas:

  • Se detectaron dos entidades:
    • 1. "Barack Obama" - clasificado como "PER" (Persona) con 98% de confianza
    • 2. "Hawaii" - clasificado como "LOC" (Ubicación) con 95% de confianza

Este es el formato de salida que puede esperar al realizar solicitudes al punto final de la API NER, que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas.

Paso 6: Implementar el Pipeline NER como API

Construir una API utilizando FastAPI para servir el pipeline NER. FastAPI es un framework web moderno y rápido para construir APIs con Python que ofrece documentación automática de API, validación de solicitudes y excelente rendimiento.

Al envolver nuestro pipeline NER en una API, podemos hacerlo accesible a través de HTTP, permitiendo que otras aplicaciones y servicios se integren fácilmente con nuestro sistema de reconocimiento de entidades nombradas. La API aceptará texto de entrada a través de solicitudes HTTP POST y devolverá las entidades identificadas en un formato JSON estructurado.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

# Initialize FastAPI
app = FastAPI()

# Define request model
class NERRequest(BaseModel):
    text: str

# Define API endpoint
@app.post("/ner")
def predict_entities(request: NERRequest):
    try:
        entities = ner_pipeline(request.text)
        return {"text": request.text, "entities": entities}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Aquí hay un desglose detallado:

1. Importaciones y Configuración

  • Importa FastAPI y HTTPException para crear el servicio web y manejar errores
  • Importa BaseModel de pydantic para la validación de datos de solicitud
  • Inicializa una nueva instancia de aplicación FastAPI

2. Definición del Modelo de Solicitud

  • Crea una clase NERRequest que hereda de BaseModel
  • Define un único campo requerido 'text' de tipo string que contendrá el texto de entrada para el reconocimiento de entidades

3. Punto Final de la API

  • Crea un punto final POST en "/ner"
  • Toma un objeto NERRequest como entrada
  • Procesa el texto utilizando el ner_pipeline previamente definido
  • Devuelve una respuesta JSON que contiene:
    • El texto de entrada original
    • Las entidades identificadas
  • Incluye manejo de errores que devuelve un código de estado 500 si el procesamiento falla

Cuando se implementa, otras aplicaciones pueden acceder a esta API para realizar tareas NER a través de solicitudes HTTP, facilitando la integración de la funcionalidad NER en otros sistemas y servicios.

Ejecutar la API localmente:

uvicorn app:app --reload

Probar la API:

curl -X POST "http://127.0.0.1:8000/ner" \
-H "Content-Type: application/json" \
-d '{"text": "Barack Obama was born in Hawaii."}'

Analicémoslo en detalle:

Estructura del Comando:

  • El comando utiliza cURL para enviar una solicitud POST a un punto final de API local (http://127.0.0.1:8000/ner)
  • Incluye un encabezado Content-Type que especifica que el cuerpo de la solicitud es JSON
  • El cuerpo de la solicitud contiene un objeto JSON con un campo "text" que contiene el texto de ejemplo "Barack Obama was born in Hawaii."

Respuesta Esperada:

La API devolverá una respuesta JSON que contiene:

  • El texto de entrada original
  • Un arreglo "entities" que enumera cada entidad identificada con:
  • La palabra o frase detectada
  • El tipo de entidad (por ejemplo, "PER" para persona, "LOC" para ubicación)
  • Una puntuación de confianza que indica la certeza del modelo

Este punto final es parte de un servicio FastAPI que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas en el texto de entrada.

Respuesta:

{
  "text": "Barack Obama was born in Hawaii.",
  "entities": [
    {"word": "Barack Obama", "entity_group": "PER", "score": 0.98},
    {"word": "Hawaii", "entity_group": "LOC", "score": 0.95}
  ]
}

Este código muestra la respuesta JSON de un punto final de la API de Reconocimiento de Entidades Nombradas (NER). Analicémoslo:

Estructura:

  • La respuesta contiene dos campos principales:
    • "text": Muestra el texto de entrada original que fue analizado ("Barack Obama was born in Hawaii.")
    • "entities": Un arreglo que contiene las entidades nombradas identificadas

Entidades Identificadas:

  • Se detectaron dos entidades:
    • 1. "Barack Obama" - clasificado como "PER" (Persona) con 98% de confianza
    • 2. "Hawaii" - clasificado como "LOC" (Ubicación) con 95% de confianza

Este es el formato de salida que puede esperar al realizar solicitudes al punto final de la API NER, que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas.

Paso 6: Implementar el Pipeline NER como API

Construir una API utilizando FastAPI para servir el pipeline NER. FastAPI es un framework web moderno y rápido para construir APIs con Python que ofrece documentación automática de API, validación de solicitudes y excelente rendimiento.

Al envolver nuestro pipeline NER en una API, podemos hacerlo accesible a través de HTTP, permitiendo que otras aplicaciones y servicios se integren fácilmente con nuestro sistema de reconocimiento de entidades nombradas. La API aceptará texto de entrada a través de solicitudes HTTP POST y devolverá las entidades identificadas en un formato JSON estructurado.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

# Initialize FastAPI
app = FastAPI()

# Define request model
class NERRequest(BaseModel):
    text: str

# Define API endpoint
@app.post("/ner")
def predict_entities(request: NERRequest):
    try:
        entities = ner_pipeline(request.text)
        return {"text": request.text, "entities": entities}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Aquí hay un desglose detallado:

1. Importaciones y Configuración

  • Importa FastAPI y HTTPException para crear el servicio web y manejar errores
  • Importa BaseModel de pydantic para la validación de datos de solicitud
  • Inicializa una nueva instancia de aplicación FastAPI

2. Definición del Modelo de Solicitud

  • Crea una clase NERRequest que hereda de BaseModel
  • Define un único campo requerido 'text' de tipo string que contendrá el texto de entrada para el reconocimiento de entidades

3. Punto Final de la API

  • Crea un punto final POST en "/ner"
  • Toma un objeto NERRequest como entrada
  • Procesa el texto utilizando el ner_pipeline previamente definido
  • Devuelve una respuesta JSON que contiene:
    • El texto de entrada original
    • Las entidades identificadas
  • Incluye manejo de errores que devuelve un código de estado 500 si el procesamiento falla

Cuando se implementa, otras aplicaciones pueden acceder a esta API para realizar tareas NER a través de solicitudes HTTP, facilitando la integración de la funcionalidad NER en otros sistemas y servicios.

Ejecutar la API localmente:

uvicorn app:app --reload

Probar la API:

curl -X POST "http://127.0.0.1:8000/ner" \
-H "Content-Type: application/json" \
-d '{"text": "Barack Obama was born in Hawaii."}'

Analicémoslo en detalle:

Estructura del Comando:

  • El comando utiliza cURL para enviar una solicitud POST a un punto final de API local (http://127.0.0.1:8000/ner)
  • Incluye un encabezado Content-Type que especifica que el cuerpo de la solicitud es JSON
  • El cuerpo de la solicitud contiene un objeto JSON con un campo "text" que contiene el texto de ejemplo "Barack Obama was born in Hawaii."

Respuesta Esperada:

La API devolverá una respuesta JSON que contiene:

  • El texto de entrada original
  • Un arreglo "entities" que enumera cada entidad identificada con:
  • La palabra o frase detectada
  • El tipo de entidad (por ejemplo, "PER" para persona, "LOC" para ubicación)
  • Una puntuación de confianza que indica la certeza del modelo

Este punto final es parte de un servicio FastAPI que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas en el texto de entrada.

Respuesta:

{
  "text": "Barack Obama was born in Hawaii.",
  "entities": [
    {"word": "Barack Obama", "entity_group": "PER", "score": 0.98},
    {"word": "Hawaii", "entity_group": "LOC", "score": 0.95}
  ]
}

Este código muestra la respuesta JSON de un punto final de la API de Reconocimiento de Entidades Nombradas (NER). Analicémoslo:

Estructura:

  • La respuesta contiene dos campos principales:
    • "text": Muestra el texto de entrada original que fue analizado ("Barack Obama was born in Hawaii.")
    • "entities": Un arreglo que contiene las entidades nombradas identificadas

Entidades Identificadas:

  • Se detectaron dos entidades:
    • 1. "Barack Obama" - clasificado como "PER" (Persona) con 98% de confianza
    • 2. "Hawaii" - clasificado como "LOC" (Ubicación) con 95% de confianza

Este es el formato de salida que puede esperar al realizar solicitudes al punto final de la API NER, que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas.

Paso 6: Implementar el Pipeline NER como API

Construir una API utilizando FastAPI para servir el pipeline NER. FastAPI es un framework web moderno y rápido para construir APIs con Python que ofrece documentación automática de API, validación de solicitudes y excelente rendimiento.

Al envolver nuestro pipeline NER en una API, podemos hacerlo accesible a través de HTTP, permitiendo que otras aplicaciones y servicios se integren fácilmente con nuestro sistema de reconocimiento de entidades nombradas. La API aceptará texto de entrada a través de solicitudes HTTP POST y devolverá las entidades identificadas en un formato JSON estructurado.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

# Initialize FastAPI
app = FastAPI()

# Define request model
class NERRequest(BaseModel):
    text: str

# Define API endpoint
@app.post("/ner")
def predict_entities(request: NERRequest):
    try:
        entities = ner_pipeline(request.text)
        return {"text": request.text, "entities": entities}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Aquí hay un desglose detallado:

1. Importaciones y Configuración

  • Importa FastAPI y HTTPException para crear el servicio web y manejar errores
  • Importa BaseModel de pydantic para la validación de datos de solicitud
  • Inicializa una nueva instancia de aplicación FastAPI

2. Definición del Modelo de Solicitud

  • Crea una clase NERRequest que hereda de BaseModel
  • Define un único campo requerido 'text' de tipo string que contendrá el texto de entrada para el reconocimiento de entidades

3. Punto Final de la API

  • Crea un punto final POST en "/ner"
  • Toma un objeto NERRequest como entrada
  • Procesa el texto utilizando el ner_pipeline previamente definido
  • Devuelve una respuesta JSON que contiene:
    • El texto de entrada original
    • Las entidades identificadas
  • Incluye manejo de errores que devuelve un código de estado 500 si el procesamiento falla

Cuando se implementa, otras aplicaciones pueden acceder a esta API para realizar tareas NER a través de solicitudes HTTP, facilitando la integración de la funcionalidad NER en otros sistemas y servicios.

Ejecutar la API localmente:

uvicorn app:app --reload

Probar la API:

curl -X POST "http://127.0.0.1:8000/ner" \
-H "Content-Type: application/json" \
-d '{"text": "Barack Obama was born in Hawaii."}'

Analicémoslo en detalle:

Estructura del Comando:

  • El comando utiliza cURL para enviar una solicitud POST a un punto final de API local (http://127.0.0.1:8000/ner)
  • Incluye un encabezado Content-Type que especifica que el cuerpo de la solicitud es JSON
  • El cuerpo de la solicitud contiene un objeto JSON con un campo "text" que contiene el texto de ejemplo "Barack Obama was born in Hawaii."

Respuesta Esperada:

La API devolverá una respuesta JSON que contiene:

  • El texto de entrada original
  • Un arreglo "entities" que enumera cada entidad identificada con:
  • La palabra o frase detectada
  • El tipo de entidad (por ejemplo, "PER" para persona, "LOC" para ubicación)
  • Una puntuación de confianza que indica la certeza del modelo

Este punto final es parte de un servicio FastAPI que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas en el texto de entrada.

Respuesta:

{
  "text": "Barack Obama was born in Hawaii.",
  "entities": [
    {"word": "Barack Obama", "entity_group": "PER", "score": 0.98},
    {"word": "Hawaii", "entity_group": "LOC", "score": 0.95}
  ]
}

Este código muestra la respuesta JSON de un punto final de la API de Reconocimiento de Entidades Nombradas (NER). Analicémoslo:

Estructura:

  • La respuesta contiene dos campos principales:
    • "text": Muestra el texto de entrada original que fue analizado ("Barack Obama was born in Hawaii.")
    • "entities": Un arreglo que contiene las entidades nombradas identificadas

Entidades Identificadas:

  • Se detectaron dos entidades:
    • 1. "Barack Obama" - clasificado como "PER" (Persona) con 98% de confianza
    • 2. "Hawaii" - clasificado como "LOC" (Ubicación) con 95% de confianza

Este es el formato de salida que puede esperar al realizar solicitudes al punto final de la API NER, que procesa texto a través de un pipeline NER para identificar y clasificar entidades nombradas.