我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。
回顧目前手上有的素材:
- 載入文本並執行 Tokenization:AI說書 - 從0開始 - 314 | 載入文本並執行 Tokenization
- 文本處理以降低 Tokenization 負擔:AI說書 - 從0開始 - 315 | 文本處理以降低 Tokenization 負擔
- Tokenization 後基本資訊窺探與 Embedding 訓練:AI說書 - 從0開始 - 316 | Tokenization 後基本資訊窺探與 Embedding 訓練
- Embedding 模型描述:AI說書 - 從0開始 - 317 | Embedding 模型描述
- Embedding 模型描述:AI說書 - 從0開始 - 318 | Embedding 模型描述
- 檢視 Embedding 是否包含某詞彙:AI說書 - 從0開始 - 319 | 檢視 Embedding 是否包含某詞彙
- Embedding 後詞彙相似度計算:AI說書 - 從0開始 - 320 | Embedding 後詞彙相似度計算
- Embedding 後詞彙與 ID 映射:AI說書 - 從0開始 - 321 | Embedding 後詞彙與 ID 映射
Embedding 後,兩詞彙間的 Cosine 相似度計算方法為:
import numpy as np
from gensim import matutils
import pandas as pd
words = ["method", "reason", "truth", "rightly", "science", "seeking"]
data = []
for i in range(len(words)):
for j in range(len(words)):
word1 = words[i]
word2 = words[j]
if word1 not in model.wv or word2 not in model.wv:
print(f"One or both words ('{word1}', '{word2}') are not in the model's vocabulary.")
continue
vec1 = model.wv[word1]
vec2 = model.wv[word2]
similarity = np.dot(matutils.unitvec(vec1), matutils.unitvec(vec2))
distance = 1 - similarity
data.append({'word1': word1, 'word2': word2, 'distance': distance})
df = pd.DataFrame(data)
display(df)
結果為:

當中的 Cosine 相似度計算方法為:

其數值將介於 -1 至 1 之間。