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

The article describes and analyzes the main stages of production of folding cardboard boxes for various industries at the stage of design, analyzed CAD software products for the development of the drawing of the folding cardboard box.

Key words: cardboard packaging, folding cardboard boxes, packaging design, CAD packaging.

Davidov Ivan Borisovich, masters, svoryi@gmail. com, Russia, Tula, Tula State University

УДК 004.032.26; 004.424.62

ПРОГРАММНЫЙ КОМПЛЕКС ДЛЯ РЕШЕНИЯ ЗАДАЧ

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

РАССТОЯНИЯ

Е.П. Офицеров

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

Ключевые слова: Дифференцируемое редакционное расстояние, машинное обучение, символьная последовательность, CUDA, параллельные вычисления.

Задачи, связанные с применением методов машинного обучения для работы с символьными последовательностями (или строками), имеют большое прикладное значение в таких областях, как биоинформатика и обработка естественного языка. При этом строковые данные обладают рядом особенностей, которые отличают их от таких классических для машинного обучения объектов, как многомерные векторы или растровые изображения. К таким особенностям относятся переменная длина, а также тот факт, что естественной метрикой в пространстве строк является дискретное расстояние Левенштейна [1]. Вследствие этого многие классические задачи анализа данных (в частности, машинного обучения) на символьных последовательностях становятся вычислительно сложными (часто NP-сложными). Например, эффективный при работе с векторными данными в евклидовом пространстве алгоритм К-средних [2] крайне сложно применить для кластеризации наборов строк в силу сложности нахождения центроида. Ранее в работах [3, 4] была предложена новая метрика для сравнения символьных последовательностей - дифференцируемое редакционное расстояние (ДРР), которое позволяет решить проблему применимости К-средних к строковым данным.

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

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

Основной целью было создание удобного инструмента для применения различных методов машинного обучения, в том числе глубоких нейронных сетей, для обработки символьных последовательностей. В процессе разработки программного комплекса большое внимание было уделено интеграции с одним из популярных фреймворков для глубокого обучения. К таким фреймворкам относятся Python-пакеты Tensorflow [5], PyTorch [6] и Chaîner [7]. Помимо функционала для работы непосредственно с нейронными сетями, данные библиотеки предоставляют удобные инструменты для аналитического дифференцирования, решения задач оптимизации, а также параллельных вычислений на видеокарте. Для реализации была выбрана библиотека Chaîner. Основным преимуществом этого фреймворка является то, что в его основе лежит пакет Cupy [8], предназначенный для параллельных вычислений на графическом процессоре. Cupy позволяет переносить вычисления на видеокарту с использованием технологий CUDA [9] и CuDNN [10] с помощью простого синтаксиса, а также легко создавать собственные вычислительные ядра. Благодаря тому, что эти технологии позволяют параллельно обрабатывать большие массивы данных, они активно применятся для ускорения расчётов в глубоком обучении (Deep Learning).

Программный комплекс состоит из двух подключаемых модулей: chainer_edit_distance и seq_kmeans:

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

seq_kmeans содержит реализацию на базе фреймворка Chainer алгоритма кластеризации К-средних для строковых данных, описанного в работе [3].

Наиболее естественным способом сравнения двух строк различной длины является редакционное расстояние Левенштейна, которое определяется как минимальное количество вставок, замен и удалений символов, необходимых для преобразования одной строки в другую [1]. Эта метрика нашла большое применение в прикладных задачах, например, в проблемах биоинформатики, связанных со сравнением первичных последовательностей белков и нуклеиновых кислот [11]. Также метрика Левенштейна активно применяется в обработке естественного языка, например, в автоматической коррекции правописания [12].

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

В работе [3] (см. также [4]) был предложен новый подход для сравнения символьных последовательностей. В основе этого подхода лежит представление строк в виде кодовых матриц переменного размера. Каждой последовательности х = х1, х2,..., хЬ, символы которой принадлежат алфавиту О, ставится в соответствие матрица X размера Ьх | О |, строки которой содержат коды соответствующих символов последовательности х. Такое представление позволяет работать со строками как с непрерывными объектами. Кроме того, в работе [3] предлагается новая метрика для сравнения матричных представлений последовательностей, называемая дифференцируемым редакционным расстоянием (ДРР), которое является гладкой аппроксимацией оригинального расстояния Левенштейна между строками. ДРР определяется как экспоненциальное взвешенное среднее (¿о/Шш) количества односимвольных операций вставки, замены и удаления, преобразующих одну строку в другую (подробнее см. в [3]). При этом среднее берется по всевозможным таким преобразованиям (для сравнения в метрике Левенштейна вместо среднего используется минимум).

