# 課程介紹與目標
* 學習用大型語言模型與 Python 建立書籍推薦系統
* 將書籍描述轉換為數學表示進行內容比對
* 完成能幫助讀者找到下一本愛書的推薦引擎
* 課程由 JetBrains 支持,Dr. Jod Bell 開發
# 教學內容與應用範圍

* 理論簡介與實作導向
* 文字清理與資料前處理
* 使用向量搜尋找到最相似的書籍
* 用 LLM 判斷書籍主題與情感傾向
* 建立互動式推薦系統 Dashboard
* 可延伸應用於電影與商品等其他文字型推薦任務
# 適合對象
* 具備 Python 基礎與機器學習入門知識
* 不需深度學習或 NLP 背景即可跟上
# 講師背景
* Jody Burell 具備近十年 NLP 資料科學經驗
* 任職於 JetBrains
* 使用 PyCharm 示範開發流程
# 01. Preparing our text data

## 資料來源

* Kaggle 7K books dataset
* 欄位包含 ISBN、書名、副標題、作者、分類、封面縮圖、描述、出版日期、評分
## Starting a new PyCharm project
* 使用 PyCharm 建立 Python 專案與虛擬環境




## 開發工具與環境
* 套件包含 kagglehub、pandas、matplotlib、seaborn、python-dotenv、langchain、transformers、gradio、jupyter、ipywidgets
## 資料集初步檢視

* 約 6,810 本書 ISBN 唯一無重複
* 副標題欄位缺失率高
* 分類欄位過於分散需清理與標準化
* 描述欄位缺失率約 4% 為最重要依據
* 其他欄位包含出版年份、平均評分、頁數、評價數
---
## 缺失值檢查與熱圖分析

* 使用 Seaborn 繪製缺失值熱圖觀察缺失模式
* 副標題欄位大多缺失可直接棄用
* 分類、縮圖、描述缺失情況看似隨機
* 評分、頁數、評價數三欄呈現聯合缺失可能來自不同來源資料
## 描述欄位缺失檢查

* 建立二元欄位標記描述是否缺失
* 將出版年份轉換為書籍年齡
* 構建子集欄位頁數年齡描述缺失平均評分
* 使用 Spearman 相關係數與熱圖檢查關聯性
* 缺失描述與其他變數相關性弱不具偏差性
## 缺失值處理

* 缺失描述將被刪除因其為推薦系統核心依據
* 總計刪除 303 筆資料占比低於 5%
* 建立新資料框保留完整欄位紀錄
## 分類欄位問題


* 刪除缺失值後仍有超過 500 個分類
* 分類分布極不均衡存在長尾問題
* 常見分類如 Fiction 與 Juvenile Fiction 稀有分類僅 1-2 筆
* 後續需利用 LLM 進行文本分類與標準化
## 描述欄位檢查與清理


* 發現無效描述如單字 donation 或極短內容
* 計算描述欄位詞數作為品質衡量標準
* 詞數 1–4 無效

* 詞數 5–14 資訊不足
* 詞數 15–24 開始有意義但仍偏少
* 詞數 25 以上具足夠資訊可用於推薦
## 最終資料集

* 設定描述最少需 25 詞的過濾條件
* 篩選後剩餘約 5200 本書
* 雖刪除大量紀錄但保留描述品質足以支持推薦系統
## 最後的資料清理

* 副標題欄位獨立使用價值不高,與書名合併生成新欄位 title_and_subtitle

* 新增欄位 tag_description,將 ISBN 與描述結合確保唯一性
* 移除清理過程用到的暫時欄位:subtitle、missing_description、age_of_book、words_in_description

* 將乾淨資料存為 books_cleaned.csv 供後續使用
# 02. Vector Search

---
## 向量化與語意相似度


* 將文字轉換為數學向量,便於計算文本之間的相似性
* 向量資料可存入資料庫並用於檢索最相似的文件或書籍
* 最基礎概念來自詞向量 (word embeddings),相似詞距離接近,不同詞距離遠
## 詞嵌入與 Word2Vec


* Word2Vec 模型透過上下文學習詞的語意表示
* skip-gram 架構嘗試預測某詞前後可能出現的詞
* 相似語境的詞會形成相似向量,如 best、worst、funniest
* 侷限在於無法區分多重語境的同一詞,例如 bank


## Transformer 與自注意力機制


* Transformer 模型能理解詞在句子中的語境
* 透過自注意力機制計算一個詞與其他詞的關聯程度
* 編碼器 (encoder) 理解來源語言,解碼器 (decoder) 生成目標語言
* LLM 由此架構發展而來,可用於翻譯、生成與理解
## 編碼器模型與文件嵌入

* 編碼器模型適合理解完整序列語意
* RoBERTa 透過遮蔽詞預測 (masked word prediction) 學習語言表示
* 輸入句子後可提取文件向量 (document embeddings) 表示整段文字語意
* 書籍描述轉換為文件嵌入後可用於語意搜尋
## 向量資料庫與檢索

* 書籍描述嵌入存入向量資料庫並附上唯一 ID
* 查詢文本同樣轉換為向量後計算與資料庫向量的相似度
* 常用距離度量為 cosine similarity
* ID 可連回原始描述與書籍資訊以供推薦
## 效率與演算法
* 線性搜尋效率低,資料庫增大時檢索速度變慢
* 向量資料庫透過分群索引減少搜尋範圍
* 演算法在速度與準確度之間取平衡
* 向量資料庫已內建這些優化演算法,使用者可直接應用
---
## LangChain 與向量搜尋

* LangChain 是一個強大的 Python 框架,支援 RAG、聊天機器人、代理等應用
* 支援多家 LLM 供應商,也能直接使用 Hugging Face 開源模型
* 本專案使用 OpenAI Embeddings + Chroma 向量資料庫
## API 金鑰與環境設定
* 使用 `.env` 檔與 `dotenv` 套件乾淨地載入 API Key
* OpenAI 平台提供 API Key 與帳單功能,小額充值即可長期使用便宜模型
## 建立向量資料庫流程

* 從清理後的 `books_cleaned.csv` 載入資料
* 使用 tag_description(ISBN + 描述)確保檢索結果能對應原始書籍

* 將描述另存為純文字檔,每行一筆記錄
* 使用 `TextLoader` 載入資料並透過 `CharacterTextSplitter` 切分
* 使用 `OpenAIEmbeddings` 將描述轉換為向量

