Как стать автором
Обновить
5
7.1

Пользователь

Отправить сообщение

У меня ошибка не возникает, но предполагаю, что как то так:

ошибка может возникать, потому что метод model.evaluate() возвращает только одно значение - потери (loss), а не пару значений (loss, accuracy).

замените:

loss, accuracy = model.evaluate(xs, ys, verbose=0)

на

loss, accuracy = model.evaluate(xs, ys, verbose=0), model.evaluate(xs, ys, verbose=0)

Если не поможет, запусти код в гугл коллаб. Там же, где и я или переустановки или обнови TensorFlow, Keras.

Примеры модернизации кода:

  1. Использование файла вместо строки TextData

Замените

TextData = """Вставьте текст"""

На:

# Чтение текста из файла
file_path = "Путь_к_файлу.txt"
with open(file_path, 'r', encoding='utf-8') as file:
    text_data = file.read()
  1. Сохранение и загрузка модели

Используйте для сохранения

model.save("TextGenerator3000.h5")

Используйте для загрузки модели

model.save("TextGenerator3000.h5")
  1. Изменение параметров модели.

Изменяйте:

  • Количество нейронов

  • Значение точности

  • Кол-во генерируемых символов

  • max_sequencse_len

Если разбираетесь, можете изменять сами слои, например заменить LSTM на GRU или поменять оптимизатор.

Вот пример генерации текста на хороших текстовых данных и точности 0.9:

Вы: Привет

1/1 [==============================] - 0s 18ms/step

...

1/1 [==============================] - 0s 20ms/step

Привет моряки, закончив, закончив, закончив, закончившись воду было этого магачаево в объекта и он переделеке. и в своих гилизать, что вершины созвонился в со родной нас смотрятся темного создать его места.

безверх, на самая или пробивали или виду маряки, потом подземени.

— законы надам, как начал рамирес, — разный рекай, видимое красного какой-то, когда моряки, премиум, залить звукома.

адам местные на для от прекрасного сперелекта сама

маверик морский край

майкала калуга. масская область

лазаводск.

Если вы обучили нейросеть очень плохо, например при одной эпохе и малом тексте, она будет сомневаться, что сгенерировать, неопределённые символы не генерируются и на выходе получаем тот же входной текст. Просто обучи её по дольше и на более высокую точность.

Строчки 1/1 [==============================] - 0s 450ms/step просто говорят, что нейросеть сгенерировала символ.

Вы можете бесплатно протестировать нейросеть в Google Collab, где тебе дадут большие мощности по сравнению с твоим компьютером, так как 450ms — это долго.

Зависит от того, что вам нужно. Но я не рекомендую этого делать, если вы не хотите несколько суток ждать, пока модель обучится. Лучше попробуй сначала обучить её на небольших текстах, длиной более 50, но менее 1000 символов для эксперимента. Если есть вычислительные ресурсы, можете обучать на книгах. Я свою обучал на диалоге меня и ChatGPT.

Попробуй запустить код на PyCharm, установив нужные библиотеки. Изменить нужно лишь эту часть кода:

# Генерация текста с использованием модели
while True:
    seed_text = input("Вы: ")
    next_chars = 500
    generated_text = generate_text(seed_text, next_chars, model, max_sequence_len)
    print(generated_text)

Конечно, не изучал C++, но вместо seed_text = input("Вы: ") вы можете использовать ввод текста в окне C++, который будет отправлять текстовый файл Question.txt , как запрос, а после на выходе вместо print(generated_text) будет отправляться текстовый файл Answer.txt с ответом, который будет прочитан кодом на C++

В TextData введите любой текст, длиной более 50 символов

Пример:

TextData = """Привет! Я нейросеть то TheScienceVictor200
Я могу быть обучен вообще на любых текстах, например статьях.""

Но помните! Вам потребуется большие вычислительные ресурсы, если вы хотите обучить её на реально гигантском объёме данных, например на книге.

Продолжай в том же духе. У тебя всё получится!

Можно использовать вообще любой текст

Пример:

TextData="""Привет! Я нейросеть от TheScienceVictor200.
Я могу быть обучен на тексте, длиной более 50 символов!"""

TextData="""Привет, я нейросеть, написанная TheScienceVictor200."""

Вы можете использовать любую другую информацию, например статьи, книги и прочее, если есть вычислительные ресурсы.

Так же длина текста должна быть больше 50 символов, иначе будет ошибка.

while accuracy < 0.7:

Ввод: я пишу продолжение

Вывод: я пишу продолжениется в в в а вот генарта тото в тотон3. в тотон3. в тотон3. в осьминог меняет окрастся ся сян сян, к хе прятаться от хищничо хищничо хищничо хищничо ...

TextData = """Осьминоги меняют свой окрас, сливаясь с окружением, что позволяет им охотиться и прятаться от хищников.