В основе алгоритма лежит заполнение двух вспомогательных матриц а и Д размера Ь1хЬ2, где Ь1 и Ь2 - длины строк х1 и х2 соответственно (см. [3]). Элементы аг] и Дч этих матриц последовательно вычисляются по следующим рекуррентным формулам:

а =(а-и+Д-1,у+а,;-1 +Д-1) е'+(а-и-1 +ДМ, ,-А,) ед-(а-1, + 2Д-и-1)е2т

I = 1, ц, 7 = 1, Ь

'2

а,0 = 1егг, I = 0, Ьх, а0,; = ]вТ1,7 = 0, Ь2,

Д,; = (Д-и + ДI,у-1) е' + Д-1.7-1 (ед - е2'), I = Щ, 7 = Щ,

Ь о = е', I = 0^, До,7 = е', 7 = 0^.

Здесь д 7 =—^ \Хц к - Х2]к | - Ь -расстояние между кодами соответствующих

2 k=1

символов входных последовательностей. После расчёта всех элементов аи и Д} дифференцируемое редакционное расстояние определяется как

ч аг г

d ( X!, X2 )=Д±.

ДЬ1,Ь2

Расчёт производных по элементам кодирующих матриц Х1 и Х2 также производится с помощью рекуррентных формул. Для их получения требуется продифференцировать соотношения (1) по советующим параметрам.

Для описанного выше алгоритма расчёта и соответствующих производных ДРР была разработана параллельная реализация (модуль chainer_edit_distance) с использованием CUDA.

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

Программный код описанных функций написан на языке Python с использованием библиотеки Cupy. Эта библиотека предоставляет удобный интерфейс для работы с технологией CUDA. Для хранения пакетов сравниваемых последовательностей и значений ц, /3ij используется класс

cupy.array. Данный класс позволяет работать с массивами данных произвольной размерности, расположенными в памяти видеокарты. Программный код вычислительного ядра создан с помощью интерфейса класса cupy.Elementewi se.

Как уже упоминалось, при создании программного комплекса важным требованием было обеспечить интеграцию разработанного решения со стандартными функционалом библиотеки Chainer. Базовыми объектами данного фреймворка являются классы Variable, Function, Link и Chain:

Variable - базовый класс представления данных в Chainer. Этот класс реализует абстракцию переменной в математическом смысле. Помимо значения, которое хранится в поле .data и представляет собой numpy или cupy массив, экземпляр класса Variable также содержит в историю вычислений, что позволяет осуществлять аналитическое дифференцирование.

Function - класс, реализующий интерфейс функции - базового типа, с помощью которого строится граф вычислений. Этот класс является вызываемым типом Python. Экземпляр класса Function (или любого его наследника) на входе получает набор значений типа Variable и на выходе возвращает новый экземпляр Variable с обновленным значением и графом вычислений.

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

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

Описанные в предыдущем разделе функции вычисления ДРР были реализованы с использованием интерфейсов классов Variable и Function в подключаемом модуле chainer_edit_distance. Это позволяет легко использовать предложенные расчетные модели вместе со стандартными инструментами библиотеки Chainer для написания нейронных сетей различной сложности, включая встроенные в Chainer методы оптимизации.

Код проекта доступен в Github [14]. Ниже приведен пример использования интерфейса модуля chainer_edit_distance:

1. from chainer import Variable

2. import chainer_edit_distance

3.

4. # определение алфавита и строк

5. alphabet = ['A', 'T', 'G', 'C']

6. x1 = ['ATGCCA', 'TCC']

7. x2 = ['TACGC', 'TCACGG']

8.

9. # ковертация строк в тензорное представление

10. x1 = chainer_edit_distance .parse_to_tensor

11. x2 = chainer_edit_distance.parse_to_tensor

16. # рассчет дифференциируемого редакционного расстояния

17. x1 = Variable

18. x2 = Variable

19. sed = chainer_edit_distance. soft_edit_distance

На рисунке приведена визуализация результатов кластеризации.

12.

13. # рассчет обычного расстояния Левенштейна

14. ed = chainer_edit_distance.edit_distance

15.

-ю

-5

0

5

10

Визуализация результатов применения алгоритма К-средних для кластеризации множества строк

374

