學習LLM大語言模型之路(二) - 大型語言模型最佳化:數據處理、向量搜尋與模型微調

更新 發佈閱讀 10 分鐘

學習內容

  • 了解 Tokenization、Embedding、向量搜索(FAISS、Chroma)
  • 學習如何微調 LLM(LoRA、PEFT)
  • 準備數據集(清理、標註、格式化)


1️⃣ 準備數據集(清理、標註、格式化)

  • 移除噪音、標點符號、格式化文本
  • 使用 JSON 標註數據,準備訓練集

🔹 數據清理

import re

def clean_text(text):

text = text.lower() # 轉換為小寫

text = re.sub(r'\s+', ' ', text) # 移除多餘空格

text = re.sub(r'[^\w\s]', '', text) # 移除標點符號

return text

raw_text = "Hello, LLM! 這是一個測試文本。"

cleaned_text = clean_text(raw_text)

print(cleaned_text) # "hello llm 這是一個測試文本"

🔹 數據標註

import json

data = [

{"text": "LLM 是什麼?", "label": "問答"},

{"text": "Transformer 是 NLP 的核心技術", "label": "知識"}

]

with open("dataset.json", "w") as f:

json.dump(data, f, ensure_ascii=False, indent=4)



2️⃣ Tokenization & Embedding

  • 使用 Hugging Face Tokenizer 進行分詞
  • 透過 OpenAI Embeddings 轉換文本為向量

🔹 什麼是 Tokenization(分詞)?

Tokenization 是 將文本轉換為 Token(子詞單位),讓 LLM 能夠理解和處理語言。

🔹 Tokenization 方法

vocus|新世代的創作平台

🔹 使用 Hugging Face 進行 Tokenization

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
tokens = tokenizer.encode("LLM 是什麼?", return_tensors="pt")
print(tokens) # 顯示 Token ID

🔹 Embedding(向量化)

🔹 什麼是 Embedding?

Embedding 是 將文本轉換為向量,讓 LLM 能夠進行語義理解與檢索。

🔹 使用 OpenAI Embeddings

from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
vector = embeddings.embed_query("LLM 是什麼?")
print(vector[:5]) # 顯示前 5 個向量值


3️⃣ 向量搜索(FAISS、Chroma)

  • 建立 FAISS 向量數據庫,進行相似度檢索
  • 使用 ChromaDB 儲存與查詢文本向量

🔹 什麼是向量搜索?

向量搜索讓 LLM 能夠 查找最相關的文本,適用於 檢索增強生成(RAG)

🔹 使用 FAISS 建立向量數據庫

from langchain.vectorstores import FAISS
from langchain.schema import Document

documents = [
Document(page_content="LLM 是大型語言模型,如 GPT-4"),
Document(page_content="LangChain 是 LLM 應用框架"),
Document(page_content="FAISS 是向量搜索庫")
]

vector_db = FAISS.from_documents(documents, embeddings)

query = "什麼是 LangChain?"
docs = vector_db.similarity_search(query)
print(f"檢索結果: {docs[0].page_content}")

🔹 使用 ChromaDB

import chromadb

chroma_client = chromadb.PersistentClient(path="./chroma_db")
collection = chroma_client.get_or_create_collection(name="llm_docs")

collection.add(
documents=["LLM 是大型語言模型", "LangChain 是 LLM 框架"],
ids=["doc1", "doc2"]
)

query = "什麼是 LangChain?"
results = collection.query(query_texts=[query], n_results=1)
print(results["documents"][0])


4️⃣ 微調 LLM(LoRA、PEFT)

  • 使用 LoRA 進行輕量級微調,降低計算成本
  • 透過 PEFT 只微調部分參數,提高效率

🔹 LoRA(低秩適應)

LoRA 是 輕量級微調技術,適用於 LLM 訓練

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "meta-llama/Llama-2-7b-hf"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

config = LoraConfig(
r=8, lora_alpha=32, target_modules=["q_proj", "v_proj"], lora_dropout=0.1
)
model = get_peft_model(model, config)

text = "LLM 是什麼?"
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs)

print(tokenizer.decode(outputs[0]))

🔹 PEFT(參數高效微調)

PEFT 讓 LLM 只微調 部分參數,降低計算成本:

from peft import PeftModel

