Posted on

QLoRA – Efficient Finetuning of Quantized LLMs

QLoRA 擴展了 LoRA,透過量化原始網路的權重值來提高效率,從高解析度資料類型(如 Float32)到較低解析度資料類型(如 int4)。這會減少記憶體需求並加快計算速度。

什麼是QLoRA

QLORA(Quantized LoRA)方法是一種用於大型語言模型(LLMs)的微調的新方法。傳統上,微調大型模型需要龐大的計算資源,而QLORA則提出了一種可以在GPU上進行低成本微調的方法。QLORA的關鍵創新在於使用了4位量化技術,並引入了可訓練的低秩適配器權重,從而大幅降低了微調過程中所需的記憶體,並且在不影響模型性能的情況下實現了相當於16位完全微調基準的預測性能。

QLoRA 技術所做的三個面向改進

  • 4-bit 常態浮點(NormalFloat):這是一種資訊理論上最優的量化資料類型,適用於服徠常態分佈的資料。與4-bit 整數和4-bit 浮點相比,它在實踐中能取得更好的效果。量化是指用更少的位數來表示數據,從而降低記憶體佔用。
  • 雙量化(Double Quantization):這種方法會量化量化常數本身,可以節省大約每個參數0.37 位(例如對於一個65B 參數的模型,可以節省大約3GB 內存)。量化常數是量化過程中產生的一些中間值。
  • 分頁優化器(Paged Optimizers):這利用了NVIDIA 統一記憶體的功能,避免在處理包含長序列的迷你批次資料時梯度檢查點(gradient checkpointing) 造成的記憶體激增。梯度檢查點是一種訓練技巧,可以節省內存,但可能會降低精度。

由上圖可知,QLoRA 利用了nVidia 統一記憶體功能,當GPU 記憶體不足時,該功能允許GPU->CPU 無縫頁面傳輸,從而管理GPU 中突然出現的記憶體峰值,並協助解決記憶體溢出/超限問題。

利用QLoRA所做的研究

由於 QLORA 的高效性,可以進行深入的指令微調和聊天機器人效能研究,所涉及的模型規模是常規微調因記憶體開銷而無法企及的。 因此,提出論文的團隊針對多個指令微調資料集、模型架構以及參數規模介於 80M 到 65B 的模型訓練了超過 1000 個模型。 除了證明 QLORA 能恢復 16 位元精度效能(§4)以及訓練出最先進的聊天機器人 Guanaco(§5)之外,還分析了訓練模型的趨勢。

首先,他們發現資料品質比資料集大小重要得多,例如,一個包含9k 個樣本的資料集(OASST1) 在聊天機器人效能方面優於一個包含45 萬個樣本的資料集(子集化的FLAN v2 ),即使兩者都旨在支持遵循指令泛化。

其次,他們展示了強大的大規模多任務語言理解(MMLU) 基準測試性能並不意味著強大的Vicuna 聊天機器人基準測試性能,反之亦然- 換句話說,對於給定任務而言,數據集的適用性比大小更重要

相關資源:

Posted on

LoRA (Low-Rank Adaptation)

LoRA(Low-Rank Adaptation)是什麼

LoRA是一種有效的參數微調技術,可幫助改善大型語言模型在特定任務上的效能表現,並且具有較低的運算和儲存成本。它是一種用於在大型語言模型(LLM)上進行參數微調的技術。 它旨在透過降低模型參數的秩(rank)來減少模型的複雜度,從而提高模型的泛化能力和適應性。

在傳統的參數微調過程中,常常會遇到過擬合的問題,特別是當訓練資料較少或訓練資料與目標任務不符時。 LoRA透過引入一個低秩的參數矩陣,將原始的高維參數矩陣分解成兩個低秩矩陣的乘積,從而降低模型的複雜度。 這種降維的方式可以有效地減少模型的參數量,減緩過度擬合的情況,並提高模型的泛化能力。

LoRA的主要優點

  • 更快的訓練速度 :將原始的高維度參數矩陣分解成低秩矩陣,可以大幅減少模型的參數數量。
  • 更低的計算成本 : 將原始的高維度參數矩陣分解成低秩矩陣,進而降低模型的計算和儲存成本。它不是添加層,而是為參數添加值,不會導致推理延遲。
  • 更少的泛化損失: LoRA能夠提高模型的泛化能力,使其更能適應不同的任務和領域。

LoRA流程說明

  • 使用預訓練的 LLM 權重初始化 A 和 B 矩陣。
  • 將 LLM 應用於特定任務的訓練數據集。
  • 在訓練過程中,只有 A 矩陣會針對訓練數據集(輸入資料(X))進行微調。
  • 訓練完成後,獲得了針對特定任務適應的 LLM,也就是H(輸出)。

運作原理

在LoRA中,一組新參數同時加入了網路WA和中WB。這些網路利用低秩權重向量,其向量的維度表示為dxr和rxd。在這裡,「d」代表原始凍結網路參數向量的維度,而「r」表示所選的低秩或更低維度。值得注意的是,「r」的值越小,模型訓練過程就越加速和簡化。確定適當的「r」值是LoRA中的關鍵決策。選擇較低的值會導致更快且更具成本效益的模型訓練,但可能不會產生最佳結果。相反,選擇較高的「r」值會增加訓練時間和成本,但會增強模型處理更複雜任務的能力。

LoRA的運作方式是,首先需要一個預先訓練的LLM,並凍結其大部分參數。然後,將這些凍結的預訓練模型權重與可訓練的秩分解矩陣一起注入到變壓器的每一層中。這樣做有助於精細化模型,特別是在低資源硬體上調整模型。

從上表可以看出,LoRA 方法的結果與經典的微調方法相當,可以用更少的時間和資源獲得或多或少相同的結果,並且有更快的執行時間和更短的訓練時間,真是太棒了!