На основе модуля chainer_edit_distance реализован алгоритм K-средних кластеризации последовательностей. Алгоритм был протестирован на синтетических данных. Исходный код скрипта для генерации данных и их последующей кластеризации также может быть найден в [14].

Список литературы

1. Левенштейн В.И. Двоичные коды с исправлением выпадений, вставок и замещений символов // Доклады Академии наук. Российская академия наук. 1965. Т. 163. №. 4. С. 845-848.

2. Jain A.K. Data clustering: 50 years beyond K-means // Pattern recognition letters. 2010. Т. 31. №. 8. С. 651-666.

3. Ofitserov E., Tsvetkov V., Nazarov V. Soft edit distance for differen-tiable comparison of symbolic sequences // arXiv preprint arXiv:1904.12562. 2019.

4. Офицеров Е.П. Классификация последовательностей на основе коротких мотивов // Чебышевский сборник. 2018. 19(1). С. 187-199.

5. Tensorflow: A system for large-scale machine learning / M. Abadi [et al.] // 12th Symposium on Operating Systems Design and Implementation. 2016. (16). P. 265-283.

6. Ketkar N. Introduction to pytorch // Deep learning with python. Apress. Berkeley. CA, 2017. P. 195-208.

7. Chainer: a next-generation open source framework for deep learning / Tokui S. [et al.] // Proceedings of workshop on machine learning systems (LearningSys) in the twenty-ninth annual conference on neural information processing systems (NIPS). 2015. Т. 5. С. 1-6.

8. Cupy / S. Tokui [et al.] 2019 [Электронный ресурс]. URL: http s: //cupy .chainer. org/ (дата обращения: 20.05.19).

9. NVIDIA CUDA software and GPU parallel computing architecture / D. Kirk [et al.] // ISMM. 2007. Т. 7. P. 103-104.

10. Cudnn: efficient primitives for deep learning / S. Chetlur [et al.] // arXiv preprint arXiv:1410.0759. 2014.

11. Ghodsi M., Liu B., Pop M. DNACLUST: accurate and efficient clustering of phylogenetic marker genes // BMC bioinformatics. 2011. Т. 12. №. 1. P. 271.

12. Okuda T., Tanaka E., Kasai T. A method for the correction of garbled words based on the Levenshtein metric // IEEE Transactions on Computers. 1976. Т. 100. №. 2. P. 172-178.

13. Wagner R.A., Fischer M.J. The string-to-string correction problem // Journal of the ACM (JACM). 1974. Т. 21. №. 1. P. 168-173.

14. Офицеров Е.П. Soft edit distance // GitHub 2019 [Электронный ресурс]. URL: https://github.com/JenEskimos/soft edit distance (дата обращения: 20.05.2019).

Офицеров Евгений Петрович, аспирант, eofitserov@gmail. com, Россия, Тула, Тульский государственный университет

SOFTWARE PACKAGE FOR SOLVING MACHINE LEARNING PROBLEMS ON STRING

DATA USING SOFT EDIT DISTANCE

E.P. Ofitserov

Details of the parallel implementation of algorithms for evaluating the soft edit distance and its gradient are given. The corresponding software package is written in Python and uses Nvidia Cuda technology for calculations on a graphics processor. In addition, the package contains functionality for integration with the Chainer framework and tools for processing string data by machine learning methods.

Key words: Soft edit distance, Machine Learning, symbolic sequences, CUDA, parallel computing.

Ofitserov Evgeniy Petrovich, postgraduate, eofitserovagmail. com, Russia, Tula, Tula State University

УДК 623.4.082.6; 519.63

ОБОСНОВАНИЕ КОНСТРУКЦИИ КУМУЛЯТИВНО-ФУГАСНОГО ЗАРЯДА ПОДВОДНОГО БОЕПРИПАСА

Н.А. Кудюков

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

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

Современный этап развития новейших технологий определяет в том числе совершенствование военно-морской техники и вооружения. Тенденция усиления взрывостойкости подводных лодок (ПЛ) и увеличения носимого ими оружия приводит к необходимости перехода на двухкорпусные конструкции, поиску новых конструкционных материалов и т.д. [1, 2] Несмотря на то, что подавляющее большинство зарубежных ПЛ, кроме китайских и некоторых европейских, являются однокорпусными [3], возможен отход от традиционной, например, для американского подводного кораблестроения, ориентации на однокорпусную ПЛ и переход к двухкорпусным конструкциям [2]. Таким образом, при разработке современных подводных боеприпасов необходимо оценивать эффективность их действия именно по двухкорпусным конструкциям ПЛ как более взрывостойким.

376