Top.Mail.Ru

Создание чата с искусственным интеллектом (ИИ) с собственной обучающей моделью

Создание чата с искусственным интеллектом (ИИ) с собственной обучающей моделью

Создание чата с искусственным интеллектом (ИИ) с собственной обучающей моделью — это сложная, но выполнимая задача. 


Этапы реализации

  1. Подготовка данных для обучения:

    • Соберите тематические данные для обучения. Например, CSV-файл с вопросами и ответами.
    • Используйте TF-IDF или простые эмбеддинги для поиска наиболее подходящего ответа.
  2. Серверная часть на PHP:

    • Реализуйте обработку сообщений пользователя и поиск ответа.
    • Обучение может быть выполнено с использованием простых алгоритмов, таких как косинусное сходство.
  3. Хранение данных:

    • Используйте базу данных (например, MySQL) для хранения вопросов и ответов.
    • Обработанные векторные представления (эмбеддинги) можно сохранять в файле или базе.

1. Структура данных для обучения

Создайте таблицу MySQL для хранения обучающих данных:

CREATE TABLE chat_data (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question TEXT NOT NULL,
    answer TEXT NOT NULL
);

2. PHP-код для обработки сообщений

<?php
// Подключение к базе данных
$host = 'localhost';
$dbname = 'chat_ai';
$username = 'root';
$password = '';
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Ошибка подключения: " . $e->getMessage());
}

// Функция для поиска подходящего ответа
function getResponse($userInput, $pdo) {
    // Извлекаем все вопросы и ответы из базы данных
    $stmt = $pdo->query("SELECT question, answer FROM chat_data");
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $bestMatch = null;
    $highestSimilarity = 0;

    foreach ($data as $item) {
        $similarity = calculateSimilarity($userInput, $item['question']);
        if ($similarity > $highestSimilarity) {
            $highestSimilarity = $similarity;
            $bestMatch = $item['answer'];
        }
    }

    return $highestSimilarity > 0.2 ? $bestMatch : "Извините, я не понял ваш вопрос.";
}

// Функция для вычисления схожести (косинусное сходство)
function calculateSimilarity($input, $storedQuestion) {
    $inputWords = array_count_values(str_word_count(strtolower($input), 1));
    $storedWords = array_count_values(str_word_count(strtolower($storedQuestion), 1));

    $commonWords = array_intersect_key($inputWords, $storedWords);
    $dotProduct = 0;
    $inputMagnitude = 0;
    $storedMagnitude = 0;

    foreach ($commonWords as $word => $count) {
        $dotProduct += $inputWords[$word] * $storedWords[$word];
    }

    foreach ($inputWords as $count) {
        $inputMagnitude += $count ** 2;
    }

    foreach ($storedWords as $count) {
        $storedMagnitude += $count ** 2;
    }

    if ($inputMagnitude == 0 || $storedMagnitude == 0) {
        return 0;
    }

    return $dotProduct / (sqrt($inputMagnitude) * sqrt($storedMagnitude));
}

// Обработка пользовательского ввода
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $userInput = $_POST['message'];
    $response = getResponse($userInput, $pdo);
    echo json_encode(['response' => $response]);
}
?>

3. Интерфейс чата (HTML + JavaScript) html Копировать код

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Чат с ИИ</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 0; padding: 0; }
        .chat-container { max-width: 600px; margin: 20px auto; }
        .messages { border: 1px solid #ddd; padding: 10px; height: 300px; overflow-y: auto; }
        .input-container { display: flex; margin-top: 10px; }
        input[type="text"] { flex: 1; padding: 10px; border: 1px solid #ddd; }
        button { padding: 10px 15px; border: none; background: #007BFF; color: white; cursor: pointer; }
    </style>
</head>
<body>
    <div class="chat-container">
        <div class="messages" id="messages"></div>
        <div class="input-container">
            <input type="text" id="userMessage" placeholder="Введите сообщение...">
            <button onclick="sendMessage()">Отправить</button>
        </div>
    </div>

    <script>
        function sendMessage() {
            const userMessage = document.getElementById('userMessage').value;
            const messages = document.getElementById('messages');

            if (userMessage.trim() === '') return;

            messages.innerHTML += `<div><strong>Вы:</strong> ${userMessage}</div>`;
            document.getElementById('userMessage').value = '';

            fetch('chat.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ message: userMessage })
            })
            .then(response => response.json())
            .then(data => {
                messages.innerHTML += `<div><strong>ИИ:</strong> ${data.response}</div>`;
                messages.scrollTop = messages.scrollHeight;
            });
        }
    </script>
</body>
</html>

Как обучить свою модель?

  1. Соберите больше данных:
    • Вопросы и ответы на интересующие темы.
  2. Реализуйте улучшенную обработку текста:
    • Удаление стоп-слов.
    • Использование синонимов.

Автор:

62

Читайте также

0 комментариев