В этом блоге мы поговорим о похожих объектах, это могут быть Изображения, Голос, Музыка, Фразы, код языка программирования, лист ответов экзамена, поведение человека и т. д. Пусть у нас есть два похожих объекта, чтобы как человек мы могли легко сказать эти два объекта похожи, но что, если мы должны сделать это для тысяч или миллионов наборов из двух объектов, если мы делаем это вручную, мы должны заплатить стоимость, стоимость с точки зрения энергии и времени для обнаружения сходства. Но в мире автоматизации это возможно за очень короткое время. Единственным ограничением являются данные, если у нас есть данные, мы можем добиться прогресса автоматизации.
Данные являются одной из ключевых проблем в машинном обучении, если у нас есть большой объем данных, точность нашей модели машинного обучения становится более точной. Но в большинстве случаев данных недостаточно для обучения модели.
Постановка проблемы.Каждый семестр университеты проводят экзамены для своих студентов для получения степени, при этом некоторые вопросы на экзамене взяты из вопросников предыдущих лет. Большинство университетов следуют этой тенденции. Здесь у нас есть данные в виде картинок вопросов, у нас нет. похожие вопросы, которые мы собрали из различных банков вопросов в виде картинок, и формат всех картинок такой же, как вы можете видеть на рис. 2. Студентам университета нужна система автоматизации, которая может обнаруживать повторяющиеся/похожие вопросы, возникшие в предыдущих семестрах. экзамены во время подготовки к экзамену.
Однократное обучение
В глубоком обучении большой объем данных является самой большой проблемой для обучения модели для проблемы обнаружения подобия, но это не означает, что мы не можем обучить нашу модель DL. мы можем сделать это с помощью алгоритма обучения одним выстрелом с несколькими выборками данных.
Пусть у нас есть три кластера разных категорий треугольник, круг и прямоугольник, и каждый набор имеет 6 одинаковых точек данных.
Набор 1: S1 = {T1, T2, T3}
Набор 2: S2 = {C1, C2, C3}
Набор 3: S3 = {R1, R2, R3}
Как мы видим, у нас мало данных, но мы можем генерировать более разумные данные для нас с помощью алгоритма обучения одним выстрелом. Это делает комбинацию похожих точек данных и разнородных точек данных.
Комбинация похожих точек данных
у нас есть три набора S1, S2 и S3, и каждый набор имеет 6 элементов, мы хотим сделать комбинацию похожих точек данных.
Если мы умножим эту формулу комбинации на общее число. наборов, мы получим общее количество. комбинаций подобных пар. Здесь n – общее число. предметов в наборе и rнет. выбранного предмета из набора.
Общее количество комбинации одинаковых пар = C(n, r) * Всего кол. комплектов
C(3, 2) * 3 = 9
В таблице 1 есть три столбца: Функция 1 содержит первый элемент пары, Функция 2 содержит второй элемент пары, а Похоже бинарное представление пары независимо от того, похожа пара или нет. Здесь у нас есть 9 строк, которые представляют собой комбинации одинаковых пар.
Комбинация непохожих точек данных
Выше мы видели, как подготовить объединение похожих пар, теперь мы увидим, как мы можем создавать непохожие пары.
Чтобы создать непохожие пары, мы будем использовать ту же формулу комбинирования, но другим способом. Iесли мы поместим эту формулу комбинации, где n — общее число. наборов и rобщее количество. выбранного множества из всех множеств.
Общее количество непохожих пар = C(3, 2) * 3 * 3 = 27
Таблица 2 является расширенной версией Таблицы 1. Все столбцы функций такие же, как в Таблице 1, Функция 1 содержит первый элемент пары, а Функция 2 содержит второй элемент пары и Похожа — это двоичное представление пары независимо от того, похожа пара или нет. Здесь у нас есть 27 строк, которые представляют собой комбинации непохожих пар.
Итак, это все об обучении одним выстрелом, на данный момент мы видели его на игрушечном примере, теперь пришло время увидеть реальную проблему и ее реализацию. Мы закончим однократным обучением с набором данных, похожим на Таблицу 1 и Таблицу 2.
Извлечение данных
В этом разделе мы собираемся извлечь вопросы из заданных изображений вопросов. Чтобы получить результат, мы должны выполнить все шаги, указанные на рис. 2.
На рис. 3 у нас есть изображение с 4 вопросами, и все вопросы похожи. На дальнейших этапах мы извлечем вопросы из этого изображения и применим однократное обучение.
Шаг 1. Преобразование текста из изображения
На шаге 1 мы преобразуем изображение в текст. Чтобы получить текст, мы будем использовать open cv, который используется для чтения изображения, и pytesseract, которые помогают распознавать оптические символы в изображении.
Постарайтесь понять код построчно, чтобы вы лучше поняли этот пример. Я также объясню важную и основную часть кода.
Давайте посмотрим на код, у нас есть функция textExtration, которая принимает изображение в качестве входных данных и возвращает текст из изображения. Мы увидим функцию textExtraction в двух разделах —
- Номер строки. 2–8: В этой строке мы сначала читаем данное изображение, а затем преобразуем его в форму в градациях серого. Чтобы получить текст из изображения, нам нужно бинарное изображение, поэтому мы используем функцию cv2.threshold из opencv. Теперь мы готовы использовать tessereact, здесь мы не будем больше обсуждать часть конфигурации tessereac, если вы хотите узнать больше об этом, обратитесь к документации tessereact. В строке нет. 8 мы применяем функцию tessereact.image_to_data, которая принимает бинаризованное изображение в качестве параметра и возвращает словарь.
- Номер строки. 9–29 :Эти строки совершенно необязательны для нас, потому что они используются только для текстовых аннотаций. Он распознает текст на изображении, в основном он создает рамку вокруг слова, как вы можете видеть на рис. 4. В строке 18 мы перебираем все слова, которые мы получаем от tessereact и сохраняем в список. и возвращает текст, который мы получаем из изображения.
Шаг 2. Извлеките вопрос из текста с помощью регулярного выражения
В настоящее время у нас есть образцы, которые содержат только часть вопросов, что, если у нас есть целая страница, на которой у нас есть вопросы и ответы на них. Затем нам нужно извлечь только часть вопросов из всего текста, и это мы можем сделать с помощью регулярного выражения. На данный момент у нас есть примеры изображений, которые содержат только вопрос, поэтому мы не собираемся применять регулярное выражение. В коде 2 мы вызываем функцию textExtration, которая возвращает текст с изображения. В первом операторе печати мы можем видеть тип данных текста, который является типом строки, а второй оператор печати показывает вывод.
Здесь мы разделим наши похожие вопросы с помощью «Или», которые показаны в красной рамке в приведенном выше коде.
Шаг 3. Примените однократное обучение к похожему/непохожему вопросу
В приведенном ниже фрагменте кода у нас есть функция getQuestionPartDataset, которая принимает список всех вопросов, разделителем в нашем случае является «Или», например, имя темы. Передача данных, операционные системы и т. д. и имя потока, например. Электроника и связь. , ЕГЭ, Машиностроение и т.д..
разбить эту функцию на части —
- Создание пары похожих вопросов (строки 16–20). Здесь используются вопросы с разделителями и разделение с помощью разделителя, поэтому мы получаем список разделенных вопросов, а затем передаем этот список в функцию product. , это дает нам комбинацию похожих вопросов. Как видите, в строке 20 мы добавляем кортеж из пары вопросов, имени субъекта, имени потока и IsSimilar.
- Примечание. Аналогичный вопрос обозначается 1 (похожий =1), а не похожий — 0 (не_похожий).[Как вы можете видеть в строке 6–7]
- Создание пары непохожих вопросов (строки 23–29). В настоящее время в allQuestionList (параметр) есть только похожие вопросы с разделителем «Или». Здесь мы используем вложенный цикл для получения непохожих вопросов, первый цикл берет первый вопрос из allQuestionList и разделяет его, затем вложенный цикл берет следующий вопрос из allQuestionList и разделяет это также. Теперь у нас есть две разделенные пары вопросов, и у нас нет ничего похожего между обеими парами. Итак, теперь мы можем создать комбинированный несходный вопрос с помощью функции product, передав ей оба наших разделенных списка.
- Удалить повторяющуюся пару вопросов (строка 35). На приведенном ниже рисунке видно, что в строках 0, 3 и 4 есть повторяющиеся пары. Итак, мы должны удалить эти записи из нашего набора данных. Мы можем удалить эти записи с помощью функции pandas DataFrame.drop(), здесь мы добавляем условия для дублирования.
Окончательный набор данных
Мы готовы с нашими окончательными данными, которые мы собираемся использовать для метода классификации.