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

Трудности в определении текста, созданного искусственным интеллектом.

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

Фото от Houcine Ncib на Unsplash

Совместно с Naresh Singh.

Содержание

  1. Вступление
  2. Создание интуиции для определения источника текста
  3. Что такое перплексия языковой модели?
  4. Вычисление перплексии предсказания языковой модели
  5. Определение текста, сгенерированного искусственным интеллектом
  6. Манипуляция информацией
  7. Что дальше?
  8. Заключение

Вступление

Теперь AI-технологии для написания статей или постов повсюду! ChatGPT открыл множество возможностей языкового ИИ, и использование ИИ для генерации любого вида контента достигло верхней точки.

Однако в школьных заданиях, таких как творческое письмо, от студентов ожидается, что они создадут свой собственный контент. Однако из-за популярности и эффективности ИИ для таких задач они могут попытаться использовать его. В таких случаях важно, чтобы у учителей был доступ к надежным и доверенным инструментам для обнаружения контента, созданного при помощи ИИ.

Целью этой статьи является создание интуиции, а также технических спецификаций для создания такого инструмента. Она предназначена для читателей, которые хотят понять, как работает обнаружение ИИ интуитивно, а также для технической аудитории, которая хочет создать такой инструмент.

Давайте начнем!

Создание интуиции для определения источника текста

На высоком уровне мы пытаемся ответить на вопрос: “Насколько вероятно, что языковая модель AI, такая как GPT-3, сгенерировала весь или часть этого текста?”

Если вы отойдете в сторону, вы поймете, что это типичная повседневная ситуация. Например, насколько вероятно, что ваша мать скажет вам следующее предложение?

  1. Дорогой, пожалуйста, ложись спать до 20:00.
  2. Дорогой, пожалуйста, ложись спать после 23:00.

Мы догадываемся, что первое предложение гораздо более вероятно, так как вы построили понимание мира вокруг вас и имеете представление о том, какие события более вероятно произойдут.

Именно так работает языковая модель. Языковые модели узнают что-то о мире вокруг них, в частности о языке. Они учатся предсказывать следующий токен или слово, исходя из неполного предложения.

В приведенном примере, если вам говорят, что вашей матерью говорится что-то, а уже сказано “Дорогой, пожалуйста, ложись спать”, то наиболее вероятным продолжением предложения будет “до 20:00”, а не “после 23:00”. В техническом смысле, можно сказать, что вас больше смущает услышать 2-е предложение вместо 1-го.

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

Что такое перплексия языковой модели?

Согласно dictionary.com, определение perplexity:

состояние нерешительности; смущение, неопределенность.

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

Аналогично для языковой модели, которая пытается предсказать следующее слово в предложении, если модель завершает предложение, используя слово, которое мы не ожидаем, это будет вызывать удивление, в отличие от случая, когда модель использует ожидаемое слово. Некоторые примеры.

Предложения с низкой сложностью выглядят следующим образом

  1. Сегодня солнечный день.
  2. Извините, я пропустил рейс и не успел достигнуть национального парка вовремя.

Предложения с высокой сложностью выглядят следующим образом

  1. Сегодня хлебный день.
  2. Я удобно пропустил свет на улице и не смог добраться до национального парка.

Теперь рассмотрим, как мы можем вычислить сложность предсказания языковой модели.

Вычисление сложности прогнозирования языковой модели

Сложность языковой модели связана с вероятностью удачного предсказания следующего токена (слова) в предложении без каких-либо удивлений.

Предположим, мы обучили языковую модель с словарем из 6600 токенов и выполнили один шаг предсказания, чтобы модель предсказала следующий токен в предложении. Предположим, что вероятность выбрать этот токен составляет 5/6600 (то есть этот токен был непредсказуемым). Его сложность – это обратная вероятность, которая равна 6600/5 = 1320, что указывает на то, что этот вариант сильно сбивает нас с толку. Если вероятность выбрать этот токен была бы 6000/6600, тогда сложность составила бы 6600/6000 = 1,1, что указывает на то, что мы немного сбиты с толку этим предложением.

