Kazanimlar:
- Molekülleri isimle değil yapı gösterimiyle (insanla SMILES, veritabanıyla InChI/InChIKey) tanımlayabilme
- Yapay zekanın verdiği her SMILES'i RDKit ile ayrıştırıp doğrulayarak ve kanonikleştirerek geçersiz veya yanlış yapıları yakalayabilme
- Molekül ağırlığı ve formül gibi deterministik büyüklükleri dil modelinden değil kural tabanlı araçtan alması gerektiğini kavrayabilme
Kimyada YZ'yi güvenli kullanmanın ilk şartı, molekülü makinenin de insanın da aynı anlayacağı bir dille yazmaktır. "Fenol" dersiniz, YZ doğru anlar; ama "asit" dediğinizde binlerce olasılık vardır. İsimler belirsizdir; yapı gösterimleri kesindir. Bu ünitede molekülü metne çeviren iki temel gösterimi (SMILES ve InChI) ve bunları deterministik olarak doğrulayan aracı (RDKit) öğreneceğiz. Amacımız: YZ'ye molekülü hiç yanlış anlamayacağı şekilde vermek ve YZ'nin ürettiği yapıyı bir araçla teyit etmek.
SMILES nedir?
SMILES (Simplified Molecular-Input Line-Entry System), bir molekülü tek satır metinle yazma biçimidir. Atomlar harflerle, bağlar sembollerle, halkalar sayılarla gösterilir. Örnekler:
- Etanol: CCO (karbon–karbon–oksijen; hidrojenler örtük).
- Benzen: c1ccccc1 (küçük harf "c" aromatik karbonu gösterir; 1'ler halkayı kapatır).
- Aspirin: CC(=O)Oc1ccccc1C(=O)O.
- Kafein: Cn1cnc2c1c(=O)n(C)c(=O)n2C.
SMILES'in gücü, tek satırda tüm bağ yapısını taşımasıdır; zayıflığı, aynı molekülün birden çok geçerli SMILES'i olabilmesidir (buna kanonik olmama denir). Bunu birazdan RDKit ile çözeceğiz.
İpucu: Bir moleküle ait "kanonik SMILES", o molekülün tek ve standart yazımıdır. İki SMILES'in aynı molekül olup olmadığını anlamak için ikisini de kanonikleştirip karşılaştırın; metin olarak eşit değil, molekül olarak eşit olmalıdır.
InChI nedir?
InChI (International Chemical Identifier), IUPAC'ın geliştirdiği standart bir tanımlayıcıdır. SMILES'ten farkı, aynı molekülün her zaman aynı InChI'yi vermesidir; yani doğası gereği kanoniktir. Uzun ve okuması zordur ama veritabanı eşleştirme için idealdir. Kısaltılmış "InChIKey" (27 karakterlik özet) arama için kullanılır.
- Aspirin InChIKey: BSYNRYMUTXBXSQ-UHFFFAOYSA-N.
Kural: İnsanlar SMILES ile konuşur (okunur), makineler ve veritabanları InChI/InChIKey ile eşleşir (kesin). YZ'ye SMILES verin; teyidi InChIKey ile veritabanında yapın.
RDKit: deterministik doğrulama motoru
RDKit, açık kaynaklı bir kimya bilişimi (cheminformatics) kütüphanesidir. Dil modelinden farklı olarak kural tabanlıdır: SMILES'i ayrıştırır, molekül ağırlığını hesaplar, kanonik SMILES üretir, InChI/InChIKey verir, molekülü çizer. Yani YZ'nin "tahmin ettiği" şeyi RDKit "hesaplar". İş akışının kalbi budur: YZ üretir, RDKit doğrular.
Temel bir doğrulama akışı:
from rdkit import Chemfrom rdkit.Chem import Descriptors, Drawsmiles = "CC(=O)Oc1ccccc1C(=O)O" # YZ'nin verdiği SMILESmol = Chem.MolFromSmiles(smiles)if mol is None: print("GEÇERSİZ SMILES - YZ çıktısı hatalı, kullanma!")else: print("Kanonik SMILES:", Chem.MolToSmiles(mol)) print("Molekül formülü:", Chem.rdMolDescriptors.CalcMolFormula(mol)) print("Molekül ağırlığı:", round(Descriptors.MolWt(mol), 2), "g/mol") print("InChIKey:", Chem.MolToInchiKey(mol))
Eğer MolFromSmiles None dönerse, YZ size geçersiz bir molekül vermiştir; bu tek başına çok değerli bir uyarıdır. Geçerliyse, molekül ağırlığını artık dil modeline sormanıza gerek yoktur; deterministik olarak elinizdedir.
Adım adım: YZ + RDKit birlikte çalışması
- Molekülü tanımla: YZ'ye adı ver, SMILES iste. Örneğin "parasetamol için kanonik SMILES ver."
- Doğrula: Gelen SMILES'i MolFromSmiles ile ayrıştır. None ise reddet.
- Kanonikleştir: MolToSmiles ile standart yazımı al; bundan sonra hep bunu kullan.
- Sayıları hesapla: Molekül ağırlığı, formül, halka sayısı, hidrojen bağı verici/alıcı sayısı gibi büyüklükleri RDKit'ten al, YZ'den değil.
- Kimliği sabitle: InChIKey üret, veritabanında (PubChem) ara, molekülün gerçekten istediğin bileşik olduğunu teyit et.
Dört kopyalanabilir şablon
1) SMILES isteme (isimden yapıya):
Görev: Aşağıdaki bileşik için kanonik SMILES ver.Bileşik: parasetamol (asetaminofen).Kural: Yalnızca SMILES dizisini ve InChIKey'i ver, başka açıklama ekleme.Emin değilsen "EMİN DEĞİL" yaz, uydurma.
2) SMILES doğrulama isteği (yapıdan kontrole):
Aşağıdaki SMILES'i incele: CC(=O)Nc1ccc(O)cc1Sorular:1) Bu geçerli bir SMILES mi?2) Hangi bileşiğe karşılık gelir (yaygın ad)?3) Molekül formülü nedir?Not: Kesin molekül ağırlığını ben RDKit ile hesaplayacağım; sen sadece yapı yorumunu ver.
3) İki gösterimi karşılaştırma:
Elimde iki SMILES var:A) OCCB) CCOGörev: Bunlar aynı molekül mü, farklı mı? Gerekçesini yaz.Not: Cevabını RDKit'te kanonikleştirerek çapraz kontrol edeceğim.
4) Yapı açıklama (öğrenme amaçlı):
SMILES: Cn1cnc2c1c(=O)n(C)c(=O)n2CGörev: Bu SMILES'i parça parça oku ve her sembolün ne anlama geldiğini(atom, bağ, halka, aromatiklik) sade Türkçeyle açıkla.Hangi bileşik olduğunu da söyle.
Zayıf prompt / Güçlü prompt
Zayıf:
Asetaminofenin özelliklerini ver.
"Özellik" belirsiz; YZ molekül ağırlığından erime noktasına kadar rastgele sayılar üretir, bazıları yanlış olur.
Güçlü:
Bileşik: asetaminofen.1) Kanonik SMILES ve InChIKey ver.2) Molekül formülünü ver.Kural: Molekül ağırlığı, erime noktası gibi SAYISAL değerleri VERME;onları ben RDKit/PubChem ile alacağım. Sadece yapı kimliğini ver.
Fark: YZ'yi güçlü olduğu işe (yapı kimliği) yönlendirdik, zayıf olduğu işten (deneysel sayılar) uzaklaştırdık.
Gösterimlerin karşılaştırması
Özellik
SMILES
InChI / InChIKey
Okunabilirlik
Yüksek (insan dostu)
Düşük (makine dostu)
Kanoniklik
Değişebilir (kanonikleştirmek gerekir)
Doğal olarak tek
Kullanım
İnsan iletişimi, çizim, giriş
Veritabanı eşleşmesi, kimlik
Stereokimya
Destekler (@ sembolleri)
Destekler (katmanlı)
YZ'ye vermek için
İdeal
Teyit için ideal
Mini vakalar
Vaka 1 — İki isim, tek molekül. Bir öğrenci "N-asetil-para-aminofenol" ile "parasetamol"ün farklı bileşikler olduğunu sandı ve iki ayrı deney planladı. SMILES'lerini RDKit'te kanonikleştirdiğinde ikisi de CC(=O)Nc1ccc(O)cc1 çıktı; aynı moleküldü. Kayıp: yarım gün planlama; kazanç: 2 dakikalık kanonikleştirme kontrolüyle önlenebilirdi.
Vaka 2 — Geçersiz SMILES yakalama. YZ bir türev için CC(=O)Nc1ccc(O)cc1C( verdi (parantez kapanmamış). Öğrenci MolFromSmiles çalıştırdı, None döndü, hatayı anında gördü ve düzeltilmiş SMILES istedi. Doğrulama olmasaydı hatalı yapı tüm hesaplara yayılırdı.
Vaka 3 — Yanlış molekül ağırlığı. YZ, ibuprofen (C13H18O2) için "molekül ağırlığı 214,3 g/mol" dedi. RDKit hesabı 206,28 g/mol verdi. 0,1 mol için fark: YZ ile 21,43 g, doğrusu 20,63 g. %3,9'luk bu fark, stokiyometriyi ve verim hesabını bozardı. Deterministik hesap kazandırdı.
Sık yapılan hatalar
- Molekülü isimle vermek. Eş anlamlı/ticari adlar karışır. Her zaman SMILES veya InChI ekleyin.
- SMILES'i kanonikleştirmeden karşılaştırmak. OCC ve CCO metin olarak farklı, molekül olarak aynıdır.
- Molekül ağırlığını dil modeline sormak. Bu deterministik bir hesaptır; RDKit veya elle formülden yapılır.
- Geçersiz SMILES'i fark etmemek. MolFromSmiles None dönüşünü kontrol etmeyip hatalı yapıyla devam etmek.
- Stereokimyayı ihmal etmek. İki enantiyomer (ayna görüntüsü izomerler) farklı biyolojik etki gösterebilir; SMILES'te @/@@ işaretlerini atlamak.
Dikkat: Aynı molekül formülü farklı moleküller demek değildir. C2H6O hem etanol (CCO) hem dimetil eterdir (COC). Formül eşitliği kimlik eşitliği değildir; kimlik için InChIKey kullanın.
Özetle
- Molekülleri isimle değil yapı gösterimiyle tanımlayın: insanla SMILES, veritabanıyla InChI/InChIKey.
- RDKit deterministiktir; YZ tahmin eder, RDKit hesaplar ve doğrular.
- Her YZ SMILES'ini MolFromSmiles ile ayrıştırıp None kontrolü yapın, sonra kanonikleştirin.
- Molekül ağırlığı, formül gibi sayıları RDKit'ten alın, dil modelinden değil.
- Formül eşitliği molekül kimliği demek değildir; kimlik için InChIKey kullanın.
Uygulama görevi
Üç bileşik seçin (örn. kafein, ibuprofen, glisin). Her biri için YZ'den kanonik SMILES isteyin. Sonra bir RDKit betiği yazın (yukarıdaki şablonu kullanın) ve şunları üretin: kanonik SMILES, molekül formülü, molekül ağırlığı, InChIKey. YZ'nin verdiği SMILES'lerden kaçı geçerliydi? YZ molekül ağırlığı da verdiyse, RDKit değeriyle farkını yüzde olarak hesaplayın. Bulgularınızı küçük bir tabloya dökün.
Kontrol listesi
- [ ] SMILES ve InChI/InChIKey'in ne olduğunu ve ne zaman kullanılacağını biliyorum.
- [ ] YZ'nin verdiği her SMILES'i MolFromSmiles ile doğruluyorum.
- [ ] SMILES'leri karşılaştırmadan önce kanonikleştiriyorum.
- [ ] Molekül ağırlığı ve formülü RDKit'ten alıyorum, dil modelinden değil.
- [ ] Molekül kimliğini InChIKey ile veritabanında teyit ediyorum.
- [ ] Stereokimyanın önemli olduğu durumları tanıyorum.