Использует разнородную кластеризацию векторов для изучения ответов и выставления оценок.

Оценка сценариев вручную — это огромная система Map-Reduce. Скрипты ответов сначала раздаются учителям. Оценка проводится каждым учителем. Руководящий орган предпринимает шаги, чтобы избежать нежелательных последствий. Наконец, все эти оценки собираются для публикации результатов. Представьте, если бы у нас была система, которая сама принимает сценарии ответов и выставляет оценки, генерируя отчет с обратной связью для каждого ответа, и все это за долю секунды. Наш проект делает это.

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

{
    "Question": {
        "Answers: [
            "Answer 1",
            "Answer 2",
            ,
            ,
            ,
            "Answer N",
        ]
        "Marks": M
    }
}

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

  1. Количество слов и предложений: подсчет слов и предложений.
  2. Вычисление правильного соотношения: количество правильных слов к общему количеству слов.
  3. Удаление стоп-слов: ответ удаляется из всех стоп-слов.
  4. Тегирование POS: фильтруются все междометия, предлоги, союзы и местоимения.
  5. Включение синонимов: включены синонимы существительных и прилагательных.
  6. Распределение частоты: учитываются повторения слов и их синонимов.
>>> vector = prepare_vector("I love to code. Code is addictive.")
>>> vector
{'word_count': 7, 'sentence_count': 2, 'correct_ratio': 1.0, 'clean_words': 3, 'love': 1, 'beloved': 1, 'code': 2, 'addictive': 1}

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

Выбранная модель машинного обучения ранее опубликована Analytics Vidhya на Medium, написана мной. Он принимает входные данные в виде словарей, а не массивов numpy, чтобы приспособить несходные функции, которые здесь являются словами. Количество кластеров, т. е. значение K, равно атрибуту меток в файле набора данных. Каждый вопрос будет иметь отдельный экземпляр модели, чтобы исключить двусмысленность.

Полученные центры кластеров сортируются по весам признаков в порядке приоритета содержания, представления и корректности. Их можно найти в наших векторах как clean_words, word_count, sentence_count и correct_ratio. Вес каждой функции указан ниже.

feature_weights = {
    'clean_words': 0.5
    'word_count': 0.2,
    'sentence_count': 0.2,
    'correct_ratio': 0.1,
}

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

{
    "Question 1": "Answer 1",
    "Question 2": "Answer 2",
    ,
    ,
    ,
    "Question N": "Answer N"
}

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

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

{
    "question": {
        "answer": "The answer to the question",
        "marks_awarded": m,
        "max_marks": n,
        "feedback": "Necessary feedback to improve answer."
    }
}

Таким образом, используя эту систему, мы можем снизить сложность оценки с системы, подобной Map-Reduce, до сложности простого настольного приложения.

Код? Все это на https://github.com/AjayRajNelapudi/Automated-Answer-Grading. Пометьте мое репо звездочкой, если оно вам понравилось.