Ранее мы поговорили о двух открытых библиотеках — для обучения байесовских сетей и идентификации структуры данных, плюс — рассказали о фреймворке для AutoML и библиотеке алгоритмов выбора признаков. Сегодня обсуждаем еще один инструмент, над которым работают представители Университета ИТМО.

Как вы уже поняли по заголовку, это — MetaFast. Его развитием занимаются в МНЦ «Компьютерные технологии». Отметим ключевые задачи и целевую аудиторию этого программного средства, коротко пройдем по основным компонентам, поделимся опытом практического использования и планами по улучшению.

Фотография: National Cancer Institute. Источник: Unsplash.com
Фотография: National Cancer Institute. Источник: Unsplash.com

Где его используют

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

Получить развернутые генетические данные об образцах позволяет метагеномное секвенирование, а по его результатам проводят сравнительный анализ. Он часто опирается на классические признаки [например, определенные виды бактерий или биологические функции], выделение которых является ресурсоемкой задачей. Здесь вступает в игру наш MetaFast [METAgenome FAST analysis toolkit]. Он позволяет эффективно и достаточно точно проводить сравнение образцов путем извлечения признаков из данных метагеномного секвенирования.

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

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

Что «под капотом»

Секвенирование позволяет получить информацию о ДНК в виде коротких буквенных строк, в которых записана генетически наследуемая информация. На их основе осуществляют построение графа де Брейна [классический метод обработки метагеномных данных]. Затем извлекают участки генома, соответствующие отдельным микроорганизмам. MetaFast использует аналогичный метод, но строит граф де Брейна сразу для всех исследуемых метагеномных образцов и производит разбивку на компоненты, которые не обязательно соответствуют отдельным организмам. Так, из данных секвенирования можно извлечь признаки, наиболее полезные для сравнительного анализа, используя меньший объем вычислительных ресурсов по сравнению с подходами, основанными на геномных сборщиках.

Сравнение метагеномных образцов производят с помощью метрики несходства Брея-Кёртиса. Реализация вычисления — приведена далее. Функция выдает численное значение схожести двух метагеномов в диапазоне от 0 до 1, где 0 показывает абсолютное сходство метагеномов, а 1 означает полное различие.

private double brayCurtisDistance(List<Double> vector1, List<Double> vector2) {
    assert vector1.size() == vector2.size();

    double sumdiff = 0, sum = 0;

    for (int pos = 0; pos < vector1.size(); pos++) {
        sumdiff += Math.abs(vector1.get(pos) - vector2.get(pos));
        sum += Math.abs(vector1.get(pos)) + Math.abs(vector2.get(pos));
    }

    assert sum > 0;
    return sumdiff / sum;
}

Практический опыт

Если говорить о первых публичных результатах применения нашего инструмента, стоит отметить статью в журнале Bioinformatics. В ней мы описали, каким образом были проанализированы микробные сообщества кишечника человека, микроорганизмы из «подземки» Нью-Йорка и вирусные сообщества озер.

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

Еще данный алгоритм был взят за основу для решения задачи метагеномной диагностики воспалительных заболеваний кишечника в международном соревновании MEDIC. За счет точечных модификаций алгоритма получилось добиться высокоточной диагностики на основе данных секвенирования микробиоты кишечника и одержать победу. Можно сказать, что это — один из первых шагов на пути внедрения инструментов вроде MetaFast в системы поддержки принятия решений и диагностировании заболеваний в медицинских организациях.

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

function UniqueKmersFinder(positiveFiles, negativeFiles, value):
    hashmap<kmer, count> positiveKmers = loadKmers(positiveFiles)
    hashmap<kmer, count> negativeKmers = loadKmers(negativeFiles)
    
    for kmer in positiveKmers:
        if kmer in negativeKmers:
            positiveKmers.erase(kmer)

    for kmer in positiveKmers:
        if positiveKmers[kmer] > value:
            save(kmer)

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

P.S. Команда MetaFast состоит из руководителя проекта Владимира Ульянцева ulyantsev [@] itmo.ru и программиста Артема Иванова abivanov [@] itmo.ru. Коллеги открыты к предложениям по улучшению алгоритмов и новым знакомствам.


Другие open source проекты в нашем блоге на Хабре:


Комментарии (1)


  1. WildLynxDev
    29.07.2021 00:45
    -2

    Ах, какой комп у чувака с КПДВ!

    Я полностью негоден к DIY, но аж задумался.