You can maintain the API while overhauling the models underneath. spaCy so far has had almost no API breakages.<p>For instance, you get sentences as follows:<p><pre><code>    doc = nlp(u&#x27;Hello world. This is a document.&#x27;)
    for sent in doc.sents:
        for word in sent:
            ...
</code></pre>
It doesn&#x27;t matter to users whether behind the scenes, the sentence boundaries are being calculated from character heuristics, or from the syntactic parse. It was the former, now it&#x27;s the latter. Similarly, part-of-speech tags are currently predicted in their own processing step. In future they may be predicted jointly with the parsing. The API won&#x27;t change.<p>Other libraries ask users to choose between a variety of different statistical models, e.g. they ask you to specify that you want the &quot;neural network dependency parser&quot;, or the &quot;probabilistic context-free grammar parser&quot;, or whatever. By doing this they tie the API to those models.<p>spaCy just picks the best one and gives it to you. The benefit is that you don&#x27;t need to be informed when a new model is implemented, even if the change is quite drastic. The modelling is a transient implementation detail, not exposed in the API.