Automatización Semántica Multiagente con Votación en Ensemble
Este script automatiza la recopilación de datos semánticos: introduce una máscara, obtiene datos de frecuencia y exporta a tabla. Reemplaza el tedioso flujo Wordstat → Excel. Utiliza dos fuentes de datos: la API gratuita Bukvarix para cobertura amplia de sinónimos (con retraso mensual) y XMLRiver pagado para datos en tiempo real mediante proxy a Yandex XML (sin CAPTCHA).
XMLRiver soporta tres tipos de frecuencia:
- Básico:
reparación de apartamento→ 45.661 - Exacto:
"reparación de apartamento"→ 12.340 - Refinado:
[!apartamento !reparación]→ 8.912
Las consultas se ejecutan en paralelo en 10 hilos con lógica de reintento. El heurístico de competitividad usa la fórmula: puntuación = (palabras * 1000) / (frecuencia + 1). Los resultados se colorean:
- 🟢 FÁCIL (>50)
- 🟡 MEDIO (10–50)
- 🔴 DIFÍCIL (<10)
Pipeline Optimizado de Procesamiento de Palabras Clave
Un enfoque directo falla con más de 3.000 palabras clave por duplicidad en consultas SERP. El pipeline filtra paso a paso:
- Recopilación: Bukvarix o XMLRiver → ~3.000 palabras clave.
- Escudo Regex: elimina ruido (ofertas laborales, fragmentos de Avito, términos incompletos).
- Deduplicación Borrosa: lematización con pymorphy2 + rapidfuzz (token_sort_ratio ≥82%, agrupado por primera palabra) → ~1.500–2.000 únicos.
- Recopilación SERP: 10 hilos por palabra clave única.
- Agrupación: NLP + Veto SERP.
- Intención y Métricas.
El umbral del 82% fue ajustado empíricamente: elimina entre 30–40% de duplicados (por morfología), sin fusionar frases distintas como "precio de reparación de apartamento" y "costo de reparación de apartamento".
Agrupación con Veto SERP
SentenceTransformers (paraphrase-multilingual-MiniLM-L12-v2) generan embeddings. Desafío NLP: términos semánticamente similares (ej. "reparación de apartamento Moscú" vs. "reparación de apartamento Voronezh") no compiten.
Veto SERP: si los TOP-10 resultados de Yandex tienen <2 URLs superpuestos, se tratan como clusters separados:
overlap = len(urls_core.intersection(urls_cand))
if urls_core and urls_cand and overlap < 2:
continue # clusters diferentes
Modos:
- Solo NLP: rápido, basado en embeddings.
- Solo SERP: preciso, lento, basado en URLs.
- Híbrido: NLP + Veto — equilibrio óptimo.
Aislamiento geográfico: palabras clave de ciudades distintas no se agrupan juntas.
Filtrado AI Multiagente con Votación en Ensemble
LLM (DeepSeek) clasifica: adecuado / irrelevante / menos / revisar. Problemas: inestabilidad (38% estable en 3 ejecuciones), falta de contexto nicho.
PlannerAgent
Genera planes específicos para nichos usando few-shot prompting, detección de trampas y filtrado geográfico.
Ejemplo:
- ADECUADO: "reparación de apartamento llave en mano Moscú"
- IRRELEVANTE: "empleo reparación de apartamento"
Optimización de Tokens
Numeración de IDs: el modelo devuelve solo IDs, no texto. Tamaño de lote de 20 claves → ~80 tokens frente a ~400 anteriormente.
Votación en Ensemble
Tres ejecuciones paralelas (temperatura=0), voto mayoritario (umbral=2/3). Empate → ArbiterAgent.
def single_vote(_):
response = ai_client.call(system_prompt, user_message, temperature=0)
return ai_client.parse_json(response)
with ThreadPoolExecutor(max_workers=votes) as vote_pool:
vote_results = list(vote_pool.map(single_vote, range(votes)))
counts = Counter(votes_for_keyword)
threshold = votes // 2 + 1
Resultado: estabilidad ~85%. Costo: $0.3 por 3.000 palabras clave.
Modo Paranoico: lista blanca (coincidencias exactas de tokens, no substrings) para marcas — evitando completamente al AI.
Módulos Adicionales
Módulo SERP: analiza resultados orgánicos, búsquedas relacionadas, anuncios y respuestas neuronales.
Asistente AI: interfaz de chat con pandas.query() sobre el dataframe.
Conclusiones Clave
- El pipeline reduce las solicitudes SERP de 3.000 a 1.500 mediante Deduplicación Borrosa (rapidfuzz + pymorphy2).
- La agrupación híbrida combina velocidad del NLP con precisión del Veto SERP.
- La votación en ensemble (3x) aumenta la estabilidad del filtrado AI a 85%.
- Ahorro de tokens: numeración de IDs + lotes → $0.3 por ejecución completa.
- Tiempo de procesamiento: 20–30 minutos frente a 3–4 horas manualmente.
Pila Tecnológica: Python 3.11, DeepSeek API, XMLRiver, SentenceTransformers, rapidfuzz, pymorphy2, pandas, customtkinter.
— Editorial Team
Aún no hay comentarios.