結論

  • LoRA 是一種模型適應技術,可減少 LLM 中的參數數量,同時保持其效能。
  • 它透過將LLM的權重分解為低秩矩陣(共同特徵)和隨機矩陣(特定於任務的變體)來實現這一點。
  • 低秩矩陣和隨機矩陣相結合產生一個特定於任務的適配器,該適配器可以根據特定任務自訂 LLM。
  • LoRA 在訓練速度、運算效率和模型大小方面具有優勢,使其適合資源受限的環境。
  • LoRA 多數的成果比 Fine-tuning 的成果還要好,並且訓練的參數量遠小於 Fine-tuning。

更多資訊請見

LoRA: Low-Rank Adaptation of Large Language Models:

Posted on

Retrieval-Augmented LLMs

檢索增強生成(RAG)的工作流程

從使用者查詢開始,透過向量資料庫檢索,到填入提示,最終形成回答的整個過程。

RETA-LLM框架可以看作是實現RAG目標的一種具體實現方式,它提供了一套模組化的工具和方法來將外部知識整合到語言模型中,以提升其產生答案的能力。

RETA-LLM Framework

研究論文: https://arxiv.org/pdf/2306.05212v1

過去通用的LLM增強工具包(如LangChain)與RETA-LLM有所不同,RETA-LLM專注於檢索增強LLMs,並提供更多的插件模組。

檢索增強LLMs使用兩個模組的檢索和生成策略:

  • 根據用戶的請求檢索文件或段落(文件檢索模組)
  • 利用這些相關文件作為參考生成答案(答案生成模組)。

除了這兩個基本模組外,RETA-LLM還提供了三個可選模組:

  • 請求重寫模組,以使用戶當前的請求更完整和清晰
  • 萃取模組,從檢索到的整個文件內容中提取相關段落或片段
  • 事實檢查模組,以驗證生成答案中是否存在事實錯誤

這些可選模組可以使IR系統和LLMs之間的交互更加有效和順暢。RETA-LLM中LLMs和IR系統之間的解綁更加徹底,這使得搜索引擎和LLMs的定制更加方便。

RETA-LLM的框架圖

RETA-LLM的工作流程如下:

  • 使用請求重寫模組修改目前使用者請求,使其完整且清晰。 由於使用者可能向RETA-LLM提出一系列問題,目前使用者請求的語意可能不完整。 例如,使用者可能會問「經濟學院怎麼樣?」而歷史請求是「介紹資訊學院的專業」。 在這種情況下,使用者的準確意思是「介紹經濟學院的專業」。 由於LLMs在對話式密集檢索中顯示出出色的重寫查詢能力,RETA-LLM將當前使用者請求和先前的對話歷史提供給LLMs進行重寫。
  • 然後,RETA-LLM使用文件檢索模組根據修訂後的使用者請求從外部語料庫中檢索相關文件。 文檔檢索模組是與IR系統連接的模組。 它從外部知識語料庫中檢索相關文件並傳回前K個。 。
  • 接下來,RETA-LLM使用段萃取模組從檢索到的文件中提取與使用者請求相關的片段,以形成參考文獻。 由於LLMs的輸入長度限制(通常為2048或4096個標記),因此不可能直接將所有前K個相關文件內容連接起來作為它們產生答案的參考文獻。 透過截斷文件內容的瑣碎方法可能會遺失其中的重要資訊。 因此,RETA-LLM重複使用LLMs自身從修訂後的請求中提取相關片段。 由於一個文件的長度也可能超出限制,RETA-LLM採用滑動視窗策略逐步擷取片段。 在我們的預設配置中,滑動視窗大小和步長設定為512和256。 然後,這些片段被連接在一起作為參考文獻。
  • 此外,RETA-LLM使用答案產生模組為使用者請求產生答案。 如同先前的研究所建議的,透過提供來自外部語料庫檢索到的參考文獻,LLMs可以產生更準確的答案。
  • 最後,RETA-LLM使用事實檢查模組驗證產生的答案是否包含事實錯誤,並為使用者要求輸出最終回應。 儘管提供了產生的額外證據,LLMs也可能出現幻覺。 有必要設計一個模組進行進一步的事實驗證。 由於LLMs具有強大的自然語言理解能力,我們將參考文獻和生成的答案提供給它們進行判斷。 因此,RETA-LLM可以決定是否輸出產生的答案,或只是說「我無法回答這個問題」。

請注意,LLMs的所有輸入都包含在指示或提示中。 如圖1所示,在RETA-LLM中完全解開了IR系統和LLMs之間的連結。 我們RETA-LLM中的這種分離設計使用戶可以自訂自己的個人搜尋引擎和LLMs。

知識檢索的過程

  • 內建工具增強助手功能: 內建的工具可以將上傳的文件中的外部知識與助手功能結合起來,使助手能夠存取並利用這些外部知識來回答使用者的問題。
  • 內容分塊、索引和嵌入儲存: 上傳的檔案內容將被分成區塊,然後進行索引和嵌入儲存。 這意味著文件內容將被切割成較小的片段,每個片段都會被賦予一個特定的標識,並且會轉換成向量表示,以便更有效地處理和檢索。
  • 檢索嵌入以回答輸入查詢: 當使用者提出查詢時,系統會將檢索嵌入的向量表示以尋找與查詢相關的內容區塊。 這些內容區塊中包含的知識將被用來回答使用者的查詢,以提供更準確和全面的答案。

RAG的挑戰

  • 檢索模型: 選擇合適的檢索模型是一項挑戰。 不同的檢索模型可能適用於不同的場景,因此需要仔細選擇以確保檢索的效果和效率。
  • 稠密或稀疏表示: 在RAG中,可以使用稠密或稀疏的表示來表示檢索到的內容。 稠密表示通常具有更高的維度和更多的信息,但也可能更加計算密集。 稀疏表示則可能更加高效,但可能會遺失某些細節資訊。
  • 內容區塊的單位: 將內容分成適當的區塊是一個挑戰。 區塊的大小和粒度會影響到檢索和處理的效率,因此需要找到一個合適的單位來平衡資訊的完整性和處理的複雜性。
  • 類似的參考引入噪音: 當有多個相似的參考資料時,可能會引入噪音,使系統難以確定哪個參考是最相關的。 這可能會影響答案的準確性和一致性。
  • 有些問題需要跨文件引用來回答: 某些問題可能需要引用多個文件中的資訊才能進行回答。 這增加了檢索和整合資訊的複雜性,需要係統能夠有效地處理跨文件的引用和關聯資訊。
