Рубрики
Без рубрики

Создайте проверку плагиата с помощью машинного обучения

Плагиат широко распространен в Интернете и в классе. С таким большим количеством контента, это … Tagged с помощью Python, Machinelearning, JavaScript, Tutorial.

Плагиат широко распространен в Интернете и в классе. С таким большим количеством контента, иногда трудно понять, когда что -то было запланировано. Авторы, пишущие сообщения в блоге, могут захотеть проверить, украл ли кто -то их работу и опубликовал ее в другом месте. Преподаватели могут захотеть проверить статьи учащихся против других научных статей для скопированной работы. Новостные агентства могут захотеть проверить, украла ли контент -ферма их новостные статьи и заявили о своем собственном контенте.

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

Мы построим приложение Python Flask, которое использует Pinecone – Служба поиска сходства – чтобы найти возможно плагиарный контент.

Демо -приложение обзор

Давайте посмотрим на демонстрационное приложение, которое мы будем строить сегодня. Ниже вы можете увидеть краткую анимацию приложения в действии.

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

Как вы можете видеть, когда оригинальный содержимое используется в качестве ввода поиска, оценки совпадений для возможных плагиат статей относительно низки. Однако, если бы мы скопировали и вставили текст из одной из статей в нашей базе данных, результаты для плагиатичной статьи возвращаются с матчем на 99,99%!

Итак, как мы это сделали?

При создании приложения мы начинаем с Набор данных новостных статей от Kaggle. Этот набор данных содержит 143 000 новостных статей из 15 крупных публикаций, но мы просто используем первые 20 000. (Полный набор данных, из которого получен более двух миллионов статей!)

Затем мы очищаем набор данных, переименуя пару столбцов и отбросив несколько ненужных. Затем мы запускаем статьи через модель встраивания, чтобы создать Векторные встраивания – Это метаданные для алгоритмов машинного обучения для определения сходства между различными входами. Мы используем Среднее слово модель встроенных слов Анкет Наконец, мы вставляем эти векторные встроения в Векторная база данных Управляется Pinecone.

С помощью векторных встроений, добавленных в базу данных и индексированные, мы готовы начать поиск подобного контента. Когда пользователи отправляют текст своей статьи в качестве ввода, внесен запрос на конечную точку API, которая использует SDK Pinecone для запроса индекса векторных внедрения. Конечная точка возвращает 10 аналогичных статей, которые, возможно, были запланированы и отображают их в пользовательском интерфейсе приложения. Вот и все! Достаточно просто, верно?

Если вы хотите попробовать это для себя, вы можете Найдите код для этого приложения на GitHub Анкет Readme Содержит инструкции о том, как запустить приложение локально на вашей собственной машине.

Демо -приложение код приложения

Мы прошли через внутреннюю работу приложения, но как мы его действительно построили? Как отмечалось ранее, это приложение Python Flask, в котором используется SDK Pinecone. HTML использует файл шаблона, а остальная часть фронта построена с использованием статических активов CSS и JS. Чтобы все было просто, весь бэкэнд -код найден в app.py Файл, который мы воспроизведены в полном объеме:

Давайте пойдем по важным частям app.py Файл, чтобы мы это поняли.

На строках 1–14 мы импортируем зависимости нашего приложения. Наше приложение полагается на следующее:

  • dotenv Для чтения переменных среды из .env файл
  • колба Для настройки веб -приложения
  • json Для работы с JSON
  • ОС Также для получения переменных среды
  • Панды Для работы с набором данных
  • Pinecone Для работы с SNK Pinecone
  • репутация Для работы с регулярными выражениями (Regex)
  • Запросы Для получения запросов API для загрузки нашего набора данных
  • Статистика Для некоторых удобных методов статистики
  • Seadence_transformers Для нашей модели встраивания
  • Swifter Для работы с DataFrame Pandas

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

На строках 18–20 мы определяем некоторые константы, которые будут использоваться в приложении. К ним относятся имя нашего индекса Pinecone, имя файла набора данных и количество строк для чтения из файла CSV.

На строках 22–25, наш initiaze_pinecone Метод получает наш ключ API от .env Файл и использует его для инициализации PineCone.

