概览
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构建词汇表,确定序列长度,并使用selfies.selfies_to_encoding创建标签或 one-hot 输入。需要填充时加入[nop],并保留词汇表映射以供反向转换。 - 记录语义约束配置,尤其是在探索超价时。使用归因功能调查转换过程;如果要评估模型集成,再查看变分自编码器示例。针对预期的化学任务,单独评估生成的结构。