機械学習/深層学習を用いた生物配列解析

この記事は[バイオインフォマティクス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/bioinfo)（13日目）に登録されています。

# どういう記事か
　AlphaFold2によるタンパク質立体構造予測や、[Enformer](https://qiita.com/Yh_Taguchi/items/5cc86cf1839eeb9be1fb)による遺伝子発現予測など、ここ数年でバイオインフォマティクス分野が急速に活発化しているのを感じています。「生物×情報科学って面白そう！」という方も、増えてきているのではないでしょうか。

　この記事では下記の方々を対象として、最近の生物配列解析について軽く解説したいと思います。
　1. 生物に馴染みの無い情報工学分野出身の方
　2. 機械学習/深層学習に馴染みの無いウェット系ラボ出身の方
　3. その他のバイオインフォマティクスに興味がある全ての方

# 1. Sequence
　生体の最も基本的な構成要素は、脂質・タンパク質・糖・核酸（DNA/RNA）等の生体分子です。膨大な種類の生体分子の、様々な機能によって、あらゆる生命活動が行われています。
　遺伝子は核酸（≒塩基）が繋がってできたものなので、**塩基配列**という文字列で表記できます。遺伝子を「翻訳」することでできるタンパク質も、アミノ酸が繋がったペプチド鎖が折り畳まってできたものなので、**アミノ酸配列**という文字列で表記できます。

[核酸配列とその高次構造](https://en.wikipedia.org/wiki/Nucleic_acid_structure)
![DNA_RNA_structure_(full).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/682f8199-eb43-4c0c-a2e3-3062e319a1f5.png)

[アミノ酸配列とタンパク質の高次構造](https://en.wikipedia.org/wiki/Protein_structure)
![368px-Protein_structure_(full).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/c9e21b9a-d1ca-b58b-5134-44174587391f.png)

　タンパク質はペプチド鎖が植物のツタのようにクルクル丸まってできた巨大分子です。その性質として、特定の低分子と好んで結合する**「鍵と鍵穴の関係」**や、レゴブロックの組み立てのような**「高次構造形成」**が知られています。これらは、タンパク質の複雑な立体構造によるものです。このような現象により、まるでピタゴラスイッチのように、特定のタイミングで特定の機能を有するタンパク質が活性化/不活性化され、生命活動の信号となります。
　このような事情があって、タンパク質の機能、機能を決定付ける立体構造、立体構造を形作るアミノ酸配列、アミノ酸配列を指定するDNA配列、等をつぶさに調べれば、生命現象を理解することができるのではないか？　という考えが生まれたのだと思います。

# 2. Alignment
　配列解析の基本的なアルゴリズムのことで、アラインメント（あるいは単にアライメント）と読みます。複数の配列を一行の文字列として並べたときに、似ている配列パターンを重ね合わせるように整列させる操作です。

[アミノ酸配列のアラインメント](https://en.wikipedia.org/wiki/Sequence_alignment)
![Histone_Alignment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/2d44a638-5b13-6a63-8d47-53e54016df8f.png)
　突然変異によりDNA/アミノ酸の欠失や挿入が起こると、配列に違いが生じます。逆に言えば、異なる配列を比較したときに、同一の進化的起源を持つ配列パターンを特定することができます。このような配列パターン（**モチーフ**）は「進化的に保存」されており、生存や子孫繁栄に有利な機能を持つことが期待できます。また、突然変異の蓄積率を算出することで、元の配列がどのように進化の枝分かれを辿って行ったのかを調べることができます（**分子系統解析**）。
　あるいは、構造的特徴そのものが機能に重要であることもあります。そうした場合は、配列が多く置換されていても立体構造が類似することがあります。実際に、一般に配列の保存性よりも構造の保存性が高いことがよく知られています。

# 3. Sequence Embedding
　生物配列解析の王道は分子系統解析なのですが、本稿では、機械学習/深層学習を用いた生物配列解析について深堀していきたいと思います。

　生物配列を機械に読み込ませるためには、文字列を何らかのベクトル表現に変換する必要があります (**embedding**)。AlphaFold2はアミノ酸配列を入力として立体構造を予測する深層学習モデルでした。ベクトル化のために配列の**one-hot encoding**を行い、文字列をバイナリ行列に変換しています[^1]。
[^1]: 実際的には、進化的に保存された構造を抽出しやすくするために、アミノ酸残基の変異出現頻度を示すposition-specific score matrix (PSSM) という行列表現を用いた学習を行っています。
　ただ、単なるバイナリ行列からは生物学的意味が掬い取りづらいため、PSSM、Word2Vecにおける**単語埋め込み**のようなベクトル表現、ケモインフォマティクス分野における**グラフ表現**や**記述子生成**、等の手法を用いるのが一般的なようです。

## 3.1 Protein Language Model（タンパク質言語モデル）

> _Arguably, proteins are the most important machinery of life. Protein sequence largely determines protein structure, which somehow determines protein function. Thus, the expression of the language of life are essentially protein sequences._[^2]

[^2]: Heinzinger, M., Elnaggar, A., Wang, Y. _et al_. Modeling aspects of the language of life through transfer-learning protein sequences. _BMC Bioinformatics_, **20**, 723 (2019). https://doi.org/10.1186/s12859-019-3220-8
　配列は文字列であること、高次構造を形成することを述べました。極端な見方をすると、DNAやタンパク質は「文・単語・イディオム・文章」という階層構造を持った自然言語と類似した性質を持つとも言えます。このような考えから生まれたのが**タンパク質言語モデル**です[^3]。
[^3]: Hie B, Zhong ED, Berger B, Bryson B. Learning the language of viral evolution and escape. _Science_, **15**, 371(6526):284-288 (2021). doi: 10.1126/science.abd7331.　[『人間の言語から構築したAIモデルが、「ウイルスの変異」も予測する』 by WIRED](https://wired.jp/2021/03/16/can-an-ai-predict-the-language-of-viral-mutation/).　

　最も有名なタンパク質言語モデルの一つが、[Tasks Assessing Protein Embeddings（TAPE）](https://github.com/songlab-cal/tape)です[^4]。TAPEでは、5つの深層学習モデルを用いて5つのタンパク質物性予測タスクのベンチマークを行っています[^5]。自然言語深層学習の急速な発展に伴って研究が進んでいる分野で、今年10月には[ProteinBERT](https://github.com/nadavbra/protein_bert)というTAPEを拡張したモデルも発表されました[^6]。ここら辺の動向は木原先生([@d_kihara](https://twitter.com/d_kihara))らの[総説](https://arxiv.org/abs/2110.07609)がよくまとまっているので、詳細に知りたい方はご参考ください。
[^4]: Rao R, Bhattacharya N, Thomas N, _et al_. Evaluating Protein Transfer Learning with TAPE. _Adv Neural Inf Process Syst_, **32**, 9689-9701 (2019). https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7774645/
[^5]: モデルは、LSTM、bidirectional LSTM、unidirectional mLSTM、ResNet、Transformer。構造関連の予測として3つ（二次構造予測、アミノ酸残基間相互作用予測、遠縁関係にあるタンパク質の予測）。機能関連の予測として2つ（点変異による緑色蛍光タンパク質GFPの蛍光強度変化の予測、点変異による熱安定性変化の予測）。
[^6]: 新規タスクが5つ加えられ、モデルが軽量化されました。また、GOという配列に対する生物学的アノテーションで事前学習を行っている特徴があります。
　
　こうした深層学習モデルの特徴は、膨大なデータでタンパク質物性を事前学習していることです。概して生化学実験が律速になりがちのバイオインフォマティクス分野において、少数サンプルで高い精度のタンパク質機能予測が可能であるという報告がされています[^7]。
[^7]: Biswas, S., Khimulya, G., Alley, E.C. _et al_. Low-N protein engineering with data-efficient deep learning. _Nat Methods_, **18**, 389–396 (2021). https://doi.org/10.1038/s41592-021-01100-y
　
　タンパク質言語モデルライブラリに簡易にアクセスできるライブラリとして[Bio Embeddings](https://github.com/sacdallago/bio_embeddings)[^8]があり、pipで簡単にインストールできます。

```
pip install bio-embeddings[all]
```

[^8]: Dallago, C., Schütze, K., Heinzinger, M., Olenyi, T., Littmann, M., Lu, A. X., Yang, K. K., Min, S., Yoon, S., Morton, J. T., & Rost, B. Learned embeddings from deep learning to visualize and predict protein sets. _Current Protocols_, **1**, e113 (2021). doi: 10.1002/cpz1.113

　使用可能なモデルは以下の12個です。

- [Fastext](https://github.com/facebookresearch/fastText#references)
- [Glove](https://nlp.stanford.edu/pubs/glove.pdf)
- [Word2Vec](https://arxiv.org/pdf/1301.3781)
- [SeqVec](https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-3220-8)
- [ProtTrans (ProtBert, ProtAlbert, ProtT5)](https://doi.org/10.1101/2020.07.12.199554)
- [UniRep](https://www.nature.com/articles/s41592-019-0598-1)
- [ESM/ESM1b](https://www.biorxiv.org/content/10.1101/622803v3)
- [PLUS] (https://github.com/mswzeus/PLUS/)
- [CPCProt] (https://www.biorxiv.org/content/10.1101/2020.09.04.283929v1.full.pdf)
- [PB-Tucker] (https://www.biorxiv.org/content/10.1101/2021.01.21.427551v1)
- [GoPredSim] (https://www.nature.com/articles/s41598-020-80786-0)
- [DeepBlast] (https://www.biorxiv.org/content/10.1101/2020.11.03.365932v1)

　使い方はこんな感じで、とても使いやすそうです。継続的なアップデートに期待。

```python
from bio_embeddings.embed import SeqVecEmbedder
embedder = SeqVecEmbedder()
embedding = embedder.embed("SEQVENCE")
print(embedding.shape)
#(3, 8, 1024)
```

## 3.2 Sequence Descriptor (配列記述子)
　上記タンパク質言語モデルの他に、組成や物性から特徴量（sequence descriptor）を計算する古くからある方法も活用されています。アミノ酸記述子[^9]としては、[AAIndex](https://www.genome.jp/aaindex/)[^10]が有名です。
　AAindexはアミノ酸およびアミノ酸の組を物理化学的・生化学的な記述子に変換するためのデータベースで、日本のバイオインフォマティクス研究の大御所、[金久實先生](https://www.kanehisa.jp/ja/kanehisa_ja.html)の研究成果です。データは全て公開文献に由来していて、現在までに566個のアミノ酸記述子、94個の置換マトリクス(BLOSUM62等)、47個のタンパク質接触ポテンシャルが公開されています。
　
　ケモインフォマティクス分野では、化合物の物理化学的性質を計算することができる[RDKit](https://rdkit.org/docs_jp/index.html)というソフトウェアを用いることで、化合物データセットをいわゆるテーブルデータと呼ばれる構造化データに変換することができます。これにより、[タイタニックの生存者予測](https://www.kaggle.com/c/titanictcilearn/data)と同じような機械学習を行うことができます。同様にアミノ酸記述子を用いることで、配列/アミノ酸から構造化データを生成してタンパク質の物性予測モデルを作ることができます。

[^9]: 造語です。Google翻訳で4件しかヒットしなかったのですが、amino acid descriptorsだと5000件くらいヒットしたので、未翻訳なだけかも。
[^10]: Nakai, K., Kidera, A., and Kanehisa, M. Cluster analysis of amino acid indices for prediction of protein structure and function. _Protein Eng_, **2**, 93-100 (1988).

　配列記述子を計算するソフトウェアは急激に増えてきている段階で、まだRDKitや[Mordred](https://github.com/mordred-descriptor/mordred)[^11]のような信頼性のある整備されたものはほとんどないように思います。ただ、その中でも使いやすそうだなと個人的に感じたのは[**iLearnPlus**](https://github.com/Superzchen/iLearnPlus)[^12]です。

　iLearnPlusはGUIベースで配列記述子を生成できるpythonライブラリです。配列ファイル（FASTA形式）を開いた後は、記述子生成から機械学習モデル作成まで一気通貫で実行することができます。インストール方法も簡単で、python3.6以降のいくつか依存パッケージが入った適当なconda環境を用意して、下記コマンドを実行するだけです。

```
iLearnPlus$ python iLearnPlus.py
```

　
　操作画面はこんな感じ。う～～ん、便利すぎる。　
![Basic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/2f158bc3-2f9f-c90a-3d98-f6dd07c0d9d3.png)
![Basic1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/70630750-3866-7552-84d3-279d4a063a7b.png)
![Basic2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/1a40932b-873e-2260-717b-217c6d29c709.png)


　もちろん、生物配列であるDNA、RNA、アミノ酸どれでも使用可能です。
　今年11月には、さらに発展的な記述子として数学的な変換を施した配列記述子[**MathFeature**](https://bonidia.github.io/MathFeature/)[^13]も提案されています。

> [元論文](https://academic.oup.com/bib/advance-article/doi/10.1093/bib/bbab434/6423525) Figure1より引用
![Figure.pptx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693430/51ed930e-deea-c1cb-a8be-e64658527730.png)

[^11]: Moriwaki, H., Tian, YS., Kawashita, N. _et al_. Mordred: a molecular descriptor calculator. _J Cheminform_ **10**, 4 (2018). https://doi.org/10.1186/s13321-018-0258-y
[^12]: Zhen Chen, Pei Zhao, Chen Li, Fuyi Li, Dongxu Xiang, Yong-Zi Chen, Tatsuya Akutsu, Roger J Daly, Geoffrey I Webb, Quanzhi Zhao*, Lukasz Kurgan*, Jiangning Song*, iLearnPlus: a comprehensive and automated machine-learning platform for nucleic acid and protein sequence analysis, prediction and visualization. _Nucleic Acids Research_, gkab122, (2021).  https://doi.org/10.1093/nar/gkab122
[^13]: Robson P Bonidia, Douglas S Domingues, Danilo S Sanches, André C P L F de Carvalho, MathFeature: feature extraction package for DNA, RNA and protein sequences based on mathematical descriptors. _Briefings in Bioinformatics_, bbab434, (2021). https://doi.org/10.1093/bib/bbab434

# まとめ
　機械学習/深層学習を適用する形で、生物配列解析も日進月歩で進化しています。巨大データベースの強みを生かした深層学習モデルだけが脚光を浴びるのではなく、古典的な配列記述子による解析も再評価・再注目されつつあるように感じます。参考文献のほとんどは2、3年以内に発表された論文で、改めて驚きました。そして思った以上に、簡単に色々な解析ができそうだと感じました。機会があればこれらのライブラリの詳細な使い方などを改めて紹介してみたいです。

　最後までお読みいただき、ありがとうございました。これを読んだあなたはもうバイオインフォマティシャン！　一緒にこの分野を盛り上げていきませんか？