Русский
Русский
English
Статистика
Реклама

Обработка текстов

Честные глаза плагиатора, или еще один взгляд на будущее систем обнаружения заимствований

01.04.2021 10:10:31 | Автор: admin

Развивать систему, созданную 16 лет назад, конечно, не подвиг, но вообще что-то героическое в этом есть (с). От пользователей регулярно прилетают вопросы: что будете делать дальше? Каким будет Антиплагиат через несколько лет? Все правильно, все верно нельзя позволять рутине себя засасывать настолько, чтобы не оставалось времени подумать о далеком, о жестоком, ну вы поняли о будущем.


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


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



Кадр из а/ф Шрек (англ. Shrek), DreamWorks Pictures, 2001 год



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


Предпосылка первая


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


До определенной степени можно продержаться, используя принцип Security through obscurity, то есть скрывая архитектуру и детали алгоритмов. Но, как показывает практика, принцип хорошо работает в том случае, если вы никому_не_нужный_неуловимый_Джо. Если же (как в нашем случае) систему ежедневно используют десятки или сотни тысяч пользователей, то ваша таинственность идет вам, как Соеву пенсе помогает очень ограничено.


Предпосылка вторая


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


Предпосылка третья


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


А теперь, собственно, Идея


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


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



Кадр из к/ф Место встречи изменить нельзя, Одесская киностудия, 1979 год


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


Способ первый спросить преподавателя


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



Источник картинки: компания Антиплагиат


У этого способа есть несколько особенностей. Во-первых, очевидно, что преподаватели не будут использовать его массово. Слишком много отклонений от простого варианта: Next, Next, Next, Finish.


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


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


Способ второй API


Второй способ является упрощенным вариантом первого. Нужно отдать во внешние системы возможность управления уровнем паранойи. Типичная внешняя система СДО Moodle, для которой уже есть сертифицированная интеграция с Антиплагиат.ВУЗ.


Реализация этого способа проста до невозможности. Расширяем параметр CheckDocParams метода CheckDocument:



параметром паранойи системы:



Остальное остается на откуп партнерам, которые реализовали интеграцию.


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


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



Кадр из к/ф Особое мнение (англ. Minority Report), 20th Century Fox, DreamWorks Pictures, Amblin Entertainment, Blue Tulip Productions, 2002 год


Но до тех пор, пока наш HR занимается заполнением открывшихся вакансий провидцев, нам придется полагаться на возможности AI.


Способ третий искусственный интеллект


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


Первым для оценки склонности к плагиату будет использован анализ движения зрачков студента на онлайн занятиях. По этой теме, есть как научные работы с анализом методов извлечения и анализа траектории движения зрачка (например, Christian Hirt et al, Maria K. Eckstein et al, Yujin Jung et al), так и готовые библиотеки (тот же PyGaze), которые можно использовать для промышленных задач.


Таким образом, перед нами обычная задача классификации с двумя классами. Этапы решения задачи вполне традиционные:


  1. Предобработка видеопотока
  2. Получение трека движения взгляда
  3. Выделение признаков
  4. Решение задачи классификации

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


Дополнительно планируется использовать данные:


  • о положении тела (движения головы, рук, позы),
  • мимике,
  • наличии в кадре посторонних объектов (графин с водой, булочка),
  • речи (в тех случаях, когда у студента включен микрофон).

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


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


Вторая это использование студентами различных техник, позволяющих обмануть AI по примеру обмана полиграфа (детектора лжи). Здесь важны два момента: обманывать полиграф на потоке могут разве что тренированные сотрудники спецслужб; в нашей ситуации будет трудно разработать типичные паттерны обмана и обучиться, так как результаты оценивания скрыты внутри сервиса и студенту не предъявляются.



Кадр из фильма День, когда Земля остановилась (англ. The Day the Earth Stood Still), 20th Century Fox, 2008 год


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


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


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



Кадр из фильма Матрица (англ. The Matrix), Warner Bros., Village Roadshow Pictures, 1999 год


Поверили?


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


Огромное спасибо коллегам, которые приняли участие в подготовке статьи: Олегу Бахтееву (Oleg_Bakhteev), Андрею Ивахненко (andyray), Александру Кильдякову (vainah76), Анастасии Чернышовой (chernnasty).


