Ранее мы поговорили о двух открытых библиотеках — для обучения байесовских сетей и идентификации структуры данных, плюс — рассказали о фреймворке для AutoML и библиотеке алгоритмов выбора признаков. Сегодня обсуждаем еще один инструмент, над которым работают представители Университета ИТМО.
Как вы уже поняли по заголовку, это — MetaFast. Его развитием занимаются в МНЦ «Компьютерные технологии». Отметим ключевые задачи и целевую аудиторию этого программного средства, коротко пройдем по основным компонентам, поделимся опытом практического использования и планами по улучшению.
Где его используют
Микроорганизмы, такие как бактерии, вирусы и археи, играют незаменимую роль в различных экосистемах и, конечно же, участвуют в обмене веществ. Их изучением занимается метагеномика. Это — специальный раздел молекулярной генетики, сфокусированный на сообществах микроорганизмов из различных ниш окружающей среды: водоемов, почвы, кожных покровов и даже кишечника человека. Понимание механизмов функционирования таких сообществ и определенных взаимосвязей помогает диагностировать и лечить различные заболевания, бороться с загрязнением водоемов и защищать их обитателей, формировать благоприятные условия для сельскохозяйственной деятельности и решать другие практические задачи.
Получить развернутые генетические данные об образцах позволяет метагеномное секвенирование, а по его результатам проводят сравнительный анализ. Он часто опирается на классические признаки [например, определенные виды бактерий или биологические функции], выделение которых является ресурсоемкой задачей. Здесь вступает в игру наш 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 проекты в нашем блоге на Хабре:
Библиотеки для обучения байесовских сетей и идентификации структуры данных
Фреймворк для AutoML и библиотека алгоритмов выбора признаков
WildLynxDev
Ах, какой комп у чувака с КПДВ!
Я полностью негоден к DIY, но аж задумался.