Posted on

提示工程框架的概念

明確具體的提問

  • 請求模型採用一個人物角色
  • 使用分隔符清楚地指示輸入的不同部分
  • 指定完成任務所需的步驟
  • 提供示例
  • 指定輸出的期望長度

以下為一個範例

In-Context Learning和Chain-of-Thought

  • In-Context Learning(上下文學習): 這是指模型在學習和處理文字時能夠考慮上下文資訊的能力。 在上下文學習中,模型不僅僅關注單字或短語的訊息,而是根據前後文的內容來理解當前文本的含義。 這種能力使得模型能夠更好地理解文本的語境,從而產生更準確和連貫的輸出。
  • Chain-of-Thought(思維鏈): 這指的是模型在生成文本時能夠保持連貫性和邏輯性的能力。 在思維鏈中,模型可以根據前面產生的內容來決定後續產生的內容,並保持文字的一致性和邏輯性。 這種能力使得模型能夠產生更連貫和有意義的文字輸出。
圖片來源: https://arxiv.org/pdf/2205.11916.pdf

Tree-of-Thoughts思維樹

思考樹(ToT)是一種透過將複雜問題分解為更易於解決的小問題,為LLM推理提供了更結構化的提示框架。

與在鏈中推理的CoT不同,ToT以樹的形式組織其解決問題的策略。每個節點都被稱為“思維”,是一個連貫的語言序列,是通往最終答案的一步。

透過將問題劃分為離散的「思想」單元——從填字遊戲中的一系列簡短單字到數學方程式的一個組成部分——ToT確保問題的每個階段都得到系統的解決。

圖片來源: https://arxiv.org/pdf/2305.10601.pdf

在「oracle模式」下,ToT的表現比CoT還要好

Posted on

基於神經網路的語言模型

基於神經網路的語言模型

基於神經網路的語言模型是一種利用深度學習技術,特別是透過循環神經網絡(RNN)或注意力機制(Transformer)的模型,來處理自然語言文本並生成下一個詞彙的模型。相較於傳統的方法,這種模型具有以下特點:

  1. 直接學習預測下一個詞彙: 這些模型直接從大量的文本資料中學習,不需要手動設計特徵或規則。它們通過觀察先前的詞彙序列,學習預測接下來的詞彙。
  2. 利用詞彙相量表徵語意資訊: 在進行預測時,這些模型使用詞彙的向量表示,這些向量捕捉了詞彙之間的語意關係。這使得模型能夠捕捉到詞彙之間的語義相似性,而不僅僅是單純的字符匹配。
  3. 克服死板的字符匹配: RNN和Transformer網絡並不僅僅是計算連續N個詞彙的頻率,它們能夠捕捉到更複雜的詞彙之間的關係,包括不同詞彙之間的語義相似性和語境相依性。
  4. 減少稀疏性: 由於詞彙向量化,模型能夠減少稀疏性,從而可以從有限的資料中學習到更豐富的詞彙組合和上下文意義。這意味著即使在有限的資料情況下,模型也能夠產生更加流暢和自然的文本。

依據用戶的指示,LLMs可以執行各種從所未見的新任務,甚至不需要任何樣本、範例。

T5 (Text-to-Text Transfer Transformer) 模型

所有自然語言處理的任務,都可以化為序列對序列的生成任務

缺點包括:

  • 只能執行已經學過的任務
  • 對提示極其敏感,無法泛化
  • 缺乏推理能力,無法處理新任務
  • 即使在已知任務上,性能也可能有限
  • 有著輸入和輸出長度的限制。

LLM的演化歷史


大型語言模型具有以下特別能力:

  1. In-context learning(上下文學習): 這些模型能夠通過理解輸入文本的上下文來進行學習和產生輸出。它們能夠利用先前的信息和對話歷史來生成更加連貫和相關的回應。
  2. Instruction following(遵循指示): 大型語言模型能夠理解和遵循輸入中的指示或命令。它們能夠從自然語言描述中抽取出指示的含義,並執行相應的操作或生成符合指示的輸出。
  3. Step-by-step reasoning(逐步推理): 這些模型能夠通過逐步推理的方式來解決複雜的問題。它們能夠理解問題的各個步驟,從中推斷出答案或採取相應的行動,進而解決問題。

微調過程

微調過程如下:

  1. 從預訓練的 GPT 模型開始。
  2. 使用反向傳播算法訓練模型以最小化誤差。
  3. 使用上下文學習技術提高模型的性能。
  4. 使用元梯度 AWICL 算法進一步提高模型的性能。

此圖表顯示了微調過程的各個步驟

Dual View 是一種 上下文學習 技術,允許模型考慮輸入句子和查詢句子的上下文。它通過向模型提供兩個視圖來實現:

Posted on

Phi-2 vs Phi-3大語言模型初探

Phi-2 模型介紹

官方介紹: https://www.microsoft.com/en-us/research/blog/phi-2-the-surprising-power-of-small-language-models/

Phi-2 是一個擁有27 億個參數的 Transformer。它使用與Phi-1.5相同的資料來源進行訓練,並使用由各種 NLP 合成文字和過濾網站組成的新資料來源進行了增強(出於安全性和教育價值)。當根據測試常識、語言理解和邏輯推理的基準進行評估時,Phi-2 在參數少於 130 億的模型中展示了近乎最先進的性能。

Phi-3模型介紹

官方介紹: https://azure.microsoft.com/en-us/blog/introducing-phi-3-redefining-whats-possible-with-slms/

Phi-3-Mini-128K-Instruct 是一個擁有 38 億參數的輕量級最先進的開放模型,使用 Phi-3 資料集進行訓練。該數據集包括合成數據和經過過濾的公開網站數據,重點是高品質和推理密集屬性。