peft_model = PeftModel.from_pretrained(model, "peft/llama-2-7b")
outputs = peft_model.generate(**inputs)
print(tokenizer.decode(outputs[0]))


5️⃣構建數據處理管道

🔹 數據流

graph TD;
Data[原始數據] --> Cleaning[數據清理];
Cleaning --> Tokenization[分詞];
Tokenization --> Embedding[向量化];
Embedding --> VectorDB[向量數據庫];
VectorDB --> LLM[LLM 推理];


6️⃣設計 Prompt Engineering 策略

🔹 Prompt Engineering 重要性

Prompt Engineering 讓 LLM 生成更準確的回應

常見策略:

Zero-shot Prompting:直接詢問

Few-shot Prompting:提供範例

Chain-of-Thought(CoT):引導推理

🔹 設計最佳 Prompt

prompt = """
你是一個專業的 AI 助理,請根據以下問題提供詳細解釋:
問題:什麼是 LLM?
請用簡單易懂的方式回答。
"""


7️⃣學習成果

🔹 掌握 NLP 數據處理流程,能夠清理、標註、格式化數據

🔹 熟悉 Tokenization & Embedding,能夠將文本轉換為向量

🔹 建立向量數據庫,提升 LLM 的檢索能力(RAG)

🔹 成功微調 LLM,降低計算成本,提高模型效能

🔹 設計 Prompt Engineering 策略,優化 LLM 回應品質


下回我們來探討一下Prompt Engineering的策略和實作。


留言
avatar-img
宅D嘉的開發人生
22會員
58內容數
加密貨幣很有趣,遊戲開發也很有趣,AI也有點意思,身為一個跨多領域的軟體工程師,喜歡研究新鮮的事物,歡迎來到我的世界,一起坐上這艘開往未來探索新奇的列車。
你可能也想看
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在AI說書 - 從0開始 - 17中,介紹了大型語言模型 (LLM)世界裡面常用到的Token,現在我們來談談OpenAI的GPT模型如何利用Inference
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們已經在AI說書 - 從0開始 - 17中,介紹了大型語言模型 (LLM)世界裡面常用到的Token,現在我們來談談OpenAI的GPT模型如何利用Inference
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 93 介紹了 The Corpus of Linguistic Acceptability (CoLA),其核心思想為:如果該句子在語
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 93 介紹了 The Corpus of Linguistic Acceptability (CoLA),其核心思想為:如果該句子在語
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 總結一下目前有的素材: AI說書 - 從0開始 - 103:資料集載入 AI說書 - 從0開始 - 104:定義資料清洗的函數 AI說書 - 從0開始 - 105
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 總結一下目前有的素材: AI說書 - 從0開始 - 103:資料集載入 AI說書 - 從0開始 - 104:定義資料清洗的函數 AI說書 - 從0開始 - 105
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
大型語言模型(Large Language Model,LLM)是一項人工智慧技術,其目的在於理解和生成人類語言,可將其想像成一種高階的「文字預測機器」,然而,它們並非真正理解語言。除了在上篇介紹的技巧可以協助我們在使用 LLM 時給予指示之外,今天我們會介紹使用 LLM 的框架。
Thumbnail
大型語言模型(Large Language Model,LLM)是一項人工智慧技術,其目的在於理解和生成人類語言,可將其想像成一種高階的「文字預測機器」,然而,它們並非真正理解語言。除了在上篇介紹的技巧可以協助我們在使用 LLM 時給予指示之外,今天我們會介紹使用 LLM 的框架。
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 93 介紹了 The Corpus of Linguistic Acceptability (CoLA),其核心思想為:如果該句子在語
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 93 介紹了 The Corpus of Linguistic Acceptability (CoLA),其核心思想為:如果該句子在語
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 以下陳述任務 (Task)、模型 (Model)、微調 (Fine-Tuning)、GLUE (General Language Understanding Evalu
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 以下陳述任務 (Task)、模型 (Model)、微調 (Fine-Tuning)、GLUE (General Language Understanding Evalu
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 93 介紹了 The Corpus of Linguistic Acceptability (CoLA),其核心思想為:如果該句子在語
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 延續 AI說書 - 從0開始 - 93 介紹了 The Corpus of Linguistic Acceptability (CoLA),其核心思想為:如果該句子在語
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News