启动!如何开始你的第一个机器学习项目 🚀
机器学习世界的新手经常会遇到两个反复出现的问题。首先是选择正确的学习库,这在有如此多选择时可能会令人望而生畏。即使你已经确定了一个库并完成了一些教程,下一个问题是如何构思你的第一个大型项目并对其进行适当的范围界定,以最大限度地提高你的学习效果。如果你遇到了这些问题,并且正在寻找一个可以添加到你的工具包中的新机器学习库,那么你来对地方了!
在这篇文章中,我将以 Sentence Transformers (ST) 为例,为你介绍一些如何从零开始掌握一个新库的技巧。我们将从理解 ST 的基本功能开始,并强调一些使其成为一个优秀学习库的特点。然后,我将分享我经过实战检验的策略,教你如何着手你的第一个自主项目。我们还将讨论我是如何构建我的第一个 ST 驱动项目,以及我在这个过程中学到了什么 🥳
什么是 Sentence Transformers?
句子嵌入?语义搜索?余弦相似度!?😱 就在几周前,这些术语对我来说还很令人困惑,让我头晕目眩。我听说 Sentence Transformers 是一个用于处理语言和图像数据的强大且多功能的库,我渴望尝试使用它,但我担心我会力不从心。事实证明,我完全错了!
Sentence Transformers 是 Hugging Face 集成的库之一,它被描述为:
计算句子、段落和图像的密集向量表示
简而言之,Sentence Transformers 回答了一个问题:如果我们可以把句子当作多维向量空间中的点呢?这意味着 ST 允许你给它一个任意的文本字符串(例如,“我很高兴我学会了用 Python 编程!”),它会将其转换为一个向量,例如 `[0.2, 0.5, 1.3, 0.9]`。另一个句子,例如“Python 是一种很棒的编程语言。”,将被转换为不同的向量。这些向量被称为“嵌入”,它们在机器学习中扮演着重要角色。如果这两个句子使用相同的模型进行嵌入,那么它们将共存于相同的向量空间中,从而产生许多有趣的可能性。
ST 特别有用的一点是,一旦你生成了一些嵌入,你就可以使用内置的实用函数来比较一个句子与另一个句子的相似度,**包括同义词!** 🤯 一种方法是使用“余弦相似度”函数。有了 ST,你可以跳过所有繁琐的数学计算,直接调用**非常**方便的 `util.cos_sim` 函数,获得一个从 -1 到 1 的分数,表示嵌入的句子在它们共享的向量空间中的“相似”程度——分数越大,句子越相似!
通过相似度比较句子意味着,如果我们有一系列句子或段落,我们可以通过一个称为*语义搜索*的过程,快速找到与特定搜索查询匹配的那些。关于这方面的一些具体应用,请参阅这个关于制作 GitHub 代码搜索器的教程,或这个关于使用 Sentence Transformers 构建 FAQ 引擎的另一个教程。
为什么学习使用 Sentence Transformers?
首先,它提供了一种低门槛的方式,可以亲身体验使用最先进模型生成嵌入。我发现创建自己的句子嵌入是一种强大的学习工具,它有助于加深我对现代模型如何处理文本的理解,而且它还激发了我的创意,产生了许多想法!在 Jupyter Notebook 中加载 msmarco-MiniLM-L-6-v3 模型几分钟后,我就通过嵌入一些句子并运行 ST 的一些实用函数,想出了许多有趣的项目想法。
其次,Sentence Transformers 是通往许多重要机器学习概念的便捷入口,你可以由此延伸。例如,你可以用它来学习聚类、模型蒸馏,甚至可以通过 CLIP 进入文本到图像的工作。事实上,Sentence Transformers 功能如此多样,以至于它在 GitHub 上获得了近 8000 颗星,超过 3000 个项目和软件包依赖于它。除了官方文档,还有大量的社区创建内容(文章末尾会提供一些链接👀),并且该库的普及使其在研究领域广受欢迎。
第三,嵌入是多种工业应用的关键。谷歌搜索使用嵌入来匹配文本与文本以及文本与图像;Snapchat 使用它们来“在正确的时间向正确的用户投放正确的广告”;Meta (Facebook) 使用它们进行社交搜索。换句话说,嵌入允许你构建聊天机器人、推荐系统、零样本分类器、图像搜索、FAQ 系统等等。
最重要的是,它还得到了大量 Hugging Face 集成的支持 🤗。
着手你的第一个项目
你已经决定尝试 Sentence Transformers,并学习了一些文档中的示例……现在怎么办?你的第一个自主项目(我称之为“火箭发射”项目🚀)是你学习旅程中的一个重要里程碑,你会希望充分利用它!下面是我在尝试新工具时喜欢遵循的小诀窍:
- 将你所知道的工具能力全部列出:对于 Sentence Transformers,这包括生成句子嵌入、比较句子、用于复杂搜索任务的检索和重排序、聚类以及使用语义搜索查找相似文档。
- 思考一些有趣的数据源:在 Hugging Face Hub 上有大量数据集,你也可以查阅像 awesome-public-datasets 这样的列表来获取灵感。你通常会在意想不到的地方找到有趣的数据——例如,你的市政府可能有一个开放数据门户。你将花费相当多的时间处理数据,所以不妨选择能让你兴奋的数据集!
- 选择一个你比较熟悉的*辅助*工具:为什么要把你的经验限制在一次学习一个工具呢?“分布式练习”(又称“间隔重复”)意味着将你的学习分散到多个会话中,这已被证明是学习新材料的有效策略。积极实践这一点的一种方法是,即使在新技能不是主要学习重点的情况下,也要练习这些新技能。如果你最近学习了一个新工具,这是一个很好的机会,可以通过实战检验你的技能来倍增你的学习潜力。我建议在你的“火箭发射”项目中只包含一个辅助工具。
- 构思:花点时间集思广益,思考前 3 步中的不同元素组合会是什么样子!没有糟糕的想法,我通常会追求数量而不是强调质量。很快你就会找到几个能点燃你特殊好奇心的想法 ✨
在我的第一个 Sentence Transformers 项目中,我记得我有一个流行歌曲歌词的小数据集,我意识到我可以将其与 ST 的语义搜索功能结合起来,创建一个有趣的播放列表生成器。我设想,如果我能让用户输入一个文本提示(例如“我感觉狂野而自由!”),也许我能找到歌词与该提示匹配的歌曲!我也一直在使用 Gradio 制作演示,并且最近一直在努力提升我使用新发布的 Gradio Blocks 的技能,所以我的辅助工具决定制作一个很酷的基于 Blocks 的 Gradio 应用程序来展示我的项目。永远不要放过一石二鸟的机会 🦆🐓
这就是我最终制作出来的东西!请留意未来的博客文章,我们将详细分解它是如何构建的 👀
你的第一个项目能学到什么?
由于每个项目都是独一无二的,你的学习之旅也将是独一无二的!根据“建构主义”学习理论,知识是高度个性化的,是通过积极地与我们已有的其他知识建立联系来构建的。例如,通过我的播放列表生成器项目,我必须学习 Sentence Transformers 支持的各种预训练模型,以便找到一个适合我的用例的模型。由于我在 Hugging Face Spaces 上使用 Gradio,我学习了如何在 Hugging Face Hub 上托管我的嵌入,并将其加载到我的应用程序中。最重要的是,由于我有大量歌词需要嵌入,我寻找了加快嵌入过程的方法,甚至学习了Sentence Transformers 的多处理器支持。
一旦你完成了第一个项目,你会发现会有更多的工作想法!玩得开心,别忘了在 hf.co/join/discord 🤗 和我们分享你的项目以及你学到的一切。
进一步阅读