* 將結果存入 Chroma 向量資料庫
## 查詢與推薦
* 使用 `similarity_search` 對查詢語句建立嵌入並比對資料庫
* 初步結果僅包含描述,不利於使用者顯示
* 利用 tag_description 前置的 ISBN 快速對應回原始 DataFrame
## 清理查詢結果
* 從檢索結果抽取 ISBN(處理引號與型別轉換)
* 在 Pandas DataFrame 中過濾出符合 ISBN 的書籍資訊
* 可準確獲得標題與作者,而非僅有描述
## 封裝函式


* 建立 `retrieve_semantic_recommendations(query, k)` 函式
* 輸入查詢與推薦數量 k
* 內部流程:檢索 → 解析 ISBN → 過濾 DataFrame
* 輸出為 Pandas DataFrame,包含完整的推薦書籍清單
## 成果
* 測試查詢「a book to teach children about nature」得到合理推薦
* 包含經典童書如 *The Very Hungry Caterpillar*
* 系統能返回符合語意的多筆書籍推薦,第一版語意型推薦器完成
---
# 03. Text Classification

## 問題背景
* 原始資料集中的 categories 欄位過於雜亂且細碎
* 為了能用於篩選,需要壓縮成較少且有意義的分類
* 使用 LLM 的零樣本分類 (Zero-shot Classification) 來自動分類書籍
## 文本分類概念
* 文本分類是將文字分配到不同離散群組的任務
* 傳統模型即可完成,但 LLM 在語意理解上表現更佳
* 零樣本分類可直接使用預訓練模型,無需額外訓練
## 零樣本分類原理
* 輸入待分類文本與可能的分類標籤
* 模型根據語意理解直接判斷分類結果
* LLM 在大規模訓練數據中已學會書籍主題與分類的關聯
## 分類範例
* 輸入「a heartwarming journey of love and friendship」模型判定為 fiction
* 輸入「Edward Gibbon’s masterpiece」模型判定為 non-fiction
* 模型能根據語境區分不同主題與類型
## 資料集準備
* 原始 categories 欄位太多,過於細碎
* 篩選出至少有 50 本書的主要類別
* 建立簡化映射表:將前 12 大類別映射為 fiction 或 non-fiction
* 保留 juvenile fiction 與 juvenile non-fiction,並重新命名為兒童類別
## 已知標籤基礎

* 經過映射後,資料集中已有 3743 本書有已知標籤
* 這些資料可作為檢驗 LLM 分類結果的基準
## Hugging Face 與 Transformers

* Hugging Face 提供多種開源 LLM 模型
* 在任務分類頁選擇「Zero-shot Classification」模型
* 使用 Transformers 套件與 Hugging Face 模型互動
* 最常用的模型:BART-large-MNLI
## 在 PyCharm 的操作

* 可透過 PyCharm 內建 Hugging Face 工具選擇與下載模型
* 模型會快取在本地,避免重複下載
* 模型檔案龐大,需定期清理不用的模型
## 實際應用範例

* 使用已知的 fiction 書籍描述測試分類器
* 輸入描述與分類標籤 (fiction, non-fiction)
* 模型輸出分類機率,fiction 機率遠高於 non-fiction
* 透過 numpy argmax 取得最高機率對應的分類標籤
## 函式封裝

* 建立 generate_predictions 函式
* 輸入:文本序列與分類標籤
* 輸出:模型判斷的最可能標籤
---
## 驗證模型準確率


* 使用 fiction 與 non-fiction 各 300 本書進行測試
* 預測結果與實際標籤進行比對
* 正確率約 78%,約每 5 本錯 1 本
* 對於零樣本分類而言屬於不錯的表現
## 補全缺失分類


* 建立 ISBN 與預測結果清單
* 篩選 simple category 為缺失的書籍子集
* 使用 generate_predictions 產生分類結果
* 建立新 DataFrame,包含 ISBN 與預測分類
* 透過 merge 合併回原始資料框
* 使用 np.where 在缺失值處補上預測結果
* 最終 simple category 欄位無缺失,共有四個分類
## 嘗試更細分類

* Fiction 書籍佔比過半 (約 54%),有細分需求
* 嘗試過濾 Romance、Sci-Fi、Fantasy、Horror、Mystery 等類別
* 僅得到 16 筆觀測值,資料不足以驗證模型效能
* 缺乏標註數據會增加分類結果的風險
* 強調 LLM 與傳統機器學習模型一樣,需要檢驗與驗證
## 準備情感分類任務
* 下一步任務:將書籍描述分類為情感類別
* 情感類別包含 anger、disgust、fear、joy、sadness、surprise、neutral
* 可讓推薦系統依情感過濾,例如尋找愉快或懸疑的書籍
# 04. Sentiment Analysis

## 微調模型概念
* 以 RoBERTa 為例:保留嵌入層與編碼層,替換輸出層為情感分類器
* 使用小型標註情感資料集進行微調
* 模型保留語言理解能力,新增針對情感的專屬權重
## 使用 Hugging Face 微調模型

* 在 Hugging Face 選擇 Text Classification → Emotion 模型
* 最受歡迎的模型為微調後的 RoBERTa
* 支援 6 種基本情感與 neutral 分類



* 官方模型卡提供使用方式

* 評估準確率約 66%,顯著高於隨機基準 14%
* 可接受作為書籍描述的情感分類工具
---
## 修改情緒分類器參數

* 將 `return_all_scores` 改為 `top_k=None`
* 加入 `device="mps"` 以啟用 GPU
## 整體描述 vs 句子級別分析

* 整體描述分類結果單一,可能失真
* 拆分成句子後可捕捉多樣情緒
* 支援同時處理多句輸入
## 範例觀察

* 第一個句子被分類為「驚訝」
* 涉及祖父衝突的句子被分類為「恐懼」
* 其他句子出現「悲傷」「喜悅」等不同結果
* 證實句子級別分析更符合內容
## 多情緒處理策略

* 每本書的描述可能包含多種情緒
* 為每個情緒建立獨立欄位
* 將整本描述中該情緒的最高機率作為最終值
## 資料處理方法

* 使用 `numpy` 整理數據
* 建立情緒標籤清單與 ISBN 清單
* 撰寫 `calculate_max_emotion_scores` 函數
* 對每個句子排序情緒分數並提取最大值
## 實作流程