在初始訓練後,該模型經歷了訓練後過程,其中包括監督微調和直接偏好優化,以增強其遵循指令和遵守安全措施的能力。當根據測試常識、語言理解、數學、編碼、長期上下文和邏輯推理的基準進行評估時,Phi-3 Mini-128K-Instruct 在模型中展示了強大且最先進的性能130 億個參數。

指令實測

模型角色設定: You are a data organizer and will summarize the entered articles.

輸入文字:

Spotlight on Disability:IN Partners using technology to enhance the accessibility of products we use every day.
Amtrak
Amtrak Provides Accessibility Upgrades at Utah Stations

WASHINGTON, DC – Amtrak customers can enjoy a more accessible and comfortable experience at the Green River and Helper, Utah stations following the completion of $5 million in upgrades. Amtrak’s California Zephyr stops twice daily at each station while traveling between Chicago and Emeryville,

Apple
The Right Shortcuts Can Give Your iPhone Superpowers. Here’s How.| WashingtonPost.com

Take the pain out of tedious tasks with Apple’s Shortcuts app.

Aira
Free Aira Access Offers by State & Province | Aira.io

At Aira, we are committed to expanding access to visual information for everyone. In this spirit, we work with Access Partners all over who provide Aira for free to their students, customers, residents, and visitors. This means anyone who is at one of the below Access locations can open the Aira app on their smartphone and instantly be connected to a professional visual interpreter. If you’re interested in finding out where you can connect with a visual interpreter for free in your state of province, read on.

AWS
Announcing Accessibility Conformance Reports (ACRs) in AWS Artifact

Accessibility Conformance Reports (ACRs) for AWS products and services are now available on AWS Artifact, a self-service portal for AWS compliance-related information. ACRs are documents that demonstrate the accessibility of AWS services.

Through AWS Artifact, you can download ACRs on-demand to understand the accessibility of a specific AWS product or service. AWS ACRs utilize the ITI Voluntary Product Accessibility Templates (VPAT®) and reference various accessibility standards including Section 508 (U.S.), EN 301 549 (EU), and Web Content Accessibility Guidelines (WCAG).

Google
The Best Google Docs Keyboard Shortcuts for Boosting Your Productivity | Wired.com

Learn how to use keyboard shortcuts instead of mouse clicks for common tasks in Google Docs. You might be surprised at how much time you save.

Starbucks
All the Changes Starbucks Made to Its Cold Cups and Lids to Reduce Plastic and Help Visually Impaired People

The Starbucks tall, grande and venti cups will now all use the same lid.

輸出回應 – phi-2-GGUF

模型名稱: TheBloke/phi-2-GGUF/phi-2.Q2_K.gguf

模型首頁: https://huggingface.co/TheBloke/phi-2-GGUF

模型回應:

心得: 看不出關聯性…這根本不相關吧?

To remove a tree stump, cut down the tree first

How can you make sure the tree is cut off completely? Cut it with a chainsaw.

If you’re like most people, your backyard has an old tree stump that took up too much space and is now dead wood waiting for you to get rid of. Or perhaps you have a dead tree stump in front of your house that needs to come down soon. Either way, it’s time for the stump to go.

But before you can cut down that old tree stump and remove it, you need to know how to cut it correctly.

The first step is removing all branches from around the trunk. This will make your cutting easier.

Once your tree has been removed and all of its branches have been cut off, it’s time to start thinking about removing that stump. You can either rent a stump grinder or cut down the tree yourself. If you decide to do this, remember that there are two main ways in which to remove a tree:

  • Using a chainsaw
  • With an axe

The first method is easy to figure out and we’ll discuss it here. The second option requires a lot more experience (and, yes, a bit of courage), so if you don’t know how to use an axe or a chainsaw then you might want to leave that stump alone until you can call in the experts.

But first, what is a tree stump? Well, a tree stump is the portion of the tree that has been cut off after the entire trunk and branches have fallen. This is important because it lets you know when your tree has died or if it’s time to remove that tree from the ground. So how can you get this done?

Before we get into removing a tree, let’s talk about what happens inside trees during their lifetime (when they’re alive and not dead). As trees grow, their branches start out as leaves but eventually turn into woody tissue that is called “wood.” When the time comes for the tree to die, it starts shedding its old leafy leaves in order to let new ones emerge.

To cut down the entire tree, you have two options: cutting or grinding. Cutting requires a chainsaw and involves cutting branches one by one until all are gone. This is a much faster method if your tree is already dead or dying but it can also be dangerous if not done correctly. You’ll need to be very careful when you use the cutting method, especially if you don’t have experience in cutting down trees (or at least not with chainsaws).

Grinding a tree involves using an axe and/or chainsaw to cut through the trunk of the tree. This is one of the more dangerous methods because it involves cutting into the woody tissue that surrounds your living tree. It’s also time-consuming, requiring patience and skill in order to remove the stump completely.

When you need to cut down your tree (or even a branch), look out for branches and leaves around the trunk of the tree. If they aren’t there anymore, then it’s time to get cutting!

If you don’t have experience with cutting or grinding, start by removing branches from the outside until the inside is exposed. This will be helpful when you come to cut down your tree because once it dies or has been completely removed, there won’t be any leaves left on its trunk that could fall off and cause damage.

If you do have experience with cutting or grinding, make sure you get the whole job done right the first time around! If not, then look up some tips online about how to cut down your tree without damaging yourself or others. Remember, safety is key!

Finally, if you don’t know whether you can use a chainsaw or axe and you want to make sure that you’ll be safe when you do the job, talk to an expert first. They will guide you through the process of removing that tree stump before it’s too late!

輸出回應 – Phi-3-mini-4k-instruct-gguf

模型名稱: Phi-3-mini-4k-instruct-GGUF/Phi-3-mini-4k-instruct-Q8_0.gguf

模型首頁: https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-gguf

模型回應:

心得: 還不賴,phi-3試滿多次不同的輸入,成果真的還不錯,而且token長度可以到128k