Всех с праздником! На всякий случай повторю, что реализация описанного метода не планируется.


Пока.

Подробнее..

Event2Mind для русского языка. Как мы обучили модель читать между строк и понимать намерения собеседника

18.06.2020 18:21:58 | Автор: admin
Умение модели распознавать намерения собеседника, то есть понимать зачем человек совершил то или иное действие, применимо в большом числе прикладных NLP-задач. К примеру, чат-ботам, голосовым помощникам и другим диалоговые системам это позволит эмоционально реагировать на высказывания собеседника, проявлять понимание, сочувствие и другие эмоции. Кроме того, задача распознавания намерения это еще один шаг на пути к пониманию человеческой речи (human understanding).



Уже было предпринято несколько попыток решить данную задачу в той или иной форме. Например, на NLP-progress публикуются последние достижения в области commonsense reasoning. Слабость большинства существующих моделей заключается в том, что в их основе лежит supervised подход, то есть им требуются большие размеченные датасеты для обучения. А в силу специфичности задачи разметка часто бывает весьма нестандартной и достаточно сложной.

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

В этом посте мы расскажем, как мы создали датасет для задачи Common Sense Reasoning в одной из ее возможных формулировок, предложенной в статье event2mind, а также адаптировали английскую модель event2mind от AllenNLP для русского языка. Для начала немного расскажем, что же из себя представляет задача Common Sense Reasoning.

На самом деле, правильнее было бы рассматривать это как целое направление задач, направленных на распознавание намерений и эмоций действующего лица. Единой формулировки у нее нет, и в данном посте мы возьмем за основу вот такой ее вариант, предложенный авторами event2mind: по короткому тексту в свободной форме, содержащему некоторое действие или событие (например, PersonX eats breakfast in the morning), определить намерения субъекта (X wants to satisfy hunger), его эмоции/реакции (X feels satiated, full) и возможные эмоции/реакции других участников события, если таковые присутствуют. Рисунок 1 это наглядно иллюстрирует.

Рисунок 1. Задача Commonsense Reasoning по короткому тексту-событию определить намерения, эмоции/реакции субъекта и эмоции/реакции окружающих


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

Данные, данные и еще раз данные


Итак, нашей задачей было собрать корпус размеченных текстов в свободной форме в формате, пригодном для обучения event2mind. Для простоты дальше мы будем называть такие короткие тексты просто событиями. При этом мы старались максимально расширить common sense reasoning кругозор модели, собрав события на самые разные темы из повседневной жизни.

Часть первая. Crowdsourced corpus


На первом этапе нам предстояло собрать достаточное количество сырых событий для последующей разметки. За основу мы взяли три источника данных:
  1. Короткие посерийные описания сериалов и мыльных опер. Мы вручную отобрали 50 сериалов с сюжетами из повседневной жизни, такие как Друзья, Секс в большом городе, Санта-Барбара, Универ, Кухня и другие. При этом мы старались выбирать сериалы о повседневной жизни с сюжетами на общие темы. Фантастика или профессиональные сериалы нам не подходили, так как они содержат очень много специальной лексики, и события там из своей специфичной области. Вы представляете, что может выучить модель, обученная на Докторе Хаусе или Звездном пути? Еще начнет подозревать у всех волчанку и сыпать рассказами о сражениях с инопланетянами.
  2. Краткие содержания книг. Суммарно нам удалось набрать краткие содержания 1512 книг.
  3. Тексты из SynTagRus, который является частью Русского Национального корпуса и содержит художественные тексты вместе с новостями.


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

  • nsubj + root + obj
  • nsubj + root + iobj
  • nsubj + advmod + root
  • nsubj + root + case + obl
  • etc.


Рисунок 2. Синтаксические паттерны, использованные для извлечения событий из текстов



Отобранные события обезличиваются. По аналогии с оригинальным event2mind все действующие лица и именованные сущности были заменены на единообразные PersonX, а также PersonY и PersonZ, если в предложении упоминается более одного действующего лица. Для распознавания именованных сущностей (Named Entity Recognition) и дальнейшей замены мы вновь воспользовались UdPipe: в событиях, которые отвечают паттернам выше мы деперсонилизировали токены, помеченные тегами PROPN или PRONOUN. В завершении мы исключили события, которые не содержат одушевленных субъектов. Например, по этому критерию было отсеяно предложение Идет дождь. В итоге в корпус вошли только события с одушевленными именованными сущностями (person named entities).

