1作者: shivajikobardan大约 1 个月前原帖
我想深入学习继承、抽象和封装。同样,我也想了解接口和抽象类的必要性。我希望学习如何设计对象。 我正在使用Java。 我找到了一门看起来很不错的课程,但它并不是免费的(就像世界上所有好的东西一样)。 https://course.ccs.neu.edu/cs3500/ 它推荐了《Effective Java》、《设计模式:可复用面向对象软件的基础》(GoF)、《Head First 设计模式》等书籍。但这些书大多数更像是风格指南。 我目前处于一个阶段,无法理解如何设计面向对象的程序。我一直疯狂地在Main类下编写所有代码。 我需要一本详细的课程或书籍来学习这些,因为我学习得很慢。而且我这样做是为了乐趣,所以没有时间限制。 有像Grady Booch和Craig Larman的书,但我觉得它们有点枯燥。不过我可能会改变主意。
2作者: Tananon大约 1 个月前原帖
嘿,HN!我最近开源了 Pyversity,这是一个轻量级的库,用于多样化检索结果。大多数检索系统仅优化相关性,这可能导致前 k 个结果看起来几乎相同。Pyversity 能够高效地重新排序结果,以平衡相关性和多样性,呈现出仍然相关但不那么冗余的项目。这有助于改善检索、推荐和 RAG 流程,而不会增加延迟或复杂性。 主要特点: - 统一 API:一个函数(diversify)支持几种知名策略:MMR、MSD、DPP 和 COVER(未来还会增加更多)。 - 轻量级:唯一的依赖是 NumPy,使得包体积小且易于安装。 - 快速:所有支持的策略都有高效的实现;在毫秒级别内多样化结果。 目前,使用交叉编码器进行重新排序非常流行,但成本也很高。根据我的经验,通常可以通过更简单、更快速的方法来改善检索结果,比如这个包中实现的方法。这有助于检索、推荐和 RAG 系统呈现更丰富、更具信息量的结果,确保每个新项目都能提供新的信息。 代码和文档:github.com/pringled/pyversity 如果您有任何反馈或对其他多样化策略的建议,请告诉我!