Accessibility Improvements in Transportation: Upgrades at Utah Amtrak Stations

Amtrak has completed $5 million in accessibility upgrades for Green River and Helper stations in Utah, enhancing travelers’ experiences with the California Zephyr service. This investment ensures a more inclusive transportation system that caters to passengers with disabilities by improving station facilities.

Apple Shortcuts App: Streamlining iPhone Tasks for Enhanced Accessibility and Efficiency

The Apple Shortcuts app allows users to automate various tasks on their iPhones, providing a way to simplify daily routines and make technology more accessible to individuals with disabilities. The application’s customization options enable the creation of personalized shortcuts tailored for specific accessibility needs.

Aira: Connecting Visually Impaired Individuals Through Free AI-Powered Visual Interpretation Services

Aira, an innovative visual assistance platform, offers free access to its services through partnerships with Access Partners in various states and provinces. By connecting users of the Aira app with professional visual interpreters via their smartphones, visually impaired individuals can receive real-time guidance, making daily activities more manageable.

AWS Accessibility Conformance Reports: Enhancing Cloud Compliance and Inclusivity

Amazon Web Services (AWS) introduces the AWS Artifact platform to provide users with Accessibility Conformance Reports (ACRs), showcasing how each service adheres to accessibility standards like Section 508, EN 301 549, and WCAG. Users can download ACRs on-demand for a better understanding of AWS’ commitment to inclusivity in cloud computing services.

Google Docs Keyboard Shortcuts: Elevating Productivity with Accessibility Features

Adopting keyboard shortcuts in Google Docs reduces reliance on mouse clicks, improving accessibility and efficiency for users with motor disabilities or those who prefer a streamlined approach to document creation. Utilizing these shortcuts can significantly enhance workflow by reducing time spent navigating menus.

Starbucks’ Efforts in Reducing Plastic Waste and Enhancing Accessibility through Unified Cup Design

In its commitment to sustainability, Starbucks redesigned cold cups and lids across various sizes (tall, grande, venti) for reduced plastic waste. Moreover, the new uniform design also benefits visually impaired customers by simplifying identification of cup types and improving their overall experience at Starbucks outlets.

輸出回應 – phi-2-GGUF

模型名稱: TheBloke/phi-2-GGUF/phi-2.Q8_0.gguf

模型首頁: https://huggingface.co/TheBloke/phi-2-GGUF

模型回應:

心得: 雖然沒有太好但至少和原文有相關

  1. Amtrak customers can enjoy a more accessible and comfortable experience at the Green River and Helper, Utah stations following the completion of $5 million in upgrades.
  2. Aira offers free Visual Interpreter Access to their customers, residents, visitors at specific Access locations.
  3. All Starbucks’ tall, grande and venti cups will now use the same lid.
  4. Apple’s Shortcuts app can be used to take the pain out of tedious tasks with shortcuts and commands.
  5. ACRs are documents that demonstrate the accessibility of AWS services.
  6. Google Docs has keyboard shortcuts for common tasks which can save users time.
  7. Starbucks has made changes to their cold cups and lids in order to reduce plastic waste and help visually impaired people.

輸出回應 – phi-2-GGUF

模型名稱: kroonen/phi-2-GGUF/phi-2_Q8_0.gguf

模型首頁: https://huggingface.co/TheBloke/phi-2-GGUF

模型回應:

心得: 只剩下最後一項星巴克的內容了…

The article reports on the changes made by Starbucks to its cups and lids in order to reduce plastic waste and improve accessibility for visually impaired customers. The new design features a single lid that fits across most sizes of cups, eliminating the need for different types of lids. The article also mentions some of the other benefits of the new design, such as reducing foam leakage and making it easier to recycle.

輸出回應 – dolphin-2_6-phi-2.Q8_0.gguf

模型名稱: TheBloke/dolphin-2_6-phi-2-GGUF/dolphin-2_6-phi-2.Q8_0.gguf

模型首頁: https://huggingface.co/TheBloke/dolphin-2_6-phi-2-GGUF

模型回應:

心得: 摘要能力算還不錯

Disability:IN Partners is using technology to enhance accessibility of products we use every day. For example, Amtrak has upgraded its stations in Utah to make it more accessible for customers with disabilities. Apple’s Shortcuts app helps users save time by automating tedious tasks on their iPhones. Aira offers free access to visual information through their app for those who need it, and AWS provides Accessibility Conformance Reports (ACRs) to demonstrate the accessibility of their products and services. Google Docs keyboard shortcuts can boost productivity while Starbucks has made changes to its cups and lids to reduce plastic waste and help visually impaired people.

Posted on

免程式碼將ChatGPT串接到LINE對話

使用工具 – FancyAI

FancyAI網址: https://www.fancyai.co/

可輕鬆使用GPT大語言模型知識庫,介面化匯入文件(PDF, CSV, TXT)或網址,讓FANCY AI迅速掌握您的知識進行問答。只需30秒,即可與LINE官方帳號整合,建立分享知識Bot連結。更有視覺化的工作流程編排和對話紀錄功能!

AI大模型問答介面,可設定你專屬AI回答流程

FANCY AI 能力

  • AI ChatGPT知識客服: 結合你自己專屬知識,ChatGPT 24/7 的為您的用戶服務
  • 超快速精準匯入處理:自動分段,輸入,拆成問答,多種方式讓您處理的數據 (支持PDF,CSV,TXT,網址)
  • 簡單直覺操作AI大模型問答介面:讓你設定你專屬AI回答流程,可以自訂預設開場白,選擇性問題,個性化你的AI
  • 30秒串接好LINE官方帳號,分享連結:結合你的知識庫,LINE官方帳號直接用ChatGPT不間斷服務。

步驟一、創建OpenAI開發者使用的密鑰

首先要去你的OpenAI開發者平台,創建你的API Keys: https://platform.openai.com/api-keys。這樣其他應用程式才可以呼叫你的OpenAI帳號下的API(然後扣你的錢)

接著就是要付款給OpenAI,點此付款: https://platform.openai.com/account/billing/overview。單次可購買$5~$95美金(也就是最低約150左右)

