Объектно-ориентированная реализация обработки текста на основе алгоритма continuous bag of words

3. Микляев И.А., Черткова О.В. Синергетическое информационное пространство МУОРБД // Материалы V Международной научно-практической конференции "ОБЪЕКТНЫЕ СИСТЕМЫ - 2011" (Зимняя сессия) с. 67-72

4. Микляев И.А. Универсальные объектно-ориентированные базы данных на реляционной платформе: монография / Северный (Арктический) федеральный университет им. М.В. Ломоносова. — Архангельск: ИД САФУ, 2014. -226 с.

5. Микляев И.А., Черткова О.В. Инструментарий оптимизации работы системы управления объектно-реляционной базы данных// Объектные системы: материалы: Междунар. науч.-практ. конф, Ростов на/Д, 2012.С. 45-50.

УДК 004.8, 811

ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ РЕАЛИЗАЦИЯ ОБРАБОТКИ ТЕКСТА НА ОСНОВЕ АЛГОРИТМА CONTINUOUS BAG OF WORDS

Проскурин Артем Александрович, магистрант по направлению Прикладная информатика, студент,

РФ, Воронеж, sssssss1358@rambler.ru Авсеева Ольга Владимировна, кандидат технических наук, доцент кафедры информационных технологий моделирования и управления, ВГУИТ, olga-avseeva@mail.ru

Введение

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

Непосредственно алгоритм сontinuous-bag-of-word (CBOW) решает поставленную задачу путём размещения слов входного текстового корпуса внутри некоторого векторного пространства заданной размерности. В качестве результатов каждое слово будет иметь некоторые координаты внутри данного пространства. При этом "похожие" слова будут располагаться на малом расстоянии друг от друга, а "различные" слова - на большом расстоянии.

Особую популярность алгоритм CBOW вместе с continuous-skip-N-gram приобрел после создания командой Томаса Миколова из Google Inc группы методов обработки естественного текста под названием "Word2Vec". Данный проект, реализованный на Си, оказался столь эффективным по скорости вычислений, что обработка текстового корпуса размером в несколько миллионов слов могла быть произведена за разумное количество времени на центральном процессоре обычного персонального компьютера. Открытый исходный код проекта привлек множество разработчиков со всего мира, что в итоге привело к возникновению множества портов и оберток на различных языках программирования. Однако в общем случае логика Word2Vec оставалась неизменной, дабы не потерять скорость вычислений. При этом разработчики вынуждены отказаться от гибкости разработки и расширяемости функционала исходных алгоритмов. Альтернативным подходом является полноценная реализация алгоритмов с использованием всех преимуществ объектно-ориентированного программирования.

Само название «CBOW» происходит от «Bag-of-Words (BOW)», где добавка «continous» означает, что в основе своей используется уже не дискретная модель, а непрерывная. Как говорят сами авторы, CBOW получил свое название от BOW, потому что оба этих алгоритма игнорируют порядок слов в текстовом корпусе [1].

Рис. 1 - Схема обучения по модели CBOW

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

"Витя любит играть в лапту. Маша любит лапту тоже."

"Ещё Витя любит играть в компьютер."

могут быть представлены в виде следующих векторов: [1,2,1,1,2,1,1,0,0] - (1) [1,1,1,1,0,0,0,1,1] - (2) пространства:

[Витя, любит, играть, в, лапту, Маша, тоже, Ещё, компьютер]

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

1. Структуры и алгоритмы

Фактическим предком CBOW на самом деле является предыдущая модель команды Томаса Миколова NNLM (feedforward Neural Net Language Model), а не bag-of-words, как можно было подумать. NNLM - это модель, построенная на основе нейронной сети прямого распространения сигнала, состоящая из входного, проекции, скрытого и выходного слоёв. Вычислительная сложность обучения данной сети была слишком высокой, что подвигло её авторов исследовать модель с удаленным нелинейным скрытым слоем. Таким образом появилось две архитектуры, оказавшиеся наиболее эффективными в плане скорости вычислений: сontinious-bag-of-words и continuous-skip-N-gram. Обобщенная схема алгоритма обучения модели представлена на рисунке 1.

Модель CBOW предсказывает текущее слово на основе его контекста, а модель Skip-gram напротив, предсказывает контекст на основе слова [2]. Контекстом в данном случае называется окно из N слов, где N/2 находятся до рассматриваемого слова и N/2 - после.

