ケモインフォマティクス基礎入門 第2章:分子のデジタル表現
はじめに
分子は目に見えない微視的な存在ですが、ケモインフォマティクスの世界では「分子をデータとして扱う」ことが出発点になります。
化合物の構造や性質をコンピュータ上で表現する方法はいくつか存在し、その選び方によって分析や機械学習モデルの性能も大きく変わります。
本章では、ケモインフォマティクスで広く使われる分子のデジタル表現方法について解説します。
SMILES と InChI の基礎
SMILES(Simplified Molecular Input Line Entry System)
SMILESは、分子構造をテキスト文字列で表現する方法です。
たとえば、エタノール(C₂H₅OH)は次のように書けます:
CCO
この短い文字列の中に、炭素原子(C)が2つ連なり、その末端に酸素原子(O)がついているという構造情報が含まれています。
SMILESは軽量で可読性が高いため、化学データベースや機械学習モデルの入力として最も広く使われています。
InChI(IUPAC International Chemical Identifier)
InChIは、国際純正・応用化学連合(IUPAC)が策定した標準化フォーマットです。
SMILESと比べてやや冗長ですが、構造の唯一性(canonical representation)を重視しています。
例:エタノールの InChI は以下の通りです。
InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3
SMILESが「人間に読みやすい略記法」なのに対して、InChIは「機械による識別・再現性」を目的とした表現と言えます。
実務では、SMILESでデータ管理、InChIで同一性確認といった使い分けがよく行われます。
2D・3D 構造表現
2D構造
化学構造式でおなじみの「平面上の結合関係」を表すものです。
分子中の原子の結合パターンをグラフとして表現し、分子の基本構造を理解する上で有用です。
ケモインフォマティクスでは、この2D情報から記述子やフィンガープリントを生成します。
3D構造
実際の分子は三次元的な形状を持っています。
立体構造(3D座標)は、ドッキング解析や分子動力学シミュレーションなどに不可欠です。
同じ分子式でも立体異性体によって性質が大きく異なるため、構造最適化(conformer generation)が重要になります。
グラフ表現と数値化(Adjacency Matrix など)
分子は、「原子をノード」「結合をエッジ」とするグラフ構造として扱うことができます。
このとき、分子の構造は次のような数学的表現に変換されます。
- 隣接行列(Adjacency Matrix)
各要素 AijA_{ij}Aij が「原子iと原子jが結合しているか」を示す行列。
例えば、3つの原子が直線的に結合している分子なら:

- 特徴行列(Feature Matrix)
各原子の性質(原子番号、価電子数、電気陰性度など)をベクトル化したもの。
機械学習モデル(特にGCNなど)では、この行列が入力として利用されます。
この「グラフ表現」は、近年のGraph Neural Network (GNN) 系モデルの基盤となっており、構造情報を直接学習する上で極めて重要です。
RDKitで分子を扱う実例
Pythonのオープンソースライブラリ「RDKit」を使えば、SMILESから構造を生成し、グラフ情報を取得できます。
from rdkit import Chem
from rdkit.Chem import Draw
import numpy as np
# 分子をSMILESから読み込み
mol = Chem.MolFromSmiles("CCO")
# 2D構造を描画
img = Draw.MolToImage(mol)
img.show()
# 隣接行列の取得
adj = Chem.GetAdjacencyMatrix(mol)
print(np.array(adj))
出力例:
[[0 1 0]
[1 0 1]
[0 1 0]]
このように、分子構造を数値化することで、機械学習モデルの入力として利用できるようになります。
まとめ
- SMILES は簡潔で広く使われる文字列表現
- InChI は標準化された識別子で、化合物の同一性確認に有効
- 2D構造 は結合関係、3D構造 は空間的配置を表す
- グラフ表現 により、分子を数学的に扱えるようになり、GNNなどのAIモデルに活用できる