OpenAI的API使用需要付費,價格資訊如下: https://openai.com/pricing

由上圖可知道,OpenAI的API計費單位為Token,下面會解釋甚麼叫做Token,也可以線上去測試某段文字的Token數量是多少,可以更精準地了解可能的花費。

可選擇模型的比較

甚麼是Token

在 API 處理提示之前,輸入會被分解為Tokens 。這些Tokens並未準確地在單字開始或結束的位置進行切割 – Tokens可以包含尾隨空格甚至子單字。

以下是一些幫助理解Token長度的有用經驗規則:

  • 1 個標記 ~= 4 個英文字符
  • 1 個令牌 ~= 3/4 個單字
  • 100 個標記 ~= 75 個單字
  • 1-2 句 ~= 30 個標記
  • 1 段 ~= 100 個標記
  • 1,500 個單字 ~= 2048 個標記

Token切割測試工具: https://platform.openai.com/tokenizer

步驟二、創建Line Bot帳號並為串接做準備

首先要申請一個Line API串接的開發者帳號: https://developers.line.biz/console/

創建帳號流程如下:

設定你的LINE BOT帳號為使用Webhook

接著這邊是在分享時未設定的部分,就是把預設的固定回復關掉,開啟 LINE Official Account Manager

打開Webhook並且關閉自動回應訊息,這樣所收到的訊息才會傳到我們的API裡面

步驟三、創建FancyAI帳號

創建帳號之後,首先要把帳號和你的OpenAI綁定,點OpenAI帳號後,把剛剛第一步驟創建的Key貼進去,這樣FancyAI才能夠呼叫你的OpenAI API

Fancy AI: https://www.fancyai.co/

新建一個應用,選擇簡單對話

設定與Line的串接 – 設定API秘鑰

Line Channel Access Token: 瀏覽剛剛創建的Line帳號的頁面MessageAPI -> Channel access token -> Issue將出現的字串複製進去

Line Channel Secret位於Basic settings下方

接著告訴Line要API的webhook位置: 選擇”應用>你的應用名字>Line API”

把這邊的webhook網址貼到剛剛LINE Developer的webhook設定位置

接著就可以測試你的機器人囉!!

Posted on

Segment Anything研究筆記

Segment Anything介紹

論文網址: https://arxiv.org/pdf/2304.02643.pdf

GitHub地址: https://github.com/facebookresearch/segment-anything

這份內容介紹了「Segment Anything」(SA)計畫,它包括了一個新的圖像分割任務、模型和數據集。使用高效的模型,在數據收集過程中建立了迄今為止最大的分割數據集,擁有超過10億個遮罩和1100萬張的圖像。這個模型設計和訓練成可提示,因此它可以進行zero-shot轉移到一系列任務,通過提示工程(prompt)實現。模型的zero-shot性能印象深刻,通常與或優於以前的完全監督結果競爭。他們公開了「Segment Anything Model」(SAM)和相應的數據集(SA-1B),以促進計算機視覺基礎模型的研究。

SAM模型由圖像編碼器、提示編碼器和遮罩解碼器三個組件組成,旨在實現高效運行和實時互動提示。數據引擎包括三個階段,從手動標註到半自動標註,最後實現完全自動生成遮罩。最終數據集SA-1B包括1100萬張高分辨率圖像和10億多個高質量分割遮罩,可供未來計算機視覺基礎模型的研究使用。該數據集的質量經過詳細分析,結果顯示自動生成的遮罩質量很高。

此外,文中還提到了有關模型效能、數據集特性以及公平性考這份內容介紹了「Segment Anything」(SA)計畫,它包括了一個新的圖像分割任務、模型和數據集。使用高效的模型,在數據收集過程中建立了迄今為止最大的分割數據集,擁有超過10億個遮罩和1100萬張許可和隱私尊重的圖像。這個模型設計和訓練成可提示,因此它可以進行零-shot轉移到一系列任務,通過提示工程實現。模型的零-shot性能印象深刻,通常與或優於以前的完全監督結果競爭。他們釋放了「Segment Anything Model」(SAM)和相應的數據集(SA-1B),以促進計算機視覺基礎模型的研究。

此外,文中還提到了有關模型效能、數據集特性以及公平性考慮的討論。該計畫的目標是促進基礎模型的發展,以應對圖像分割等廣泛的計算機視覺問題。整體來說,這個計畫提供了一個重要的資源,用於研究和開發計算機視覺基礎模型。

Segment Anything做了甚麼

1. 啟示來源:

  • 啟發自NLP的標記預測任務,並考慮如何為分割任務設計基礎模型

2. 定義分割任務:

  • 基於NLP的提示概念,SAM將其轉化為分割。提示可以是前景/背景點、粗略框、遮罩、或自由文本
  • 任務目標是根據給予的提示返回有效的分割遮罩。即使提示模糊,輸出仍應是合理的遮罩。

3. 預訓練策略:

  • 透過模擬各類提示序列進行預訓練,並將模型預測的遮罩與實際情況對照。
  • 即使遇到歧義的情境,如衣服與人的示例,模型仍應該能提供有效的遮罩。

4. 零樣本轉移:

  • 預訓練賦予模型根據不同提示進行推理的能力。
  • 通過工程化特定的提示,例如使用邊界框檢測器,可以解決具體的下游分割任務。

5. 分割的多面性:

  • 分割技術包括互動分割、邊緣檢測、超像素化等多種方法。
  • 本研究旨在產生一通用模型,可以適應多數分割任務,並透過提示工程來達成。

6. 與多任務分割的區別:

  • 傳統的多任務分割模型針對一組固定任務訓練,但SAM的模型在推理階段可以適應和執行不同的任務

7. 深入討論:

  • 提示和組合提供了一種策略,使模型更具擴展性,能夠完成許多不同的任務。
  • 透過組合的策略,模型可以作為更大系統的一部分進行運作,例如結合現有的對象檢測器進行實例分割。
