chatbot con tensorflow.js del lado del cliente con tensorflow.js

PHOTO EMBED

Fri Dec 16 2022 15:17:07 GMT+0000 (Coordinated Universal Time)

Saved by @modesto59 #html

<!-- Formulario para hacer preguntas al chatbot -->
<form id="chatbot-form">
  <label for="question">Hacer una pregunta:</label><br>
  <input type="text" id="question" name="question"><br>
  <input type="submit" value="Enviar">
</form> 

<!-- Etiqueta para mostrar la respuesta del chatbot -->
<p id="answer"></p>



<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.5.0/dist/tf.min.js"></script>

  // Crea una función para procesar el archivo de entrenamiento y devolver un conjunto de datos de entrenamiento
  const processTrainingData = text => {
    const lines = text.split('\n')
    return lines.map(line => {
      const [question, answer] = line.split(':')
      return {
        input: question,
        output: answer
      }
    })
  }

  // Lee el archivo de entrenamiento y procesa los datos de entrenamiento
  const trainingData = processTrainingData(fs.readFileSync('training-data.txt', 'utf8'))

  // Crea un modelo de secuencia a secuencia con TensorFlow.js
  const model = tf.sequential()

  // Añade una capa de embedding para procesar el texto de entrada
  model.add(tf.layers.embedding({
    inputDim: 10000,
    outputDim: 64
  }))

  // Añade una capa LSTM para procesar el texto de entrada
  model.add(tf.layers.lstm({
    units: 64,
    returnSequences: true,
    recurrentInitializer: 'glorotNormal'
  }))

  // Añade una capa de atención para mejorar la precisión del modelo
  model.add(tf.layers.attention())

  // Añade una capa densa para procesar la salida
  model.add(tf.layers.dense({
    units: 64,
    activation: 'relu'
  }))

  // Añade una capa de salida para generar la respuesta
  model.add(tf.layers.dense({
    units: 1,
    activation: 'sigmoid'
  }))

  // Compila el modelo
  model.compile({
    loss: 'binaryCrossentropy',
    optimizer: 'adam'
  })

  // Entrena el modelo
  model.fit(trainingData, {
    epochs: 10
  })

  // Crea una función para hacer preguntas al chatbot
 const ask = question => {
  // Valida que la pregunta no esté vacía
  if (!question) {
    console.error("Por favor ingrese una pregunta válida");
    return;
  }
  
  // Muestra la pregunta del usuario
  console.log(`Usuario: ${question}`);
  
  // Pide una respuesta a la red neuronal
  try {
    const answer = model.predict(question);
    // Muestra la respuesta del chatbot
    console.log(`Chatbot: ${answer}`);
  } catch (error) {
    console.error("Error al obtener respuesta del chatbot:", error);
  }
};

______________________________________________________________________________________________


<form id="chatbot-form">
  <label for="question">Hacer una pregunta:</label><br>
  <input type="text" id="question" name="question"><br>
  <input type="submit" value="Enviar">
</form>

<!-- Etiqueta para mostrar la respuesta del chatbot -->
<p id="answer"></p>

<script>
  // Crea una función para hacer preguntas al chatbot
  function ask(question) {
    // Valida que la pregunta no esté vacía
    if (!question) {
      console.error("Por favor ingrese una pregunta válida");
      return;
    }
  
    // Muestra la pregunta del usuario
    console.log(`Usuario: ${question}`);
  
    // Pide una respuesta a la red neuronal
    try {
      const answer = model.predict(question);
      // Muestra la respuesta del chatbot
      console.log(`Chatbot: ${answer}`);
      
      // Muestra la respuesta del chatbot en la etiqueta p
      document.getElementById("answer").textContent = answer;
    } catch (error) {
      console.error("Error al obtener respuesta del chatbot:", error);
    }
  }
  
  // Agrega un manejador de eventos submit al formulario
  document.getElementById("chatbot-form").addEventListener("submit", event => {
    // Evita que la página se recargue
    event.preventDefault();
    
    // Obtiene la pregunta del usuario
    const question = document.getElementById("question").value;
    
    // Hace la pregunta al chatbot
    ask(question);
  });
</script>







OTRO CÓDIGO

const model = tf.sequential();

// Añade una capa de embedding para procesar el texto de entrada
model.add(tf.layers.embedding({
  inputDim: 10000,
  outputDim: 64
}));

// Añade una capa LSTM para procesar el texto de entrada
model.add(tf.layers.lstm({
  units: 64,
  returnSequences: true,
  recurrentInitializer: 'glorotNormal'
}));

// Añade una capa de atención para mejorar la precisión del modelo
model.add(tf.layers.attention());

// Añade una capa densa para procesar la salida
model.add(tf.layers.dense({
  units: 64,
  activation: 'relu'
}));

// Añade una capa de salida para generar la respuesta
model.add(tf.layers.dense({
  units: 1,
  activation: 'sigmoid'
}));

// Compila el modelo
model.compile({
  loss: 'binaryCrossentropy',
  optimizer: 'adam'
});

// Entrena el modelo
model.fit(trainingData, {
  epochs: 10
});

// Crea una función para hacer preguntas al chatbot
const ask = question => {
  // Valida que la pregunta no esté vacía
  if (!question) {
    console.error("Por favor ingrese una pregunta


                  
                  
                  
                  
                  
                  
 <!-- Formulario HTML para hacer preguntas al chatbot -->
<form id="chatbot-form">
  <label for="question">Hacer una pregunta:</label><br>
  <input type="text" id="question" name="question"><br>
  <input type="submit" value="Enviar">
</form> 

<!-- Etiqueta para mostrar la respuesta del chatbot -->
<p id="answer"></p>

<!-- Incluye la biblioteca TensorFlow.js -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.5.0/dist/tf.min.js"></script>

<script>
  // Crea una función para procesar el archivo de entrenamiento y devolver un conjunto de datos de entrenamiento
  const processTrainingData = text => {
    const lines = text.split('\n')
    return lines.map(line => {
      const [question, answer] = line.split(':')
      return {
        input: question,
        output: answer
      }
    })
  }

  // Lee el archivo de entrenamiento y procesa los datos de entrenamiento
  const trainingData = processTrainingData(fs.readFileSync('training-data.txt', 'utf8'))

  // Crea un modelo de secuencia a secuencia con TensorFlow.js
  const model = tf.sequential()

  // Añade una capa de embedding para procesar el texto de entrada
  model.add

  
  
  
  
  
  CODIGO COMPLETO
  
  
  <!-- Formulario HTML para hacer preguntas al chatbot -->
<form id="chatbot-form">
  <label for="question">Hacer una pregunta:</label><br>
  <input type="text" id="question" name="question"><br>
  <input type="submit" value="Enviar">
</form> 

<!-- Etiqueta para mostrar la respuesta del chatbot -->
<p id="answer"></p>

   
  
  
<!-- Incluye la biblioteca TensorFlow.js -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.5.0/dist/tf.min.js"></script>

<script>
  // Crea una función para procesar el archivo de entrenamiento y devolver un conjunto de datos de entrenamiento
  const processTrainingData = text => {
    const lines = text.split('\n')
    return lines.map(line => {
      const [question, answer] = line.split(':')
      return {
        input: question,
        output: answer
      }
    })
  }

  // Lee el archivo de entrenamiento y procesa los datos de entrenamiento
  const trainingData = processTrainingData(fs.readFileSync('training-data.txt', 'utf8'))

  // Crea un modelo de secuencia a secuencia con TensorFlow.js
  const model = tf.sequential()

  // Añade una capa de embedding para procesar el texto de entrada
  model.add(tf.layers.embedding({
    inputDim: 10000,
    outputDim: 64
  }))

  
  
    
    // Añade una capa LSTM para procesar el texto de entrada
  model.add(tf.layers.lstm({
    units: 64,
    returnSequences: true,
    recurrentInitializer: 'glorotNormal'
  }))

  // Añade una capa de atención para mejorar la precisión del modelo
  model.add(tf.layers.attention())

  // Añade una capa densa para procesar la salida
  model.add(tf.layers.dense({
    units: 64,
    activation: 'relu'
  }))

  // Añade una capa de salida para generar la respuesta
  model.add(tf.layers.dense({
    units: 1,
    activation: 'sigmoid'
  }))

  // Compila el modelo
  model.compile({
    loss: 'binaryCrossentropy',
    optimizer: 'adam'
  })

  // Entrena el modelo
  model.fit(trainingData, {
    epochs: 10
  })

  // Crea una función para hacer preguntas al chatbot
  const ask = question => {
    // Valida que la pregunta no esté vacía
    if (!question) {
      console.error("Por favor ingrese una pregunta válida");
      return;
    }

    // Muestra la pregunta del usuario
    console.log(`Usuario: ${question}`);

    // Pide una respuesta a la red neuronal
    try {
      const answer = model.predict(question);
      // Muestra la respuesta del chatbot
      console.log(`Chatbot: ${answer}`);
    } catch (error) {
      console.error("Error al obtener respuesta del chatbot:", error);
    }
  };

  // Asigna un manejador de eventos al botón Enviar del formulario
  document.getElementById('chatbot-form').addEventListener('submit', event => {
    // Previene la acción por defecto del formulario
    event.preventDefault();

    // Obtiene la pregunta del usuario
    const question = document.getElementById('question').value;

  
    // Obtiene la pregunta del usuario
    const question = document.getElementById('question').value;

    // Hace una pregunta al chatbot
    ask(question);

    // Muestra la respuesta del chatbot en la página
    document.getElementById('answer').textContent = answer;
  });
</script>
content_copyCOPY