啟動!如何開始你的第一個機器學習專案 🚀
機器學習世界的新手經常會遇到兩個反覆出現的問題。首先是選擇正確的學習庫,這在有如此多選擇時可能會令人望而生畏。即使你已經確定了一個庫並完成了一些教程,下一個問題是如何構思你的第一個大型專案並對其進行適當的範圍界定,以最大限度地提高你的學習效果。如果你遇到了這些問題,並且正在尋找一個可以新增到你的工具包中的新機器學習庫,那麼你來對地方了!
在這篇文章中,我將以 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 🤗 和我們分享你的專案以及你學到的一切。
進一步閱讀