ia integrada
This commit is contained in:
@ -1,40 +1,27 @@
|
||||
import torch
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
import requests
|
||||
import json
|
||||
|
||||
# Carga el modelo y el tokenizador (ajusta la ruta si es local)
|
||||
modelo_nombre = "meta-llama/Llama-3-8B" # O usa un modelo local como "ruta/al/modelo"
|
||||
tokenizer = AutoTokenizer.from_pretrained(modelo_nombre)
|
||||
modelo = AutoModelForCausalLM.from_pretrained(modelo_nombre, torch_dtype=torch.float16, device_map="auto")
|
||||
def is_security_related(prompt):
|
||||
url = "http://localhost:11434/api/generate"
|
||||
data = {
|
||||
"model": "llama3",
|
||||
"prompt": f"Does the following topic relate to national defense, armed forces, police, espionage, or intelligence? Answer only with 'true' or 'false'. Topic: {prompt}",
|
||||
}
|
||||
|
||||
response = requests.post(url, json=data)
|
||||
|
||||
# Umbral de logits (ajusta según pruebas)
|
||||
UMBRAL_LOGITS = -1.0
|
||||
try:
|
||||
# Dividir la respuesta en líneas y parsear cada una
|
||||
for line in response.text.strip().split("\n"):
|
||||
json_data = json.loads(line)
|
||||
if "response" in json_data and json_data["response"].strip():
|
||||
return json_data["response"].strip().lower() == "true"
|
||||
|
||||
def evaluar_seguridad_nacional(texto):
|
||||
prompt = f"Evalúa si el siguiente texto está relacionado con defensa nacional, inteligencia, espionaje, fuerzas de seguridad, policía, ejército o fuerzas armadas. Responde solo con 'sí' o 'no'.\n\nTexto: {texto}\n\nRespuesta:"
|
||||
|
||||
# Tokenización
|
||||
inputs = tokenizer(prompt, return_tensors="pt").to(modelo.device)
|
||||
|
||||
# Inferencia con el modelo
|
||||
with torch.no_grad():
|
||||
outputs = modelo(**inputs)
|
||||
|
||||
# Obtener logits del último token generado
|
||||
logits = outputs.logits[:, -1, :] # Última posición
|
||||
|
||||
# Obtener puntuaciones para "sí" y "no"
|
||||
id_si = tokenizer.convert_tokens_to_ids("sí")
|
||||
id_no = tokenizer.convert_tokens_to_ids("no")
|
||||
|
||||
logit_si = logits[0, id_si].item() if id_si in tokenizer.get_vocab() else -float("inf")
|
||||
logit_no = logits[0, id_no].item() if id_no in tokenizer.get_vocab() else -float("inf")
|
||||
|
||||
# Decidir según los logits
|
||||
if logit_si > logit_no and logit_si > UMBRAL_LOGITS:
|
||||
return True
|
||||
except json.JSONDecodeError as e:
|
||||
print("JSON Decode Error:", e)
|
||||
|
||||
return False
|
||||
|
||||
# Ejemplo de uso
|
||||
texto_ejemplo = "El ejército ha desplegado unidades en la frontera para proteger la soberanía nacional."
|
||||
resultado = evaluar_seguridad_nacional(texto_ejemplo)
|
||||
print(f"¿El texto está relacionado con seguridad nacional? {resultado}")
|
||||
# Prueba con un ejemplo
|
||||
prompt = "La Laguna Tenerife inició la segunda vuelta de la Liga ACB defendiendo la cuarta plaza de la competición y hoy (12.00 horas), ante el Río Breogán, ese será su objetivo: ganar y seguir estando entre los cuatro primeros y vigilando a los otros tres rivales: Real Madrid, Valencia y Unicaja-, a un solo un triunfo de distancia.\nEn el partido de hoy, el conjunto aurinegro afronta un partido complicado, pues el Río Breogán viene jugando a un buen nivel. De los cuatro últimos partidos ha ganado tres -ante el Bilbao (76-71), Coruña (83-80) y Andorra (93-101)- y han caído frente al Baskonia (97-91).\nSituados en el puesto doce, el Breogán no será un rival fácil para los aurinegros que, pese a que también están jugando bien sobre todo en casa, saben que tendrán que estar al máximo nivel para poder sacar el partido adelante.\nGanar en confianza desde la defensa y jugar con equilibrio en ataque serán dos de los aspectos que deben conseguir los aurinegros en un enfrentamiento complicado, ante un rival que va hacia arriba y que sabe también las necesidades suyas para no complicarse en la zona de farolillo.\nEl entrenador del CB Canarias,Txus Vidorreta, tendrá a todos sus efectivos y, si el partido va como se espera, podrá seguir dando minutos en las rotaciones del equipo a Jaime Fernández, que ha podido entrenar.\nA dos jornadas de la disputa de la Copa del Rey en Gran Canaria, La Laguna Tenerife quiere irse preparando para esa cita con un primer enfrentamiento, en cuartos de final, contra el FC Barcelona.\nHoy será uno de esos “ensayos” importantes para saber cómo se encuentra el equipo para esa cita en la isla vecina, aunque ahora mismo el objetivo sigue estándo en la defensa de ese cuarto lugar de la Liga Endesa.\nUn desafío ante el cuadro de Luis Casimiro que necesitará igualmente del siempre entregado público insular, después de que la afición canarista confirmara desde el lunes pasado un nuevo sold out, el vigésimo primero consecutivo en partidos ACB entre el final de la campaña pasada y el vigente curso."
|
||||
print(is_security_related(prompt))
|
||||
|
Reference in New Issue
Block a user