Протоны стабильны, поэтому вероятно период полураспада более 10^33 лет."""

В сгенерированном примере можно вполне понять, что написала нейросеть.

При ещё больших данных в TextData при точности 0.7 нейросеть показывает меньше ошибок и более осмысленный текст. Продемонстрирую, как только будет возможность использовать T4 TPU в гугл коллаб, где я обучаю её. На процессоре у себя на компьютере это медленно.

Важно не ставить точность на 0,99 или 1, так как это будет значить, что нейросеть просто запомнила текст и ничего нового не напишет.

Я и ChatGPT написали что-то похожее, при этом текст получается даже лучше. Возможно из-за того, что я использовал символы, а не буквы и/или нестандартный метод обучения, пока модель не обучится до нужного уровня точности. Так же сыграла сложная архитектура нейронной сети.

Моя модель обучается не только генерировать слова, учитывая все буквы, она запоминает знаки препинания и переходы на следующие строки. Единственная проблема — все буквы будут маленькими.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Bidirectional, LSTM, Dense, Flatten, GlobalMaxPooling1D
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np

# Определим функцию для создания модели
def create_model(total_words, max_sequence_len):
    model = Sequential()
    model.add(Embedding(total_words, 1000, input_length=max_sequence_len-1))
    model.add(Bidirectional(LSTM(1000, return_sequences=True)))
    model.add(GlobalMaxPooling1D())
    model.add(Flatten())
    model.add(Dense(1000, activation='relu'))
    model.add(Dense(total_words, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

# Обучающие данные (нужно заполнить данными)
TextData = """
"""

# Подготовка данных
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(TextData)
total_chars = len(tokenizer.word_index) + 1
max_sequence_len = 50

input_sequences = []
for i in range(0, len(TextData) - max_sequence_len, 1):
    sequence = TextData[i:i + max_sequence_len]
    input_sequences.append(sequence)

input_sequences = tokenizer.texts_to_sequences(input_sequences)
input_sequences = np.array(input_sequences)
xs, labels = input_sequences[:, :-1], input_sequences[:, -1]
ys = tf.keras.utils.to_categorical(labels, num_classes=total_chars)

# Создание и обучение модели
model = create_model(total_chars, max_sequence_len)
accuracy = 0
epochs = 0
while accuracy < 0.7:
    model.fit(xs, ys, epochs=1, verbose=1)
    loss, accuracy = model.evaluate(xs, ys, verbose=0)
    epochs += 1

# Сохранение модели
model.save('TextGenerator3000.h5')

# Генерация текста
def generate_text(seed_text, next_chars, model, max_sequence_len):
    generated_text = seed_text
    for _ in range(next_chars):
        token_list = tokenizer.texts_to_sequences([seed_text])[0]
        token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')

        predicted_probs = model.predict(token_list)[0]
        predicted = np.argmax(predicted_probs)
        output_char = tokenizer.index_word.get(predicted, "")
        seed_text += output_char
        generated_text += output_char

    return generated_text

# Генерация текста с использованием модели
while True:
    seed_text = input("Вы: ")
    next_chars = 500
    generated_text = generate_text(seed_text, next_chars, model, max_sequence_len)
    print(generated_text)

ChatGPT написал лишь основу кода с простой моделью, простым обучением на 10 эпохах и простой генерацией текста. Я добавил больше слоёв, изменил обучение до определенного уровня точности и добавил возможность использовать модель сколько угодно раз.

Можете поэкспериментировать с кодом, если захотите! Если у вас слабый ПК, то лучше просто уменьшить количество нейронов, например до 100 в каждом слое.

YandexGPT я отличил сразу. Она генерирует жирным шрифтом заголовки, почти, как YouChat.

GigaChat так же был распознан из-за стиля текста. Люди часто указывают жирным шрифтом 1 важное слово или словосочетание. GigaChat из моего опыта выделяет жирным всё предложение.

Для того, что-бы понять, как отличить человека от ChatGPT труда не потребовалось.

Из текста №4: В лучшем случае в открытых источниках о других компаниях получится найти лишь 20-25% информации, и делать выводы на этом является большой ошибкой.

ChatGPT всегда разделяет токены с числами и знаками, к тому же редко прибегает к числам в ответе, но если бы писал ChatGPT, в ответе было бы написано 20 - 25%

В итоге у меня получилось отличить всех, однако для развития человека от ChatGPT потребовалось 20 минут анализа 2-го и 4-го текстов.

Было так же интересно почитать про ошибку выжившего в бизнесе. Желаю удачи в следующих блогах!

Информация

В рейтинге
668-й
Зарегистрирован
Активность