Таким образом, сложность нашей модели при более вероятном предсказании ниже, чем сложность нашей модели при менее вероятном предсказании.

Сложность предсказания всех токенов в предложении “x” формально определяется как корень N-й степени из обратного произведения вероятностей токенов.

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

Число e (2.71828) в степени среднего отрицательного логарифма правдоподобия предсказанного токена, является сложностью.

Сложность обучения и проверки

Сложность обучения и проверки модели можно вычислить непосредственно из потерь партии или эпохи.

Сложность предсказания

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

Код на PyTorch для вычисления сложности

Предположим, что переменная probs является torch.Tensor формы (sequence_length,), которая содержит вероятность правильного токена, предсказываемого языковой моделью на этой позиции в последовательности.

Сложность для каждого токена можно вычислить с помощью следующего кода.

token_perplexity = (probs.log() * -1.0).exp()print(f"Token Perplexity: {token_perplexity}")

Сложность примера можно вычислить с помощью следующего кода.

# Сложность - это e^(средний NLL).sentence_perplexity = (probs.log() * -1.0).mean().exp().item()print(f"Sentence Perplexity: {sentence_perplexity:.2f}")

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

def get_pointwise_loss(self, inputs: List[str], tok):    self.model.eval()    all_probs = []    with torch.inference_mode():        for input in inputs:            ids_list: List[int] = tok.encode(input).ids            # ids имеет размерность (1, len(ids_list))            ids: Torch.Tensor = torch.tensor(ids_list, device=self.device).unsqueeze(0)            # probs ниже - это вероятность того, что токен на данной позиции            # завершает предложение (в ids) до данного момента.            y = self.model(ids)            criterion = nn.CrossEntropyLoss(reduction='none', ignore_index=0)            # Вычисляем потери, начиная со 2-го токена в выводе модели.            loss = criterion(y[:,:,:-1], ids[:,1:])            # Для вычисления вероятности каждого токена нам нужно вычислить            # отрицание логических потерь и экспоненциализировать их.            loss = loss * -1.0            # Задаем вероятности, которые нас не интересуют, равными -inf.            # Это делается, чтобы softmax задал этим значениям 0.0            loss[loss == 0.0] = float("-inf")            # probs содержит вероятность каждого предсказанного токена            # начиная со 2-го токена, так как мы не хотим включать вероятность            # модели предсказания начала предложения без наличия контекста.            #            # Для вычисления перплексии, нам, вероятно, следовало бы игнорировать            # первые несколько предсказаний модели, так как контекста недостаточно.            # Однако, здесь мы этого не делаем.            probs = loss.exp()            all_probs.append(probs)        #    #    return all_probs#

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

Обнаружение текста, созданного искусственным интеллектом

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

  1. Текст (предложение или абзац), который мы хотим проверить.
  2. Токенизированная версия этого текста, токенизированная с использованием токенизатора, который использовался для токенизации обучающего набора данных для этой модели.
  3. Обученная языковая модель.

Используя 1, 2 и 3 выше, мы можем вычислить следующее:

  1. Вероятность каждого токена, предсказанную моделью.
  2. Перплексию каждого токена с использованием вероятности для каждого токена.
  3. Общую перплексию для всего предложения.
  4. Перплексию модели на обучающем наборе данных.

Для проверки того, является ли текст созданным искусственным интеллектом, нам нужно сравнить перплексию предложения с перплексией модели, умноженной на коэффициент alpha. Если перплексия предложения больше, чем перплексия модели с учетом масштабирования, то это, вероятно, текст, написанный человеком (то есть не созданный искусственным интеллектом). В противном случае, это, вероятно, текст, созданный искусственным интеллектом. Причина в том, что мы ожидаем, что модель не будет испытывать затруднений с текстом, который она сама могла бы создать, поэтому, если она сталкивается с текстом, который она сама не смогла бы создать, есть основания полагать, что этот текст не был создан искусственным интеллектом. Если перплексия предложения меньше или равна перплексии модели на обучающем наборе данных с масштабированием, то с большой вероятностью этот текст был сгенерирован с использованием данной языковой модели, но мы не можем быть уверены. Это потому, что возможно, что этот текст написал человек, а модель также могла бы его создать. В конце концов, модель была обучена на большом количестве текстов, написанных людьми, так что в некотором смысле модель представляет собой «среднее письмо человека».