從這個圖可以看出,SAM可以從同一個點的提示輸入,對照至多個不同的輪廓,這可以讓模型更具擴展性,藉由後續的訓練和組合完成更多不同的任務

Segment Anything Model (SAM) 簡介

SAM 是為了可以應對提示的分割而設計的模型。它主要包含三個組件:

  1. 圖像編碼器(image encoder):基於擴展性和強大的預訓練方法,SAM使用經過預訓練的Vision Transformer (ViT) 來適應處理高分辨率的輸入。該圖像編碼器每張圖片只運行一次,可以在對模型給出提示之前先運行。
  2. 提示編碼器(prompt encoder):SAM考慮兩組提示:稀疏(如點、框、文本)和密集(如遮罩)。SAM使用位置編碼來表示點和框,並為每種提示類型加上學到的嵌入;自由形式的文本則使用CLIP的文本編碼器。對於密集的提示(即遮罩),SAM使用卷積來嵌入它,並與圖像嵌入進行元素級的相加。
  3. 遮罩解碼器(mask decoder):該解碼器有效地映射圖像嵌入、提示嵌入以及輸出令牌到一個遮罩。在經過兩個解碼器區塊後,SAM放大圖像嵌入,然後使用一個MLP將輸出令牌映射到一個動態線性分類器,進而計算每個圖像位置上的遮罩前景概率。
這張圖展示了SAM模型的整體流程。一個高效的圖像編碼器會輸出一個圖像嵌入(表示),然後可以被各種不同的輸入提示有效地查詢,以實時的速度產生物體的遮罩。對於對應多於一個物體的模糊提示,SAM能夠輸出多個合法的遮罩以及相關的信心分數。

解決模糊性:對於模糊的提示,模型可能會輸出多個合理的遮罩。為了解決這一問題,SAM修改模型使其能夠對單一提示預測多個輸出遮罩。SAM發現3個遮罩輸出通常足以應對大多數常見情況。模型還會為每個遮罩預測一個信心分數(即預估的IoU)。

效率:整體的模型設計主要是考慮到效率。給定一個預先計算的圖像嵌入,提示編碼器和遮罩解碼器可以在一個網頁瀏覽器上、在CPU上、在約50ms內運行。這樣的運行效能使得SAM的模型可以實時互動地給出提示。

損失和訓練:SAM使用focal loss和dice loss的線性組合來監督遮罩預測。SAM使用幾何提示的混合來訓練可提示的分割任務。SAM模擬一個互動設置,每個遮罩隨機抽樣提示11輪,使SAM能夠無縫地融入數據引擎中。

Zero-Shot Transfer 實驗

「零樣本遷移」是機器學習中的一個概念,主要關注如何讓模型在沒有直接經過訓練的任務或類別上表現得很好。以下是其詳細解釋:

零次轉移(Zero-Shot Transfer)簡介:

  1. 定義:在機器學習中,當我們訓練一個模型來處理某種任務或分類某些類別,但希望它能夠處理從未見過的新任務或新類別時,我們稱之為「零次轉移」換言之,模型從未直接在某些任務或類別上進行過訓練,但希望我們仍然能夠在這些任務或類別上表現良好。
  2. 如何實現:這通常是透過利用與目標任務或類別相關的一些額外資訊來實現的,例如語義關係或屬性。例如,在圖像分類中,即使模型從未見過「斑馬」這個類別,但透過知道斑馬是黑白條紋的、與馬相似的動物,模型可能能夠正確地辨識出斑馬。
  3. 應用:零樣本學習的應用範圍廣泛,包括圖像分類、文字分類、語音識別等。在現實世界中,我們經常遇到新的任務或類別,而不是總是從頭開始訓練新的模型,所以零次轉移學習提供了一個有效的方法來適應這些新情境。
  4. 與其他轉移學習的區別:轉移學習通常意味著將一個任務中學到的知識應用到另一個相關任務中。當這種轉移不涉及模型中從未見過的新類別時,它被稱為“有的轉移學習」或「少射程學習」。而當轉移涉及到完全未見過的監督類別時,它被稱為「零次轉移學習」。

總之,「零次轉移」是關於如何使機器學習模型具有更強的泛化能力,從而能夠處理它從未直接經歷過的任務或類別。

在這篇論文中,我們提示SAM來:(1) 執行邊緣檢測,(2) 分割所有內容,即物體提議生成,(3) 分割檢測到的物體,即實例分割,以及(4) 作為概念驗證,從自由格式文本中分割物體。下圖為測試結果:

從單個前景點分割出一個對象。但由於一個點可能指向多個對象,這樣的任務定義起來是不確定的。大多數數據集的真實遮罩並未列出所有可能的遮罩,使得自動度量可能不可靠。因此,我們除了標準的mIoU指標外,還進行了一項由標註者對遮罩質量進行1(無意義)到10(完美)評分的人類研究。

結果:

  • 在使用mIoU的全套23個數據集的自動評估中,與RITM比較,SAM在其中16個數據集上表現更好。
  • 在進行歧義解決的“神諭”實驗中,SAM在所有數據集上都超過了RITM。
  • 人類研究的結果顯示,評分者總是將SAM的遮罩質量評分為高於RITM。而且,SAM的平均評分落在7到9之間,這意味著其遮罩質量相當好。

其他觀察:

  • 當點的數量從1增加到9時,各方法之間的差距會減少。
  • 使用隨機點取樣替代默認的中心點取樣時,SAM與基線之間的差距變得更大,但SAM在兩種取樣方法下都能獲得相似的結果。

使用SAM進行智慧標記

Roboflow採用了SAM來進行智慧標記,使用狀況可參考下面的影片

Posted on

U2Net模型的去背應用

官方GitHub: https://github.com/danielgatis/rembg/tree/main

安裝方式

CPU support

pip install rembg # for library
pip install rembg[cli] # for library + cli

GPU support

首先要去安裝onnxruntime-gpu,接著

pip install rembg[gpu] # for library
pip install rembg[gpu,cli] # for library + cli

使用範例

下面為一個讀取攝影機的簡單去背使用範例

