Jorge Henao commited on
Commit
7d54e39
1 Parent(s): 5d36688

hello fukcing world

Browse files
Files changed (5) hide show
  1. README.md +6 -6
  2. app.py +102 -0
  3. config.py +8 -0
  4. document_quieries.py +36 -0
  5. requirements.txt +3 -0
README.md CHANGED
@@ -1,12 +1,12 @@
1
  ---
2
- title: Ask2democracycol
3
- emoji: 🔥
4
- colorFrom: pink
5
- colorTo: pink
6
  sdk: streamlit
7
- sdk_version: 1.10.0
8
  app_file: app.py
9
- pinned: false
10
  license: apache-2.0
11
  ---
12
 
 
1
  ---
2
+ title: Ask2democracy - Informe comisión de la verdad
3
+ emoji: 🧐 📄 🇨🇴
4
+ colorFrom: yellow
5
+ colorTo: blue
6
  sdk: streamlit
7
+ sdk_version: 3.0.24
8
  app_file: app.py
9
+ pinned: True
10
  license: apache-2.0
11
  ---
12
 
app.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+ import time
4
+ from config import Config
5
+ from document_quieries import ExtractiveProposalQueries
6
+
7
+ extractive_query = ExtractiveProposalQueries(es_host = Config.es_host, es_index = Config.proposals_index,
8
+ es_user = Config.es_user, es_password = Config.es_password,
9
+ reader_name_or_path = Config.reader_model_name_or_path,
10
+ use_gpu = Config.use_gpu)
11
+
12
+
13
+ def fake_search(question, retriever_top_k, reader_top_k):
14
+ #p1_result = query.search_by_query(query = question, retriever_top_k = retriever_top_k, reader_top_k = reader_top_k, es_index = "informecomisionverdad")
15
+ result = []
16
+ p = """
17
+ La masacre de Bojayá fue perpetrada por el Frente José María Córdoba, de las FARC-EP, al lanzar un cilindro bomba que cayó en una iglesia en la que los pobladores se refugiaban del enfrentamiento de este grupo con el Bloque Élmer Cárdenas de las AUC. Las víctimas fueron 81 personas, 47 de ellas eran niñas, niños y adolescentes
18
+ """
19
+ for i in range(0, reader_top_k):
20
+ result.append([[i+1],"81 personas", p[:250],"Las masacres","Comisión de la verdad - Informe de hallazgos y recomendaciones Junio 2022","5"])
21
+
22
+ return result
23
+
24
+ def search(question, retriever_top_k, reader_top_k):
25
+ query_result = extractive_query.search_by_query(query = question, retriever_top_k = retriever_top_k, reader_top_k = reader_top_k, es_index = "informecomisionverdad")
26
+ result = []
27
+ for i in range(0, reader_top_k):
28
+ item = query_result[i]
29
+ result.append([[i+1], item.answer, item.context[:200], item.meta['title'], item.meta['source']])
30
+
31
+ return result
32
+
33
+
34
+ if __name__ == "__main__":
35
+ # streamlit part starts here with title
36
+ title = """
37
+ <h1 style='
38
+ text-align: center;
39
+ color: #3CB371'>
40
+ Ask2Democracy - Informe de la comisión de la verdad Julio 2022
41
+ </h1>
42
+ <p>
43
+ El 28 de Julio del 2022, la Comisión de la Verdad en Colombia liberó su informe final. Fue el resultado de más de 3 años de investigación sobre el conflicto armado interno durante los últimos 60 años. El espacio que encontrarás a continuación, pretende ayudar a explorar las más de 6000 páginas que conforman los 12 tomos del Informe, comenzando por el tomo sobre Hallazgos y recomendaciones.
44
+ </p>
45
+ """
46
+ st.markdown(title, unsafe_allow_html=True)
47
+ # input form
48
+ with st.form("my_form"):
49
+ # here we have input space
50
+ query = st.text_input("Ingresa la pregunta, frase abierta o tema que quieres explorar",
51
+ placeholder="Escribe tu consulta aquí...")
52
+ # Every form must have a submit button.
53
+ submitted = st.form_submit_button("Buscar")
54
+
55
+ # on submit we execute search
56
+ if(submitted):
57
+ # set start time
58
+ stt = time.time()
59
+ # retrieve top 5 documents
60
+ results = search(query, retriever_top_k=5, reader_top_k=3)
61
+ # set endtime
62
+ ent = time.time()
63
+ # measure resulting time
64
+ elapsed_time = round(ent - stt, 2)
65
+
66
+ # show which query was entered, and what was searching time
67
+ st.write(f"**Resultados relacionados con:** \"{query}\" ({elapsed_time} sec.)")
68
+ # then we use loop to show results
69
+ for i, answer in enumerate(results):
70
+ # answer starts with header
71
+ st.subheader(f"{answer[1]}")
72
+ # cropped answer
73
+ doc = answer[2][:250] + "..."
74
+ # and url to the full answer
75
+ url = "https://www.comisiondelaverdad.co/sites/default/files/descargables/2022-06/Informe%20Final%20capi%CC%81tulo%20Hallazgos%20y%20recomendaciones.pdf"
76
+ # then we display it
77
+ #st.markdown(f'{doc}\n<br>Fuente: {answer[4]}\n<br>Capítulo: {answer[3]}\n<br>Página: {answer[5]}\n[**Lee más aquí**]({url})\n', unsafe_allow_html=True)
78
+ st.markdown(f"{doc}[**Lee más aquí**]({url})")
79
+ st.caption(f"Fuente: {answer[4]} - Capítulo: {answer[3]}")
80
+
81
+ st.markdown("---")
82
+ st.markdown("""
83
+ </br>Por: Jorge Henao 🇨🇴 <a href="https://twitter.com/jhenaotw" target='_blank'>Twitter</a> <a href="https://www.linkedin.com/in/henaojorge" target='_blank'/>LinkedIn</a>
84
+ """)
85
+ else:
86
+ st.markdown("Haz Preguntas como: _**\"¿Desde cuando ha estado el narcotráfico en el estado?\"**_,\
87
+ _**\"¿número de víctimas en la masacre de bojayá?\"**_,\
88
+ _**\"recomendaciónes para la reparación integral\"**_")
89
+
90
+ description = """
91
+ <p>
92
+ <h2>Sobre esta iniciativa</h2>
93
+ Se enmarca en la construcción de ciudadanía, la creación de valor público y fortalecimiento de la democracia desde la invitación a la población a informarse, conocer y dialogar en torno a la memoria histórica y a la verdad del conflicto armado colombiano, partiendo del Informe de la Comisión de la Verdad, se espera incluir varias fuentes adicionales. Hace parte de un proyecto open-source que utiliza Inteligencia Artificial para contribuir al entendimiento de temas relevantes para el país.<a href= "https://github.com/jorge-henao/ask_to_democracy">. repo en github con FastAPI</a>
94
+ </br>Por: Jorge Henao 🇨🇴 <a href="https://twitter.com/jhenaotw" target='_blank'>Twitter</a> <a href="https://www.linkedin.com/in/henaojorge" target='_blank'/>LinkedIn</a>, con el apoyo de Manuela Gónima 🇨🇴 <a href="https://www.instagram.com/mgcomunicacionesco/" target='_blank'/>Instagram</a> <a href="https://www.linkedin.com/in/manuela-gonima-carvajal" target='_blank'/>LinkedIn</a>
95
+ <h2>¿Cómo utilizar esta herramienta?</h2>
96
+ Puedes escribir oraciones abiertas como “Masacres en Antioquia”, o una pregunta concreta como “Número de víctimas en la masacre de Bojayá”. No se trata de un sistema de búsquedas basado en palabras clave, por el contrario, puedes redactar preguntas más extensas y elaboradas. Cuanto más contexto le des a la pregunta, mejor funciona.
97
+ <h2>Beta disclaimer</h2>
98
+ Las respuestas que arroja el sistema no han sido pregrabadas ni basadas en opiniones. Todas son respuestas extraídas del Informe final de la CEV, por un sistema en beta. Este explorador se basa en un modelo de inteligencia artificial entrenado para entender el lenguaje español, sin embargo, necesita de un mayor entrenamiento por lo que, en ocasiones, puede ser confuso y no tan preciso.
99
+ Si quieres apoyar <a href="mailto:jorge.henao@diezonce.co">escríbenos.</a>
100
+ </p>
101
+ """
102
+ st.markdown(description, unsafe_allow_html=True)
config.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ class Config():
2
+ es_host = "ask2democracy-5d808e.es.us-central1.gcp.cloud.es.io"
3
+ es_user = "elastic"
4
+ es_password = "Xmir2X1f5twb8OJbpjbiIgXt"
5
+ proposals_index = "petrolfo"
6
+ reader_model_name_or_path = "mrm8488/distill-bert-base-spanish-wwm-cased-finetuned-spa-squad2-es"
7
+ #reader_model_name_or_path = "deepset/roberta-base-squad2-distilled"
8
+ use_gpu = True
document_quieries.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from abc import ABC, abstractmethod
2
+ from haystack.nodes import BM25Retriever, FARMReader
3
+ from haystack.document_stores import ElasticsearchDocumentStore
4
+ from haystack.pipelines import ExtractiveQAPipeline
5
+ import certifi
6
+
7
+ ca_certs=certifi.where()
8
+
9
+ class DocumentQueries(ABC):
10
+
11
+ @abstractmethod
12
+ def search_by_query(self, query : str, retriever_top_k: int, reader_top_k: int, es_index: str):
13
+ pass
14
+
15
+ class ExtractiveProposalQueries(DocumentQueries):
16
+
17
+ def __init__(self, es_host: str, es_index: str, es_user, es_password, reader_name_or_path: str, use_gpu = True) -> None:
18
+ reader = FARMReader(model_name_or_path = reader_name_or_path, use_gpu = use_gpu, num_processes=1, context_window_size=200)
19
+ self._initialize_pipeline(es_host, es_index, es_user, es_password, reader = reader)
20
+
21
+ def _initialize_pipeline(self, es_host, es_index, es_user, es_password, reader = None):
22
+ if reader is not None:
23
+ self.reader = reader
24
+ self.es_host = es_host
25
+ self.es_user = es_user
26
+ self.es_password = es_password
27
+ self.document_store = ElasticsearchDocumentStore(host = es_host, username=es_user, password=es_password, index = es_index, port = 443, scheme='https', verify_certs=True, ca_certs=ca_certs)
28
+ self.retriever = BM25Retriever(document_store = self.document_store)
29
+ self.pipe = ExtractiveQAPipeline(self.reader, self.retriever)
30
+
31
+ def search_by_query(self, query : str, retriever_top_k: int, reader_top_k: int, es_index: str = None) :
32
+ if es_index is not None:
33
+ self._initialize_pipeline(self.es_host, es_index, self.es_user, self.es_password)
34
+ params = {"Retriever": {"top_k": retriever_top_k}, "Reader": {"top_k": reader_top_k}}
35
+ prediction = self.pipe.run( query = query, params = params)
36
+ return prediction["answers"]
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ transformers==4.19.2
2
+ torch==1.10.2
3
+ farm-haystack==1.5.0