ppx(x) в формуле выше означает перплексию входного “x”.

Далее давайте посмотрим на примеры текста, созданного искусственным интеллектом по сравнению с текстом, написанным человеком.

Примеры текста, созданного искусственным интеллектом по сравнению с текстом, написанным человеком

Мы написали некоторый Python-код, который окрашивает каждый токен в предложении в зависимости от его перплексии относительно перплексии модели. Первый токен всегда окрашен в черный цвет, если мы не учитываем его перплексию. Токены, у которых перплексия меньше или равна перплексии модели с учетом масштабирования, окрашены в красный цвет, указывая на то, что они могут быть созданы искусственным интеллектом, тогда как токены с более высокой перплексией окрашены в зеленый цвет, указывая на то, что они определенно не созданы искусственным интеллектом.

Числа в квадратных скобках перед предложением указывают на сложность предложения, вычисленную с использованием языковой модели. Обратите внимание, что некоторые слова частично красные, а частично синие. Это связано с тем, что мы использовали субсловесный токенизатор.

Вот код, который генерирует вышеуказанный HTML.

def get_html_for_token_perplexity(tok, sentence, tok_ppx, model_ppx):    tokens = tok.encode(sentence).tokens    ids = tok.encode(sentence).ids    cleaned_tokens = []    for word in tokens:        m = list(map(ord, word))        m = list(map(lambda x: x if x != 288 else ord(' '), m))        m = list(map(chr, m))        m = ''.join(m)        cleaned_tokens.append(m)    #    html = [        f"<span>{cleaned_tokens[0]}</span>",    ]    for ct, ppx in zip(cleaned_tokens[1:], tok_ppx):        color = "black"        if ppx.item() >= 0:            if ppx.item() <= model_ppx * 1.1:                color = "red"            else:                color = "green"            #        #        html.append(f"<span style='color:{color};'>{ct}</span>")    #    return "".join(html)#

Как мы можем видеть из приведенных выше примеров, если модель обнаруживает, что некий текст был создан человеком, то он, безусловно, был создан человеком. Но если она определяет текст как созданный искусственным интеллектом, то существует шанс, что он не был создан искусственным интеллектом. Почему это происходит? Рассмотрим это далее!

Ложные положительные результаты

Наша языковая модель обучена на БОЛЬШОМ количестве текста, написанного людьми. Обычно трудно определить, был ли какой-то текст написан (цифровым) конкретным человеком. Входные данные модели для обучения включают множество различных стилей письма, вероятно, написанных большим количеством людей. Это заставляет модель изучать множество различных стилей письма и контента. Очень вероятно, что ваш стиль письма очень близок к стилю письма некоторого текста, на основе которого модель была обучена. В результате возникают ложные положительные результаты и поэтому модель не может быть уверена, что некоторый текст был создан искусственным интеллектом. Однако модель может быть уверена, что некоторый текст был написан человеком.

OpenAI: OpenAI недавно объявила, что прекращает использование своих инструментов для обнаружения текста, созданного искусственным интеллектом, со ссылкой на низкую точность (Источник: Hindustan Times).

Первоначальная версия классификатора искусственного интеллекта имела определенные ограничения и неточности. Пользователям требовалось вручную вводить не менее 1000 символов текста, который затем OpenAI анализировала для классификации как созданный искусственным интеллектом или написанный человеком. К сожалению, результаты работы инструмента оказались недостаточно качественными: он правильно идентифицировал только 26 процентов содержимого, созданного искусственным интеллектом, и ошибочно помечал текст, написанный человеком, как созданный искусственным интеллектом примерно в 9 процентах случаев.