После деперсонализации и фильтрации мы воспользовались частотным анализом и расстоянием Левенштейна для отобора наиболее распространенных событий и фильтрации нестандартных примеров, которые встретились лишь единожды. Во-первых, мы взяли все события, которые встретились в первоначальной выборке больше одного раза. Для оставшейся части данных мы посчитали попарные расстояния Левенштейна $L(phrase_1,phrase_2)$, ), отобрали пары, для которых оно не превосходило 5 и из каждой пары взяли более короткое предложение. При таком методе мы руководствовались следующим соображением: если для пары событий их расстояние Левенштейна мало (в данном случае порог 5), то эти предложения отличаются весьма незначительно, например, в роде глагола или прилагательного. Фактически это вариации одного и того же события. А более короткое предложения из пары мы выбирали потому, что оно скорее будет содержать начальные формы слов (они чаще короче, хотя и не всегда).

После сбора данных события предстояло разметить, выделив в них намерения PersonX, его эмоции/реакции, а также эмоции/реакции PersonY и PersonZ, если таковые присутствуют. Для этого мы создали задание в Яндекс.Толоке. Пример из него вы можете видеть на рисунке 3. Для каждого события мы спрашивали разметчиков:

  • содержит ли оно осмысленное событие;
  • можно ли по тексту события понять намерения действующего лица;
  • можно ли по событию понять эмоции/реакцию действующего лица;
  • может ли это событие вызвать реакцию окружающий.


Рисунок 3. Пример задания из Яндекс.Толоки



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

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

В итоге нам удалось собрать 6756 событий на различные повседневные темы.

Часть 2. Translated English corpus


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

Дело в том, что разметка подобного датасета трудоемкое дело, требующее большого количества ресурсов, денег и средств. У нас просто не было возможности разметить корпус, по размерам сопоставимый с английским, который состоит из 46 тысяч примеров. Поскольку собранный на русском датасет оказался меньшего размера, мы решили оценить, хватит ли такого объема данных для обучения. Для этого мы обучили английскую модель на частях оригинального корпуса и измерили, как меняется качество в зависимости от размера обучающего датасета. Результаты приведены в таблице. Качество для намерений (intent) и эмоций/реакций (react) оценивалось, по аналогии с оригинальной статьей, по метрике recall@10 на валидации. recall@10 отражает долю случаев, когда истинный ответ golden standard попадает в топ-10 предсказаний модели. Метрика меняется от 0 до 1, чем больше, тем лучше.

Таблица 1. Зависимость качества английской модели от размера корпуса для обучения



Сразу можно сказать, что 5000 примеров недостаточно для полноценного обучения модели. Однако уже при 30000 примеров, loss и recall практически не отличаются от результатов на полном объеме данных. Получается, что размеченных нами 7000 примеров не хватает для обучения модели и необходимо каким-то способом увеличить размер обучающей выборки.

