چیتشیت
Word2Vec، GloVe و FastText
Word2Vec, GloVe and FastText
شمارش کلمات، وزندهی با TF-IDF، آموزش بردارهای متراکم و تقسیم کلمات نادر به زیرکلمهها. کدهای پایتون درسها.
فهرست مطالب
Skip-gram با نمونهبرداری منفی
معمارییک گام آموزش: train_pair
گامبهگام- جفتهاتابع
skipgram_pairsتمام جفتهای (مرکز، زمینه) را درونwindowتولید میکند. - منفیهاانتخاب
k_negشناسه تصادفی. شناسههای مرکز و زمینه را کنار بگذارید. - امتیازها
sigmoid(v_c @ u_pos)باید نزدیک به 1 باشد؛sigmoid(u_negs @ v_c)نزدیک به 0. - خطاها
pos_errبرابر امتیاز مثبت منهای 1.0 است.neg_errsهمان امتیازهای منفی هستند. - بهروزرسانی W'برای هر سطر زمینه، مقدار
lrضربدر خطا ضربدرv_cرا کم کنید. - بهروزرسانی Wمقدار
lr * grad_centerرا از سطر مرکز کم کنید.
وظایف در کد
کار و کد| وظیفه | کد |
|---|---|
| ماتریس شمارش | bag_of_words(docs, vocab) |
| سطرهای TF-IDF با طول واحد (نرمالشده) | l2_normalize(tfidf(bow)) |
| آموزش skip-gram از صفر | train(docs, dim=16, window=2, k_neg=5, epochs=100, lr=0.05, seed=0) |
| پرسوجوی قیاس (Analogy) | analogy(vocab, W, "man", "king", "woman") |
| شمارش همآیی | build_cooccurrence(docs, window=5) |
| آموزش GloVe | glove_train(vocab, pair_counts, dim=16, epochs=100, lr=0.05, x_max=100, alpha=0.75, seed=0) |
| n-gramهای FastText | char_ngrams(word, n_min=3, n_max=6) |
| یادگیری و اعمال BPE | apply_bpe("lowest", learn_bpe(corpus, k_merges=10)) |
کتابخانهها در محیط عملیاتی
کدpython
tfidf = TfidfVectorizer().fit_transform(docs) # وزنهای IDF به همراه نرم L2
model = Word2Vec(sentences, vector_size=100, window=5,
min_count=1, sg=1, negative=5, workers=4, epochs=30)
model.wv.most_similar("cat", topn=3) # نزدیکترین همسایهها
fasttext.util.download_model("en", if_exists="ignore")
ft = fasttext.load_model("cc.en.300.bin")
ft.get_word_vector("zoomerapproved") # کلمه OOV همچنان بردار دریافت میکند
tok = AutoTokenizer.from_pretrained("gpt2")
tok.tokenize("unbelievably tokenized") # Ġ نشاندهنده مرز کلمه است
فرمولها
مفهومها- TF-IDF
- $\frac{\mathrm{count}(w \text{ in } d)}{|d|} \cdot \log\frac{N}{\mathrm{df}(w)}$
- IDF هموارشده
- $\log\frac{n+1}{d+1} + 1$. کلمهای که در همه اسناد باشد IDF برابر 1 میگیرد.
- کسینوس
- ضرب داخلی سطرهای نرمالشده با L2. مقدار 1 یعنی همسان، 0 یعنی متعامد.
- برازش GloVe
- $v_i \cdot v_j + b_i + b_j \approx \log X_{ij}$
- وزن GloVe
- $f(x) = (x / x_{max})^{\alpha}$ برای مقادیر کمتر از
x_max، در غیر این صورت 1.0. - خروجی GloVe
W + W_tilde. مجموع دو جدول از هر کدام به تنهایی بهتر است.- بردار FastText
- مجموع بردارهای کاراکتر n-gramهای کلمه.
- واژگان BPE
- شامل
k + 256توکن پس ازkبار merge.
تنظیمات Vectorizer
دستورها| دستور | کارکرد |
|---|---|
ngram_range=(1, 2) | افزودن bigramها. معمولاً به دستهبندی کمک میکند |
min_df=2 | حذف کلماتی که در کمتر از 2 سند آمدهاند |
max_df=0.95 | حذف کلماتی که در بیش از 95% اسناد آمدهاند |
stop_words="english" | فهرست درونی stopwordها. مناسب برای تحلیل حس نیست |
sublinear_tf=True | استفاده از 1 + log(tf) برای کلمات پرتکرار |
get_feature_names_out | فهرست کردن ستونهای واژگان |
پیشفرضها و ارقام
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
gensim `vector_size` | 100 | بردارهای متراکم معمولاً 100 تا 300 بعدی هستند |
gensim `window` | 5 | کد پیادهسازی از صفر از 2 استفاده میکند |
`negative`, `k_neg` | 5 | تعداد منفیها به ازای هر جفت مثبت |
sg | 1 | Skip-gram؛ برای کلمات نادر بهتر است |
Init std | 0.1 | rng.normal(0, 0.1, size=(vocab_size, dim)) |
GloVe `x_max` | 100 | جفتهای برابر یا بالاتر از آن وزن 1.0 میگیرند |
GloVe `alpha` | 0.75 | کاهش وزن جفتهای پرتکرار |
FastText n-gram length | 3 to 6 | کاراکترها، به همراه نشانههای < و > |
عیبیابی
عیبیابی«not good» و «excellent» شبیه به هم به نظر میرسند
- علت
- BoW ترتیب کلمات را حذف میکند
- راهحل
- افزودن bigramها یا استفاده از امبدینگها
Zoomer-approvedهیچ برداری ندارد- علت
- کلمه OOV در BoW و Word2Vec
- راهحل
- استفاده از FastText یا BPE
bankبرای دو معنای متفاوت تنها یک بردار دارد- علت
- امبدینگ ایستا
- راهحل
- استفاده از امبدینگهای زمینهای
اسناد طولانی بر شباهت غلبه میکنند
- علت
- سطرها نرمالسازی نشدهاند
- راهحل
- اعمال
l2_normalize
سیگنال منفیساز از دست رفته است
- علت
- حذف stopwordها
- راهحل
- نگهداشتن stopwordها در تحلیل حس
نرم بردار کمتر از 0.01 یا بیشتر از 100 است
- علت
- باگ در آموزش
- راهحل
- مدل را علامتگذاری و متوقف کنید
خروجی نامناسب و بیصدا در محیط عملیاتی
- علت
- عدم تطابق توکنایزر و مدل
- راهحل
- استفاده از همان توکنایزر پیشفرض مدل
ماتریس متراکم 100k سند در حافظه جا نمیشود
- علت
- تبدیل زودهنگام به ماتریس متراکم
- راهحل
- اسپارس (sparse) نگه داشتن ماتریس
کوتهنوشتها
اصطلاحها- BoW
- مدل Bag of Words. شمارش کلمات واژگان بدون حفظ ترتیب.
- TF / DF
- بسامد کلمه در سند (TF) و تعداد اسناد حاوی آن کلمه (DF).
- IDF
- بسامد معکوس سند. کاهش وزن کلماتی که همهجا تکرار شدهاند.
- CBOW
- مدل Continuous Bag of Words. پیشبینی کلمه مرکز بر اساس زمینه.
- Skip-gram
- پیشبینی زمینه بر اساس کلمه مرکز. حالت پیشفرض.
- GloVe
- بردارهای سراسری (Global Vectors). فاکتورگیری از ماتریس همآیی.
- OOV
- خارج از واژگان (Out of vocabulary). مشکلی که Word2Vec و GloVe دارند.
- BPE
- کدگذاری جفتبایت (Byte-Pair Encoding). ادغام مکرر جفتهای مجاور پرتکرار.
پرسشها
پرسش و پاسخ- TF-IDF چه زمانی برنده است؟
- هرزنامهها، دستهبندی موضوعی، لاگها، دادههای کم، تاخیر بسیار کم و خروجی تفسیرپذیر.
- چرا نمونهبرداری منفی؟
- سافتمکس روی 100k کلمه بسیار کند است؛ یک وظیفه دودویی جایگزین آن میشود.
- چرا قیاس کار میکند؟
- تفریق
(king - man)جهت «سلطنت» را حفظ میکند؛ آن را بهwomanاضافه کنید. - GloVe یا FastText؟
- FastText برای غلطهای املایی، کلمات جدید و ساختواژه غنی.
- آیا برای فاینتیونینگ باید توکنایزر آموزش داد؟
- خیر؛ از توکنایزر مدل ازپیشآموزشدیده استفاده کنید.
نکات
نکتهها- با کمتر از 500 نمونه برچسبدار، با یک خط مبنای TF-IDF شروع کنید.
- با کمتر از حدود 50k داده برچسبدار، امبدینگهای وزندهیشده با TF-IDF را امتحان کنید.
- امبدینگها را فقط با دقت قیاس نسنجید؛ یک آزمون وظیفه نهایی اضافه کنید.
- بردارهای ازپیشآموزشدیده را دانلود کنید؛ تقریباً هیچوقت نیاز نیست خودتان Word2Vec آموزش دهید.
- توکنایزرهای GPT، BERT و T5 بین 30k تا 100k عملیات ادغام (merge) یاد میگیرند.