* 針對每本書拆分句子並進行情緒分類
* 將分類結果傳入處理函數取最大值
* 結果以字典儲存並轉為 DataFrame
* ISBN 作為索引鍵合併回書籍資料框
## 最終數據與觀察

* DataFrame 內含每本書的情緒最大機率分布
* 情緒分布合理,特別是「悲傷」機率偏高
* 結果適合作為推薦系統的輔助變數
---
# 05. Gradio Dashboard

# 建立儀表板介面

* 使用 Gradio 建構展示界面
* 導入最新含情緒欄位的 DataFrame
* Gradio 適合展示 ML 模型與 LLM 應用
* 目標是讓使用者能透過介面獲取書籍推薦
---
# 縮圖處理
* 書籍資料集中提供 Google Books 縮圖 URL
* 預設封面大小不一致,需在 URL 加參數獲取最大解析度
* 缺少封面的書籍會報錯,需以預設封面替代
* 使用 `np.where` 判斷缺失並替換為預設封面
# 建立推薦函式

* 重用向量資料庫建立流程:`text loader` → `text splitter` → `OpenAI embeddings` → `Chroma`
* 建立 `retrieve_semantic_recommendations` 函式
* 輸入:查詢 query、分類 category(預設 None)、情感 tone(預設 None)、Top K
* 初步取回 50 筆,再過濾分類與情感,最後取 16 筆作為輸出
* 分類過濾:四大類 fiction、non-fiction、children’s fiction、children’s non-fiction
* 情感排序:依情感機率排序(joy、surprise、anger、fear、sadness),對應 happy、surprising、angry、suspenseful、sad
# 建立展示函式
* 建立 `recommend_books` 函式
* 輸入:query、category、tone
* 取得推薦書籍 DataFrame 並處理展示格式
* 描述超過 30 個單詞時截斷並加上省略號
* 多作者情況下以分號分隔,顯示為「A and B」或「A, B, and C」
* 使用 F-string 建立 caption(書名 + 作者 + 截斷描述)
* 輸出格式:縮圖 + caption
# Gradio 儀表板設計