Вот ссылка на блог-пост OpenAI. Кажется, они использовали другой подход по сравнению с упомянутым в этой статье.

Наш классификатор – это языковая модель, донастроенная на наборе данных пар человеческих и искусственно созданных текстов на одну и ту же тему. Мы собрали этот набор данных из различных источников, которые, как мы считаем, написаны людьми, таких как данные предварительного обучения и демонстрации человека на запросы, представленные в InstructGPT. Мы разделили каждый текст на запрос и ответ. На этих запросах мы генерировали ответы с помощью различных языковых моделей, обученных нами и другими организациями. Для нашего веб-приложения мы настраиваем порог уверенности так, чтобы ложноположительный результат был низким; другими словами, мы помечаем текст как вероятно созданный искусственным интеллектом только в том случае, если классификатор очень уверен.

GPTZero: Другим популярным инструментом обнаружения текста, созданного искусственным интеллектом, является GPTZero. Похоже, GPTZero использует перплексию и “burstiness” для обнаружения текста, созданного искусственным интеллектом. “Burstiness” относится к явлению, когда некоторые слова или фразы появляются пачками внутри текста. Другими словами, если слово встречается один раз в тексте, оно, вероятно, появится еще раз в непосредственной близости (источник).

Согласно GPTZero FAQ, GPTZero утверждает, что имеет очень высокий процент успеха. «При пороге 0,88 85% документов искусственного интеллекта классифицируются как искусственный интеллект, а 99% документов человека классифицируются как человек».

Обобщаемость этого подхода

Упомянутый в этой статье подход плохо обобщается. Мы имеем в виду, что если у вас есть 3 языковых модели, например, GPT3, GPT3.5 и GPT4, то вам необходимо пропустить входной текст через все 3 модели и проверить перплексию по каждой из них, чтобы увидеть, сгенерирован ли текст хоть одной из них. Это связано с тем, что каждая модель генерирует текст немного по-разному, и все они должны независимо оценивать текст для определения, может ли кто-то из них быть его автором.

С появлением больших языковых моделей в мире к августу 2023 года кажется маловероятным проверить, откуда именно происходит любой фрагмент текста.

Фактически, каждый день создаются новые модели, и попытка удержаться в таком быстром прогрессе кажется трудной, в лучшем случае.

Приведенный ниже пример показывает результат запроса нашей модели о предсказании, являются ли предложения, сгенерированные ChatGPT, сгенерированными искусственным интеллектом или нет. Как видите, результаты смешанные.

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

Есть множество причин, почему это может происходить.

  1. Размер обучающего корпуса: Наша модель обучена на очень небольшом тексте, в то время как ChatGPT обучен на терабайтах текста.
  2. Распределение данных: Наша модель обучена на другом распределении данных по сравнению с ChatGPT.
  3. Тонкое настройка: Наша модель — просто GPT, в то время как ChatGPT был тонко настроен для ответов в чате, что делает ее генерацию текста немного иначе. Если бы у вас была модель, генерирующая юридический текст или медицинский совет, то наша модель также показала бы плохие результаты на тексте, сгенерированном этими моделями.
  4. Размер модели: Наша модель очень маленькая (менее 100 миллионов параметров по сравнению с больше чем 200 миллиардами параметров для моделей типа ChatGPT).

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

Далее давайте рассмотрим некоторую дезинформацию на эту тему, которая циркулирует в Интернете.

Дезинформация

Некоторые статьи неправильно интерпретируют перплексию. Например, если вы ищете на google.com запрос «имеет ли человекописанный контент высокую или низкую перплексию?», вы получите следующий результат на первом месте.

Это неверно, так как человекописанный контент обычно имеет более высокую перплексию по сравнению с контентом, сгенерированным искусственным интеллектом.

Давайте рассмотрим техники, которые исследователи в этой области исследуют, чтобы достичь лучших результатов, чем у нас.

Что дальше?

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

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

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

