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

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

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

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

Делайте задания более плавными и быстрыми

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

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

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

Машинное обучение в помощь человеческому обучению

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

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

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

Проверка правописания - проверяет как на норвежском нюнорске, так и на букмоле.

Количество пробелов - указывает на неправильное использование пробелов.

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

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

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

Длинное предложение - выделяет длинные предложения.

Абзацы - показывает, если абзац слишком длинный.

Структура текста - напоминает учащемуся о необходимости правильно структурировать текст.

Запятые - исправляет использование запятой перед «но».

Точки: точки в заголовке помечаются как ошибки.

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

Восклицательные знаки - предупреждает о чрезмерном использовании восклицательных знаков.

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

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

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

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

Как обучить языковую модель SpaCy Nynorsk

Тренировать модели в spaCy очень просто. После обычной предварительной обработки данных можно просто обучить пустую модель через командную строку с помощью обучающего скрипта spaCy. В этой настройке мы также решили повысить точность за счет использования трансферного обучения и добавления векторов слов Fasttext:

# Download Nynorsk vectors & create Spacy model

wget -P fasttext https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.nn.300.vec.gz

python3 -m spacy init-model nn models/nn_vectors_ft_lg --vectors-loc fasttext/cc.nn.300.vec.gz

и собственно обучение:

python3 -m spacy train nn --version=0.0.1 --vectors=models/nn_vectors_ft_lg models/nn_ud_fasttext_md data/nynorsk-ud-train.json data/nynorsk-ud-test.json

Вуаля - теперь у нас есть модель Nynorsk с токенизацией, тегированием части речи и анализом зависимостей, готовая к использованию для нашего текстового анализатора.

Более подробные сведения о коррекции орфографии норвежского языка

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

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

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

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

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

Учиться усваивать знания

Skrible предлагает дополнительные функции, чем упомянутые выше. Учителя могут легко оставлять отзывы с помощью функции проверки и общаться со студентами, добавляя комментарии. Вместе с нашими клиентами KF (Коммунефорлагет) и NTB Arkitekst мы стремимся поддерживать студентов и преподавателей в обучении навыкам понимания, письма и творчества.

С августа 3200 учеников в 44 школах муниципалитета Бэрум начали использовать Skrible. Хотите попробовать новый инструмент для письма? Смело обращайтесь к Ане или Марте в команде Skrible!

Иллюстрации Оливера О’Каллагана