In software engineering, different approaches and machine learning models leverage different types of data: source code, textual information, historical data. An important part of any project is its dependencies. The list of dependencies is relatively small but carries a lot of semantics with it, which can be used to compare projects or make judgements about them. In this paper, we focus on Python projects and their PyPi dependencies in the form of requirements.txt files. We compile a dataset of 7,132 Python projects and their dependencies, as well as use Git to pull their versions from previous years. Using this data, we build 32-dimensional embeddings of libraries by applying Singular Value Decomposition to the co-occurrence matrix of projects and libraries. We then cluster the embeddings and study their semantic relations. To showcase the usefulness of such lightweight library embeddings, we introduce a prototype tool for suggesting relevant libraries to a given project. The tool computes project embeddings and uses dependencies of projects with similar embeddings to form suggestions. To compare different library recommenders, we have created a benchmark based on the evolution of dependency sets in open-source projects. Approaches based on the created embeddings significantly outperform the baseline of showing the most popular libraries in a given year. We have also conducted a user study that showed that the suggestions differ in quality for different project domains and that even relevant suggestions might be not particularly useful. Finally, to facilitate potentially more useful recommendations, we extended the recommender system with an option to suggest rarer libraries.
翻译:在软件工程中,不同的方法和机器学习模式利用了不同类型的数据:源代码、文本信息、历史数据。任何项目的一个重要部分是其依赖性。依赖性清单相对较少,但含有许多语义学。在软件工程中,我们侧重于Python项目及其PyPi依赖性,以要求的形式.txt文件。我们汇编了7,132个Python项目及其依赖性数据集,并利用Git调取前几年的版本。利用这些数据,我们建议建立32维的图书馆嵌入系统,在项目和图书馆的共同矩阵中应用Singulal 值分解配置。然后,我们将嵌入和研究它们的语义关系集中在一起,以要求的形式展示这种轻量的图书馆嵌入的有用性。我们用一个原型工具向某个特定项目推荐有用的图书馆。我们甚至用“稀释性”项目嵌入和使用具有类似嵌入式版本的软件。我们用这个工具推荐了32维度的图书馆嵌入系统。我们用一个更深层次的方法来比较一个基于不同基础的图书馆的基建模模型,我们用了一个基础的模型,以显示一个基础的模型来测量基础模型,以显示一个基础模型,以显示一个基础的系统。我们所建的模型为基础的模型为基础,用来显示一个基础的模型,用来显示一个基础的实验室的模型,在基础的模型,用来显示一个基础的模型,在基础的模型在基础的模型的系统在基础的模型中可以显示一个基础。我们所建的模型可以显示。