Update app.py
Browse files
app.py
CHANGED
@@ -40,24 +40,69 @@ model = AutoModelForCausalLM.from_pretrained(
|
|
40 |
|
41 |
# === Frases prototipo para verificador sem谩ntico ===
|
42 |
frases_fisica = [
|
43 |
-
"Me golpe贸 con el pu帽o cerrado",
|
44 |
-
"Me
|
|
|
|
|
|
|
|
|
45 |
]
|
|
|
46 |
frases_sexual = [
|
47 |
-
"Me oblig贸 a tener relaciones sexuales",
|
48 |
-
"Me
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
embeds_fisica = modelo_vector.encode(frases_fisica)
|
51 |
embeds_sexual = modelo_vector.encode(frases_sexual)
|
|
|
|
|
|
|
52 |
|
53 |
-
# === Verificador sem谩ntico ===
|
54 |
def verificar_semantico(descripcion):
|
55 |
emb_desc = modelo_vector.encode(descripcion)
|
56 |
tipos_detectados = []
|
57 |
-
|
|
|
58 |
tipos_detectados.append("f铆sica")
|
59 |
if max(util.cos_sim(emb_desc, embeds_sexual)[0]) > 0.9:
|
60 |
tipos_detectados.append("sexual")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
return tipos_detectados
|
62 |
|
63 |
# === FUNCI脫N PRINCIPAL ===
|
@@ -115,9 +160,24 @@ def predecir_con_recomendacion(edad, genero, hijos, convivencia_agresor, consumo
|
|
115 |
"- Justificaci贸n breve de cada medida, indicando los literales aplicables del Art铆culo 5 de la Ley 575 de 2000 (identificados por letra).\n\n"
|
116 |
"RESUELVE:\n"
|
117 |
"PRIMERO: Admitir la solicitud.\n"
|
118 |
-
"
|
119 |
"脷LTIMO: C煤mplase y notif铆quese.\n\n"
|
120 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
"No menciones violencia econ贸mica ni sexual salvo que se describa expresamente en los hechos.\n"
|
122 |
"Redacta cada justificaci贸n en una sola frase 煤nica, sin repetir fundamentos.\n"
|
123 |
"Limita todo el texto a un m谩ximo de 300 palabras.\n"
|
@@ -125,6 +185,7 @@ def predecir_con_recomendacion(edad, genero, hijos, convivencia_agresor, consumo
|
|
125 |
)
|
126 |
}
|
127 |
]
|
|
|
128 |
|
129 |
# Aplicar chat template
|
130 |
encoded = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
|
|
|
40 |
|
41 |
# === Frases prototipo para verificador sem谩ntico ===
|
42 |
frases_fisica = [
|
43 |
+
"Me golpe贸 con el pu帽o cerrado",
|
44 |
+
"Me pate贸",
|
45 |
+
"Me lanz贸 contra la pared",
|
46 |
+
"Me estrangul贸",
|
47 |
+
"Me fractur贸 una costilla",
|
48 |
+
"Me tir贸 al piso violentamente"
|
49 |
]
|
50 |
+
|
51 |
frases_sexual = [
|
52 |
+
"Me oblig贸 a tener relaciones sexuales",
|
53 |
+
"Me toc贸 sin consentimiento",
|
54 |
+
"Me viol贸",
|
55 |
+
"Me forz贸 a tener sexo",
|
56 |
+
"Me agredi贸 sexualmente"
|
57 |
+
]
|
58 |
+
|
59 |
+
frases_economica = [
|
60 |
+
"No me da dinero",
|
61 |
+
"Me quita mi salario",
|
62 |
+
"Me retiene los recursos econ贸micos",
|
63 |
+
"No me deja trabajar",
|
64 |
+
"Me obliga a depender econ贸micamente"
|
65 |
]
|
66 |
+
|
67 |
+
frases_psicologica = [
|
68 |
+
"Me insulta todo el tiempo",
|
69 |
+
"Me amenaza constantemente",
|
70 |
+
"Me humilla frente a los ni帽os",
|
71 |
+
"Me hace sentir in煤til",
|
72 |
+
"Me controla emocionalmente"
|
73 |
+
]
|
74 |
+
|
75 |
+
frases_negligencia = [
|
76 |
+
"No me brinda atenci贸n m茅dica",
|
77 |
+
"No cuida a los hijos",
|
78 |
+
"Me deja sin alimentos",
|
79 |
+
"No se preocupa por mi salud",
|
80 |
+
"Ignora mis necesidades b谩sicas"
|
81 |
+
]
|
82 |
+
|
83 |
+
# === Embeddings de referencia ===
|
84 |
embeds_fisica = modelo_vector.encode(frases_fisica)
|
85 |
embeds_sexual = modelo_vector.encode(frases_sexual)
|
86 |
+
embeds_economica = modelo_vector.encode(frases_economica)
|
87 |
+
embeds_psicologica = modelo_vector.encode(frases_psicologica)
|
88 |
+
embeds_negligencia = modelo_vector.encode(frases_negligencia)
|
89 |
|
90 |
+
# === Verificador sem谩ntico completo ===
|
91 |
def verificar_semantico(descripcion):
|
92 |
emb_desc = modelo_vector.encode(descripcion)
|
93 |
tipos_detectados = []
|
94 |
+
|
95 |
+
if max(util.cos_sim(emb_desc, embeds_fisica)[0]) > 0.8:
|
96 |
tipos_detectados.append("f铆sica")
|
97 |
if max(util.cos_sim(emb_desc, embeds_sexual)[0]) > 0.9:
|
98 |
tipos_detectados.append("sexual")
|
99 |
+
if max(util.cos_sim(emb_desc, embeds_economica)[0]) > 0.85:
|
100 |
+
tipos_detectados.append("econ贸mica")
|
101 |
+
if max(util.cos_sim(emb_desc, embeds_psicologica)[0]) > 0.85:
|
102 |
+
tipos_detectados.append("psicol贸gica")
|
103 |
+
if max(util.cos_sim(emb_desc, embeds_negligencia)[0]) > 0.85:
|
104 |
+
tipos_detectados.append("negligencia")
|
105 |
+
|
106 |
return tipos_detectados
|
107 |
|
108 |
# === FUNCI脫N PRINCIPAL ===
|
|
|
160 |
"- Justificaci贸n breve de cada medida, indicando los literales aplicables del Art铆culo 5 de la Ley 575 de 2000 (identificados por letra).\n\n"
|
161 |
"RESUELVE:\n"
|
162 |
"PRIMERO: Admitir la solicitud.\n"
|
163 |
+
"II, III, IV, V, etc.: Ordenar cada medida en un p谩rrafo separado, numerando en n煤meros romanos.\n"
|
164 |
"脷LTIMO: C煤mplase y notif铆quese.\n\n"
|
165 |
+
"Utiliza 煤nicamente las siguientes expresiones para nombrar las medidas si corresponden al caso:\n"
|
166 |
+
"- Prohibici贸n de acercamiento.\n"
|
167 |
+
"- Prohibici贸n de contacto.\n"
|
168 |
+
"- Protecci贸n de la residencia.\n"
|
169 |
+
"- Acompa帽amiento policial.\n"
|
170 |
+
"- Prohibici贸n de consumo de alcohol.\n"
|
171 |
+
"No uses t茅rminos como 'nominar' o 'nombrar medidas'.\n\n"
|
172 |
+
"Ejemplo de redacci贸n de medidas (no lo copies literalmente, solo 煤salo como gu铆a de estilo):\n"
|
173 |
+
"II: Ordenar la prohibici贸n al agresor de acercarse a la v铆ctima en un radio de 200 metros.\n"
|
174 |
+
"III: Ordenar la prohibici贸n de todo contacto con la v铆ctima por cualquier medio.\n"
|
175 |
+
"IV: Ordenar la protecci贸n de la residencia mediante acompa帽amiento policial.\n"
|
176 |
+
"V: Ordenar la prohibici贸n de consumo de bebidas alcoh贸licas.\n\n"
|
177 |
+
"Ejemplo de justificaci贸n (solo como gu铆a):\n"
|
178 |
+
"a) Prohibici贸n de acercamiento: conforme al literal b) del Art铆culo 5 de la Ley 575 de 2000.\n"
|
179 |
+
"b) Prohibici贸n de contacto: conforme al literal c) del Art铆culo 5.\n\n"
|
180 |
+
"No incluyas estos ejemplos en la respuesta final.\n"
|
181 |
"No menciones violencia econ贸mica ni sexual salvo que se describa expresamente en los hechos.\n"
|
182 |
"Redacta cada justificaci贸n en una sola frase 煤nica, sin repetir fundamentos.\n"
|
183 |
"Limita todo el texto a un m谩ximo de 300 palabras.\n"
|
|
|
185 |
)
|
186 |
}
|
187 |
]
|
188 |
+
]
|
189 |
|
190 |
# Aplicar chat template
|
191 |
encoded = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
|