728x90

 SELFIES는 self-referencing embedded strings의 줄임말로, SMILES, DeepSMILES가 가지고 있던 invalid 문제를 완벽하게 해결한, 분자 구조를 string 형태로 표현하는 방법이다. 이번 글에서는 SELFIES가 무엇인지에 대해 알아보겠다.

* 이 글은 SMILES에 대한 기본적인 이해가 있다고 가정한다.

Motivation

 SELFIES가 가지는 가장 큰 특징은 모든 SELFIES string이 100% valid한 molecule을 만들어낼 수 있다는 점이다. SMILES, DeepSMILES는 ring, branch의 표기법에서 오는 문제들 때문에 invalid한 molecule을 만들어내는 경우가 많았지만, SELFIES는 어떤 random한 string을 만들어내더라도 모두 valid한 molecule을 만들어낼 수 있다는 강력한 장점을 가진다.

Components

Atoms & bonds

 SELFIES의 원자와 결합은 결합+원자가 하나의 대괄호 안에 포함된 [결합+원자] 형태로 표현된다. 다른 규칙들은 SMILES와 동일하다. 예를 들어, 다음 그림과 같이 SMILES에서 CN=C=O 형태로 표현되는 methyl isocyanate 분자가 있다고 했을 때, 이를 SELFIES로 표현하면 [C][N][=C][=O]가 된다.

SELFIES의 원자와 결합

Rings & aromaticity

 고리 형태의 ring과 aromaticity는 [Ring]이라는 문자 뒤에 ring bond의 위치를 나타내는 index symbol을 더한 형태로 표현된다. 여기서 index symbol은 어떤 원자의 형태를 보이지만, 실제로는 해당 원자가 아닌 숫자를 의미한다. Index symbol은 [ring] 표시 혹은 [branch] 표시 바로 뒤에 오는 원자들을 말하고, 각 index symbol은 다음과 같이 숫자에 매핑된다.

SELFIES의 index symbol

즉, [Ring]Q는 현재의 원자가 $(i_Q+1)$개 앞의 원자와 ring bond로 이어져있다는 의미이다. 문장으로는 직관적으로 와닿지 않으니 예시와 함께 살펴보겠다. 다음 그림을 보자.

예시 분자와 이에 해당하는 SELFIES

예를 들어, 우리가 지금 분홍색 [Ring][#N]이 어디에 어떤 원자가 이어져 있다는 것을 표시하는 것인지를 알고 싶다고 하자. 해당 ring의 현재 원자는 [Ring] 표시 바로 앞에 있는, 자주색 하트의 [=C]이다. 이 ring 표시는 뒤에 [#N]이라는 index symbol을 가지고 있기 때문에, 이에 해당하는 숫자 ($i_Q$)는 4이고, 그러므로 5개 앞의 원자와 연결되어야 한다. 이는 branch 표시들과 index symbol을 제외하고, C, =C, C, =C를 거쳐 다섯 번째 원자인 C에 연결된다. 즉, 이는 분자에서 분홍색 하트의 C와 연결되는 것이다. 

 이를 통해 우리는 SMILES에서 사용되던 숫자 형태의 ring label을 없앰으로써 숫자 pair가 안 맞아서 invalid한 분자를 만들어내는 등의 문제를 해결할 수 있다.

Branches

 Branch는 [Branch1/2/3]이라는 문자 뒤에 branch의 길이를 나타내는 index symbol을 더한 형태로 표현된다. 즉, [Branch]Q는 현재의 브랜치 안에 $i_Q$개의 뒤에 오는 원자들이 포함된다는 의미이다. 다시 위에서 살펴봤던 분자를 보자.

예시 분자와 이에 해당하는 SELFIES

 예를 들어, 우리가 지금 주황색 [Branch][$\epsilon$]을 살펴 본다고 하자. Index symbol [$\epsilon$]은 길이 1을 의미하기 때문에, 바로 다음에 오는 C만이 해당 branch에 포함될 것이다. 

 이를 통해 우리는 SMILES에서 사용되던 괄호 형태의 branch를 없앰으로써 괄호 pair가 안 맞아서 invalid한 분자를 만들어내는 등의 문제를 해결할 수 있다.

Generation

 위의 규칙에 따라서 우리는 SELFIES를 SMILES와 비슷한 방식으로 만들 수 있다. 예를 들어, 다음과 같은 분자가 있다고 하자.

예시 븐자

1. 분자로부터 수소를 제거한다.

2. Ring들을 찾아 ring bond를 하나씩 제거한다. 이 때, SMILES와는 달리 각 ring에 번호를 매기지는 않는다.

Ring bond를 제거한 분자

3. 특정 시작 원자를 정하고, 그 원자로부터 DFS 방식으로 SELFIES string을 만든다. 이 때, branch를 만나면 [Branch] symbol을 더하고, 이 branch 길이에 해당하는 index symbol을 추가한다. 또한 ring을 만나면 [Ring] symbol을 더하고 location 정보에 해당하는 index symbol을 더한다.

DFS 과정을 거친 분자

4. SELFIES를 도출한다.

도출된 SELFIES string

SELFIES to SMILES

 이러한 SELFIES string을 우리는 SMILES string으로 변환할 수 있다. 이는 다음과 같은 derivation rule을 따른다.

Derivation rule

 $X_0$라는 state에서 시작해서, 다음에 오는 string에 따라서 string을 만들어내는 형태이다. 위 식에서 $B(Q, X_n)$은 다음 Q개의 symbol들이 branch에 포함되는 것을 의미하고, $R(Q)$는 현재의 atom이 Q+1개 앞의 원자에 연결되는 것을 의미한다. 그리고 ign은 다음에 오는 character를 무시하라는 의미로, index symbol을 뜻한다. 예를 들어, [F][=C][=C][#N]라는 SELFIES string이 있다고 하자. 이는 다음과 같은 과정을 통해 SMILES string으로 변환될 수 있다.

SELFIES에서 SMILES로 변환되는 과정

 $X_0$라는 state에서 시작해서, 다음에 오는 string은 [F]이다. 그러므로 아래 그림에서 노랗게 표시된 $(X_0, [F])$에 따라 $FX_1$을 만들어낸다. 현재의 state가 $X_1$이고 다음 string이 [=C]이므로 $CX_3$을 만들어낸다. 이러한 과정을 거쳐서 SELFIES는 SMILES로 변환된다.

이러한 derivation rule을 따름으로써 validity를 항상 보장할 수 있는데, 이는 위의 derivation rule이 화학적으로 불가능한 결합은 generate할 수 없게 막아놓았기 때문이다. 만약 더 많은 분자들을 만들어내고 싶다면 적절한 derivation rule을 추가하면 된다.

 이러한 방법을 통해 SELFIES는 완전히 valid한 분자에 해당하는 string만을 도출하여 항상 100%의 valdity를 달성할 수 있다. 이번 글에서는 SMILES, DeepSMILES에 이어 마지막 string representation 방법인 SELFIES가 무엇인지에 대해 알아보았다. 

 

References

Krenn, M., Häse, F., Nigam, A., Friederich, P., & Aspuru-Guzik, A. (2020). Self-referencing embedded strings (SELFIES): A 100% robust molecular string representation. Machine Learning: Science and Technology, 1(4), 045024.

300x250
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기