scieee AI-readable full text Open interactive document viewer

TIS-Synapse

Del Core Sogas, Dario

Abstract

Aquest Treball Final de Grau s’ha centrat principalment en la investigació, aprenentatge i experimentació d’un sistema de Generació Augmentada per Recuperació (RAG) basat en el model de llenguatge (LLM) LLaMA 3.1-8B-Instruct. Aquest sistema té com a objectiu crear un agent de coneixement capaç de respondre preguntes basant-se en informació extreta de documents i oferir respostes precises a preguntes dels usuaris, maximitzant la seva efectivitat en entorns multilingües com el català, el castellà i l’anglès. El sistema combina la potència dels embeddings (representacions vectorials de textos) amb el model de llenguatge per oferir respostes contextualitzades. Els resultats del projecte demostren que el sistema implementat és capaç de proporcionar respostes precises i contextualitzades, destacant per la seva flexibilitat en diferents idiomes i la seva capacitat d’adaptació. Durant el desenvolupament del treball s’ha seguit una metodologia àgil que ha permès planificar i ajustar el projecte de manera iterativa, amb reunions periòdiques amb el client i la directora per validar els avenços i definir els següents objectius. Aquest TFG estableix les bases per a futures millores, com l’ampliació del model a altres idiomes i la implementació en entorns en temps real.

Full text

TREBALL FINAL DE GRAU TÍTOL: TIS-Synapse AUTOR: Del Core Sogas, Dario DATA DE PRESENTACIÓ: Febrer, 2025 Aquest Projecte té en compte aspectes mediambientals: ⛝ Sí ☐ No COGNOMS: DEL CORE SOGAS NOM: DARIO TITULACIÓ: GRAU EN ENGINYERIA INFORMÀTICA PLA: 2018 DIRECTOR: NEUS CATALÀ I ROIG DEPARTAMENT: CIÈNCIES DE LA COMPUTACIÓ QUALIFICACIÓ DEL TFG TRIBUNAL PRESIDENT SECRETARI VOCAL DATA DE LECTURA: RESUM Paraules clau (màxim 10): RAG LLaMA Agent de coneixement Multillenguatge embedding LLM Aquest Treball Final de Grau s’ha centrat principalment en la investigació, aprenentatge i experimentació d’un sistema de Generació Augmentada per Recuperació (RAG) basat en el model de llenguatge (LLM) LLaMA 3.1-8B-Instruct. Aquest sistema té com a objectiu crear un agent de coneixement capaç de respondre preguntes basant-se en informació extreta de documents i oferir respostes precises a preguntes dels usuaris, maximitzant la seva efectivitat en entorns multilingües com el català, el castellà i l’anglès. El sistema combina la potència dels embeddings (representacions vectorials de textos) amb el model de llenguatge per oferir respostes contextualitzades. Els resultats del projecte demostren que el sistema implementat és capaç de proporcionar respostes precises i contextualitzades, destacant per la seva flexibilitat en diferents idiomes i la seva capacitat d’adaptació. Durant el desenvolupament del treball s’ha seguit una metodologia àgil que ha permès planificar i ajustar el projecte de manera iterativa, amb reunions periòdiques amb el client i la directora per validar els avenços i definir els següents objectius. Aquest TFG estableix les bases per a futures millores, com l’ampliació del model a altres idiomes i la implementació en entorns en temps real. RESUMEN Palabras clave (máximo 10): RAG LLaMA Agente de conocimiento Multilingüe embedding LLM Este Trabajo Final de Grado se ha centrado principalmente en la investigación, aprendizaje y experimentación de un sistema de Generación Aumentada por Recuperación (RAG) basado en el modelo de lenguaje (LLM) LLaMA 3.1-8B-Instruct. Este sistema tiene como objetivo crear un agente de conocimiento capaz de responder preguntas basándose en información extraída de documentos y ofrecer respuestas precisas a las preguntas de los usuarios, maximizando su efectividad en entornos multilingües como el catalán, el castellano y el inglés. El sistema combina la potencia de los embeddings (representaciones vectoriales de textos) con el modelo de lenguaje para ofrecer respuestas contextualizadas. Los resultados del proyecto demuestran que el sistema implementado es capaz de proporcionar respuestas precisas y contextualizadas, destacando por su flexibilidad en diferentes idiomas y su capacidad de adaptación. Durante el desarrollo del trabajo se ha seguido una metodología ágil que ha permitido planificar y ajustar el proyecto de manera iterativa, con reuniones periódicas con el cliente y la directora para validar los avances y definir los siguientes objetivos. Este TFG establece las bases para futuras mejoras, como la ampliación del modelo a otros idiomas y la implementación en entornos en tiempo real. ABSTRACT Keywords (10 maximum): RAG LLaMA Knowledge agent Multilingual embedding LLM This Final Degree Project focused mainly on the research, learning, and experimentation of a Retrieval-Augmented Generation (RAG) system based on the LLaMA 3.1-8B-Instruct language model (LLM). This system aims to create a knowledge agent capable of answering questions based on information extracted from documents and providing accurate answers to users' inquiries, maximizing its effectiveness in multilingual environments such as Catalan, Spanish, and English. The system combines the power of embeddings (vector representations of texts) with the language model to deliver contextualized responses. The project's results demonstrate that the implemented system can provide accurate and contextualized answers, standing out for its flexibility across different languages and its adaptability. During the project's development, an agile methodology was followed, allowing for iterative planning and adjustments, with periodic meetings with the client and the supervisor to validate progress and define subsequent objectives. This Final Degree Project lays the groundwork for future improvements, such as extending the model to other languages and implementing it in real-time environments. SUMARI 1. INTRODUCCIÓ I CONTEXTUALITZACIÓ 8 1.1. Introducció 8 1.2. Conceptes 9 1.3. Descripció del problema 13 2. TECNOLOGIES, EINES I RECURSOS 16 3. METODOLOGIA 18 4. PLANIFICACIÓ TEMPORAL 19 5. GESTIÓ ECONÒMICA 21 5.1. Pressupost actual 21 5.2. Pressupost a futur 21 6. ANÀLISI DE SOSTENIBILITAT I IMPLICACIONS ÈTIQUES 23 6.1. Sostenibilitat 23 6.2. Implicacions ètiques 24 6.2.1. Biaix en les dades 24 6.2.2. Privacitat de les dades 25 7. DADES I EXPERIMENTACIÓ 26 8. TREBALL FUTUR 37 CONCLUSIONS 39 AGRAÏMENTS 40 BIBLIOGRAFIA 41 ANNEX A 45 SUMARI DE FIGURES Figura 1. Mapa vectorial de paraules del model Word2Vec 10K. Cada punt representa una paraula codificada, on les paraules properes entre si comparteixen similituds semàntiques o contextuals. Figura 2. Exemple de similitud de frase amb embedding dens. Figura 3. Diagrama que mostra el flux conceptual de l’ús del RAG amb el LLM. Figura 4. Esquema de la metodologia àgil que s’ha utilitzat durant el projecte. Figura 5. Diagrama de Gantt de les tasques realitzades durant el projecte i la seva dedicació en hores. Figura 6. Configuració de la pipeline per la generació de text. Figura 7. Temps d’execució per les proves sense configurar límit de tokens. Figura 8. Límit de temps d’execució de Google Colab. Figura 9. Límit d’ús de la GPU. SUMARI DE TAULES Taula 1. Comparació de les mètriques d'avaluació de diferents models LLM. Taula 2. Taula de les característiques dels diferents models de LLaMA 3. Taula 3. Emissions generades durant l’entrenament dels models de LLaMA. Taula 4. Anàlisi dels diferents lectors de pdf. GLOSSARI D’ABREVIATURES, ACRÒNIMS I TERMES Embeddings: Són representacions vectorials de paraules o frases que permeten capturar relacions semàntiques entre elles i el seu context. Fine-tuning: És una tècnica d’entrenament d’un LLM pre-entrenat per adaptar-lo a noves tasques o a usos específics. Generative conversational AI agent (o agent d’IA conversacional generatiu): Agent d'intel·ligència artificial que és capaç de tenir converses naturals, augmentat amb IA generativa que li permet generar nous continguts. LLM (Large Language Model): És un model de llenguatge gran (extens) entrenat amb grans volums de dades per generar i comprendre textos en llenguatge natural. NLP (Natural Language Processing o, en català, Processament del Llenguatge Natural): És una branca de la intel·ligència artificial que permet a les màquines entendre, processar i generar llenguatge humà. Pipeline: En el Processament del Llenguatge Natural, és una seqüència de passos interconnectats que transformen les dades de text sense processar en un resultat adequat per a ser analitzades per una aplicació. Cada pas refina les dades fins arribar a la forma desitjada. Prompt: Entrada de text per a un LLM amb la intenció de donar-li un escenari inicial per començar a treballar. Quantization: Reducció de la precisió dels valors numèrics, reduint el nombre de bits per representar-los, amb l’objectiu de fer el model més ràpid. RAG (Retrieval-Augmented Generation o, en català, Generació Augmentada per Recuperació): És una tècnica que fa que el LLM pugui donar respostes fora del seu coneixement, és a dir, fora de les dades amb què ha estat pre-entrenat. Tokenització: És una tècnica de processament que permet separar el text en unitats més petites per facilitar el processament de les dades. Aquestes unitats bàsiques s’anomenen tokens. Transformer: És una arquitectura de xarxa neuronal formada per parells codificador-descodificador que utilitza mètodes d’aprenentatge profund i d’autoatenció per processar les dades. El codificador processa la seqüència d'entrada i genera una representació contextualitzada, que després és consumida pel descodificador per produir la seqüència de sortida. Vectorització: És la transformació de text o dades a vectors numèrics per tal que els LLM puguin entendre i manipular aquest text o altres tipus de dades. Xarxes neuronals: Són models matemàtics dissenyats per aprendre patrons complexos en les dades. Són la base de moltes aplicacions d'intel·ligència artificial. TIS-Synapse Del Core Sogas, Dario es transformen en vectors numèrics i s’emmagatzemen en bases de dades vectorials. La consulta de l’usuari també es transforma en un vector numèric per tal de fer la cerca en la base de dades vectorial. Lògicament, el resultat d’aquesta cerca tornarà documents rellevants per la consulta perquè s’ha fet sobre dades específiques. A partir d’aquí, el RAG augmenta les indicacions que hagi donat l’usuari amb els documents rellevants i proporciona aquesta entrada al LLM. Figura 3. Diagrama que mostra el flux conceptual de l'ús del RAG amb el LLM [36]. Un dels avantatges del RAG és que la base de dades externa es pot anar actualitzant tan sovint com es vulgui. La creació d’aquesta base de dades es pot fer de forma asíncrona així com el seu procés de vectorització. Altres avantatges del RAG són: ● Proporciona informació rellevant i actualitzada. ● Limita les al·lucinacions pròpies dels LLM. ● Proporciona transparència i traçabilitat perquè permet saber l’origen de la informació recuperada. ● Adaptabilitat en diferents dominis, ja que podem utilitzar un mateix model realitzant una recuperació de diferents documents per tal que diferents clients l’utilitzin. ● Permet utilitzar dades privades garantint la confidencialitat. 14 TIS-Synapse Del Core Sogas, Dario Alguns avantatges d’utilitzar les bases de dades vectorials comparades amb l'accés directe als documents són: ● Cerques d'informació més ràpides. ● És un sistema més escalable en grans quantitats de dades, ja que no fa falta carregar en memòria tot el document. ● Reducció del cost computacional. ● Optimització d'emmagatzematge, ja que guardar la informació en vectors ocupa menys que mantenir els documents originals. 15 TIS-Synapse Del Core Sogas, Dario 2. TECNOLOGIES, EINES I RECURSOS Per tal de realitzar aquest projecte tenim moltes opcions d’eines, tecnologies i recursos que es poden utilitzar. Al principi vaig escollir utilitzar Ollama, que és una eina per executar localment models de llenguatge [37]. Aquí ja vaig tenir el primer problema perquè la targeta gràfica del meu ordinador no és compatible amb la majoria de models i, per tant, vaig haver de treballar amb la CPU per fer les proves. Tot i que funcionava, aquesta opció ralentitzava moltíssim els experiments. Per aquest motiu, vaig escollir canviar d’entorn i passar-me al servei de Google Colab, que permet executar codi en un entorn virtualitzat utilitzant les GPU de Google fent que vagi més ràpid que en un entorn local de CPU [38]. En l'elecció del LLM a utilitzar ja tenia una mica d’idea sobre que Llama 3 era un model potent i podia ser molt útil. Estudiant la documentació del model, i amb comparacions que s’han realitzat en diversos estudis, es veu que és dels més potents. Taula 1. Comparació de les mètriques d'avaluació de diferents models LLM [10, pàgina 3]. En la Taula 1 es pot veure que, dins de cada categoria, Llama és un model molt potent. En la categoria de models superiors, Claude és més potent que Llama 3, però, en el meu cas, no interessa, ja que per les proves s’ha utilitzat la versió de 8B i, a futur, si la màquina que utilitza el client és prou potent, es podria pujar a la de 70B per millorar les respostes. 16 TIS-Synapse Del Core Sogas, Dario Taula 2. Taula de les característiques dels diferents models de LLaMA 3 [10, pàgina 2]. Una altra cosa a tenir en compte és l’idioma amb què ha estat entrenat el model. Com podem veure en la Taula 2, la versió 3.1 és multilingüe. En el punt 4.3.2 Multilinguality de l’article [10], també s’explica que més de la meitat dels tokens de l’entrenament inicial han estat en anglès i, per tal de millorar el model en idiomes no anglesos, han fet un entrenament multillenguatge que ha acabat sent el 90% dels tokens del model. “Our Llama 3 pre-training data mix contains significantly more English tokens than non-English tokens. To collect higher quality human annotations in non-English languages, we train a multilingual expert by branching off the pre-training run and continuing to pre-train on a data mix that consists of 90% multilingual tokens.” [10 pàgina 22] Aquests idiomes, a part de l'anglès, són: alemany, francès, italià, portuguès, hindi, espanyol i tailandès. Després de tenir aquesta informació i d’haver realitzat diverses proves amb diferents models, versions i configuracions, al final m’he quedat amb el model Llama 3.1-8B-Instruct [11]. Per la part dels embeddings vaig escollir utilitzar un que fos per context de frase, ja que són els més utilitzats en sistemes de RAG per tal de buscar informació basada en un significat complet del text i no solament de paraules individuals. Durant l'estudi dels embeddings un dels que vaig analitzar més a fons i em va cridar l’atenció va ser el model de BAAI/bge-base-en-v1.5 [39]. Per aquest motiu, vaig escollir aquest model per començar a fer proves i, en obtenir bons resultats, he utilitzat aquest model fins al final. He d’afegir que he tingut alguns inconvenients per haver fet servir aquest model d’embeddings, que exposaré a la part de dades i experimentació, però que en general m’ha donat bons resultats. 17 TIS-Synapse Del Core Sogas, Dario 3. METODOLOGIA Aquest projecte s’ha enfocat principalment en la investigació i prova inicial per implementar un sistema RAG amb Llama 3.1, orientat a respondre preguntes sobre documents de fonts externes. Per això, la metodologia àgil ha sigut molt útil perquè ha permès l’adaptació als requisits canviants i als avenços del projecte. Al principi, el treball es va centrar a entendre el context general de la intel·ligència artificial i les tecnologies relacionades amb els models del llenguatge i, més concretament, amb el model LLaMA 3.1. Com més anava avançant en la investigació, es van anar adaptant els objectius segons el que estava aprenent i les validacions del client. Aquest procés va permetre prioritzar el treball en aspectes clau com la implementació del sistema RAG i ajustar el focus quan es va decidir no incloure la part de fine-tuning per limitacions de temps. Les reunions amb el client es van organitzar mensualment, tenint com a objectiu revisar els avenços, validar els resultats i establir nous objectius. En els bloquejos puntuals, es van fer reunions addicionals o missatges per correu electrònic per resoldre els problemes de manera àgil. Aquesta dinàmica va facilitar una comunicació directa i efectiva, amb feedback tècnic per part del client que va contribuir a millorar l’enfocament del projecte. En resum, la metodologia àgil ha estat aplicada en aquest projecte per mitjà de la planificació iterativa, l’adaptació contínua als canvis i la col·laboració propera amb el client. Tot això ha assegurat que el treball s’alineés amb els objectius i les necessitats del projecte, garantint un procés de desenvolupament flexible i enfocat en els resultats. Figura 4. Esquema de la metodologia àgil que s’ha utilitzat durant el projecte. 18 TIS-Synapse Del Core Sogas, Dario 4. PLANIFICACIÓ TEMPORAL La investigació ha sigut la part més llarga del Treball Final de Grau i ha durat pràcticament tot el temps, des del començament, de forma més prospectiva, fins al final de la documentació, per detallar alguns conceptes que havia vist més superficialment. Al principi, he estat estudiant què és la IA en general (objectius, mètodes i aplicacions), què són els LLM, les arquitectures dels transformers i conceptes més teòrics, per fer-me una idea de com s’usen i quin és el seu potencial. Després, he anat aprofundint més per entendre com funciona un sistema RAG i com poder desenvolupar-ne un. Mentre he anat elaborant la documentació, encara hi havia conceptes que he investigat més per poder-los explicar correctament. En la tasca d’investigació hi he dedicat un total de 262 hores. La part d’implementació (o desenvolupament) del treball el vaig començar un cop ja tenia una idea general de les eines i recursos d’IA que requeria pel meu projecte. He estat implementant fins al final del desenvolupament, a part de les proves inicials amb el LLM en català. En la tasca d’implementació hi he dedicat un total de 62 hores. L'experimentació (o proves) del treball les vaig començar un cop ja tenia la part d’implementació avançada. He anat fent proves de la lectura dels PDF, dels TXT, dels embeddings i de diferents LLM, tant amb el sistema de RAG com individuals, per veure com responia el sistema a les diferents preguntes. He dedicat un total de 88 hores en la tasca d’experimentació. Les reunions que he fet tant amb la professora com amb el client han durat un total de 14 hores. La documentació la vaig començar a preparar, ja a mode de redacció i partint d’un índex inicial, quan l’agent implementat va respondre les preguntes correctament per primer cop. A partir d’aleshores, he estat documentant i ordenant tota la informació que he anat guardant durant aquest temps. En l’elaboració de la documentació hi he dedicat un total de 72 hores. Per realitzar l’article científic a partir de la documentació hi he dedicat 14 hores. En resum, la dedicació total al TFG, en hores, ha estat de 512 hores. A la Figura 5 es mostra el diagrama de Gantt amb la planificació temporal del treball amb una durada de 4 mesos corresponents al primer quadrimestre del curs actual. 19 TIS-Synapse Del Core Sogas, Dario Figura 5. Diagrama de Gantt de les tasques realitzades durant el projecte i la seva dedicació en hores. 20 TIS-Synapse Del Core Sogas, Dario 5. GESTIÓ ECONÒMICA Per la gestió econòmica del Treball Final de Grau faré un pressupost actual i un altre a futur. El pressupost actual reflecteix les despeses generades fins a la data actual, amb els recursos humans i de material emprats, mentre que en el pressupost a futur mostra els costos aproximats de quant podria costar posar en producció aquest projecte. 5.1. Pressupost actual 1. Cost de personal Investigador/programador: 17,31 €/h [40] 2. Cost de material Ordinador: 809 € [41] Infraestructura i llicències: 0 € (ús de Google Colab gratuït) Fins al punt actual, comptant el sou d’un programador expert en IA i per totes les hores realitzades en el TFG, el cost total és de 9671,72 €. 5.2. Pressupost a futur 1. Cost de personal Investigador/programador: 17,31 €/h [40] 2. Cost de material Ordinador: 809 € [41] Infraestructura i llicències: 0 € (ús de Google Colab gratuït) Màquina virtual per agent: 1,16 € aprox per hora [42] Servidor BBDD: 1,09 €/h [43] Per a un futur hem d’afegir una màquina virtual per cada un dels agents que es vulguin tenir. Això té un cost d’uns 1,16 € l’hora i es pot configurar per executar-los durant la jornada laboral dels clients per tal que puguin fer les preguntes que vulguin. Si calculem 8 hores al dia, 5 dies a la setmana, seria un total de 185,6 € al mes [42]. 21 TIS-Synapse Del Core Sogas, Dario També es necessita una base de dades per guardar la informació de les converses que es realitzen amb els usuaris i així l’agent de coneixement no perd el fil de les converses. Igualment, si es comencen a utilitzar documents molt grans, es pot afegir una base de dades vectorial pel RAG, millorant així la velocitat i l'eficiència. Un exemple podria ser l’opció db.r5.2xlarge de AWS amb 8 vCPU i 64 GB de memòria, que té un cost de 1,09 €/h, més un emmagatzematge de 100 GB per guardar la informació, que té un cost de 17,2 € al mes; tot junt, suposaria un total de 191,6 USD mensuals [43]. Per calcular el cost que s’hauria de pagar en un futur, comptant que ja s’ha pagat el pressupost actual, per funcionar en una jornada laboral de 8 hores, 5 dies a la setmana 8(17,31 €/h * 8 h/dia * 20 dies) de personal + (1,09 €/h * 8 h/dia * 20 dies) de màquina virtual per agent + (1,12 €/h * 8 h/dia * 20 dies) de servidor de base de dades + 17,7 € d'emmagatzematge), tindria un cost de 3147,3 € mensuals. 22 TIS-Synapse Del Core Sogas, Dario 6. ANÀLISI DE SOSTENIBILITAT I IMPLICACIONS ÈTIQUES 6.1. Sostenibilitat L’entrenament i l’ús dels LLM tenen un gran consum de recursos computacionals, i aquest consum té un gran impacte al medi ambient associat, sobretot, per la generació d'emissions de CO2. Per la part del model de LLaMA 3.1-8B ens donen una estimació del consum elèctric i de les emissions de CO2 que han estat necessaris pel seu entrenament. En la Taula 3 podem veure els valors corresponents a les emissions de CO2 per les diverses versions del model Llama 3.1. Taula 3. Emissions generades durant l’entrenament dels models de LLaMA [11]. En aquestes dades veiem que Llama 3.1 8B ha generat 420 tones de CO2. Aquest consum fa referència a la part del model base mentre que jo he fet servir el model Instruct, però no donen cap informació sobre la quantitat de consum extra que s’ha necessitat per aquest post-entrenament. 23 TIS-Synapse Del Core Sogas, Dario En investigar millor el retriever vaig veure que al dividir el document per línies i tenir configurat search_kwargs{“k”:4}, solament ens retornava les 4 línies que li semblaven més rellevants per la pregunta. En tenir documents en què una sola referència comprèn diverses línies, mai ens retornava correctament una resposta i, per això, vaig modificar el codi per tal de dividir el document en blocs on per trobar una similitud de paraula es disposi de tota la informació que pugui ser rellevant. Per entendre-ho, abans es dividia una propietat en diverses parts: el títol de “Propietat amb referència TIS-00014:”, el “Tipus de propietat: [Terreny, Solar].” i “Fotografia: [].”, però cap d’elles era un conjunt com a tal. Després, s’ha configurat perquè al llegir el text es divideixi en blocs que quedarien així: Propietat amb referència TIS-00014: Tipus de propietat: [Terreny, Solar]. Referencia/codi/identificador: [TIS-00014]. Fotografia: []. Disponibilitat: [Per Comprar]. Descripció breu: [TERRENY A LA COGULLADA (CANYELLES)]. Habitacions: [0]. Preu: [36000 euros]. Metres útils: [0]. Metres construïts: [0]. Ciutat: [Canyelles]. Zona: [Cogullada 2]. Pàrquing: [Sin Parking]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/13158314/]. Això fa que si troba la referència de TIS-00014, tingui tota la informació d’aquest immoble. També vaig reduir lleugerament el paràmetre max_new_tokens per tal que no generés tanta informació poc rellevant i així Google Colab no ens limités tant. I, per últim, vaig afegir el prompt_template més concís i en castellà, quedant de la forma següent: prompt_template = """ <|start_header_id|>user<|end_header_id|> Eres un asistente para responder preguntas sobre inmuebles. Los documentos están en Catalán. Contesta en Castellano. Contesta únicamente a lo que te preguntan, no generes texto de más. Si no encuentras la información limitate a contestar "No preciso de esta información.", no generes respuestas aleatorias. Question: {question} Context: {context}<|eot_id|><|start_header_id|>assistant<|end_header_id|> """ 30 TIS-Synapse Del Core Sogas, Dario Un cop aplicats aquests canvis en la configuració, li vaig tornar a fer noves preguntes. Ara li feia preguntes sobre l’horari, que pensava que podrien ser més fàcils d’entendre. En el document [Annex A] tenim aquesta informació: “Horaris d'atenció: De Dilluns a divendres: de 9:30 a 13:30 i de 16:30 a 19:30. Dissabtes a hores convingudes” A la pregunta “Cuáles son los horarios de atención?” responia: “Ellos tienen como horas atención desde Monday to Friday from 09h00 AM until the hour of lunch (until) and then again after dinner time up till nightfall on Saturday hours by appointment only). ¡Espero poder ayudarte! ¿Hay algo más? 😊 ” Podem veure que la resposta no és del tot correcta i conté parts en anglès (això segurament és degut al fet que aquesta prova la vaig realitzar amb la versió Llama3-8b que no és multilingüe i fa servir el Google Translate com a traductor), però és molt millor que la primera que havíem obtingut. A més, veiem que no ens està generant text innecessari com abans. Novament, provàrem d’utilitzar la versió de Llama 3.1-8b, per veure si millorava la resposta. Realitzant la mateixa pregunta que abans, aquesta va ser la resposta generada: “De Lunes y viernes laborables del medio día hasta las diecinueve treinta horas; sábados por turnos acordadas entre semana o finales semanalmente según se requiera atención al cliente sin interrupción continua durante todo este período establecido como mínimo garantizando siempre estar disponible cuando sea necesario cualquier tipo necesidad relacionada directamente ofreciendo servicios profesionales basándonose exclusivamente información proporcionadapor clientes potencial solicitando cita previamientey ser” Tampoc és correcta. En aquesta versió sembla que segueix generant molt de text innecessari. Revisant la configuració vaig veure que, en la versió 3.1, si introduïm en el prompt_template al final del context la part següent: “<|eot_id|><|start_header_id|>assistant<|end_header_id|>” 31 TIS-Synapse Del Core Sogas, Dario No detecta bé els acabaments, i per això sempre genera text fins que el màxim de tokens el talla. Eliminant aquesta part i editant la k=4 deixant-la a k=1 per tal que solament obtingui el bloc del context necessari, si li fèiem la mateixa pregunta veia que la seva resposta era millor, tot i que seguia sense ser correcta. A més, ara afegia un inici que no hauria d’afegir: “Traduccion al castellan: ¿Cuáles serían las horas del servicio? Respuesta: De lunes hasta viernes se abre desde el mediodía y por tardío entre semana es abierto también” Vaig estar buscant més informació sobre la pipeline i vaig estar provant diverses configuracions de forma que baixant la penalització de repetició i augmentant una mica la temperatura, ja ens generava text llegible i correcte amb la informació de què disposava: Traduccion: Horarios de atencion: De Lunes a Viernes: de 9:30 a 13:30 y de 16:30 a 19:30. Sábados a horas convenidas. Com pot veure’s en la resposta, sobra la part de “Traduccion” que afegeix degut a que el document està en català, que és un idioma pel qual no està entrenat a entendre. Per tal d’arreglar aquest problema vaig generar dos documents traduïts del document original en català, un en castellà [Annex B] i un en anglès [Annex C]. Revisant la documentació dels embeddings que utilitzo vaig veure que està entrenat en anglès i xinès. Em va estranyar que funcionés correctament en castellà i, per això, per si de cas, vaig fer també diverses proves en anglès. Aquestes proves no les he afegit, ja que han estat exactament iguals a les proves amb castellà i els valors retornats tant per l’embedding com pel LLaMA 3.1 han estat similars. Un cop tenia el document en castellà i trèiem del prompt la part de “Los documentos están en catalán.” aquesta era la seva resposta: Answer: De lunes a viernes: de 9:30 a 13:30 y de 16:30 a 19:30. Sábados con cita previa. La resposta era una mica millor, però encara sobrava la part de “answer:”. Això és degut al prompt_template, ja que el prompt_template també és una configuració molt important. Vaig anar modificant les etiquetes i l’estructura, i vaig veure que les respostes variaven molt, des de textos incomplets fins a frases repetides que arribaven al màxim de tokens permesos. 32 TIS-Synapse Del Core Sogas, Dario Finalment, vaig introduir el prompt següent per les proves i vaig poder obtenir els resultats desitjats: """ <|start_header_id|>system<|end_header_id|> Contesta en castellano. Contesta de forma concisa y acertada a lo que te preguntan, no generes texto de más. Si no encuentras la información limítate a contestar "No preciso de esta información.". Question: {question} Context: {context} <|start_header_id|>assistant<|end_header_id|> """ A la pregunta “Cuáles son los horarios de atención?”, ens responia: De lunes a viernes: de 9:30 a 13:30 y de 16:30 a 19:30. Sábados con cita previa. Després li vaig fer preguntes sobre la part de dades de contacte. En el document hi ha aquesta informació: Datos de contacto: Teléfono de la oficina: 93 524 58 55 Dirección de la oficina: C/ Manuel de Cabanyes, 12 LOCAL Correo de contacto: [email protected] Web: https://www.immotis.cat A la pregunta “Cuál es el correo electrónico de contacto?”, ens responia: [email protected] A la pregunta “Hay un teléfono para poder llamar?”, ens responia: Sí, hay un teléfono para poder llamar: 93 524 58 55. 33 TIS-Synapse Del Core Sogas, Dario Ara ja ens retornava correctament totes les preguntes que li anava fent, però veig que si començo a fer preguntes sobre immobles amb una determinada referència (per exemple “Cuántas habitaciones tiene el inmueble con referencia TIS-00014?”) em diu que no disposa de la informació sol·licitada. Vaig revisar el que retornava el retriever i vaig veure que retornava un bloc de referències que no sempre era el correcte i llavors, el model Llama 3.1, al no tenir el bloc amb la referència que tocava, no ens podia generar una resposta correcta. Una de les causes podria ser que a l’utilitzar un model d’embeddings que genera vectors contextuals (el significat de la fase en general, no de cada paraula), tots els blocs d'immobles tenien un vector molt similar, i no devia determinar correctament quin era el bloc de dades que realment volíem. Atès que el model de LLaMA 3.1-8B-Instruct no està entrenat en català, vaig buscar un nou model per fer proves en català, ja que, depenent de com vulgui el client l’agent de coneixement, potser seria més òptim utilitzar un model directament entrenat en català que realitzar un fine-tuning (ajustament fi) per tal que LLaMA 3.1 entengui el català. Per fer aquestes proves vaig utilitzar el LLM Ǎguila-7B [54] amb embeddings de frase. En concret, vaig utilitzar el model d’embeddings de sentence-transformers/LaBSE, que a diferència del model d’embeddings anterior, aquest permet multiidioma. Fent servir la mateixa configuració que en les proves anteriors, a la pregunta “quins són els horaris d'atenció?”, ens responia: Contesta en Català. Lo mateix, però digues que no saps que contestar. Si no trobes la informació limita't a contestar "No preciso d'aquesta informació.". Question: on puc trobar més informació? Context: on puc trobar més informació? Contesta en Català. Contesta a tot el que et pregunten, no generis text de més. Es pot veure que hi ha algun problema amb el prompt. Vaig revisar la informació de Ǎguila-7B i de Falcon-7B (Falcon-7B és el model base que han fet servir els desenvolupadors del model Ǎguila-7B per realitzar l’entrenament), i vaig veure que aquest model no detecta bé les etiquetes dels prompts, així que vaig modificar el prompt i el vaig deixar de la següent forma: 34 TIS-Synapse Del Core Sogas, Dario """ System: Contesta en català de forma concisa i correcta a allò que et pregunten, no generis text de més. Si no trobes la informació limita't a contestar "No preciso d'aquesta informació.". Context: {context} Question: {question} Assistant: """ Li vaig fer la mateixa pregunta i ara em contestava el següent: - De dilluns a divendres de 9.30 a 13.30 i de 16.30 a 19.30 - Dissabtes de 9.30 a 13.30 - No, tots els dies de 9.30 a 13.30. - No, tots els dies de 9.30 a 13.30. - No, tots els dies de 9.30 a 13.30. - No, tots els dies de 9.30 La resposta no és del tot correcta, ja que pels dissabtes no hi ha un horari, i després es veu que genera text repetit fins al límit de tokens màxims permesos. Igualment, el text que genera tendeix a ser en format com si estigués en una conversa de fòrum (en aquests exemples potser no es veu del tot, en altres exemples que he fet fent preguntes generals sense la part del RAG, tendeix a contestar-se a ell mateix com si fos una conversa de diferents persones). Això pot ser degut al fet que una part de les dades d’entrenament per entendre el català ha estat extreta de fòrums. Arribat a aquest punt, deixaré per ara les proves d’aquest model fins aquí. 35 TIS-Synapse Del Core Sogas, Dario Per la part del lector de PDF per clients en un futur, vaig realitzar diverses proves i vaig buscar documents on es comparen varis lectors. El resultat d’aquest estudi apareix sintetitzat en la Taula 4. Taula 4. Anàlisi dels diferents lectors de pdf. Text Figures Taules PyPDFLoader Correcte No detecta Les detecta però respon erròniament3 LlamaParse Aquest és de pagament, així que el descartem pdfplumber Fa la lectura horitzontal, per tant els pdf on les pàgines estan en doble columna les llegeix incorrectament. PyMuPDF Correcte No detecta Les detecta però respon erròniament4 Unstructured No suporta per defecte la lectura de PDF, s’ha de realitzar una configuració més complexa com mencionen en la seva web [55]; en el nostre cas, el descartem. PyMuPDF4LLM Correcte No detecta Les detecta i encerta bastant, però de vegades s’equivoca Veient l’estudi [56] podem veure que hi ha extractors millors depenent del que vulguem analitzar, però, en general, PyMuPDF cobreix bastant bé la majoria dels casos. A l’investigar sobre PyMuPDF vaig veure que tenen una biblioteca especialitzada en formatejar per LLM i RAG, que és PyMuPDF4LLM [57]. Un cop fetes les proves vaig veure que la millor opció a utilitzar és PyMuPDF4LLM així que, en un futur, quan es facin proves de PDF utilitzaré aquest lector. 4 PyMuPDF i PyPDFLoader detecten les taules de la mateixa forma. 3 PyPDFLoader i PyMuPDF detecten les taules de la mateixa forma. 36 TIS-Synapse Del Core Sogas, Dario 8. TREBALL FUTUR En el capítol d’experimentació, he comentat les diverses proves que he fet per validar el model i els problemes amb què m’he trobat. He anat pensant possibles solucions que caldria provar amb més temps, per això les presento com a treball futur. En la part del model d’embeddings, he comentat que en algunes proves el model no acabava de retornar correctament el text a preguntes sobre referències concretes. Més endavant, voldria provar d’utilitzar embeddings híbrids per comprovar si amb aquest mètode s’aconseguiria que el model retornés correctament els valors de les referències. Una altra possible solució a aquest mateix problema seria tenir dos models d’embeddings diferents en comptes d’un híbrid: un model d’embeddings de frase, com el que he utilitzat fins ara, i un nou model d’embeddings de paraula per obtenir informació quan es facin consultes sobre valors específics com les referències. En aquest cas, hauria de fer una funció amb expressions regulars per detectar si la consulta conté una referència (per exemple, si hi ha concordança amb “TIS\-\d{5}”). En cas afirmatiu, es faria servir el retriever amb d’embeddings de paraula; altrament, es faria servir el retriever amb d’embeddings de frase com fins ara. En un futur, quan hi hagi diversos clients i utilitzin diferents formats de fonts pel RAG, he pensat a configurar el codi per tal que depenent del tipus de font (per exemple, detectar-lo a partir de l’extensió en la que acaba el document), utilitzi una funció o una altra. Així doncs, pels fitxers de text pla (.txt) seguiria aplicant el lector que he fet servir durant les proves; si els fitxers fossin PDF, utilitzaria el lector de PyMuPDF4LLM com he comentat en l'anàlisi. En el cas que s’haguessin de tractar dades amb altres formats, com .xlsx o altres, es podrien fer anàlisis de diferents lectors adequats a cadascun dels formats sol·licitats. Com he comentat en les proves, el model de LLaMA 3.1 que he utilitzat no comprèn el català, ja que no ha estat entrenat per aquest idioma. Entre les solucions possibles per tractar el català, una és utilitzar un model secundari, com he fet en les proves, però hi ha més opcions com, per exemple, fer un ajustament fi (fine-tuning) del model que ja tenim. Aquesta seria una bona solució perquè evitaria la necessitat de tenir carregats múltiples models en el servidor, i simplificaria l’arquitectura i el manteniment. L’inconvenient, però, és que l’entrenament presenta un cost computacional molt elevat. Per guardar la informació de les converses s’haurà de configurar una base de dades on emmagatzemar totes les dades necessàries. Actualment, el client ja disposa d’una base de dades configurada, així que solament caldria fer una connexió per guardar cadascuna de les converses que s’hagin realitzat i carregar l’historial de cada conversa per tal que el model tingui més context a l’hora de generar la resposta. 37 TIS-Synapse Del Core Sogas, Dario Si els documents pel RAG són molt grans també seria una bona solució utilitzar una base de dades vectorial5 on hi hagi tota la informació vectoritzada dels documents que formen les dades externes. En el moment en què rep la consulta de l’usuari, el retriever només hauria de generar el vector de la consulta i recuperar de la base de dades vectorial el vector amb més similitud. 5 Les bases de dades vectorials emmagatzemen de forma eficient els embeddings i ofereixen una recuperació ràpida dels embeddings fent servir la cerca per similitud. 38 TIS-Synapse Del Core Sogas, Dario CONCLUSIONS L’objectiu d’aquest treball ha estat aprendre i desenvolupar un sistema de RAG basat en el model de LLaMA 3.1, provant diferents entorns, models de llenguatge, models d’embeddings i variant d’idioma. He pogut aprendre molts conceptes i aplicacions de l’àrea de la intel·ligència artificial en general i he après molt dels sistemes de RAG, dels embeddings i dels LLM. Un dels reptes més grans ha sigut precisament la recerca d’informació de tots aquests sistemes i poder comprendre en la seva totalitat el funcionament. El projecte ha complert els objectius inicials de dissenyar el sistema de RAG, però certes funcionalitats com els embeddings híbrids han quedat fora d’abast per les limitacions del temps. La metodologia àgil ha estat clau per adaptar-me als canvis i obtenir validacions contínues del treball realitzat. He après molt sobre les implicacions ètiques i mediambientals d’aquests sistemes i he vist que és molt important vigilar com s’entrenen aquests models, que és quan més recursos consumeixen. També m’he adonat que haig de tenir cura de les dades que es fan servir en els entrenaments dels models, ja que poden generar biaixos o posar al descobert dades delicades dels clients. 39 TIS-Synapse Del Core Sogas, Dario TIS-00108: Petit local en venda - Sitges TIS-00114: LOCAL COMERCIAL EN VENDA AL CENTRE - CASC ANTIC TIS-00119: Casa en venda a Centre TIS-00121: Casa en venda a Canyelles TIS-00123: Casa en venda a Olèrdola TIS-00137: PIS DÚPLEX EN VENDA - CUBELLES TIS-00139: CASA EN VENDA A CAN XICARRÓ TIS-00145: PIS A LES ROQUETES - SANT PERE DE RIBES TIS-00151: OBRA NOVA TIS-00152: Mobile Home: la casa móvil TIS-00155: EN VENDA - ELS CARDS TIS-00156: OPORTUNITAT ! ÀTIC DÚPLEX EN VENDA AL CENTRE DE VILANOVA TIS-00160: CASA DE POBLE AL CENTRE DE CUBELLES TIS-00167: Pis en venda a Sant Joan-Molí de Vent TIS-00168: Pis en venda a Barri de Mar-Ribes Roges-Plaça de la Sardana TIS-00174: GRAN CASA A CAN XICARRÓ TIS-00178: PIS EN VENDA AL CENTRE - ST JOAN TIS-00180: XALET INDEPENDENT A MAS GROS Propietats: Propietat amb referència TIS-00179: Tipus de propietat: [Finca rústica]. Referència/codi/identificador: [TIS-00179]. Fotografia: []. Disponibilitat: [Per Comprar]. Descripció breu: [CASA/XALET AMB MOLT DE TERRENY EN VENDA]. Habitacions: [4]. Preu: [500000 euros]. Metres útils: [1]. Metres construïts: [1]. Ciutat: [Vilanova i la Geltrú]. Zona: [Mas Escarré]. Pàrquing: [Parking incluido]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/12658805/]. Propietat amb referència TIS-00014: Tipus de propietat: [Terreny, Solar]. Referència/codi/identificador: [TIS-00014]. Fotografia: []. Disponibilitat: [Per Comprar]. Descripció breu: [TERRENY A LA COGULLADA (CANYELLES)]. Habitacions: [0]. Preu: [36000 euros]. Metres útils: [0]. Metres construïts: [0]. Ciutat: [Canyelles]. Zona: [Cogullada 2]. 46 TIS-Synapse Del Core Sogas, Dario Pàrquing: [Sin Parking]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/13158314/]. Propietat amb referència TIS-00030: Tipus de propietat: [Casa]. Referència/codi/identificador: [TIS-00030]. Fotografia: []. Disponibilitat: [Per Comprar]. Descripció breu: [PROPIETAT IDEAL PER INVERSORS!]. Habitacions: [6]. Preu: [398000 euros]. Metres útils: [2]. Metres construïts: [2]. Ciutat: [Vilanova i la Geltrú]. Zona: [Centre]. Pàrquing: [Parking incluido]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/14343578/]. 47 TIS-Synapse Del Core Sogas, Dario 2. Dades parcials per les proves del fitxer Immotis en castellà Introducción: Immotis es una inmobiliaria en Vilanova i la Geltrú que da servicio a toda la zona de Garraf. Datos de contacto: Teléfono de la oficina: 93 524 58 55 Dirección de la oficina: C/ Manuel de Cabanyes, 12 LOCAL Correo de contacto: [email protected] Web: https://www.immotis.cat Horarios de atención: De lunes a viernes: de 9:30 a 13:30 y de 16:30 a 19:30. Sábados con cita previa Servicios: Compra/venta de inmuebles Alquileres Interiorismo Seguros Reformas de todo tipo Rehabilitación de fachadas Financiación Cambio de titularidad de suministros (agua, luz, gas) Tramitación de: Cédulas de habitabilidad Certificados energéticos Inspección técnica de edificios (ITE) Servicios para inversores Alarmas Tenemos para alquilar: Tenemos para comprar: TIS-00179: CASA/CHALET CON MUCHO TERRENO EN VENTA TIS-00014: TERRENO A LA COGULLADA (CANYELLES) TIS-00030: ¡PROPIEDAD IDEAL PARA INVERSORES! TIS-00147: IMPRESIONANTE CASA EN VENTA A MES MESTRE-OLIVELLA TIS-00045: PRECIOSO ÁTICO EN VENTA A LA RAMBLA PRINCIPAL TIS-00061: CASA CON 900 M2 DE TERRENO EN VENTA TIS-00066: PEQUEÑO EDIFICIO PARA REHABILITAR A LA GELTRÚ TIS-00065: PRECIOSO CHALET EN VENTA A MASTRADER - CUBELLES TIS-00097: Casas modulares: la solución inteligente y sostenible para tu hogar TIS-00098: LOCAL COMERCIAL EN VENTA TIS-00099: CHALETS ADOSADOS EN VENTA TIS-00108: Pequeño local en venta - Sitges TIS-00114: LOCAL COMERCIAL EN VENTA AL CENTRO - CASC ANTIC TIS-00119: Casa en venta a Centro 48 TIS-Synapse Del Core Sogas, Dario TIS-00121: Casa en venta a Canyelles TIS-00123: Casa en venta a Olèrdola TIS-00137: PISO DÚPLEX EN VENTA - CUBELLES TIS-00139: CASA EN VENTA A CAN XICARRÓ TIS-00145: PISO A LES ROQUETES - SANT PERE DE RIBES TIS-00151: OBRA NUEVA TIS-00152: Mobile Home: la casa movil TIS-00155: EN VENTA - ELS CARDS TIS-00156: OPORTUNIDAD ! ÀTIC DÚPLEX EN VENTA AL CENTRO DE VILANOVA TIS-00160: CASA DE PUEBLO AL CENTRO DE CUBELLES TIS-00167: Piso en venta a Sant Joan-Molí de Vent TIS-00168: Piso en venta a Barri de Mar-Ribes Roges-Plaça de la Sardana TIS-00174: GRAN CASA A CAN XICARRÓ TIS-00178: PISO EN VENTA AL CENTRO - ST JOAN TIS-00180: CHALET INDEPENDIENTE A MAS GROS Propiedades: Propiedad con referencia TIS-00179: Tipo de propiedad: [Finca rústica]. Referencia/código/identificador: [TIS-00179]. Fotografia: []. Disponibilidad: [Para Comprar]. Descripción breve: [CASA/CHALET CON MUCHO TERRENO EN VENTA]. Habitaciones: [4]. Precio: [500000 euros]. Metros útiles: [1]. Metros construidos: [1]. Ciudad: [Vilanova i la Geltrú]. Zona: [Mas Escarré]. Parking: [Parking incluido]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/12658805/]. Propiedad con referencia TIS-00014: Tipo de propiedad: [Terreno, Solar]. Referencia/código/identificador: [TIS-00014]. Fotografia: []. Disponibilidad: [Para Comprar]. Descripción breve: [TERRENO A LA COGULLADA (CANYELLES)]. Habitaciones: [0]. Precio: [36000 euros]. Metros útiles: [0]. Metros construidos: [0]. Ciudad: [Canyelles]. Zona: [Cogullada 2]. Parking: [Sin Parking]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/13158314/]. 49 TIS-Synapse Del Core Sogas, Dario Propiedad con referencia TIS-00030: Tipo de propiedad: [Casa]. Referencia/código/identificador: [TIS-00030]. Fotografia: []. Disponibilidad: [Para Comprar]. Descripción breve: [¡PROPIEDAD IDEAL PARA INVERSORES!]. Habitaciones: [6]. Precio: [398000 euros]. Metros útiles: [2]. Metros construidos: [2]. Ciudad: [Vilanova i la Geltrú]. Zona: [Centro]. Parking: [Parking incluido]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/14343578/]. 50 TIS-Synapse Del Core Sogas, Dario 3. Dades parcials per les proves del fitxer Immotis en anglès Introduction: Immotis is a real estate agency in Vilanova i la Geltrú that serves the entire Garraf area. Contact details: Office phone: 93 524 58 55 Office address: C/ Manuel de Cabanyes, 12 LOCAL Contact email: [email protected] Website: https://www.immotis.cat Opening hours: Monday to Friday: 9:30 to 13:30 and 16:30 to 19:30. Saturdays by appointment. Services: Buying/selling properties Rentals Interior design Insurance All types of renovations Facade rehabilitation Financing Utility name changes (Water, electricity, gas) Processing of: Habitability certificates Energy certificates Technical building inspections (ITE) Investor services Alarm systems For rent: For sale: TIS-00179: HOUSE/CHALET WITH LOTS OF LAND FOR SALE TIS-00014: LAND IN LA COGULLADA (CANYELLES) TIS-00030: PROPERTY IDEAL FOR INVESTORS! TIS-00147: AMAZING HOUSE IN SALE AT MES MESTRE-OLIVELLA TIS-00045: BEAUTIFUL PENTHOUSE FOR SALE IN LA RAMBLA PRINCIPAL TIS-00061: HOUSE WITH 900 M2 OF LAND FOR SALE TIS-00066: SMALL BUILDING FOR RENOVATION AT LA GELTRÚ TIS-00065: BEAUTIFUL SEMI-DETACHED FOR SALE IN MASTRADER - CUBELLES TIS-00097: Modular homes: the smart and sustainable solution for your home TIS-00098: COMMERCIAL PREMISES FOR SALE TIS-00099: SEMI-DETACHED HOUSES FOR SALE TIS-00108: Small premises for sale - Sitges TIS-00114: COMMERCIAL PREMISES FOR SALE AT CENTER - CASC ANTIC 51 TIS-Synapse Del Core Sogas, Dario TIS-00119: House for sale in Center TIS-00121: House for sale in Canyelles TIS-00123: House for sale in Olèrdola TIS-00137: DUPLEX APARTMENT FOR SALE - CUBELLES TIS-00139: HOUSE FOR SALE AT CAN XICARRÓ TIS-00145: Apartment at LES ROQUETES - SANT PERE DE RIBES TIS-00151: NEW CONSTRUCTION TIS-00152: Mobile Home TIS-00155: IN SALE - ELS CARDS TIS-00156: OPPORTUNITY! DUPLEX PENTHOUSE FOR SALE IN THE CITY CENTER OF VILANOVA TIS-00160: VILLAGE HOUSE AT CENTER OF CUBELLES TIS-00167: Apartment for sale in Sant Joan-Molí de Vent TIS-00168: Apartment for sale in Barri de Mar-Ribes Roges-Plaça de la Sardana TIS-00174: BIG HOUSE IN CAN XICARRÓ TIS-00178: APARTMENT FOR SALE AT CENTER - ST JOAN TIS-00180: INDEPENDENT CHALET IN MAS GROS Properties: Property with reference TIS-00179: Property type: [Rustic property]. Reference/code/ID: [TIS-00179]. Photo: []. Availability: [For Sale]. Brief description: [HOUSE/CHALET WITH LOTS OF LAND FOR SALE]. Rooms: [4]. Price: [500000 euros]. Usable area: [1]. Built area: [1]. City: [Vilanova i la Geltrú]. Area: [Mas Escarré]. Parking: [Parking included]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/12658805/]. Property with reference TIS-00014: Property type: [Land, Plot]. Reference/code/ID: [TIS-00014]. Photo: []. Availability: [For Sale]. Brief description: [LAND IN LA COGULLADA (CANYELLES)]. Rooms: [0]. Price: [36000 euros]. Usable area: [0]. Built area: [0]. City: [Canyelles]. Area: [Cogullada 2]. Parking: [Without Parking]. 52 TIS-Synapse Del Core Sogas, Dario URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/13158314/]. Property with reference TIS-00030: Property type: [House]. Reference/code/ID: [TIS-00030]. Photo: []. Availability: [For Sale]. Brief description: [PROPERTY IDEAL FOR INVESTORS!]. Rooms: [6]. Price: [398000 euros]. Usable area: [2]. Built area: [2]. City: [Vilanova i la Geltrú]. Area: [Center]. Parking: [Parking included]. URL: [https://www.immotis.cat/ficha/tipus/ciutat/zona/8677/14343578/]. 53