Даже если OpenAI и Google применят технику водяных знаков, мы не можем быть уверены, что каждая языковая модель, которая развернута, будет содержать водяной знак. По-прежнему будет возможно для людей развернуть свои собственные модели для генерации текста и распространения их на просторах интернета. Даже если компании решат добавить водяные знаки в сгенерированный текст, не ясно, будет ли это стандартом или каждая компания будет иметь свою собственную стратегию и, возможно, платный инструмент, чтобы проверять, был ли сгенерированный текст создан с помощью их средств генерации текста на основе ИИ. Если это открытый стандарт, то есть шанс, что люди смогут найти пути обойти его, если только это не будет что-то вроде криптографического шифра, для расшифровки которого потребуется огромное количество вычислительных мощностей. Если это не открытый стандарт, то люди будут зависеть от этих компаний, чтобы они предоставляли открытый и бесплатный доступ к инструментам и API, необходимым для проведения этих проверок. Также встает вопрос о том, насколько эффективными они будут в долгосрочной перспективе, так как все равно может оказаться возможным обучить модели принимать на вход текст, сгенерированный ИИ с водяным знаком, и выдавать текст, созданный ИИ, без водяного знака.

Этот артикль обсуждает возможную технику добавления водяного знака к тексту, сгенерированному ИИ, и указывает на значительные проблемы с таким подходом.

Персонализация: По нашему мнению, проблема обнаружения текста, сгенерированного ИИ, будет оставаться сложной в ближайшей перспективе. Мы считаем, что стратегии должны стать более интрузивными и персонализированными, чтобы быть более эффективными. Например, вместо вопроса о том, является ли текст сгенерированным ИИ, более разумным будет спросить, написан ли этот текст определенным человеком. Однако для этого системе понадобится иметь доступ к большому количеству текста, написанного этим конкретным человеком. Кроме того, проблема становится более сложной, если что-то написано более чем одним человеком, например, этот артикль.

Давайте рассмотрим, какое влияние такая персонализированная система обнаружения текста, написанного человеком, окажет на преподавателей и студентов.

Если бы такое решение существовало, преподаватели склонились бы к выдаче индивидуальных заданий студентам вместо групповых заданий. Это также потребовало бы от каждого студента предоставить большое количество текста, который они сами написали. Это могло бы означать проведение нескольких часов личного присутствия в университете до поступления на учебу. Конечно, это бы имело негативное влияние на возможность обучать студентов важности совместной работы команды для достижения общей цели.

С другой стороны, имея доступ к генерации текста на основе ИИ, студенты могли бы свободнее сосредоточиться на реальной проблеме, например, проведении исследований или изучении литературы, вместо траты времени на запись своих знаний в отполированной форме. Можно представить, что студенты будут больше времени уделять изучению концепций и техник в математике или на уроках наук, вместо написания об этом. Этой частью может заниматься ИИ.

Заключение

В этой статье мы разработали интуицию о том, как можно обнаружить текст, сгенерированный ИИ. Основной метрикой, которую мы можем использовать, является неопределенность сгенерированного текста. Мы увидели некоторый код PyTorch, чтобы проверить, может ли данный текст быть созданным ИИ, используя неопределенность этого текста. Мы также увидели некоторые недостатки этого подхода, включая возможность ложных срабатываний. Мы надеемся, что это поможет вам понять и оценить тонкости, связанные с обнаружением текста, созданного ИИ.

Это постоянно развивающаяся область, и исследователи прилагают усилия, чтобы найти способ более точного обнаружения текста, сгенерированного ИИ. Влияние этой технологии на нашу жизнь обещает быть значительным и во многих отношениях неизвестным.

В ходе обсуждения техник обнаружения текста, сгенерированного ИИ, мы предполагали, что весь текст либо написан человеком, либо сгенерирован ИИ. На практике текст, как правило, является частично написанным человеком и частично сгенерированным ИИ, что серьезно усложняет задачу.

Если вам интересны дополнительные подходы к обнаружению текста, сгенерированного ИИ, например, использование метрики всплеска, вы можете прочитать об этом здесь.

Все изображения в этой статье (кроме первого) созданы автором(ами).