import VideoStream
import cv2
import numpy as np
import time
from rembg import new_session, remove

videostream = VideoStream.VideoStream((1280, 720), 30, 0).start()
cam_quit = 0
total = 0
frame = 0

while cam_quit == 0:
    imageSource = videostream.read()
    imageSource = cv2.resize(imageSource, (640,360))
    aStart = time.time()
    # u2netp為model名稱
    output = remove(imageSource, session = new_session("u2netp") )
    aEnd = time.time()
    if frame <= 60:
        total = total + (aEnd - aStart)
        frame = frame + 1
    print("detect time: " + str(aEnd - aStart ))
    cv2.imshow("output", output)
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        print("avg detect time: " + str(total/frame))
        cam_quit = 1

videostream.stop()
cv2.destroyAllWindows()

Stable Diffusion WebUI Rembg

Stable Diffusion WebUI所使用的去背功能也是這個唷!

相關介紹文章: https://zhuanlan.zhihu.com/p/648234420

可以參考WebUI的參數去尋找相關程式碼可設定的部分,例如Erode size、Foreground threshold、Background threshold

模型去背測試

原始影像如下圖

模型列表

u2net

  • 檔案大小: 171,873KB
  • 處理時間: 1.741s

u2netp

  • 檔案大小: 4,468KB
  • 處理時間: 0.702s

u2net_human_seg

  • 檔案大小: 171,873KB
  • 處理時間: 1.997s

u2net_cloth_seg

  • 檔案大小: 172,066KB
  • 處理時間: 5.496s

silueta

  • 檔案大小: 43,138KB
  • 處理時間: 5.496s

isnet-general-use

  • 檔案大小: 174,461KB
  • 處理時間: 2.629s

isnet-anime

  • 檔案大小: 171,944KB
  • 處理時間: 2.533s
Posted on

影像分割模型介紹

Image Segmentation介紹

影像分割(Image Segmentation)是電腦視覺中的一個基本任務,目的是將數字影像劃分成多個片段(或稱為「超像素」),使得具有相似性質的像素群組成同一片段。影像分割的目的是簡化或改變影像的表示形式,使其更容易被分析。以下是關於影像分割的詳細介紹:

  1. 目標
    • 將影像中具有相似特性(如顏色、強度、紋理)的像素分到同一區域。
    • 賦予影像的每一個像素一個標籤,該標籤指示該像素屬於哪一物體或區域。
  2. 分割技術類型
    • 閾值分割:根據像素值的閾值將影像分成兩個或多個部分。
    • 基於區域的分割:從種子點開始,將相鄰的像素添加到區域中,直到符合某些條件。
    • 基於邊緣的分割:檢測影像中的邊緣(突然的強度變化)來劃分區域。
    • 基於聚類的分割:例如 K-means,將像素分為擁有相似特性的多個群體。
    • 神經網路和深度學習:如 U-Net, DeepLab 等模型,用於更複雜的影像分割任務。
  3. 應用
    • 醫學影像:例如,從 MRI 影像中識別出不同的器官或病變區域。
    • 遙感:劃分地表的不同區域,如水域、森林、城市等。
    • 物體識別和跟踪:識別影像中的特定物體。
    • 電腦視覺任務:如場景理解、影像修復、3D 建模等。
  4. 評估
    • 可以使用像 Jaccard 系數(Intersection over Union, IoU)這樣的指標來評估分割模型的性能。

影像分割作為電腦視覺中的一個核心任務,在許多應用中都扮演著重要的角色,且隨著深度學習的發展,其效果和應用領域持續擴展。

使用深度學習做影像分割

深度學習和神經網路在影像去背上已取得了驚人的成果。常見的模型如下:

  1. U-Net 結構:
    • U-Net是一種用於影像分割的卷積神經網路(CNN)結構。
    • 它具有縮小(下採樣)和擴展(上採樣)的部分,使其形狀像字母“U”。
    • U-Net非常適合進行像素級別的分類,如分離前景和背景。
  2. Mask R-CNN:
    • Mask R-CNN是一種用於實例分割的方法,可以同時偵測物件並生成對應的遮罩。
    • 它結合了Faster R-CNN(用於物件偵測)和一個額外的遮罩分支。
  3. DeepLab:
    • DeepLab是一個強大的影像分割模型,它使用了空間金字塔池化和全卷積網路。
    • 它能夠精確地捕捉物件的邊界,使其適合去背任務。

火紅的模型U-Net介紹

網路的介紹文章: https://ithelp.ithome.com.tw/articles/10240314

  • 起源:U-Net 最初是為了醫學影像分割而設計的,特別是在數據集相對較小的情境下。
  • 架構:U-Net 架構具有對稱的編碼器和解碼器部分。編碼器進行下採樣,而解碼器進行上採樣。兩者之間有跳躍連接,這意味著對應的編碼器和解碼器層之間的特徵被結合在一起,這有助於模型獲取更精確的位置信息。

去背改良版U2NET

網路相關教學文章: https://blog.csdn.net/xuzz_498100208/article/details/109912302

  • 起源:U^2-Net 被設計為一個更深的網絡結構,用於進行較為複雜的影像分割和去背工作。
  • 架構:U2-Net 的名稱意味著「U-Net 的 U-Net」,這是因為它的設計理念是將多個 U-Net 結構嵌套在一起。具體來說,它利用了深層和淺層的嵌套U-Net架構來捕獲多尺度特徵。U2-Net 的重要組件是其嵌套的殘差結構,這有助於模型學習從各種層次獲取的資訊。U2-Net的架構包括六個編碼器階段和五個解碼器階段,以及一個用於融合顯著地圖的模塊。它通過嵌套的U結構從不同階段有效提取多尺度特徵,從而實現了顯著對象檢測的優異性能。該方法對於克服現有骨幹網絡的限制和提高檢測性能具有重要意義。
  • 特性:由於其深度和複雜的架構,U^2-Net 在某些情境下可能比 U-Net 有更好的性能,特別是在需要捕獲多尺度特徵的情境下。