Rapport détaillé du projet
Transcription
Rapport détaillé du projet
Création et utilisation de profils à partir de vecteurs représentant des molécules Yoann Dufresne Février 2013 Encadrants : Maude Pupin, Laurent Noé Projet recherche, Master 2 MoCAD 1 Table des matières 1 Introduction 4 2 État de l’art 2.1 Quantitative Structure-Activity Relationship (QSAR) . . . . . . 2.2 Inférence de document . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Analyse de corpus de documents avec TF-IDF . . . . . . 5 5 6 6 3 Contribution 3.1 Prédiction d’activités . . . . . . 3.1.1 Prédiction monomèrique 3.1.2 Prédiction peptidique . 3.2 Analyse expérimentale . . . . . 3.2.1 Protocole expérimental 3.2.2 Indicateurs de qualité . 3.2.3 Résultats . . . . . . . . 4 Conclusion et perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 9 10 11 11 12 14 15 2 1 Introduction Dans la nature un certain nombre de bactéries et de champignons produisent naturellement des molécules pharmacologiquement intéressantes appelées peptides non ribosomiques (NRP)[5]. Ces molécules sont des peptides (polymères dont les monomères sont reliés entre eux par des liaisons peptidiques) de petite taille synthétisés en dehors des ribosomes. Contrairement aux peptides ribosomiques, plus largement étudiés, les NRP ne sont pas uniquement composés des 20 acides aminés communs. Le fait de pouvoir composer des peptides avec des monomères différents, tels que des lipides ou des sucres par exemple, permet d’obtenir une diversité bien plus grande avec la possibilité d’avoir des cycles (voir Figure 1). Figure 1 – Exemple de NRP : "Quinomycin B" Ces molécules sont très intéressantes d’un point de vue pharmacologique car un grand nombre de molécules actives ont été découvertes. Les activités de ces molécules sont variées [1]. Parmi elles, on compte des anti-tumeurs, des antibiotiques, des anti-inflammatoires et bien d’autres types de produits actifs. Actuellement, une partie de l’équipe de recherche Bonsai du Laboratoire d’Informatique Fondamentale de Lille travaille sur le sujet, en étroite collaboration avec le laboratoire ProBioGEM de Lille1. La collaboration de ces équipes a permis de créer NORINE [2], la première base de donnée mondiale regroupant les NRP. Autour de NORINE se sont construits plusieurs projets et c’est au sein de l’un d’eux qu’intervient mon travail. Bien que les NRP soient intéressants, ils sont très difficiles à produire et analyser. Ces difficultés rendent la détection de nouveaux composants actifs très 3 coûteux. L’idée du projet est d’essayer de contourner cette phase de synthèse pour la détection en essayant d’inférer les activités de nouveaux NRP via l’utilisation de modèles de prédiction informatiques. Dans ce rapport, j’aborderai tout d’abord l’état de l’art fait autour de la prédiction en parlant de trois axes principaux déjà existants. Deuxièmement, j’expliquerai comment j’ai regroupé certaines de ces techniques afin de créer une nouvelle approche. Enfin, j’expliquerai ma démarche expérimentale et mes résultats. 2 État de l’art Dans la bibliographie existante, je me suis intéressé à 2 axes principaux que je vais développer ici. Le premier est une série de méthodes regroupées sous le nom de QSAR (Quantitative Structure-Activity Relationship). Cette méthode permet de faire de la prédiction d’activité de molécules à partir de ses propriétés physico-chimiques. C’est un principe très utilisé par les chimistes pour prédire les activités de molécules et c’est donc naturellement qu’il a été mon premier axe de recherche. Le second axe parle de recherche de documents dans un corpus à partir d’une requête. Cet axe peut paraître surprenant au regard du sujet mais il est issu du fait que nous cherchions de nouvelles techniques pour faire de la prédictions à partir de notre façon particulière de représenter les molécules. Cet axe va me permettre d’adapter certaines méthodes issues d’algorithmique de probabilités d’apparition de mots dans un texte. 2.1 Quantitative Structure-Activity Relationship (QSAR) QSAR est un concept développé depuis les 1860 environ [9] et qui consiste à dire que l’activité d’une molécule est liée à ses propriétés physico-chimiques. Plus précisément, d’après ce concept, l’activité est reliée aux propriétés physicochimiques des sites de liaisons des molécules (dit sites actifs). Par exemple, si une molécule a globalement une charge négative, elle se liera sans doute plus facilement avec des molécules ayant une charge globalement positive. Ceci permet aux molécules d’avoir des affinités avec certaines, ainsi que des antagonismes avec d’autres. En suivant cette règle, on peut dire que deux molécules identiques ont la même activité. En plus des propriétés physico-chimiques, des modèles de plus en plus complexes sont venus ajouter des affinités par topologie 2D puis 3D[7]. Ces modèles essayent de prendre en compte les structures 2D et parfois 3D des molécules dont on cherche à prédire l’activité, en plus de leurs propriétés physico-chimiques. En utilisant les concepts de QSAR, des modèles de prédictions ont été créés avec comme dogme "Si deux sites actifs sont très semblables, alors leurs activités vont être très proches" [8]. Bien que ce dogme soit très attrayant, deux articles récents ont soulevé des controverses. Le premier des deux, intitulé "QSAR : 4 Dead or alive ?"[4] explique que le dogme n’est pas entièrement vrai. Parfois deux molécules très proches l’une de l’autres ont des activités bien différentes. Le comportement des sites actifs parait être plus chaotique dans certains cas. Le second article intitulé "The Trouble with QSAR (or How I Learned To Stop Worrying and Embrace Fallacy)"[6], traite de problèmes découverts autour des méthodes d’expérimentation. Un certain nombre de scientifiques ayant obtenus de très bons résultats expérimentaux avec leurs méthodes d’apprentissage dérivées du concept de QSAR avaient en fait obtenus de faux résultats, issus de sur-apprentissages de leurs modèles. D’après cet article, les performances des méthodes d’apprentissages issues du concept sont à revoir à la baisse et des alternatives de prédiction sont à concevoir. 2.2 Inférence de document Ce que je vais présenter ici est une technique de recherche dans un corpus de documents afin d’extraire le document le plus pertinent par rapport à une requête (phrase ou suite de mots) donnée. Cette partie peut paraître à première vue assez éloignée de mon sujet mais il est possible de faire un parallèle assez simple. Mon sujet peut se résumer à rechercher la bonne activité d’une molécule donnée en fonction d’un corpus de binômes molécule/activité connus. Tout ce qui est présenté ici est issu de la thèse de Howard Robert Turtle [10] ainsi que de l’article qu’il a coécrit avec W. Bruce Croft [11]. 2.2.1 Analyse de corpus de documents avec TF-IDF Les bases de TF-IDF (Term Frequency - Inverse Document Frequency) Concept La méthode TF-IDF est une méthode informatique de pondération permettant d’évaluer l’importance des termes dans un document relativement à un corpus de document. Le poids d’un terme augmente selon deux facteurs : le nombre d’occurrences du terme dans le document où il est trouvé et la fréquence d’apparition de ce terme dans le corpus de documents. Le poids est obtenu en utilisant la formule : w(m, d) = tf (m, d) × idf (m) où tf (m, d) est la fréquence du terme m dans le document d où il est trouvé et idf (m) est la fréquence inverse de document (expliqué plus tard). tf tf (m, d) est donc la fréquence du terme m dans le document d. La formule pour le calcul de tf est donc très simple : tf (m, d) = nb fois m dans d nb mots dans d 5 Plus le terme m est présent dans le document d et plus son poids augmente. Malheureusement, les mots les plus fréquents ne sont souvent pas les plus intéressants. Il s’agit souvent de pronoms ou d’articles qui ne reflètent pas le contenu du document. Les mots qui nous intéressent sont les mots fréquents qui ne font pas partis de cette catégorie. Le terme idf est présent pour cette raison. idf La fréquence inverse de document permet de mesurer l’importance de chaque terme dans le corpus de texte complet. Cette partie de la formule a pour but de trouver les termes les plus discriminants et donc moins fréquents dans le corpus total. La formule utilisée est donc la suivante : nb de documents du corpus idf (m) = log nb documents où apparait m Si un mot est présent dans tous les documents du corpus, alors il y a de forte chance que ce soit un mot que l’on ne souhaite pas (articles par exemple). Dans ce cas idf renverra la valeur log(1) (minimum). La combinaison des deux termes permet donc de donner de l’importance aux termes qui sont à la fois très présent dans les corpus mais au possible regroupés sur quelques documents. Pour regrouper ces deux qualités à la fois on multiplie tf par idf. nb fois m dans d nb de documents du corpus w(m, d) = × log nb mots dans d nb documents où apparait m Du poids vers des pseudo-probabilités Le but de l’opération est de transformer un poids (donc dans l’intervalle ]0; +∞[) en une pseudo-probabilité (dans l’intervalle [0; 1]). Pour cela, il est nécessaire de trouver une normalisation de w(m, d) et donc de tf (m, d) et idf (m) que l’on notera respectivement ntf (m, d) et nidf (m). ntf La façon la plus simple de normaliser tf (m, d) est de diviser sa valeur par le tf maximum pour le document d : ntf (m, d) = tf (m, d) ∀t ∈ d| max tf (t, d) nidf Afin de normaliser idf, nous allons chercher à le diviser par la valeur maximale qu’il peut prendre. Dans le "pire" des cas, le terme n’est présent que dans un seul document, le ratio est donc égal au nombre de document du corpus. La valeur maximale pour le ratio est donc le nombre de documents où apparait le terme (que l’on notera |D|). On a donc : nidf (m) = 6 idf (m) log |D| P(m|d) Afin d’obtenir une pseudo-probabilité d’un terme sachant un document, il est nécessaire de combiner les fonctions ntf et nidf. D’après la thèse de H. Turtle, plusieurs méthodes ont été testées et la méthode la plus concluante est la combinaison des pseudo-probabilités via un produit en imitant un calcul de poids. Probabilité minimale Ici, les probabilités conditionnelles sont des pseudoprobabilités de trouver dans un document d le mot m appartenant à une requête (phrase recherchée par exemple). Ces pseudo-probabilités sont donc vouées à être multipliées entre elles. Un problème se pose donc. Dès qu’un terme de la requête n’est pas présent dans le panel de documents, la probabilité de la requête sera directement de 0. Pour éviter cela, H. Turtle a déterminé expérimentalement que la pseudo-probabilité minimale P(m|d) doit se trouver entre 0,3 et 0,4. Au dessus de 0,3 pour ne pas trop pénaliser un mot inexistant dans le corpus et au dessous de 0,4 pour ne pas totalement écraser les probabilités. La pseudoprobabilité conditionnelle finale sera donc : P(m|d) = α + (1 − α) × ntf (m, d) × nidf (m) Où 0.3 ≤ alpha ≥ 0.4. Réécrivons la formule de manière développée : |D| nb(m, d) log nbDocs(m) |d| × P(m|d) = α + (1 − α) × ∀t ∈ d| max tf (t, d) log |D| Où |d| est le nombre de termes dans un document, |D| le nombre de documents du corpus, nb(m, d) le nombre d’occurrences de m dans d et nbDocs(m) le nombre de documents contenant le mot m. 3 3.1 Contribution Prédiction d’activités Bien que les méthodes basées autour de QSAR aient apparemment eues quelques soucis d’expérimentation elles restent a priori parmi les plus fiables. C’est en partant de ce constat que nous sommes partit sur l’idée de transformer ce type de méthode en utilisant le fait que les NRP soient des polymères. De ce fait nous pouvons essayer de prédire les activités des peptides à partir de leur composition en monomères et plus en fonction des propriétés physico-chimiques de la molécule. Pour cela il va falloir déterminer les probabilités qu’un peptide (une requête) soit d’une certaine classe en fonction d’un panel d’apprentissage de NRP déjà connus. Autant dire que la méthode de H. Turtle peut être adaptée à nos données aisément. 7 3.1.1 Prédiction monomèrique Afin de prendre en compte la composition monomèrique de chaque peptide, il est nécessaire de découper le problème de prédiction d’activité des NRP en sous problème. L’idée est d’essayer de partir des probabilités d’avoir chaque monomère en sachant une activité et de composer ces probabilités pour avoir les probabilités des activités en sachant un peptide. Ramenons le problème de calculer une probabilité d’avoir un monomère sachant une activité au problème de recherche de documents de H. Turtle. Nous pouvons par exemple essayer de ramener les activités à des documents. Alors qu’un document est composé de mots, nos activités peuvent être composées des monomères des NRP ayant cette activité. Une activité peut donc être représentée par un vecteur caractéristique (ou empreinte) de l’activité où chaque valeur représente le nombre de fois que le monomère correspondant est détecté dans les NRP correspondant à l’activité (Voir Figure 2). Figure 2 – D’un peptide vers une empreinte Ces empreintes vont représenter nos documents et les valeurs le nombre d’occurrences de chaque monomère (équivalent des mots). Dans notre problème une activité est représentée par un ensemble de peptides, eux même composés de monomères. Ces activités pourront donc également être représentées par ce genre d’empreintes. Il ne reste plus qu’à transformer la formule décrite durant la partie consacrée aux travaux de H. Turtle pour l’adapter à notre problème : |A| nb(mi , a) log nbActs(mi ) |a| P(mi |a) = α + (1 − α) × × ∀j| max tf (mj , a) log |A| Où mi est un monomère, a est une activité, |a| est le nombre de monomères décrivant une activité, |A| le nombre d’activités possibles, nb(mi , a) le nombre d’occurrences de mi dans a et nbActs(mi ) le nombre d’activités contenant mi . 8 3.1.2 Prédiction peptidique Désormais les probabilités d’avoir des monomères en connaissant une activité doivent être reliées à la probabilité d’avoir une activité sachant un peptide. Pour parvenir à cette finalité il est nécessaire de supposer que les présences des monomères dans les activités et peptides sont totalement indépendantes les unes des autres. Définissons formellement ce qu’est la probabilité d’avoir une activité selon un peptide. En considérant qu’avoir un peptide est équivalent à avoir à la fois tous les monomères qui le composent, on peut définir la relation suivante : P (a|p) = P (a|m1 ∩ ... ∩ mn ) Par définition[3] de ce qu’est une probabilité conditionnelle on peut écrire : ⇔ P (a|p) = P (a ∩ m1 ∩ ... ∩ mn ) P (m1 ∩ ... ∩ mn ) On réécrit la formule en permutant du a pour le numérateur : ⇔ P (a|p) = P (m1 ∩ ... ∩ mn ∩ a) P (m1 ∩ ... ∩ mn ) De nouveau par définition[3] on peut définir : P (m1 ∩ ... ∩ mn |a) = P (m1 ∩ ... ∩ mn ∩ a) P (a) En composant les deux dernières formules on obtient donc : P (a|p) = P (m1 ∩ ... ∩ mn |a) × P (a) P (m1 ∩ ... ∩ mn ) Comme dit au début de ce raisonnement, on peut considérer les monomères appartenant à un peptide comme indépendants les uns des autres. Les probabilités des monomères sont donc disjointes et on peut donc écrire grâce à la règle P (X ∩ Y |e) = P (X|e) × P (Y |e) : P (a|p) = P (m1 |a) × ... × P (mn |a) × P (a) P (m1 ) × ... × P (mn ) Grâce à cette formule on peut enfin calculer les valeurs des pseudo-probabilités d’avoir chacune des activités possibles. Pour essayer de trouver l’activité correspondant à un peptide il faut donc calculer toutes les pseudos-probabilités puis rechercher la meilleure valeur obtenue. 9 3.2 3.2.1 Analyse expérimentale Protocole expérimental Afin de tester l’algorithme de classification que j’ai élaboré, j’ai effectué des expérimentations sur les données de la base de données NORINE. En effet, dans cette base, beaucoup d’activités de NRP sont déjà connues. Pour expliquer précisément mon protocole expérimental je vais utiliser le schéma suivant (Voir Figure 3) : Figure 3 – Protocole expérimental Etape 1 : Base de données À l’origine des tests se trouve la base de données NORINE. Elle regroupe plus de 1200 NRP dont la majorité des activités sont connues. 10 Etape 2 : Filtrage Avant de pouvoir commencer à tester les prédictions, il est nécessaire de faire un tri parmi les données. En premier lieu je supprime les données qui n’ont pas d’activités connues. Puis, pour éviter les conflits dans le jeu d’apprentissage, je mets de côté les peptides pour lesquels plusieurs activités sont connues. Ensuite, il existe des peptides très ressemblants les uns des autres. Pour chaque activité on ne garde qu’un membre de chaque groupe de NRP ressemblants afin de ne pas sur-apprendre certains patterns. Enfin, je supprime les peptides qui ont une activité peu représentée afin de ne pas faire de prédictions aléatoires. Au final, il reste 605 peptides pour notre apprentissage. Etape 3 : Création des empreintes Pour chaque peptide de la base, je crée un vecteur caractéristique correspondant. Ces empreintes sont un simple comptage des monomères présents. Etape 4 : Préparation des données Afin de tester l’algorithme, je vais séparer les données en sous-ensembles qui vont permettre de faire des prédictions croisées. Pour cela je commence par mélanger la base afin d’avoir les NRP non triés puis je sépare l’ensemble en 10 sous-parties égales. Etape 5 : Évaluation J’utilise 9 des sous bases pour faire l’apprentissage des empreintes d’activités. Je calcule ensuite toutes les pseudo-probabilités d’avoir les activités en connaissant le peptide de la sous base restante. Je refais cette étape en sélectionnant tour à tour toutes les sous parties pour les classifier en fonction des autres. Etape 6 : Tableau de résultats Après avoir calculer toutes les pseudosprobabilités pour toutes les activités en fonction de tous les peptides, je sélectionne la probabilité la plus forte pour chaque peptide en considérant l’activité correspondante comme prédite. Je rentre mon résultat dans un tableau en incrémentant la case correspondante (en ligne l’activité réelle et en colonne l’activité prédite). 3.2.2 Indicateurs de qualité Pour l’analyse des résultats, j’utilise trois indicateurs. Le premier d’entre eux est la précision. La précision se calcule en divisant le nombre de peptides bien classés par le nombre total de peptides analysés. Cet indicateur donne simplement le taux de réussite de la classification. Plus la précision est élevée et plus l’algorithme a réalisé ses prédictions avec succès. Les deux autres indicateurs sont la sensibilité et la spécificité. La sensibilité représente le nombre de résultats bien annotés pour une classe par rapport au nombre total de résultats qui appartiennent à cette classe. Dans notre cas, cet indicateur représentera le nombre de peptides bien annotés pour une activité par rapport au nombre de peptides de cette classe. La sensibilité peut varier 11 entre 0 et 1. Plus elle tend vers 1 et plus l’algorithme fournis des prédictions correctes pour la classe concernée. Le troisième et dernier indicateur est donc la spécificité. Cet indicateur représente le nombre de résultats qui ne sont pas annotés dans une classe par rapport au nombre de résultats qui n’appartiennent pas à la classe. Dans notre cas, cet indicateur représentera le nombre de peptides qui ne sont pas annotés par une classe par rapport au nombre de peptides qui ne sont réellement pas dans cette classe. La spécificité varie entre 0 et 1. Plus elle tend vers 1 et moins l’algorithme a fait du sur-apprentissage sur la classe correspondante. La table suivante (Voir table 1) présente l’organisation des valeurs mesurées (VP,FP,VN,FN) ; Nous allons utiliser cette représentation dans la table 2 de la partie 3.2.3. Ces valeurs vont permettre de définir précisément les formules de calcul de la sensibilité et de la spécificité. Table 1 – Valeurs du tableau de résultats pour la seconde activité Sensibilité = VP V P + FN Spécificité = VN V N + FP Pour considérer qu’une classe est bien reconnue par un algorithme de classification, il est nécessaire que la sensibilité et la spécificité soient toutes les deux élevées. Si la sensibilité est élevée mais que la spécificité est faible, alors notre modèle a fait du sur-apprentissage pour cette classe et la plupart des objets à classifier sont annotés par cette classe. À l’inverse, si la spécificité est élevée mais pas la sensibilité, alors cela veut dire que cette classe n’est pas du tout reconnue par l’algorithme et que tous ses membres sont classés ailleurs. 12 3.2.3 Résultats Vu que la base de données est divisée aléatoirement pour les apprentissages, les résultats différent légèrement selon les exécutions. Je vais présenter ici un résultat typique de la classification. Antibiotic Toxin Sidephore Proteas inhib Antitumor Antibiotic 297 40 31 11 10 Toxin 21 113 13 8 14 Sidephore 1 2 38 0 0 Proteas inhib 0 0 0 3 0 Antitumor 0 2 0 0 1 Table 2 – Tableau de résultats. ligne : Vraie classe, colonne : Classe prédite Pour ce résultat, la précision est de 74,7% (Moyenne de précision sur mes exécutions 74,6%). Cette première indication nous permet de dire que le classifieur arrive à classer correctement une grande partie des données filtrées de la base de données. Une chose de suite frappante est que les trois classes majoritaires sont bien mieux classées que les classes avec des petits effectifs. Regardons plus précisément les résultats grâce aux deux autres indicateurs : Activité Antibiotic Toxin Sidephore Proteas inhib Antitumor Effectif 319 157 82 22 25 Sensibilité 0.931 0.719 0.463 0.136 0.04 Spécificité 0.678 0.875 0.994 1.0 0.996 Table 3 – Sensibilité - Spécificité La sensibilité des différentes activités vient confirmer ce que l’on avait observé sur le tableau des résultats. Plus l’effectif est petit, moins l’algorithme est sensible à celui-ci et ainsi moins de peptides sont classés correctement. La spécificité permet quand à elle de comprendre que les plus grosses classes absorbent les peptides des plus petites classes. Il y a un effet de sur-apprentissage au niveau de la première et de la seconde classe. Malheureusement, lorsque je réduis les plus grosses classes en sélectionnant une sous partie aléatoirement, la précision chute immédiatement. Cela veut dire que l’on perd ce qui fait l’essence même des grosses classes, que l’on "oublie" d’apprendre certains patterns spécifiques. Je ne peux actuellement pas faire la transformation inverse (augmenter les faibles classes) car peu de molécules de 13 leur type sont à ce jour séquencées (car très couteuses à séquencer). J’inclus déjà tous les peptides contenants ces activités. 4 Conclusion et perspectives Après avoir étudié de nombreux articles à propos des NRP et à propos de méthodes de classification, j’ai pu extraire des techniques utiles pour la classification des peptides. À partir de ces connaissances, j’ai réuni en un programme certaines méthodes pour calculer les probabilités d’occurrences de mots dans un texte en les transformant pour le contexte biologique du sujet. Par cet outil j’ai contribué à l’amélioration du panel d’outils présent autour de la base de donnée internationale NORINE. Le logiciel développé permet dès à présent de classifier correctement environ 75% des peptides non ribosomiques dont on connait les activités à ce jour. Cependant, le manque de données pour certaines activités permet de dire que la méthode est sensible à un déséquilibre dans la base d’apprentissage et qu’il est encore nécessaire d’obtenir de nouvelles données. C’est seulement une fois cette phase effectuée que l’on pourra dire si le classifieur répond aux attentes que l’on a. Une fois quelques données supplémentaires collectées, quelques améliorations sont d’ores et déjà envisagées. L’une des amélioration qui parait prometteuse est le regroupement de monomères. Nous pensons que regrouper certains monomères qui ont le même genre de fonctionnement (comme par exemple certains sucres) permettra d’améliorer la précision. Bien que cette fonctionnalité est déjà implémentée, il est encore nécessaire d’effectuer un travail de recherche pour trouver quels regroupements de monomères sont pertinents sans provoquer d’erreurs ou de sur-apprentissages. 14 Références [1] Ségolène Caboche, Valérie Leclère, Maude Pupin, Gregory Kucherov, and Philippe Jacques. Diversity of monomers in nonribosomal peptides : towards the prediction of origin and biological activity. Journal of bacteriology, 192(19) :5143–5150, October 2010. [2] Ségolène Caboche, Maude Pupin, Valérie Leclère, Arnaud Fontaine, Philippe Jacques, and Gregory Kucherov. Norine : a database of nonribosomal peptides. Nucleic Acids Research, 26(D) :326–331, 2008. [3] Miklos Csuros. Intégration biosciences / informatique - préliminaires mathématiques. http://www.iro.umontreal.ca/~csuros/BIN3002/, 2012. [4] Arthur M. Doweyko. Qsar : dead or alive ? Journal of Computer-Aided Molecular Design, 22 :81–89, 2008. [5] Schoenafinger Georg and Mohamed A. Marahiel. Nonribosomal peptides. Natural Products in Chemical Biology, pages 109–125, May 2012. [6] Stephen R. Johnson. The trouble with qsar (or how i learned to stop worrying and embrace fallacy). Journal of Chemical Information and Modeling, 48(1) :25–26, 2008. [7] Hugo Kubinyi. From narcosis to hyperspace : The history of qsar. Quant. Struct.-Act. Relat, 21 :348–356, 2002. [8] Nina Nikolova and Joanna Jaworska. Approaches to measure chemical similarity ± a review. QSAR and Combinatorial Science, 22 :1006–1026, 2003. [9] Roelof F. Rekker. The history of drug research : From overton to hansch. Quantitative Structure-Activity Relationships, 11(2) :195–199, 1992. [10] Howard Robert Turtle. Inference Networks for Document Retrieval. PhD thesis, University of Massachusetts, February 1991. [11] Howard Robert Turtle and W. Bruce Croft. Evaluation of an inference network-based retrivial model. ACM Transactions on Information Systems,, 9(3) :187–222, July 1991. 15