概要
SELFIES(Self-Referencing Embedded Strings)は、分子グラフを記号の列として表現します。この Python ライブラリは、特に構文的にも意味的にも有効なグラフ表現を必要とする生成ワークフローなど、分子機械学習を支援することを目的としています。提供するのは表現および変換関数であり、単独で動作する学習済み生成モデルではありません。リポジトリには変分オートエンコーダの例へのリンクもあります。
主な変換ワークフローでは、selfies.encoder に SMILES 文字列を渡し、SELFIES 文字列を生成します。selfies.decoder は SELFIES を SMILES に変換します。補助関数では、記号の数え上げや分割、SELFIES 文字列の集合からのアルファベット導出、文字列と整数ラベルまたは one-hot エンコーディングとの相互変換が可能です。ドキュメントに記載されたパディング記号 [nop] はデコード時にスキップされるため、分子情報を追加せずに系列をパディングできます。
記号の解釈は意味制約によって決まります。ユーザーはこれらの制約を変更でき、超原子価の設定も選択できます。README では、同じエンコード済み入力でも、制約の設定によって異なる構造にデコードされる例が示されています。また、エンコードとデコードの両方で、出力 token とその生成に寄与した入力 token を対応付ける変換アトリビューション機能も利用できます。
README では、堅牢な記号アルファベットを使った分子のランダム生成を例示していますが、そのような出力には追加のフィルタリングが必要となる場合があるとも述べています。したがって、表現としての妥当性を化学的安定性や用途への適合性と同一視すべきではありません。超原子価の例では、こうした分子の多くについて、安定性や妥当性が依然として不確かであると特に注意を促しています。推奨される下流評価では、変換だけを科学的検証とみなすのではなく、明示的に記録した制約の下でデコード後の構造を調べてください。
主な機能
- `selfies.encoder` と `selfies.decoder` による SMILES と SELFIES 間の双方向変換。
- `selfies.set_semantic_constraints` による設定可能な意味制約。ドキュメントには超原子価の設定が記載されています。
- `selfies.len_selfies`、`selfies.split_selfies`、`selfies.get_alphabet_from_selfies` を用いた記号の数え上げ、tokenization、データセットからのアルファベット構築。
- SELFIES 文字列と整数ラベルまたは one-hot エンコーディング間の変換。デコーダーが無視する `[nop]` 記号によるパディングにも対応します。
- ドキュメントに記載されたランダム生成ワークフロー向けに、`selfies.get_semantic_robust_alphabet` から堅牢な記号アルファベットを取得できます。
- エンコードおよびデコードのアトリビューションにより、出力 token と寄与した入力 token を対応付けられます。`get_attribution` では、基盤となるグラフのアトリビューションも利用できます。
用途
- 推奨される評価:データセットから導出した語彙を用いて、分子データセットをパディング済みのラベルまたは one-hot 系列に整え、生成モデルに利用します。
- 推奨される評価:代表的な SMILES をエンコードし、記録した意味制約の下でデコードして、SELFIES をケモインフォマティクスのパイプラインに組み込む前に表現の挙動を評価します。
- 推奨される評価:堅牢なアルファベットから候補文字列を生成してデコードし、有効なグラフが有用な分子であると決めつけず、用途に応じたフィルタリングを行います。
- 推奨される評価:変換アトリビューションを調べ、分岐、環、原子の記号がデコード後の SMILES にどのように寄与するかを理解します。
使い方
- リポジトリの READMEと、そこからリンクされているコード論文のチュートリアルを読み、変換関数、エンコーディング、意味制約について確認します。
- README にある
selfiesの pip インストール手順に従います。インストールしたバージョンを記録し、リリースを切り替える前に CHANGELOGを確認します。 - 初期評価では代表的な SMILES 入力を選び、
selfies.encoderに続けてselfies.decoderを使用します。デコード後の構造を調べ、ドキュメントに記載されたEncoderErrorおよびDecoderErrorの例外を考慮します。 selfies.get_alphabet_from_selfiesで語彙を構築し、系列長を確認して、ラベルまたは one-hot 入力にselfies.selfies_to_encodingを使用します。パディングが必要な場合は[nop]を含め、逆変換用に語彙の対応関係を保持します。- 特に超原子価を調べる場合は、意味制約の設定を記録します。アトリビューションを使って変換を調べ、モデルとの統合を評価する場合は変分オートエンコーダの例を確認します。生成構造は、対象とする化学タスクに照らして別途評価してください。