На строках 27–29, наш delete_existing_pinecone_index Метод поиск нашего экземпляра Pinecone для индексов с тем же именем, что и тот, который мы используем («Проклятие плагиата»). Если существующий индекс найден, мы удаляем его.

На строках 31–35, наш create_pinecone_index Метод создает новый индекс, используя название, которое мы выбрали («Чекер с плагиатом»), метрику близости «косинус» и только один осколок.

На строках 37–40, наш create_model Метод использует Seadence_transformers Библиотека для работы со средней моделью встроенных слов. Мы кодируем наши векторные вставки, используя эту модель позже.

На строках 62–68, наш Process_file Метод считывает файл CSV, а затем вызывает PRIPARE_DATA и upload_items методы на нем. Эти два метода описаны дальше.

На строках 42–56, наш PRIPARE_DATA Метод регулирует набор данных, переименуя первое столбец «ID» и отбросив столбец «Дата». Затем он объединяет заголовок статьи с содержанием статьи в одном поле. Мы будем использовать это комбинированное поле при создании векторных встраиваний.

На строках 58–60, наш upload_items Метод создает векторное встраивание для каждой статьи, кодируя ее, используя нашу модель. Затем мы вставляем векторные встроены в индекс Pinecone.

На строках 70–74, наш map_titles и map_publications Методы создают некоторые словаря названий и названий публикаций, чтобы упростить поиск статей по их идентификаторам позже.

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

В строках 103–113 мы определяем два маршрута для нашего приложения: один для домашней страницы и один для конечной точки API. Домашняя страница обслуживает index.html Файл шаблонов вместе с активами JS и CSS, а конечная точка API обеспечивает функциональность поиска для запроса индекса Pinecone.

Наконец, в строках 76–93, наш Query_pinecone Метод принимает ввод содержимого статьи пользователя, преобразует его в векторное встрадание, а затем запрашивает индекс Pinecone, чтобы найти подобные статьи. Этот метод вызывается, когда /api/search Конечная точка достигается, что происходит в любое время, когда пользователь представляет новый поисковый запрос.

Для визуальных учеников, вот диаграмма, в которой работает приложение:

Примеры сценариев

Итак, объединяя все это вместе, как выглядит опыт пользователя? Давайте посмотрим на три сценария: оригинальный контент, точная копия плагиата -контента и контент «Патч письменного».

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

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

Теперь, для третьего сценария, мы должны определить, что мы подразумеваем под контентом «Патч написанный». Написание патчей – это форма плагиата, в которой кто -то копирует и пасты украли содержание, но затем пытается замаскировать тот факт, что он плагиат, изменяя некоторые слова здесь и там. Если в предложении из оригинальной статьи говорится: «Он был в восторге от того, чтобы найти свою потерянную собаку», кто -то может исправить содержание, чтобы вместо этого сказать: «Он был счастлив забрать свою пропавшую собаку. ” Это несколько отличается от перефразирования, потому что основная структура предложения содержания часто остается неизменной на протяжении всей плагиатной статьи.

Вот забавная часть: наш проверка плагиата действительно хорошо идентифицирует контент “Patch написанный”! Если вы скопировали и вставили одну из статей в базе данных, а затем измените несколько слов здесь и там, и, возможно, даже удалите несколько предложений или абзацев, счет матча все равно вернется как почти идеальная матча! Когда я попытался сделать это с скопированной и вставленной статьей, которая имела 99,99% матч, контент «Патч письменного» по -прежнему вернул 99,88% счета матча после моих изменений!

Не так уж и плохо! Наша проверка плагиата выглядит так, как будто он работает хорошо.

Заключение и следующие шаги

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

Это демонстрационное приложение имеет некоторые ограничения, так как это всего лишь демонстрация. База данных статей, загруженных в наш индекс, содержит только 20 000 статей из 15 основных публикаций новостей. Тем не менее, есть миллионы или даже миллиарды статей и постов в блоге. Проверка плагиата, подобная этому, полезна только в том случае, если она проверяет ваш вклад во все места, где ваша работа могла быть запланирована. Это приложение было бы лучше, если бы в нашем индексе было больше статей в нем и если бы мы постоянно добавляли к этому.

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

Оригинал: “https://dev.to/thawkin3/build-a-plagiarism-checker-using-machine-learning-2fa1”