2. Объектно-ориентированный подход

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

Рис. 2 - Диаграмма классов для CBOW с минимальным функционалом

49

Обе модели из проекта Word2Vec имеют на входе текстовый корпус, который просматривается через «окно» заданной длины. Обе модели оперируют с матрицей [количество слов в словаре x размерность результирующего вектора]. Таким образом, может быть определен интерфейс ILearnEngine, реализации которого будут вмещать в себя основную логику обучения модели. При этом стоит отметить, что такой подход не ограничивает никак методы обучения, ведь вся внутренняя структура доверяется классу, реализующему данный интерфейс [3].

Минимальной функциональности объектно-ориентированной версии CBOW соответствует диаграмма классов, представленная на рисунке 2.

После реализации соответствующих классов исходный код общего метода обучения модели выглядит следующим образом:

public void LearnText(string filename) {

TextCorpus text = new TextCorpus(filename);

Vocabulary vocabulary = Vocabulary.FromTextCorpus(text);

engine.InitModel(vocabulary.Size, VectorSize);

foreach(Sentnese s in text.Sentenses) {

engine.PrepareToLearnSentense(s); Window window = s.CurrentWindow;

do {

engine.LearnWord(window); } while (window.Move());

}

}

При этом главный метод в самой реализации CBOW также может быть представлен в объектной манере:

public void LearnWord(Window window) {

// in -> hidden

foreach (Word word in window.Words) {

int lastWord = window.GetWordlndex(word); neul = neul + syn0[lastWord];

}

// HIERARCHICAL SOFTMAX

foreach(int l2 in window.Target.Code) {

// Propagate hidden -> output float f = neul * syn1[l2]; // Propagate errors output -> hidden

neule = neule + CurrentGradient * syn1[l2]; // Learn weights hidden -> output synl[l2] = synl[l2] + CurrentGradient * neul;

}

// hidden -> in

foreach (Word word in window.Words) {

int lastWord = window.GetWordlndex(word); syn0[lastWord] = syn0[lastWord] + neule;

}

}

Заключение

Объектная манера написания кода порождает собой некоторые накладные расходы при выполнении программы: это и не необходимые с точки зрения оптимизации параметры, это и возврат объектов, вместо объявления их в глобальном контексте, это и косвенные обращения через свойства классов типа «get». Очевидно, что эта реализация будет уступать в скорости выполнения каноничному Си. Но и преимущества у данного порта также имеются. Во-первых, это, конечно же, читаемость кода. Даже человек не сведущий в основах данной модели, просто прочтя код какого-либо метода, может с легкостью понять его логику и включиться в разработку. Кроме того, имея единый интерфейс для алгоритмов обучения модели, можно вести их разработку независимыми командами. Разумеется, эти преимущества и недостатки присущи не только данному проекту, использующему ООП. Однако в силу того, что он далек от завершения, в данный момент нет возможности провести сравнительную оценку его скорости выполнения. Также, пока не реализован основной функционал, сложно заниматься исследованием других моделей обработки естественного текста. Всех этих целей планируется достичь в будущих работах.

Литература

1. Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space. ICLR Workshop, 2013.

2. Le, Quoc V. and Mikolov, Tomas. Distributed representations of sentences and documents. In International Conference on Machine Learning, 2014.

3. Владыкин А. Объектно-ориентированное программирование, 2009.

УДК 04.004

ПРИНЦИПЫ ОРГАНИЗАЦИИ ДОСТУПА К ИНФОРМАЦИИ В ИНФОРМАЦИОННЫХ СИСТЕМАХ НА ОСНОВЕ МУОРБД

Микляев Иван Александрович, к.ф.-м. н., доцент, Институт судостроения и морской арктической

техники (Севмашвтуз) Северного (Арктического) федерального университета имени М. В.

Ломоносова, Россия, Северодвинск, ivanmia1@rambler.ru

Гусак Евгений Витальевич, студент, Институт судостроения и морской арктической техники

(Севмашвтуз) Северного (Арктического) федерального университета имени М. В. Ломоносова,

Россия, Северодвинск, Alphaplayer@yandex.ru

Введение

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

В [1] приводятся определения идентификации и аутентификации.

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