The rise of machine learning (ML) and its embedding in systems has drastically changed the engineering of software-intensive systems. Traditionally, software engineering focuses on manually created artifacts such as source code and the process of creating them, as well as best practices for integrating them, i.e., software architectures. In contrast, the development of ML artifacts, i.e. ML models, comes from data science and focuses on the ML models and their training data. However, to deliver value to end users, these ML models must be embedded in traditional software, often forming complex topologies. In fact, ML-enabled software can easily incorporate many different ML models. While the challenges and practices of building ML-enabled systems have been studied to some extent, beyond isolated examples, little is known about the characteristics of real-world ML-enabled systems. Properly embedding ML models in systems so that they can be easily maintained or reused is far from trivial. We need to improve our empirical understanding of such systems, which we address by presenting the first large-scale study of real ML-enabled software systems, covering over 2,928 open source systems on GitHub. We classified and analyzed them to determine their characteristics, as well as their practices for reusing ML models and related code, and the architecture of these systems. Our findings provide practitioners and researchers with insight into practices for embedding and integrating ML models, bringing data science and software engineering closer together.
翻译:机器学习的兴起及其在系统中的嵌入,已彻底改变了软件密集型系统的工程实践。传统上,软件工程侧重于人工创建的制品(如源代码)及其创建过程,以及集成这些制品的最佳实践,即软件架构。相比之下,机器学习制品(即机器学习模型)的开发源于数据科学,其关注点在于机器学习模型及其训练数据。然而,为了向最终用户提供价值,这些机器学习模型必须嵌入到传统软件中,往往形成复杂的拓扑结构。事实上,机器学习赋能的软件可以轻松整合多种不同的机器学习模型。尽管构建机器学习赋能系统所面临的挑战与实践已在某种程度上得到研究,但除了孤立案例外,人们对现实世界中机器学习赋能系统的特性知之甚少。将机器学习模型恰当地嵌入系统,使其易于维护或重用,绝非易事。我们需要增进对此类系统的实证理解,为此我们开展了首次针对真实机器学习赋能软件系统的大规模研究,涵盖了GitHub上超过2,928个开源系统。我们对其进行了分类与分析,以确定其特性、重用机器学习模型及相关代码的实践,以及这些系统的架构。我们的研究结果为从业者和研究者提供了关于嵌入与集成机器学习模型实践的深入见解,有助于拉近数据科学与软件工程之间的距离。