起飞!如何开始你的第一个机器学习项目 🚀
'起飞!开始你的第一个机器学习项目 🚀'
对于机器学习领域的新手来说,通常会遇到两个常见的障碍。第一个是选择合适的库进行学习,在有众多选择的情况下可能会感到困惑。即使你已经选择了一个库并完成了一些教程,下一个问题是如何设计你的第一个大型项目并进行适当的范围确定以最大化学习效果。如果你遇到了这些问题,并且正在寻找一个新的机器学习库来增加你的工具箱,那么你来对地方了!
在本文中,我将以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笔记本中加载msmarco-MiniLM-L-6-v3模型的几分钟内,我就从嵌入一些句子并在它们上运行ST的一些实用函数中想出了一堆有趣的项目点子。
其次,Sentence Transformers是许多重要机器学习概念的入门点。例如,你可以使用它来学习聚类、模型蒸馏,甚至可以进入文本到图像的工作领域,如CLIP。事实上,Sentence Transformers如此多才多艺,以至于在GitHub上获得了近8000颗星星,有3000多个项目和包依赖于它。除了官方文档外,还有大量社区创建的内容(在本文末尾可以找到一些链接👀),而且该库的广泛使用使其在研究中非常受欢迎。
第三,嵌入是几个工业应用的关键。谷歌搜索使用嵌入来匹配文本与文本以及文本与图像;Snapchat使用它们来“在正确的时间向正确的用户提供正确的广告”;Meta(Facebook)使用它们进行社交搜索。换句话说,嵌入允许您构建诸如聊天机器人、推荐系统、零样本分类器、图像搜索、常见问题解答系统等等。
最重要的是,它还支持许多Hugging Face集成 🤗。
解决您的第一个项目
所以你决定了解一下Sentence Transformers,并在文档中完成了一些示例…然后呢?您的第一个自我驱动项目(我称之为Rocket Launch项目🚀)是您学习之旅中的重要一步,您会想要充分利用它!这是我在尝试新工具时喜欢遵循的一点建议:
- 脑放松一下,想想你知道该工具能做什么:对于Sentence Transformers来说,这包括生成句子嵌入、比较句子、为复杂搜索任务检索和重新排名、聚类以及使用语义搜索查找相似文档。
- 思考一些有趣的数据源:在Hugging Face Hub上有大量的数据集,或者您也可以参考一些列表,如awesome-public-datasets,以获取一些灵感。您经常可以在意想不到的地方找到有趣的数据-例如,您的市政府可能有一个开放的数据门户。您将花费相当多的时间处理数据,所以最好选择让您感到兴奋的数据集!
- 选择一个您有一些熟悉度的次要工具:为什么限制您的经验只学习一个工具?“分散练习”(又称“间隔重复”)意味着将学习分布在多个会话中,这已被证明是一种学习新知识的有效策略。一种积极做到这一点的方式是在不是主要学习重点的情况下练习新技能。如果您最近接触了新工具,那么这是一个很好的机会,通过对您的技能进行实战测试,从而将您的学习潜力放大。我建议在Rocket Launch项目中只包括一个次要工具。
- 构思:花点时间思考前三个步骤中的元素的不同组合可能是什么样子!没有坏主意,我通常尝试追求数量而不是过多强调质量。不久之后,您会找到一些激发您好奇心的想法✨
对于我第一个Sentence Transformers项目,我记得我有一小部分流行歌词数据集,我意识到我可以将其与ST的语义搜索功能结合起来创建一个有趣的播放列表生成器。我想,如果我能够要求用户提供一个文本提示(例如“我感觉狂野和自由!”),也许我可以找到与提示相匹配的歌曲的歌词!我还一直在使用Gradio制作演示,并且最近一直在通过新发布的Gradio Blocks扩展自己的技能,因此作为我的次要工具,我决定制作一个基于Blocks的酷炫Gradio应用程序来展示我的项目。不要错过一次用一块烤饼喂两只鸟的机会🦆🐓
这就是我最终做出来的东西!请密切关注未来的博客文章,我们将介绍如何构建它👀
从您的第一个项目中可以期待学到什么?
由于每个项目都是独特的,您的学习之旅也将是独特的!根据“建构主义”学习理论,知识是深层次的个人化,并通过积极地与我们已经拥有的其他知识建立联系来构建。通过我的Playlist Generator项目,例如,我不得不了解Sentence Transformers支持的各种预训练模型,以便我可以找到一个符合我的用例的模型。由于我在Hugging Face Spaces上使用Gradio,我学会了如何将我的嵌入主机托管到Hugging Face Hub并将其加载到我的应用程序中。最后,由于我有很多歌词需要嵌入,我寻找了加速嵌入过程的方法,甚至了解了Sentence Transformers的多处理器支持。
完成第一个项目后,您会发现您对要处理的事情有更多的想法!玩得开心,并别忘了与我们分享您的项目以及您学到的一切,可以在hf.co/join/discord上与我们交流 🤗
进一步阅读:
- 从嵌入开始
- Sentence Transformers和Hugging Face
- Sentence_Transformers用于语义搜索 – 作者:Omar Espejel
- Pinecone.io – 句子嵌入
- 句子嵌入 – 作者:John Brandt