Для этого мы подготовили дополнительный корпус, полученный из английского с помощью автоматического перевода Google Переводчиком. Как уже отмечалось выше, при автоматическом переводе всего корпуса некоторые переводы оказывались некорректными или полностью теряли смысл. Поэтому мы отобрали ту часть английских данных, которая переводилась наиболее адекватно. Изначально английский корпус собран из нескольких источников: ROC Story training set, the GoogleSyntactic N-grams, the Spinn3r corpus и idioms. При этом предложения из некоторых источников оказались проще для перевода, чем из других. Например, адекватный перевод идиом без ручной правки оказался не под силу компьютеру. Поэтому мы взяли только примеры из ROC-story. По результатам оригинальной статьи (см. таблицу 2), у этого источника коэффициент согласованности аннотаторов (Cohen's kappa coefficient), равный 0.57. А это, скорее всего, свидетельствует о том, что события оттуда проще для понимания и разметки, а значит меньше подвержены ошибкам при переводе.

Таблица 2 Данные и Cohen's kappa coefficient для разных источников в английском корпусе


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

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

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

А теперь к экспериментам!


Итак, данные собраны, пора переходить к обучению модели и экспериментам. Модель event2mind представляет собой нейросетевую архитектуру вида encoder-decoder с одним энкодером и тремя декодарами для каждого вида предсказаний (см. рисунок 4): намерение субъекта, его эмоции/реакции и эмоции/реакции других участников события, если таковые имеются (subjects intent, subjectss reaction и others events participants reactions). Исходные предложения изначально векторизуются с помощью одного из методов векторных представлений слов (например, word2vec или fasttext) и кодируются с помощью энкодера в вектор $h^E\in \mathbb{R}^H$. А затем с помощью трех RNN декодеров генерируются предсказания. Благодаря этому модель может генерировать ответы даже для намерений и реакций, которые она до этого не видела.

Рисунок 4. Архитектура модели event2mind


Для экспериментов мы использовали объединенный корпус для русского языка, размеченную и переведенную части. А чтобы сделать распределение русских и переведенных примеров более равномерным, мы дополнительно перемешали данные. Отметим, что мы также попробовали обучить модель только на размеченных данных, но из-за маленького объема датасета, она показала очень плохие результаты. Мы протестировали различные слои в энкодере LSTM и GRU, а также попробовали различные векторные представления fasttext и word2vec с RusVectores. Результаты приведены в таблице 3, результаты по intentам и reactам, как и ранее считались по метрике recall@10.

Таблица 3. результаты моделей для русского языка, intent и react оценивались по recall@10


Итак, какие выводы можно сделать из результатов экспериментов? Во-первых, word2vec embeddings оказались немного лучше, чем fasttext. При этом fasttext embeddings, обученные на ruscorpora показали себя лучше обученных на araneum. Во-вторых, можно отметить, что при использовании word2vec, GRU в энкодере оказывается лучше LSTM. И наконец, лучшая модель (areneum word2vec + GRU) практически повторяет результаты для английского языка.

И напоследок посмотрим на реальные примеры!





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

Вместо заключения


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



Такой большой проект стал возможен, только благодаря совместным усилиям нашей команды. В адаптации event2mind для русского языка также принимали участие alenusch и onetwotrickster.
Подробнее..

Кластеризация и классификация больших Текстовых данных с помощью М.О. на Java. Статья 3 АрхитектураРезультаты

24.01.2021 14:08:22 | Автор: admin

Привет, Хабр! Сегодня будет заключительная часть темы Кластеризация и классификация больших Текстовых данных с помощью машинного обучения на Java. Данная статья является продолжениемпервой и второй статьи.

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

Архитектуры системы можно разделить на две основные части: веб приложение и программное обеспечение кластеризации и классификации данных

Алгоритм программного обеспечение для машинного обучение состоит из 3 основных частей:

  1. обработка естественного языка;

    1. токенизация;

    2. лемматизация;

    3. стоп-листинг;

    4. частота слов;

  2. методы кластеризации ;

    1. TF-IDF ;

    2. SVD;

    3. нахождение кластерных групп;

  3. методы классификации Aylien API.

Обработка естественного языка

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

Ниже приводим сравнение при запуске алгоритмов Лемматизации и Стеммитизации:

Общее количество слов: 4173415Количество слов после приминение Лемматизации: 88547Количество слов после приминение Стеммитизации: 82294

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

characterize, design, space, render, robot, face, alisa, kalegina, university, washington, seattle, washington, grace, schroeder, university, washington, seattle, washington, aidan, allchin, lakeside, also, il, school, seattle, washington, keara, berlin, macalester, college, saint, paul, minnesota, kearaberlingmailcom, maya, cakmak, university, washington, seattle, washington, abstract, face, critical, establish, agency, social, robot, building, expressive, mechanical, face, costly, difficult, robot, build, year, face, ren, der, screen, great, flexibility, robot, face, open, design, space, tablish, robot, character, perceive, property, despite, prevalence, robot, render, face, systematic, exploration, design, space, work, aim, fill, gap, conduct, survey, identify, robot, render, face, code, term, property, statistics

а стеммитизация обрезает окончание и в некоторых случаях удаляет нужные буквы, теряя основной смысл слово:

character, design, space, render, robot, face, alisa, kalegina, univers, washington, seattl, washington, grace, schroeder, univers, washington, seattl, washington, grsuwedu, aidan, allchin, lakesid, also, il, school, seattl, washington, keara, berlin, macalest, colleg, saint, paul, minnesota, kearaberlingmailcom, maya, cakmak, univers, washington, seattl, washington, abstract, face, critic, establish, agenc, social, robot, build, express, mechan, face, cost, difficult, mani, robot, built, year, face, ren, dere, screen, great, flexibl, robot, face, open, design, space, tablish, robot, charact, perceiv, properti, despit, preval, robot, render, face, systemat, explor, design, space, work, aim, fill, gap, conduct, survey, identifi, robot, render, face, code, term, properti, statist, common, pattern, observ, data, set, face, conduct, survey, understand, peopl, percep, tion, render, robot, face, identifi, impact, differ, face, featur, survey, result, indic, prefer, vari, level, realism, detail, robot, facecharacter, design, space, render, robot, face, alisa, kalegina, univers, washington, seattl, washington, grace, schroeder, univers, washington, seattl, washington, grsuwedu, aidan, allchin, lakesid, also, il, school, seattl, washington, keara, berlin, macalest, colleg, saint, paul, minnesota, kearaberlingmailcom, maya, cakmak, univers, washington, seattl, washington, abstract, face, critic, establish, agenc, social, robot, build, express, mechan, face, cost, difficult, mani, robot, built, year, face, ren, dere, screen, great, flexibl, robot, face, open, design, space, tablish, robot, charact, perceiv, properti, despit, preval, robot, render, face, systemat, explor, design, space, work, aim, fill, gap, conduct, survey, identifi, robot, render, face, code, term, properti, statist, common, pattern, observ, data, set, face, conduct, survey, understand, peopl, percep, tion, render, robot, face, identifi, impact, differ, face, featur, survey, result, indic, prefer, vari, level, realism, detail, robot, face

Методы кластеризации

Для применения алгоритма tf-idf нужно подсчитать сколько раз слово встречается в каждом документе. Можно использовать HashMap, где ключ - слово, значение - кол-во.

После этого нужно построит матрицу документы-слова:

Далее по формуле вычисляем tf-idf:

Следующий этап, использование метода сингулярного разложение, где на вход приходит результат tf-idf. Пример выходных данных алгоритма сингулярного разложение:

-0.0031139399383999997 0.023330604746 -1.3650204652799997E-4-0.038380206566 0.00104373247064 0.056140327901-0.006980774822399999 0.073057418689 -0.0035209342337999996-0.0047152503238 0.0017397257449 0.024816828582999998-0.005195951771999999 0.03189764447 -5.9991080912E-4-0.008568593700999999 0.114337675179 -0.0088221197958-0.00337365927 0.022604474721999997 -1.1457816390099999E-4-0.03938283525 -0.0012682796482399999 0.0023486548592-0.034341362795999995 -0.00111758118864 0.0036010404917-0.0039026609385999994 0.0016699372352999998 0.021206653766000002-0.0079418490394 0.003116062838 0.072380311755-0.007021828444599999 0.0036496566028 0.07869801528199999-0.0030219410092 0.018637386319 0.00102082843809-0.0042041069026 0.023621439238999998 0.0022947637053-0.0061050946438 0.00114796066823 0.018477825284-0.0065708646563999995 0.0022944737838999996 0.035902813761-0.037790461814 -0.0015372596281999999 0.008878823611899999-0.13264545848599998 -0.0144908102251 -0.033606397957999995-0.016229093174 1.41831464625E-4 0.005181988760999999-0.024075296507999996 -8.708131965899999E-4 0.0034344653516999997

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

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

Теперь нужно применить данную операцию и для терминов, то есть слов.

Последний этап метода кластеризации найти кластерные группы. Так как у нас уже есть трехмерная пространство, где хранятся точки документов и терминов в виде вершин, то нужно соединить эти документы и слова использовав схожий метод кластеризации DBSCAN. Для определения расстояние между документом и словом используется Евклидовое расстояние. А радиус можно определить по формуле ниже. В данном примере и при тестировании используется r=0.007. Так как в пространстве находится 562 документов и более 80.000 тысяч слов, то они расположены близко. При большом радиусе алгоритм будет связывать термин и документ в один кластер, которые не должны быть в одной группе.

r=max(D)/n

где max(D) это дистанция между документом и самой дальней точкой термина, то есть максимальная дистанция документа в пространстве. n - это количество документов в пространстве

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

После этого нужно всего лишь соединить вершины документов, которые имеют общие вершины терминов. Для соединения документов нужно чтобы общее число терминов было больше 4-х. Формула определение общего сила слов (в данном случае > nt)

nt=N/S

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

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

Методы классификации Aylien API

Для классификации в инструменте Aylien API всего лишь нужно передать любой текст. API вернет ответ в виде json объекта, где внутри есть категории классификации. Можно было бы отправлять весь текст каждого документа в одной группе кластеров через API и получить категории классификации. Для примера рассмотрим 9 групп кластеров, которые состоят из статьи про ИТ технологии. Все тексты документов каждой группы записываются в массив и отправляют запрос POST через API:

String queryText = "select  DocText from documents where clusters = '" + cluster + "'";   OResultSet resultSet = database.query(queryText);   while (resultSet.hasNext()) {   OResult result = resultSet.next();   String textDoc = result.toString().replaceAll("[\\<||\\>||\\{||\\}]", "").replaceAll("doctext:", "")   .toLowerCase();   keywords.add(textDoc.replaceAll("\\n", ""));   }   ClassifyByTaxonomyParams.Builder classifyByTaxonomybuilder    = ClassifyByTaxonomyParams.newBuilder();   classifyByTaxonomybuilder.setText(keywords.toString());   classifyByTaxonomybuilder.setTaxonomy(ClassifyByTaxonomyParams.StandardTaxonomy.IAB_QAG);   TaxonomyClassifications response = client.classifyByTaxonomy(classifyByTaxonomybuilder.build());   for (TaxonomyCategory c : response.getCategories()) {   clusterUpdate.add(c.getLabel());   }

После успешного получение ответа от сервиса методам GET, данные группы обновляются:

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

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

Разработка веб-интерфейса

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

В данном приложении есть следующие функции:

  • Документы, разделенные по предметам методом кластеризации и классификации.

  • Поиск по ключевым словам.

  • Поиск по хэш-тегам.

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

  • Возможность скачивание файла.

Список документов классификации по предмету Technology & Computing:

Список документов найденные по ключевым словам:

Табличный список всех документов:

Заключение

В работе был подробно рассмотрен сама концепция машинного обучение, для понимания цели использование методов или алгоритмов машинного обучения. Подробно описаны актуальные и известные методы и алгоритмы машинного обучения для решения цели и задачи работы. Так как задачи кластеризации используется для разных областей и предметов, в данной исследовательской работе было выбрано цель автоматизация процесса классификации текстовых данных, которые считаются сложнее чем обычные задачи классификации других данных. Алгоритм описанный и разработанный в данной исследовательской работе можно применять на большие количества текстовых документов на английском языке. Хотя алгоритм не сильно подвязан на язык текста. Для использования алгоритма для других языков нужно изменить алгоритмы обработки естественного языка. Алгоритм включает в себе две основных методов: кластеризация текста и классификация групп кластеров.

Разработка алгоритма кластеризации, который включают в себе последовательное применение алгоритмов лемматизации, токенизации, стоп-листниг, tf-idf, сингулярного разложение. Первые три метода относится к методу обработки естественного языка, данные методы можно изменить под язык обрабатываемого текста. Для нахождение кластерных групп используется алгоритм на основе метода DBSCAN и использование Евклидового расстояние для определения расстояние между объектами. При исследовании было доказано что точность кластеризации зависит от отношения количества кластеров к количеству объектов в одном кластере. Количество кластеров определяется радиусом каждого документа, а количество объектов в одном кластере определяется средним количеством общих объектов, в данном случае слов или терминов. Алгоритм кластеризации описанный в работе можно использовать не только для классификации групп, а и для других целей, таких как нахождение ассоциативных правил, нахождение групп документов, которые схожи по смысловому тексту и т.д.

В результате исследование, было предложено использование NoSQL базы данных, о именно OrinetDB, который поддерживает все 4 модели NoSQL. Данный тип базы данных очень хорошо подходит для хранения результатов алгоритма кластеризации, так как данный результат является не реляционным. Стоит отметить что OrientDB очень удобен для хранения, обработки и визуализации хранимых данных.

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

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru