Gemini AI: Data mining, extracción de información, topics, keywords y etiquetas
Introducción
Las técnicas de data mining (técnicas de extracción y procesamiento de información) y los LLMs están redefiniendo la forma en que descubrimos y analizamos datos. En este artículo voy a descubrir contigo cómo estas tecnologías, y en concreto el modelo Gemini Pro de Google, se pueden utilizar para la extracción de información, el etiquetado automático y la detección de intenciones del usuario.
Background
El análisis de datos y el aprendizaje automático han evolucionado significativamente en los últimos años, con avances en tecnologías de procesamiento de lenguaje natural (NLP), modelos generativos y técnicas de extracción de información.
Y este año 2023 ha sido clave.
Además, la capacidad de analizar datos en tiempo real y las técnicas de web scraping permiten mantenerse al día con los cambios y las preferencias de los consumidores.
Por otro lado, la extracción de información, especialmente a través del NLP, permite a los ordenadores entender e interpretar el lenguaje humano. El modelo gemini-pro
es un ejemplo de cómo se pueden utilizar algoritmos avanzados para extraer significado de textos complejos.
Y es lo que veremos en el siguiente apartado.
Hands-On
Caso de Estudio: Análisis de Tendencias de Mercado
Imaginemos una empresa que utiliza técnicas de web scraping y análisis de texto para identificar tendencias emergentes en el mercado retail, en concreto para juguetes y otros productos para regalar. Utilizando la búsqueda en Google, se extraen datos de sitios web relevantes y luego se aplica NLP para analizar el contenido y extraer insights valiosos.
Esta es el paso a paso:
Búsqueda en Tiempo Real y Web Scraping
Primero, abordamos la búsqueda en tiempo real y el web scraping, que son esenciales para recopilar datos relevantes de la web. Utilizamos la biblioteca googlesearch
para realizar búsquedas en Google y filtrar los resultados. Esta técnica nos permite recopilar información actualizada que es crucial para cualquier análisis de tendencias.
from googlesearch import search
results = search(search_query, lang="es", num_results=number_of_results)
Procesamiento Asíncrono de Datos con LangChain
Una vez que tenemos los enlaces, usamos funciones asíncronas para realizar web scraping, lo que nos permite manejar múltiples tareas y procesos al mismo tiempo. Esto permite trabajar eficientemente con grandes volúmenes de datos.
import html2text
from langchain.document_loaders import AsyncHtmlLoader
from langchain.document_transformers import Html2TextTransformer
async def do_webscraping(link):
try:
urls = [link]
loader = AsyncHtmlLoader(urls)
docs = loader.load()
html2text_transformer = Html2TextTransformer()
docs_transformed = html2text_transformer.transform_documents(docs)
if docs_transformed != None and len(docs_transformed) > 0:
metadata = docs_transformed[0].metadata
title = metadata.get('title', '')
return {
'summary': docs_transformed[0].page_content,
'title': title,
'metadata': metadata,
'clean_content': html2text.html2text(docs_transformed[0].page_content)
}
else:
return None
except Exception as e:
print(f"An unexpected error occurred: {e}")
return None
Extracción de Información: topics, keywords y tags
Después de recopilar los datos, el siguiente paso es la extracción de información. Utilizamos expresiones regulares para extraer bloques de JSON del contenido para estructurar y analizar los datos mejor.
Luego, se uiliza el modelo generativogemini-pro
a través de vertexai
para procesar y analizar el texto. Estos modelos nos ayudan a generar contenido relevante basado en los datos recopilados y a extraer insights.
import vertexai
from vertexai.preview.generative_models import GenerativeModel, Part
def execute_prompt(prompt, max_output_tokens=8192):
model = GenerativeModel("gemini-pro")
responses = model.generate_content(
prompt,
generation_config={
"max_output_tokens": max_output_tokens,
"temperature": 0,
"top_p": 1
},
stream=True,
)
final_response = []
for response in responses:
if response.candidates and response.candidates[0].content.parts:
final_response.append(response.candidates[0].content.parts[0].text)
return ".".join(final_response)
Por ejemplo, la extracción de información y palabras clave nos permiten identificar los elementos más importantes del texto, algo crucial para entender el contenido y las tendencias en los datos.
# Information Extraction
def get_text_extract_prompt(title, summary):
prompt = f"""
Here is its title: {title}
Here is some text extracted:
---------
{summary}
---------
Web pages can have a lot of useless junk in them.
For example, there might be a lot of ads, or a
lot of navigation links, or a lot of text that
is not relevant to the topic of the page. We want
to extract only the useful information from the text.
You can use the url and title to help you understand
the context of the text.
Please extract only the useful information from the text.
Try not to rewrite the text, but instead extract
only the useful information from the text.
"""
return prompt
En nuestra búsqueda search_query = “juguetes en Cerdanyola del Vallès (Barcelona)” extraemos información de este enlace https://www.joguinesduba.com/. El resultado de la función get_text_extract_prompt() es el siguiente:
[‘- DUBA is a toy and radio control store founded in 196.2.\n- They offer a wide variety of products, including initiation and competition. cars, toys, drones, helicopters, slot cars, and marquetry.\n- They provide professional maintenance, repair, and improvement services for radio control cars..\n- They have a large assortment of products and more than 65 square meters of spare parts to serve customers.\n- They specialize in advising and. teaching customers about technical concepts in the radio control hobby.’]
Si luego le aplicamos la extracción de los temas principales:
def get_topic_extraction_prompt(content):
prompt = f"""Label the main topic or topics in the following text: {content}"""
prompt = prompt + """1. Identify and list the primary topic or category or provide a short description of the main subject matter of the text.
2. If there are subtopics or secondary themes mentioned in the text, list them as well. If the text discusses multiple topics, provide a list of these topics and describe their relevance.
3. Consider the context and tone of the text to determine the most appropriate topics. Take into account keywords, phrases, or specific terms that relate to the topics.
4. If any notable entities (people, places, brands, products, etc.) are mentioned in the text that play a role in the topics, mention them and their associations.
5. If the text suggests any actions, decisions, or recommendations related to the identified topics, provide a brief summary of these insights.
Ensure that your labeling is clear, concise, and reflects the most significant topics or categories found in the text.
Here's the output schema:
```
{
"Topic": "",
"Subtopics": [""],
"Context": "",
"NotableEntities": [],
"Recommendations": ""
}
```
Do not respond with your own suggestions or recommendations or feedback."""
return prompt
Obtenemos el siguiente resultado:
Topics: Duba - Tienda de radiocontrol y juguetes
",
"Subtopics": [
"Juguetería",.
"Modelismo",
"Radiocontrol",
"Slot",
"Competición",
"Servicios de mantenimiento, reparación y. mejora de coches de radiocontrol"
],
"Context": "La empresa Duba es una tienda especializada en juguetes, modelismo, radiocontrol., slot y competición desde 1962. Ofrecen una gran variedad de artículos para todo tipo de clientes, desde coches de iniciación hasta coches de competición, así como una sección de juguetes, drones, helicópteros, coches de. slot y marquetería.",
"NotableEntities": [
"Duba",
"Joaquim Dubà"
],
"Recommendations": "La empresa Duba recomienda a sus clientes que se ases.oren con ellos para elegir el producto que mejor se adapte a sus necesidades y características."
}
Con esta información podemos aplicar un paso más.
Una nueva función para validar la relevancia y la calidad del contenido proporcionado. Aprovechamos para solicitarle mejoras y acciones de mejora asociadas.
import vertexai
from vertexai.preview.generative_models import GenerativeModel, Part
def validate_data_with_gemini(content):
model = GenerativeModel("gemini-pro")
prompt = f"""
You are a data validation expert. Your job is to analyze the following content and determine if it is relevant and of good quality for further processing. Here is the content:
---
{content}
---
Please provide your assessment on the quality and relevance of this content for further information extraction processes.
Please provide improvement possibilities if there is possible.
Please provide actions to do according with this improvement possibilities.
"""
response = model.generate_content(
prompt,
generation_config={
"max_output_tokens" : 8192,
"temperature": 0,
"top_p": 1
},
)
if response.candidates and response.candidates[0].content.parts:
return response.candidates[0].content.parts[0].text
else:
return "No se pudo obtener una respuesta válida del modelo."
Obteniendo la siguiente salida:
**Assessment:**
The content provided is relevant to the topic of toys, modeling, radio control, slot cars, and competition. It also mentions the company Duba, which specializes in these areas. The content is of good quality, as it is well-written and provides a clear overview of the company and its products.
**Improvement Possibilities:**
* The content could be improved by adding more specific information about the products that Duba offers. For example, it could include a list of the different types of toys, models, and radio-controlled cars that the company sells.
* The content could also be improved by adding more information about the company's history and its founder, Joaquim Dubà. This would help to provide a more personal touch to the content and make it more engaging for readers.
**Actions to Do:**
* To improve the content, the following actions could be taken:
* Add a list of the different types of toys, models, and radio-controlled cars that Duba sells.
* Add more information about the company's history and its founder, Joaquim Dubà.
* Consider adding images or videos to the content to make it more visually appealing.
* Proofread the content carefully to ensure that there are no errors.
Este análisis puede ayudarte a interpretar los resultados con el objetivo de entender las tendencias del mercado, generar nuevos productos y contenidos y adaptar tus estrategias comerciales.
Conclusion
El análisis de datos y el aprendizaje automático están en la vanguardia de la transformación digital, ofreciendo a las empresas herramientas poderosas para comprender mejor a sus clientes y mercados.
A través de la extracción de información y el procesamiento de lenguaje natural, puedes acceder a información muy relevante que antes era inalcanzable (o muy difícil de obtener). Al adoptar estas tecnologías, no solo vas a poder mantenerte competitivo sino que también te vas a posicionar en la vanguardia de tu sector.
What’s Next, próximos pasos:
- Quick Start con Vertex AI: Paso a Paso para principiantes
- Gemini AI y Llama Index en acción: una demo práctica paso a paso
- Búqueda en tiempo real automatizada con Google Maps y Selenium
- Web scraping para extraer información utilizando requests y BeautifulSoup en Python
- Extracción de datos estructurados con Gemini Pro Vision y Pydantic
- Data mining: extracción de información, topics, keywords y etiquetas
Comparte tu experiencia:
Estoy abierto a colaborar y discutir sobre las posibilidades que ofrece la inteligencia artificial y cómo trabajar juntos para explorar y construir soluciones en diferentes sectores. Si tienes ideas, preguntas o simplemente quieres hablar de ello, escríbeme:
- GitHub: https://github.com/albertgilopez
- LinkedIn: https://www.linkedin.com/in/albertgilopez/
- Inteligencia Artificial Generativa en español: https://www.codigollm.es/
CREDITS
- https://dev.to/ranjancse/information-extraction-with-google-gemini-253e
- https://dev.to/ranjancse/topic-and-subtopic-extraction-with-the-google-gemini-pro-1e52
- https://dev.to/ranjancse/keyword-extraction-with-google-gemini-pro-2ab7
- https://dev.to/ranjancse/automated-labeling-or-tagging-using-google-gemini-37h
- https://dev.to/ranjancse/intent-extraction-with-google-gemini-2b9p