Embeddings para principiantes - la explicación definitiva.
marzo 15, 2024
¿Terminaste de escuchar? Haz click aquí para calificar el episodio.
Contenido
Random Tech Talks: Resumen del Episodio
En este episodio fascinante de "Random Tech Talks", nos sumergimos en el intrigante mundo de los embeddings, una herramienta esencial en el campo del aprendizaje automático y la inteligencia artificial. Este tema, presentado de manera amigable para principiantes, nos revela cómo estos vectores de características pueden capturar la esencia de los datos de maneras increíblemente eficientes y multifacéticas.
¿Qué son los Embeddings?
Los embeddings son, básicamente, representaciones numéricas de alta dimensión de datos complejos como palabras, imágenes o incluso comportamientos de usuarios. Lo que los hace tan poderosos es su capacidad para preservar relaciones semánticas, como la cercanía entre conceptos o la similitud entre características, en un espacio de menor dimensión.
¿Cómo Funcionan?
A través de ejemplos ilustrativos, se explica cómo algoritmos como Word2Vec transforman palabras en vectores, permitiendo operaciones matemáticas que reflejan relaciones semánticas reales. Por ejemplo, la famosa ecuación "Rey - Hombre + Mujer = Reina" se convierte en una realidad en este espacio vectorial.
Aplicaciones en Realización de Preguntas y Respuestas Generativas (RAG) Una aplicación emocionante de los embeddings se encuentra en los sistemas de Realización de Preguntas y Respuestas Generativas (RAG), donde se combinan con modelos de lenguaje para generar respuestas informativas y contextualmente relevantes. Esto no solo mejora la precisión de las respuestas en asistentes virtuales y motores de búsqueda, sino que también abre puertas a formas más naturales de interacción hombre-máquina.
Innovaciones en IA: Devin y Figure 01
El episodio también abordó brevemente las últimas innovaciones en el campo de la IA, destacando a Devin, el primer ingeniero de software potenciado por inteligencia artificial, cuya capacidad para escribir y optimizar código está desafiando nuestras nociones tradicionales del desarrollo de software. Por otro lado, se mencionó a Figure 01, el robot autónomo que ha dejado atrás las demostraciones tecnológicas de Elon Musk, mostrando habilidades y autonomía que parecen sacadas de la ciencia ficción, desde navegación independiente hasta interacciones complejas con el entorno.
Este episodio no solo aclara conceptos fundamentales de la IA para los entusiastas de la tecnología sino que también ilustra el impacto profundo y creciente de estos avances en nuestra sociedad. La discusión sobre Devin y Figure 01, en particular, nos invita a reflexionar sobre el futuro de la tecnología y su papel en redefinir los límites de lo posible.
Links
Google Machine Learning Crash Course: Embeddings:
Puedes ver este episodio en YouTube
Código fuente
Incluimos aquí el código fuente tal y como se vio en el programa. Recuerda que
Necesitas un Key de OpenAI. Una vez que lo obtengas, lo guardas en un archivo que debe llamarse .env
Guarda este código en un archivo que se llame embedText.js o como quieras :)
require('dotenv').config();
const { Configuration, OpenAIApi } = require("openai");
if (process.argv.length < 2) {
console.log("Uso: node embedText.js <'texto'>");
process.exit(1);
}
var textToEmbed = ''
var arregloEmbeds = new Array();
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
function askForInput() {
readline.question('Introduce un texto (o "exit" para salir): ', async(input) => {
if (input.toLowerCase() === 'exit') {
console.log('Hasta luego.');
readline.close();
} else {
console.log(`Tu texto: ${input}`);
textToEmbed = input
embedding = await getEmbedding(textToEmbed);
// Lo comparo
comparaEmbeds(embedding, textToEmbed);
// Y lo agrego al arreglo
arregloEmbeds.push({
"texto": textToEmbed,
"embedding": embedding,
"similitud": 0.0
});
//arregloTextos.push(textToEmbed);
askForInput(); // Siguiente embedding
}
});
}
// Setup OpenAI API
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
askForInput(); // Llamada inicial
async function getEmbedding(text) {
try {
console.log('creando embedding')
const response = await openai.createEmbedding({
model: "text-embedding-ada-002", // or choose another model as needed
input: text,
});
console.log(response.data.data[0].embedding);
return response.data.data[0].embedding;
} catch (error) {
console.error("Error generando embedding:", error);
}
}
async function generateResponse(text) {
const response = await openai.createCompletion({
model: "gpt-3.5-turbo-instruct",
prompt: text,
temperature: 0.7,
max_tokens: 150,
});
console.log(response.data.choices[0].text.trim());
}
function comparaEmbeds(ultimoEmbedding, ultimoTexto) {
console.log(ultimoTexto);
if (arregloEmbeds.length <= 1)
return;
let similares = arregloEmbeds.map(item => ({
texto: item.texto,
similitud: cosineSimilarity( item.embedding, ultimoEmbedding)
}));
console.log(similares)
arregloEmbeds.forEach((item, index) => {
item.similitud = similares[index]
});
arregloEmbeds.sort((a, b) => b.similitud - a.similitud);
generateResponse(`Eres un asistente que quiere contestar
la pregunta siguiente:
${ultimoTexto}
y la respuesta que debes tomar en cuenta es
${arregloEmbeds[0].texto}.
Escribe un texto de máximo 100 palabras dando amablemente esta respuesta.`);
}
function cosineSimilarity(vecA, vecB) {
let dotProduct = 0;
let normA = 0;
let normB = 0;
for (let i = 0; i < vecA.length; i++) {
dotProduct += vecA[i] * vecB[i];
normA += vecA[i] ** 2;
normB += vecB[i] ** 2;
}
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
}
Invitación
Te invitamos a escuchar este episodio y participar en nuestras redes sociales, sobre todo en la página de Facebook que está en en este link.
Este y todos los demás episodios de Random Tech Talks pueden escucharse en rtt.show, y en todas las plataformas de podcast (si encuentras una en la que no estamos, avísanos!).
Si te gustó este episodio no dejes de suscribirte y recomendarnos con amigos y enemigos, y sobre todo con todos los que creas se beneficiarían de saber un poco más de tecnología platicada desde un nivel más terrenal.
← Ver más episodios