iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
生成式 AI

從系統設計切入,探索 GenAI 在企業中的實踐系列 第 4

[Day4] Token 之間的關係如何衡量-Embedding & Vectors

  • 分享至 

  • xImage
  •  

在前兩天的文章中,我們探討了 Transformer 模型的運作原理及 Tokenizer 如何將自然語言轉換成模型能夠理解的數字。今天,我們將進一步介紹嵌入(Embeddings),它更進一步將 tensor 轉換為具有語義訊息的向量(Vectors),並讓模型能夠捕捉到詞語之間的關係。

在開發過程中,尤其是 RAG 服務的開發上,會影響到最重要的向量搜索功能,而文末也會呈現 hugging face 上,評估表現最好的三個繁體中文 embedding model,及各自在不同任務所獲取的分數,在開發過程中便可以參考這些指標作為模型選擇的依據。


Embedding 技術發展

常見的嵌入技術包括 Word2Vec、GloVe 以及更進階的 BERT 和 GPT 等模型。這些技術從靜態詞嵌入逐步發展為能夠捕捉上下文的動態嵌入。

傳統技術如 Word2Vec 和 GloVe 為上下文無關模型,通過詞語共現來生成固定維度的向量,能夠捕捉詞語之間的基本語義關聯。例如,通過 Word2Vec 的詞嵌入,我們能夠發現「king - man + woman ≈ queen」,展示出詞語之間的線性語義關係。

隨著技術發展,基於 Transformer 架構的模型如 BERT 和 GPT 引入了動態詞嵌入的概念,這些模型能夠根據詞語在句子中的上下文生成詞嵌入,如 BERT 同時考慮了詞語的左側和右側上下文,而 GPT 則主要使用輸入的左側上下文來生成後續的詞語。透過這樣的技術,不僅能夠讓讓模型理解單個詞的靜態語義,還能捕捉到同一詞語在不同語境中的細微變化。


Embedding 實作演練

  1. 先準備好模型和測試材料,主要測試兩個 bank 的差異是否能被捕捉
from transformers import BertTokenizer, BertModel
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

sentence1 = "We are in the bank."
sentence2 = "We stay near the bank."

inputs1 = tokenizer(sentence1, return_tensors="pt")
inputs2 = tokenizer(sentence2, return_tensors="pt")
  1. 通過 BERT 模型獲取上下文相關的嵌入
with torch.no_grad():
    outputs1 = model(**inputs1)
    outputs2 = model(**inputs2)
  1. 提取 bank 的嵌入向量並比較相似程度
bank_embedding1 = outputs1.last_hidden_state[0, 5, :]
bank_embedding2 = outputs2.last_hidden_state[0, 5, :]

# 可以用這兩行語法看到 embedding 後的 vector,這裡就不呈現了
print("Sentence 1 - 'bank' embedding:", bank_embedding1)
print("Sentence 2 - 'bank' embedding:", bank_embedding2)

cosine_similarity = torch.nn.functional.cosine_similarity(bank_embedding1, bank_embedding2, dim=0)
print(cosine_similarity.item())

''' output: 0.688329815864563 '''

可以看出兩個 bank 不是等價的,並且兩個的相似程度並不高。


繁體中文 Embedding model

我們從 Hugging face 大型文本嵌入模型 (Massive Text Embedding Benchmark, MTEB) 的排行榜 上抓出繁體中文平均表現最佳的三個模型:

模型基本屬性

Model Model Size Memory Usage Embedding Dimensions Max Tokens
Conan-embedding-v1 326 1.21 1792 512
xiaobu-embedding-v2 326 1.21 1792 512
gte-Qwen2-7B-instruct 7613 28.36 3584 131072
  • Model Size:表示模型的大小,單位是百萬參數。參數量越多,模型越複雜,通常能捕捉到更多語義訊息,但需要更多資源。
  • Memory Usage:模型在推理過程中所需的內存,內存需求越高,也需要更多的計算資源。
  • Embedding Dimensions:表示模型生成的每個詞或句子的向量維度。維度越高,模型可以捕捉到的語義訊息可能越多,但計算開銷也會隨之增加。
  • Max Tokens(最大tokens數量):表示模型在一次推論可以處理的最大 token 數量。這通常與模型能夠處理的文本長度有關,tokens越多,表示模型可以處理更長的文本輸入。

模型成效表現

Model Average CLS Clustering Reranking Retrieval STS Pair_CLS
Conan-embedding-v1 72.62 75.03 66.33 72.76 76.67 64.18 91.66
xiaobu-embedding-v2 72.43 74.67 65.17 72.58 76.5 64.53 91.87
gte-Qwen2-7B-instruct 72.05 75.09 66.06 68.92 76.03 65.33 87.48
  1. Average:不同任務的平均執行分數
  2. CLS(Classification):分類任務,如情感分析、主題分析等。
  3. Clustering:聚類任務,如相似文檔組合等。
  4. Reranking:重新排序任務,如搜索、檢索結果的排序優化。
  5. Retrieval:檢索任務,如 RAG。
  6. STS(Semantic Textual Similarity):語義文本相似度任務,衡量兩個句子或文本片段之間的語義相似度。這通常通過給出相似度分數來表示(如0到5)。
  7. Pair_CLS(Pairwise Classification):成對分類任務,判斷一對文本是否具備某種關係,例如語句相似度分類、語義等價判斷、重述(paraphrase)等。

ref.


上一篇
[Day3] LLM 如何處理文本-Tokenizer
下一篇
[Day5] 如何選擇使用的 LLM 模型?
系列文
從系統設計切入,探索 GenAI 在企業中的實踐7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言