* 類別與情感選項清單,均包含 "All" 作為預設值
* 使用 `Blocks` 建立 Dashboard,選擇 `glass` 主題
* 頂部使用 markdown 顯示標題 Semantic Book Recommender
* 使用者互動區域:文字輸入框(含 placeholder)、分類下拉選單、情感下拉選單、查詢按鈕
* 推薦展示區:以 Gallery 方式顯示 16 本書縮圖與描述
# 儀表板測試
* 查詢「World War I」:回傳相關封面與描述,分類篩選後僅保留 fiction 書籍
* 依情感篩選,Sad 類別返回 Virginia Woolf 書籍
* 測試「a story about a troubled family set across many generations」:推薦結果與主題高度相關
* 排序為 suspenseful 時,對應的懸疑家族劇書籍排名靠前
# 教程總結
* 涵蓋 LLM 核心概念與應用:向量資料庫、零樣本分類、情感分析
* 展示 Hugging Face、OpenAI API 與 LangChain 的整合實作
* PyCharm 與 Hugging Face 工具整合提升開發效率
* 範例顯示即便僅用少量程式碼,也能建構強大 NLP 應用
---
# Terminology
* 向量嵌入(Vector Embedding):將文字或其他資料轉換為數值向量的過程,用於語意計算。
* 語意相似度(Semantic Similarity):衡量兩段文字在語意上的相似程度。
* 向量檢索(Vector Search):透過向量空間中距離比較,找出最相似的項目。
* 零樣本分類(Zero-shot Classification):不需特定任務訓練即可進行分類的技術。
* 大型語言模型(Large Language Model, LLM):基於深度學習,具備自然語言理解與生成能力的模型。
* 語意檢索(Semantic Search):基於語意理解而非關鍵字比對的搜尋方法。
* 詞嵌入(Word Embedding):將單詞表示為向量的技術。
* 文件嵌入(Document Embedding):將整段文本轉換為向量表示。
* 餘弦相似度(Cosine Similarity):衡量兩個向量之間角度相似度的數學方法。
* 歐式距離(Euclidean Distance):衡量向量間距離的常用方法。
* 主題建模(Topic Modeling):自動抽取文本中潛在主題的技術。
* 情感分析(Sentiment Analysis):分析文本中所表達的情緒傾向。
* 自然語言處理(Natural Language Processing, NLP):處理與理解人類語言的人工智慧領域。
* 資料前處理(Data Preprocessing):清理與整理資料以便模型訓練的步驟。
* 特徵提取(Feature Extraction):從原始資料中擷取有用特徵以供模型使用。
* 停用詞(Stop Words):在分析中通常會移除的常見無意義詞彙。
* 詞幹提取(Stemming):將單詞轉換為詞幹以減少詞形變化。
* 詞形還原(Lemmatization):將單詞還原為詞典中的基本形式。
* 詞袋模型(Bag of Words, BoW):一種忽略語序的文字表示方法。
* TF-IDF(Term Frequency-Inverse Document Frequency):衡量詞語在文件中重要性的方法。
* 自注意力機制(Self-Attention):Transformer 模型中的核心運算,用於捕捉上下文關係。
* Transformer 架構(Transformer Architecture):基於注意力機制的深度學習模型結構。
* 編碼器(Encoder):將輸入序列轉換為向量表示的模型部分。
* 解碼器(Decoder):將向量表示轉換回輸出序列的模型部分。
* 文本分類(Text Classification):將文本歸類到預定義類別的任務。
* 聚類分析(Clustering):無監督地將資料分組的技術。
* 主成分分析(Principal Component Analysis, PCA):用於降維的統計方法。
* UMAP(Uniform Manifold Approximation and Projection):高維資料可視化與降維技術。
* t-SNE(t-Distributed Stochastic Neighbor Embedding):常用於高維向量可視化的演算法。
* 召回率(Recall):衡量模型找到所有相關結果的比例。
* 精確率(Precision):衡量模型結果中相關項目的比例。
* F1 分數(F1 Score):精確率與召回率的調和平均。
* 向量資料庫(Vector Database):專門儲存與檢索向量的資料庫。
* Chroma 向量庫(Chroma Vector Store):一種開源向量資料庫,用於語意檢索。
* LangChain 框架(LangChain Framework):用於構建基於 LLM 應用的開發框架。
* Hugging Face Transformers:流行的開源 NLP 模型庫。
* Gradio 介面(Gradio Interface):快速建立互動式機器學習應用的工具。
* API 金鑰(API Key):驗證與授權使用外部服務的憑證。
* 虛擬環境(Virtual Environment):隔離 Python 專案依賴的環境。
* Pandas 資料框(Pandas DataFrame):處理結構化資料的 Python 資料結構。
* Matplotlib 繪圖(Matplotlib Plotting):Python 的基礎視覺化工具。
* Seaborn 視覺化(Seaborn Visualization):基於 Matplotlib 的高階統計視覺化工具。
* Kaggle 數據集(Kaggle Dataset):由 Kaggle 社群分享的開放資料。
* CSV 檔案(CSV File):以逗號分隔數值的常見資料儲存格式。
* Jupyter Notebook:互動式 Python 程式開發環境。
* IPyWidgets 控件(IPyWidgets):Jupyter 中的互動式小工具。
* 書籍推薦系統(Book Recommendation System):根據內容或偏好推薦書籍的系統。
* 內容型過濾(Content-Based Filtering):根據物品特徵進行推薦的方法。
* 協同過濾(Collaborative Filtering):根據使用者行為或偏好進行推薦的方法。
* 混合推薦系統(Hybrid Recommender System):結合多種方法的推薦系統。
* 儀表板介面(Dashboard Interface):用於呈現模型結果的互動式介面。
* 遺漏值模式(Missingness Pattern):指資料集中遺漏值是否呈現規律,可能暗示偏差來源。
* 缺失值熱圖(Missingness Heatmap):利用圖像顯示不同變數中遺漏值分佈的可視化方法。
* Seaborn 視覺化(Seaborn Visualization):基於 Matplotlib 的統計資料視覺化工具。
* Matplotlib Pyplot:Python 中用於建立圖表的核心繪圖模組。
* 缺失值指標(isna Indicator):用於標示資料中是否為缺失值的布林矩陣。
* 特徵標籤(Feature Label):圖表軸上的欄位名稱與變數標註。
* 系統性缺失(Systematic Missingness):當缺失值與特定特徵或群體相關時出現的模式。
* 偏差風險(Bias Risk):由遺漏資料造成的分析或模型偏斜。
* 敘述欄位(Description Field):書籍資料集中用來描述書本內容的核心文字欄位。
* 二元變數(Binary Variable):僅有兩種取值(如 0 與 1)的變數。
* NumPy Where 方法(NumPy Where Method):條件運算用於生成布林或指標變數。
* 書籍年齡(Book Age):以當前年份減出版年份計算的特徵。
* 子集選擇(Subset Selection):從資料框中擷取部分欄位進行分析。
* 相關矩陣(Correlation Matrix):顯示變數間相關性的矩陣。
* Spearman 等級相關(Spearman Correlation):適合處理非連續或等級資料的相關係數。
* Pearson 相關(Pearson Correlation):適合處理連續變數的線性相關係數。
* 熱圖標籤(Heatmap Labeling):在熱圖上標示變數名稱與數值。
* 解釋變數(Explanatory Variable):可能影響缺失情況的特徵欄位。
* 代表性檢查(Representativeness Check):確保保留下來的樣本能反映整體分布。
* 條件邏輯(Conditional Logic):在 pandas 中透過布林條件篩選資料。
* 缺失值刪除(Listwise Deletion):直接移除有缺失值的觀測。
* 書籍類別(Book Categories):資料集中描述書籍分類的欄位。
* 長尾分布(Long Tail Distribution):少數類別極度常見,多數類別極度稀少的分布。
* Value Counts 方法:pandas 中計算變數值頻率的函式。
* 類別正規化(Category Normalization):將雜亂或過細的分類統整為可用類別。
* 條件過濾(Conditional Filtering):依據自定義條件保留資料框內部資料。
* 樣本分布檢查(Sample Distribution Check):檢視變數的數值頻率以確認分布特徵。
* 欄位描述(Column Statistics):自動生成變數的統計摘要。
* 直方圖(Histogram):顯示數值變數分布的圖形。
* 單詞長度分布(Word Count Distribution):以直方圖檢視文字長度的變化。
* 描述欄位長度(Description Length):衡量書籍描述文字的字數或詞數。
* 無用描述(Useless Descriptions):過短或無資訊價值的描述內容。
* 分箱策略(Binning Strategy):根據範圍劃分數值變數的群組方法。
* 任意截點(Arbitrary Cutoff):根據直觀或檢視結果設定的分界點。
* 資料篩選(Data Filtering):依據條件移除或保留特定資料列。
* 書籍數量統計(Book Count Statistics):計算清理後剩餘的書籍數量。
* 樣本損失率(Sample Loss Rate):因清理資料而刪除的觀測比例。
* 代表性描述(Representative Descriptions):長度適中且包含足夠內容的描述。
* 偏差檢測(Bias Detection):檢查遺漏或刪除資料是否導致偏差。
* 書籍屬性(Book Attributes):書籍的年份、頁數、評分等欄位。
* 平均評分(Average Rating):書籍在資料集中獲得的平均分數。
* 頁數(Number of Pages):書籍的長度特徵。
* 評分數量(Rating Count):書籍被評分的次數。
* 類別長尾問題(Category Long-tail Problem):分類數據集中部分類別極少見的情況。
* 正規化類別(Normalized Categories):經過清理或歸一化後的標準化類別。
* 資料清理(Data Cleaning):處理遺漏值、錯誤值或無用資訊的過程。
* 可用樣本(Usable Samples):清理後保留下來的資料集。
* 書籍推薦核心特徵(Core Features for Recommendation):用於推薦的描述、類別與評分等欄位。
* 偏態檢查(Skewness Check):檢視資料分布是否偏離常態。
* 核心描述欄位(Core Description Field):推薦系統中最重要的書籍描述文字欄位。
* 副標題欄位(Subtitle Field):書籍資料中常見的補充標題文字欄位。
* 合併標題(Title-Subtitle Concatenation):將標題與副標題組合成單一字串的操作。
* NumPy Where 條件(NumPy Where Clause):根據條件在欄位中建立新值的方法。
* 類型轉換(Type Casting):將數值或缺失值轉換為字串或其他型別的過程。
* 書籍唯一識別碼(Book Unique Identifier):如 ISBN-13,用於唯一標識每本書。
* 標記描述欄位(Tagged Description Field):將書籍描述與唯一識別碼組合成的文字欄位。
* 欄位丟棄(Column Dropping):移除不再需要的中間處理欄位。
* 清理後資料集(Cleaned Dataset):完成清洗與篩選後的最終資料框。
* CSV 輸出(CSV Export):將處理後的資料框儲存為逗號分隔檔案格式。
* 向量化處理(Vectorization):將原始文字轉換為數值向量的過程。
* 向量空間(Vector Space):向量表示所在的高維數學空間。
* 語意距離(Semantic Distance):衡量兩段文字語意差異的數學值。
* 詞嵌入(Word Embedding):將單詞轉換成向量表示以捕捉語意。
* 文件嵌入(Document Embedding):將整段文本轉換為向量表示。
* Skip-gram 架構(Skip-gram Architecture):Word2Vec 中用於預測上下文的訓練方法。
* Word2Vec 模型(Word2Vec Model):早期流行的詞嵌入訓練模型。
* 上下文關聯(Contextual Relationship):詞語意義依照周邊詞語變化的特性。
* 多義詞問題(Polysemy Problem):同一單詞在不同語境下具有不同意義的情況。
* 自注意力(Self-Attention):計算詞語間關聯程度的核心機制。
* 位置編碼(Positional Encoding):為詞嵌入加入位置信息的技術。
* 注意力向量(Attention Vector):表示模型關注其他詞語程度的向量。
* 編碼器區塊(Encoder Block):Transformer 中由注意力與正規化組成的模組。
* Transformer 模型(Transformer Model):基於注意力機制的神經網路架構。
* 編碼器(Encoder):負責理解輸入語句的結構與語意。
* 解碼器(Decoder):負責生成或翻譯目標語句的模組。
* 預訓練模型(Pre-trained Model):已在大規模語料上訓練完成,可用於下游任務的模型。
* 下游任務(Downstream Task):利用預訓練模型處理的實際應用問題。
* Roberta 模型(Roberta Model):基於 Transformer 的語言理解模型,採用遮罩語言建模。
* 遮罩語言建模(Masked Language Modeling):隨機隱藏詞語並訓練模型預測的任務。
* CLS Token:特殊符號,用於標記序列的開始並生成整體表示。
* SEP Token:特殊符號,用於分隔或結束輸入序列。
* 向量資料庫(Vector Database):用於儲存與檢索向量的資料庫系統。
* 唯一 ID(Unique ID):向量與原始資料的對應索引。
* 餘弦相似度(Cosine Similarity):衡量兩向量相似度的常用方法。
* 線性檢索(Linear Search):逐一比較查詢向量與資料庫中所有向量的方法。
* 近似最近鄰搜尋(Approximate Nearest Neighbor Search, ANN):在大規模向量資料庫中快速查找相似向量的演算法。
* 向量索引(Vector Indexing):建立加速檢索的資料結構。
* 搜尋速度與準確率權衡(Speed-Accuracy Tradeoff):向量搜尋演算法中常見的效能折衷。
* 編碼器模型(Encoder Model):僅用於理解與表示輸入文本的模型架構。
* 解碼器模型(Decoder Model):專注於生成文本的模型架構。
* 編碼解碼器模型(Encoder-Decoder Model):同時用於理解與生成的模型架構。
* 文件檢索(Document Retrieval):從資料庫中找出與查詢最相關的文件。
* 向量查詢(Vector Query):將查詢語句轉換為向量並與資料庫比對。
* 相似度分數(Similarity Score):用於排序搜尋結果的數值。
* 書籍推薦(Book Recommendation):根據描述向量相似度選擇推薦的書籍。
* 書籍元資料(Book Metadata):如書名、作者、出版年份,用於補充檢索結果。
* 語意推薦(Semantic Recommendation):利用語意相似度進行推薦的方法。
* 向量化查詢流程(Vectorized Query Pipeline):從文字輸入到相似結果的完整處理過程。
* 大型語言模型(Large Language Model, LLM):以 Transformer 為基礎,具備強大語言理解與生成能力的模型。
* LangChain 框架(LangChain Framework):Python 中用於構建 LLM 應用的工具,支援向量搜尋、RAG、聊天機器人與代理。
* 向量搜尋(Vector Search):利用文字向量表示進行相似度檢索的方法。
* RAG 管線(Retrieval-Augmented Generation Pipeline):結合檢索與生成的自然語言處理流程。
* 專有模型供應商(Proprietary Model Provider):如 OpenAI,提供付費的語言模型服務。
* 開源模型(Open-source Models):如 Hugging Face 上的模型,可自由使用與實驗。
* 文本載入器(Text Loader):LangChain 方法之一,用於載入原始文字。
* 字元文字分割器(Character Text Splitter):將文件分割為可處理的片段。
* 文件嵌入(Document Embedding):將文件轉換成數值向量以供語意比較。
* OpenAI Embeddings:由 OpenAI API 提供的文件向量化模型。
* 向量資料庫(Vector Database):用於儲存與查詢文件向量的資料庫。
* Chroma 向量庫(Chroma Vector Store):開源向量資料庫,與 LangChain 常搭配使用。
* API 金鑰(API Key):與服務供應商溝通並計費的憑證。
* dotenv 套件(python-dotenv):用於載入環境變數與 API 金鑰的 Python 套件。
* Pandas 資料框(Pandas DataFrame):儲存書籍清理後資料的核心結構。
* 標記描述(Tagged Description):書籍描述前附加 ISBN 的欄位。
* 書籍唯一識別碼(ISBN Identifier):用來精確篩選書籍的欄位。
* 文字檔導出(Text Export):將描述存為純文字檔,以便 LangChain 載入。
* 分隔符號(Separator):設定文件分割的依據,如換行符號。
* 區塊重疊(Chunk Overlap):分割文件時,片段間的重疊長度。
* 區塊大小(Chunk Size):分割時的最大字元長度限制。
* 向量生成(Vector Generation):將文件片段轉換成嵌入向量的過程。
* 相似度搜尋(Similarity Search):根據向量相似度找出最相關的項目。
* 查詢變數(Query Variable):儲存使用者檢索語句的變數。
* K 值(Top K):控制相似度搜尋返回的推薦數量。
* 描述檢索結果(Description Result):初始檢索時返回的僅包含描述的結果。
* 資料框過濾(DataFrame Filtering):根據 ISBN 篩選推薦書籍的步驟。
* 字串拆分(String Split):分割描述字串以提取 ISBN 的操作。
* 型別轉換(Type Conversion):將提取的 ISBN 轉換為整數型別以比對。
* 條件過濾(Conditional Filtering):使用布林條件篩選 Pandas 資料。
* 函數封裝(Function Encapsulation):將檢索邏輯打包為可重複使用的函數。
* ISBN 清理(ISBN Cleaning):處理描述中的額外符號以正確解析編號。
* 批量 ISBN 列表(Batch ISBN List):收集所有推薦結果中的 ISBN。
* 書籍資料對應(Book Data Mapping):用 ISBN 對應描述與完整書籍資訊。
* pandas 相容性(pandas Compatibility):確保檢索結果與 DataFrame 型別一致。
* 環境變數載入(Environment Variable Loading):將 API 金鑰寫入環境供程式存取。
* OpenAI 平台(OpenAI Platform):提供 API 金鑰管理與計費的網頁。
* 使用限制(Usage Limit):設定 API 使用量上限以避免超額消耗。
* 嵌入模型(Embedding Model):專門將文本轉換成向量的語言模型。
* 成本效益模型(Cost-effective Model):像 Ada Embedding,低成本高效能。
* 記憶體效能(Memory Performance):處理大規模文件分割與嵌入的效率。
* 執行時間(Execution Time):嵌入與索引過程耗時的衡量。
* 查詢流程(Query Workflow):從輸入查詢到檢索結果的處理鏈。
* 書籍推薦(Book Recommendation):最終輸出的以標題與作者為主的結果。
* 語意檢索(Semantic Retrieval):利用語意相似度進行查詢的方法。
* 語意推薦(Semantic Recommendation):基於語意的書籍推薦流程。
* 文件管線(Document Pipeline):從載入、分割、嵌入到儲存的完整流程。
* 向量查詢函數(Vector Query Function):將檢索邏輯包裝成函式以簡化使用。
* 清理匹配(Clean Matching):避免全文匹配帶來的效能低落與不準確。
* 查詢結果映射(Query Result Mapping):將檢索描述結果映射回完整書籍資料。
* 類別欄位(Category Field):資料集中用來標示書籍分類的欄位
* 文本分類(Text Classification):將文字內容自動歸屬到不同離散類別的技術
* 篩選條件(Filter Criteria):設定用以過濾資料的限制條件
* 分面搜尋(Faceted Search):利用多維屬性過濾檢索結果的方法
* 少樣本學習(Few-shot Learning):模型僅用少量樣本即可適應新任務的能力
* 零樣本分類(Zero-shot Classification):無需額外訓練即可將文字分類到指定類別的技術
* 提示設計(Prompt Design):設計指令以引導模型完成任務的方法
* 先驗類別(Predefined Labels):在分類前設定的目標類別清單
* 預訓練模型(Pre-trained Model):已於大規模語料上訓練完成,可直接應用的模型
* 編碼器解碼器模型(Encoder-Decoder Model):結合編碼器與解碼器的 Transformer 架構
* 語意相似度(Semantic Similarity):衡量兩段文字語意接近程度的數值
* 標註資料(Labeled Data):已具備正確類別標籤的訓練或測試資料
* 非監督分類(Unsupervised Classification):無標註資料下自動分組文字的技術
* Hugging Face 模型庫(Hugging Face Model Hub):提供開源模型的託管平台
* 模型卡(Model Card):模型相關的文件與使用說明
* Transformers 套件(Transformers Library):Hugging Face 提供的 Python 函式庫,用於處理 LLM
* 任務型篩選(Task Filtering):依任務類型篩選 Hugging Face 模型的功能
* BART 模型(BART Model):結合自回歸與自編碼的 Transformer 模型
* MNLI 資料集(Multi-Genre Natural Language Inference):常用於訓練語言推理與分類的語料
* 文字序列(Text Sequence):需要進行分類的原始字串
* 分類標籤(Classification Labels):模型可輸出的目標類別集合
* 機率分數(Probability Score):模型對每個類別的信心水準
* NumPy 最大值索引(NumPy Argmax):回傳數值陣列中最大值的索引方法
* 後處理(Postprocessing):將模型原始輸出轉換為最終結果的步驟
* 分類準確率(Classification Accuracy):分類任務正確率的指標
* 二元分類(Binary Classification):僅有兩個類別的分類問題
* 多類別分類(Multi-class Classification):有三個或以上類別的分類問題
* 資料映射(Data Mapping):將原始類別對應到新的簡化類別
* 類別不平衡(Class Imbalance):某些類別樣本遠少於其他類別的問題
* 階層式分類(Hierarchical Classification):根據層次結構進行多層分類的方法
* 上下文理解(Contextual Understanding):模型對文字含義與情境的掌握能力
* 語言推理(Natural Language Inference):判斷句子之間語意關係的任務
* GPU 加速(GPU Acceleration):利用圖形處理器加快模型推理速度
* MPS 加速(Metal Performance Shaders):蘋果裝置上用於模型加速的後端
* 模型快取(Model Caching):下載後本地保存模型以避免重複下載
* 模型管理(Model Management):刪除或保留快取模型的操作
* 預測標籤(Predicted Label):模型輸出的最終分類結果
* 機率分布(Probability Distribution):各類別對應的機率集合
* 信心分數(Confidence Score):模型對預測結果的自信程度
* 驗證資料集(Validation Dataset):用於調整模型或驗證效能的資料集
* 測試資料集(Test Dataset):最終評估模型效能的資料集
* 訓練語料(Training Corpus):模型訓練時使用的文本集合
* 向量表示(Vector Representation):將文本轉換為數值向量的形式
* 語言模型(Language Model):預測或理解自然語言的機器學習模型
* 自然語言處理(Natural Language Processing, NLP):處理與分析人類語言的技術領域
* 評估指標(Evaluation Metrics):衡量模型表現的各種數值標準
* 標籤對應表(Label Mapping Table):原始標籤與簡化後標籤之間的對照表
* 書籍分類任務(Book Classification Task):針對書籍描述進行類別歸屬的應用
* 分類器函數(Classifier Function):將分類流程封裝成函式以便重複使用
* 輸入序列(Input Sequence):餵入模型進行推理的文本資料
* 輸出解析(Output Parsing):對模型輸出的結果進行格式化與解讀
* 驗證準確率(Validation Accuracy):模型在驗證資料集上的分類正確率
* 混淆矩陣(Confusion Matrix):顯示實際類別與預測類別差異的矩陣表
* 預測列表(Predicted List):存放模型預測結果的陣列或清單
* 真實列表(Actual List):存放已知標籤的陣列或清單
* 進度條(Progress Bar):用於顯示迴圈執行進度的工具,如 tqdm
* 二元標籤化(Binary Labeling):將正確與錯誤轉換為 1 與 0 的過程
* 正確率計算(Accuracy Calculation):計算正確預測比例的過程
* 錯誤分類率(Misclassification Rate):預測錯誤的比例
* 預測資料框(Prediction DataFrame):保存實際與預測類別的 Pandas 結構
* 缺失類別(Missing Categories):資料集中尚未標註或缺少的分類欄位
* 子集資料框(Subset DataFrame):依條件篩選出的部分資料
* 索引重設(Reset Index):重建資料框索引以便迴圈操作
* 迴圈預測(Loop Prediction):逐一將資料傳入模型產生分類結果的過程
* 合併資料框(DataFrame Merge):使用鍵值將兩個資料框合併為一個
* 左連接(Left Join):保留左側資料框所有資料的合併方法
* 替換缺失值(Replace Missing Values):以預測類別填補原始缺失欄位的步驟
* NumPy 條件語句(NumPy Where Clause):根據條件選擇性地替換欄位值
* 資料清理(Data Cleaning):移除不再需要的中間欄位或暫存欄位
* 完整類別欄位(Completed Category Column):合併已知與預測標籤後的最終欄位
* 分佈檢查(Distribution Check):檢查欄位值的統計分佈是否合理
* 擴展分類(Extended Classification):將分類應用於更多子類別的嘗試
* 標註不足(Insufficient Labeling):訓練或驗證樣本數量不足的情況
* 高風險預測(High-risk Prediction):缺乏足夠數據驗證時的分類結果
* 資料稀疏性(Data Sparsity):樣本分佈過於稀疏,難以驗證分類成效
* 模型假設(Model Assumption):在數據不足時,假設模型能維持合理表現
* 模型限制(Model Limitation):模型在特定條件下的能力邊界
* 範例數不足(Low Sample Size):樣本量過小導致統計結論不可靠
* 情緒分析(Sentiment Analysis):判斷文本的情緒或情感傾向
* 情緒分類(Emotion Classification):將文字分類到特定情緒類別的任務
* 七情緒分類(Seven-class Emotion Categorization):憤怒、厭惡、恐懼、喜悅、悲傷、驚訝、中立
* 支配情緒(Dominant Emotion):文字描述中最強烈的情緒傾向
* 微調(Fine-tuning):在小型資料集上調整模型最後幾層以適應特定任務
* 掩碼語言建模(Masked Language Modeling):原始 Roberta 訓練任務,預測缺失詞彙
* 任務特定層(Task-specific Layers):為新任務替換的輸出層
* 小型標註集(Small Labeled Dataset):用於微調模型的少量帶標籤資料
* 權重調整(Weight Adjustment):透過微調改變模型參數以學習新任務
* 情緒分類模型(Emotion Classification Model):經過微調,專門判斷情緒的模型
* Hugging Face Hub:提供微調後模型下載與使用的開源平台
* 預測基準線(Prediction Baseline):隨機猜測或簡單策略的預測基準值
* 隨機機率基準(Random Chance Baseline):多分類情境下的隨機正確率,如 14%
* 任務適配(Task Adaptation):將通用模型調整為特定應用的過程
* 模型卡評估指標(Model Card Evaluation Metrics):模型開發者提供的效能數據
* 資料合併鍵(Merge Key):用於合併資料框的唯一識別欄位,如 ISBN
* 儲存最終資料集(Save Final Dataset):輸出處理後資料以便後續分析或建模
* 情緒特徵(Emotion Features):將情緒分類結果作為新變數加入推薦系統
* 使用者過濾(User Filtering):允許使用者依情緒特徵挑選推薦結果
* 情緒維度(Emotional Dimension):推薦系統中新增的情緒屬性軸
* 書籍情感傾向(Book Emotional Tone):書籍描述所呈現的主要情緒傾向
* 產品功能拓展(Feature Expansion):利用情緒分析擴展推薦系統的功能
* 文本導向特徵(Text-derived Features):從書籍描述文字中提取的分析特徵
* 向量資料庫(Vector Database):一種用於儲存與檢索高維向量的資料庫,常用於相似度搜尋。
* 情感分類(Emotion Classification):利用機器學習模型判斷文本的情緒類別。
* 預訓練模型(Pretrained Model):在大規模資料上先訓練的模型,可遷移至特定任務。
* 推論(Inference):使用訓練完成的模型對新資料進行預測的過程。
* GPU 加速(GPU Acceleration):利用圖形處理器提升模型計算效率。
* MPS 裝置(MPS Device):蘋果晶片上的 GPU 運算後端,支援 PyTorch 加速。
* 參數退化(Deprecation):指 API 或函數將逐步停用,不建議再使用。
* Top-k 選擇(Top-k Selection):選出機率最高的 k 個分類結果。
* 機率分佈(Probability Distribution):模型對各分類輸出的機率集合。
* 文本分割(Text Splitting):將長文本切分為句子或段落以進行分析。
* 批次處理(Batch Processing):一次處理多筆資料以提升效率。
* 情感標籤(Emotion Labels):預設的情緒分類類別,如喜悅、悲傷、恐懼等。
* 最大機率(Maximum Probability):取每個情緒類別在描述中的最高預測值。
* 字典推導式(Dictionary Comprehension):Python 語法,用於快速建立字典結構。
* 資料框(DataFrame):Pandas 提供的二維表格資料結構。
* 欄位合併(Column Merge):將不同資料框透過鍵值合併。
* 進度條(Progress Bar):顯示長時間運算的即時進度,如 tqdm。
* 機率分布統計(Probability Statistics):分析不同情緒類別的機率分布特性。
* 訓練語料(Training Corpus):用於訓練模型的大量文本資料。
* 向量嵌入(Vector Embedding):將文字轉換為數值向量以供模型處理。
* 相似度搜尋(Similarity Search):依據向量距離找出最相近的資料。
* 分類模型(Classification Model):輸出離散類別的機器學習模型。
* 文本描述(Text Description):用於模型輸入的文字內容。
* 機率閾值(Probability Threshold):設定分類結果的機率下限。
* 標籤順序化(Label Ordering):統一不同句子中情緒標籤的排列。
* 字典歸併(Dictionary Aggregation):整合多個字典以計算最大值或平均值。
* 監督學習(Supervised Learning):透過帶標籤資料訓練模型的方法。
* 語意相似度(Semantic Similarity):文本之間語意上的接近程度。
* 非監督學習(Unsupervised Learning):無標籤資料的模型訓練方式。
* API 呼叫(API Call):透過程式介面使用外部服務的過程。
* 遷移學習(Transfer Learning):利用已有模型知識快速適應新任務。
* 過擬合(Overfitting):模型在訓練資料表現好,但泛化能力差。
* 權重更新(Weight Update):模型訓練時調整參數的過程。
* 機率分級(Probability Ranking):依機率大小排列預測結果。
* 模型卡(Model Card):描述模型用途、限制與使用方法的文件。
* 輸出後處理(Post-processing):對模型輸出進行再處理以適配需求。
* 句子嵌入(Sentence Embedding):將句子轉換為向量表徵。
* 迴圈處理(Loop Processing):透過程式迴圈逐一處理資料。
* 書籍推薦系統(Book Recommender System):根據使用者需求推薦書籍的系統。
* 分類準確率(Classification Accuracy):衡量模型分類正確比例的指標。
* 機率分散(Probability Dispersion):描述機率分布的離散程度。
* 語意檢索(Semantic Retrieval):基於語意理解進行資訊檢索。
* Pandas 合併(Pandas Merge):Pandas 提供的資料集合併函數。
* 標籤空間(Label Space):模型可預測的所有分類集合。
* 開源套件(Open-source Package):免費且公開原始碼的軟體模組。
* Gradio 介面(Gradio Interface):一個快速建立機器學習應用介面的 Python 工具。
* 人機互動介面(Human-Computer Interface):讓使用者與模型互動的前端。
* 儲存檔案(File Saving):將運算結果寫入外部檔案的過程。
* 分類分數(Classification Score):模型輸出的數值,表示某分類的可能性。
* 數據預處理(Data Preprocessing):在訓練或推論前清理與轉換資料的步驟。
* 語言模型(Language Model):透過學習語言模式進行生成或分類的模型。
* 縮圖(Thumbnail):書籍封面的小型預覽圖,用於視覺展示
* 高解析度參數(High-resolution Parameter):在 Google Books API URL 後添加的參數以獲取更高品質的封面
* 預設封面(Fallback Cover):缺少封面時使用的替代圖像
* 向量資料庫(Vector Database):儲存書籍描述向量嵌入的資料庫
* Chroma 向量庫(Chroma Vector Store):一種常用的開源向量資料庫
* 語意推薦(Semantic Recommendation):基於向量相似度檢索的推薦方法
* 篩選條件(Filter Conditions):依類別或情緒篩選推薦結果的規則
* 排序條件(Sorting Conditions):根據情緒分數排序結果的規則
* 初始 Top K(Initial Top K):在進一步篩選前取出的前 K 個結果
* 最終 Top K(Final Top K):篩選後用於展示的前 K 個結果
* ISBN 識別碼(ISBN Identifier):書籍的唯一識別碼,用於資料合併與匹配
* Pandas 合併(Pandas Merge):以鍵值方式合併資料框的操作
* If-Else 條件(If-Else Clause):根據情緒條件動態排序的邏輯
* 書籍描述截斷(Description Truncation):將描述縮短至限定字數並加上省略號
* 作者字串分割(Author String Split):依分號切割多位作者的字串
* 作者串接格式(Author Join Format):依作者數量以逗號或 and 串接姓名
* 書籍標題(Book Title):書籍的名稱,用於顯示在標題列
* 書籍標註(Book Caption):包含標題、作者與截斷描述的展示文字
* 圖文配對(Image-Text Pair):封面與標註文字組成的展示元素
* Gradio 框架(Gradio Framework):快速構建互動式 ML 應用的 Python 套件
* Markdown 元件(Markdown Component):Gradio 中用於展示文字的元素
* 輸入文字框(Textbox Input):Gradio 中的文字輸入元件
* 預設佔位符(Placeholder Text):在文字框內提示輸入範例的字串
* 下拉選單(Dropdown Menu):提供類別或情緒選項的互動元件
* 按鈕元件(Button Component):觸發推薦運算的互動元件
* 圖庫展示(Gallery Display):以圖片集形式呈現多個結果的 UI 元素
* 互動式篩選(Interactive Filtering):依使用者選擇即時更新結果
* 情緒標籤(Emotion Labels):喜悅、驚訝、憤怒、恐懼、悲傷等標籤
* 主程式入口(Main Method):程式執行的進入點
* 儀表板主題(Dashboard Theme):Gradio 提供的樣式選擇,如 Glass、Citrus
* 使用者查詢(User Query):使用者輸入的搜尋語意描述
* 語意檢索(Semantic Retrieval):透過向量搜尋回傳語意相關的書籍
* 向量嵌入(Vector Embeddings):將文字轉換為數值向量的表示
* 書籍篩選(Book Filtering):依使用者條件過濾推薦結果的過程
* 書籍排序(Book Sorting):根據情緒分數調整推薦順序
* 視覺化展示(Visual Presentation):將封面圖與標籤以圖形方式呈現
* 多作者處理(Multi-author Handling):針對多作者情境的字串格式化
* 單作者情境(Single-author Case):針對僅有一位作者的情境處理
* 兩作者情境(Two-author Case):以 “A and B” 格式顯示兩位作者
* 多作者情境(Multi-author Case):以 “A, B, and C” 格式顯示多位作者
* 空值替換(Null Replacement):將缺失封面替換為預設封面
* 查詢函式(Recommendation Function):執行檢索與篩選邏輯的函式
* 儀表板啟動(Dashboard Launch):執行 Gradio 介面並開放互動
* 使用者介面(User Interface, UI):使用者與系統互動的界面
* 體驗優化(Experience Optimization):透過截斷與格式化改善顯示效果
* 書籍情感排序(Emotion-based Sorting):依情感分數調整推薦優先順序
* 中立選項(Neutral Option):代表不篩選情緒的預設選項
* 書籍推薦系統(Book Recommendation System):基於 LLM 與向量檢索的完整解決方案