مدلسازی زبان - قسمت پنجم
خب من بعد از یه وقفهی طولانی برگشتم. قبل از هر توضیح اضافهای بذارید بگم که کجا بودیم و اصلا میخواستیم چیکار کنیم. ما میخواستیم یه مدلسازی از زبان بکنیم به این صورت که اگه به ما یه جمله دادن ما بتونیم بگیم که کلمهی بعدی احتمالا چی باید باشه. بعد دیدیم اولین ایدهای که به ذهن میرسه اینه که بریم تو مجموعه دادگانمون نگاه کنیم که بعد از این جمله چه کلماتی اومده و هر کدوم چندبار تکرار شدن و به نسبت این تکرار احتمال هر کلمه رو حساب میکنیم.
تو قسمت دوم دو تا مشکل خیلی اساسی این روشو گفتیم و بعد رفتیم دست به دامن شبکه های عصبی شدیم و دیدیم بر خلاف عکس و غیره اگه از ما بپرسن تو این جمله منظور از فلان ضمیر چیه ما اطلاعات کافی رو صرفا از خود این کلمه نمیتونیم بکشیم بیرون و باید کلمات و یا جملات قبلی رو هم در نظر بگیریم. اینجاست که میفهمیم به نوعی از شبکه عصبی احتیاج داریم که بتونه ترتیب رو متوجه بشه و رفتیم سراغ شبکه عصبی بازگشتی یا همون RNNها. بعد اومدیم اسم این اطلاعاتی که از کلمه های قبلی به بعدی منتقل میکنیم رو گذاشتیم hidden state یا memory state. بعد دیدیم مدلهای اولیه RNNها از کوتاهی حافظه رنج میبرن :)) و مثه ماهی گلی میمونن. بعد مدلهای LSTM اومدن که این مشکل حافظه رو حل بکنن.
اما این شبکهها هم نتونستن به طور کامل مشکل به خاطر سپردن وابستگیهای دور از هم رو حل بکنن. مثلا شما فرض کنید که تو دو جمله قبلی یه چیزی گفتید بعد الان با یه ضمیر دارید به اون اشاره میکنید این مدل مادر مرده باید تو بردار memory تونسته باشه اون مفهوم دو خط پیش رو نگه داره. از طرف دیگه این مدلها نسبت به ترنسفورمر کمتر قابلیت موازیسازی محاسبات رو داره و از نظر مصرف میزان حافظه رو هم داره واسه همین وقتی مقاله ترنسفورمر تو سال ۲۰۱۷ اومد ترکوند.
خب آنچه در قسمت قبلی دیدید این بود که شبکه عصبی ترنسفورمر شامل چهار بخش کلی Embedding, Encoding, Decoding, Unembedding میشه. تو قسمت قبلی صرفا رو بخش اول تمرکز کردیم اینکه چطوری یه جمله شامل چندین کلمه رو میشه به بردارهایی تبدیل کرد که معنا رو کدگذاری میکنن و امیدوارم که این مفهومش جا افتاده باشه و این به خودی خود به نظرم خیلی مفهوم جالب و قشنگیه.
پیپر attention is all you need که تو سال ۲۰۱۷ اومد به نظرم یه شاهکار در زمینه مهندسیه چون به شکل خیلی هنرمندانه اومده کلی از ایده هایی که قبلا توسط بقیه معرفی شده بود رو به زیبایی در کنار هم قرار داده و جزو مقالات دارای پرشمارترین ارجاع هاست.
همچنین گفتم که :
اگه یادتون باشه تو بخش embedding ما هر token رو به صورت مجزا در نظر گرفتیم و تبدیلش کردیم به بردار و سعی کردیم معنا رو تو اون بردار کد کنیم. ولی دیدید میگن خب context هم مهمه واسه فهمیدن معنا یه جمله یا حتی یه کلمه اینجاست که بحث توجه میاد وسط به قول اون شعر معروف:
جواب به این سوال خیلی ظرافت داره. جواب خیلی کلی اینه که باید اون embedding خیلی خامی رو که داشتیم بروز بکنیم و از اطلاعات کلمه هایی که قبل و بعد هست استفاده کنیم حالا به بعضی از کلمه ها وزن بیشتری بدیم و به برخی دیگه وزن کمتر. سختیش کجاست اینکه دقیقا این وزنها و این به روزرسانی ها چطور انجام میشه و فرمولش چیه؟ اینجاییه که خیلی از آدما که تو فیلد کار میکنن نمیفهممن که چرا دقیقا این طوری حساب میکنیم. ازونجا که حس میکنم خیلی زبون درازی کردم و خیلی وقت نبودم این متن رو همین جا تمومش میکنم. باقی بقایتان.
ایشالا پنچ شنبه همین جمع (بزرگتر حتی) همینجا بریم برای قسمت ششم. پس تا بعد خرد یارتون🧠👋
#notes #language_modeling
@SingularThinker
خب من بعد از یه وقفهی طولانی برگشتم. قبل از هر توضیح اضافهای بذارید بگم که کجا بودیم و اصلا میخواستیم چیکار کنیم. ما میخواستیم یه مدلسازی از زبان بکنیم به این صورت که اگه به ما یه جمله دادن ما بتونیم بگیم که کلمهی بعدی احتمالا چی باید باشه. بعد دیدیم اولین ایدهای که به ذهن میرسه اینه که بریم تو مجموعه دادگانمون نگاه کنیم که بعد از این جمله چه کلماتی اومده و هر کدوم چندبار تکرار شدن و به نسبت این تکرار احتمال هر کلمه رو حساب میکنیم.
تو قسمت دوم دو تا مشکل خیلی اساسی این روشو گفتیم و بعد رفتیم دست به دامن شبکه های عصبی شدیم و دیدیم بر خلاف عکس و غیره اگه از ما بپرسن تو این جمله منظور از فلان ضمیر چیه ما اطلاعات کافی رو صرفا از خود این کلمه نمیتونیم بکشیم بیرون و باید کلمات و یا جملات قبلی رو هم در نظر بگیریم. اینجاست که میفهمیم به نوعی از شبکه عصبی احتیاج داریم که بتونه ترتیب رو متوجه بشه و رفتیم سراغ شبکه عصبی بازگشتی یا همون RNNها. بعد اومدیم اسم این اطلاعاتی که از کلمه های قبلی به بعدی منتقل میکنیم رو گذاشتیم hidden state یا memory state. بعد دیدیم مدلهای اولیه RNNها از کوتاهی حافظه رنج میبرن :)) و مثه ماهی گلی میمونن. بعد مدلهای LSTM اومدن که این مشکل حافظه رو حل بکنن.
اما این شبکهها هم نتونستن به طور کامل مشکل به خاطر سپردن وابستگیهای دور از هم رو حل بکنن. مثلا شما فرض کنید که تو دو جمله قبلی یه چیزی گفتید بعد الان با یه ضمیر دارید به اون اشاره میکنید این مدل مادر مرده باید تو بردار memory تونسته باشه اون مفهوم دو خط پیش رو نگه داره. از طرف دیگه این مدلها نسبت به ترنسفورمر کمتر قابلیت موازیسازی محاسبات رو داره و از نظر مصرف میزان حافظه رو هم داره واسه همین وقتی مقاله ترنسفورمر تو سال ۲۰۱۷ اومد ترکوند.
خب آنچه در قسمت قبلی دیدید این بود که شبکه عصبی ترنسفورمر شامل چهار بخش کلی Embedding, Encoding, Decoding, Unembedding میشه. تو قسمت قبلی صرفا رو بخش اول تمرکز کردیم اینکه چطوری یه جمله شامل چندین کلمه رو میشه به بردارهایی تبدیل کرد که معنا رو کدگذاری میکنن و امیدوارم که این مفهومش جا افتاده باشه و این به خودی خود به نظرم خیلی مفهوم جالب و قشنگیه.
پیپر attention is all you need که تو سال ۲۰۱۷ اومد به نظرم یه شاهکار در زمینه مهندسیه چون به شکل خیلی هنرمندانه اومده کلی از ایده هایی که قبلا توسط بقیه معرفی شده بود رو به زیبایی در کنار هم قرار داده و جزو مقالات دارای پرشمارترین ارجاع هاست.
همچنین گفتم که :
بخش Encoder و Decoder خودشون از دو بخش اصلی تشکیل شده که به ترتیب Multi-Head Attention و MLP یا feed-forward NN هست.حالا الان تمرکزمون رو بذاریم رو Multi-Head Attention و اصن Multi-Head اش رو هم بیخیال صرفا خود مکانیزم Attention. مکانیزم Attention چیه و اصن به چه دردی میخوره؟
اگه یادتون باشه تو بخش embedding ما هر token رو به صورت مجزا در نظر گرفتیم و تبدیلش کردیم به بردار و سعی کردیم معنا رو تو اون بردار کد کنیم. ولی دیدید میگن خب context هم مهمه واسه فهمیدن معنا یه جمله یا حتی یه کلمه اینجاست که بحث توجه میاد وسط به قول اون شعر معروف:
کار پاکان را قیاس از خود مگیرحالا ما از کجا بفهمیم شیر که تو جمله میاد یعنی چی؟ باید ببینیم خب قبلش یا بعدش چی اومده و context یا همون بافتار این کلمه چیه. خب از کجا بدونیم به کجا باید «توجه» کنیم خب اونجاست که این مکانیزم کمک ما میکنه تا بتونیم بردار متناظر با هر token رو با استفاده از اطلاعات تو جمله بهبود ببخشیم. اما مکانیزم attention چطوری این کارو انجام میده؟
گرچه باشد در نبشتن شیر شیر
آن یکی شیر است اندر بادیه
و آن دگر شیر است اندر بادیه
آن یکی شیر است که آدم می خورد
و آن دگر شیر است که آدم می خورد
جواب به این سوال خیلی ظرافت داره. جواب خیلی کلی اینه که باید اون embedding خیلی خامی رو که داشتیم بروز بکنیم و از اطلاعات کلمه هایی که قبل و بعد هست استفاده کنیم حالا به بعضی از کلمه ها وزن بیشتری بدیم و به برخی دیگه وزن کمتر. سختیش کجاست اینکه دقیقا این وزنها و این به روزرسانی ها چطور انجام میشه و فرمولش چیه؟ اینجاییه که خیلی از آدما که تو فیلد کار میکنن نمیفهممن که چرا دقیقا این طوری حساب میکنیم. ازونجا که حس میکنم خیلی زبون درازی کردم و خیلی وقت نبودم این متن رو همین جا تمومش میکنم. باقی بقایتان.
ایشالا پنچ شنبه همین جمع (بزرگتر حتی) همینجا بریم برای قسمت ششم. پس تا بعد خرد یارتون🧠👋
#notes #language_modeling
@SingularThinker
🔥4💅1
If you know me, you know which one is my favourite #meme. Any guess? No it is not that one.
اول هفته تو با میم شروع کن هموطن :)) برای هموطنای خارج از کشور هم اول آخر هفته رو با میم شروع کنن.
@SingularThinker
اول هفته تو با میم شروع کن هموطن :)) برای هموطنای خارج از کشور هم اول آخر هفته رو با میم شروع کنن.
@SingularThinker
❤6🔥2💅1
مدلسازی زبان - قسمت ششم
همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم attention چه شکلیه؟
با ذکر این نکته که این تنها حالت ساختن این مکانیزم نیست و اساسا خود نویسندههای مقاله تو گوگل خودشون این مفهوم رو از پژوهشهای قبلی الهام گرفته بودن ایشالا تو قسمتای اینده بیشتر در مورد تاریخش حرف میزنیم.
خب تا اینجا رو اومده بودیم که embedding درسته سعی میکنه معنای هر توکن رو تو یه بردار کدگذاری کنه ولی «این درد مشترک هرگز جدا جدا درمان نمی شود.» یعنی شما باید به کلمات قبل و بعد هم نگاه کنی تا بتونی دقیقا مفهوم اصلی هر کلمه/توکن رو بفهمی پس میایم با مکانیزم attention این بردار embedding برای هر کلمه رو بروزرسانی میکنیم. حالا بیاید یه مرحله بریم جلوتر و ببنیم چطوری این کارو انجام میدیم؟
خب بیاید تصور کنید که بردار E_i بردار embedding توکن iام در جمله باشه و شما میخواید اینو با استفاده از سایر کلمات بروزش بکنید. ساده ترین کار چیه؟ این که یه ترکیب خطی از سایر embeddingها رو با هم جمع کنیم.
E'_i = E_i + ΔE_i
ΔE_i = Sum(j=1 to n) {a_ji* E_j}
خب این خوبه ولی ممکنه یه سوال بکنه بگه که خب الان هر کدوم از این جهتا قبلا یه معنی خاصی داشت همین طوری ما زرتی اینا رو با هم جمع کنیم اینا که با هم قاطی میشه اینجاست که میگم که حق با شماست. پس بیایم چیکار کنیم بیایم اول با یه نگاشت خطی از فضای embedding بریم یه فضای دیگه و بعد همون قبلی رو بریم یعنی چی؟
V_j = W_v * E_j
ΔE_i = Sum(j=1 to n) {a_ji * V_j}
حالا این W_v رو از کجا میاریم هیچی دیگه اینم یه چیز رندومی میذاریم و در طی فرایند آموزش یادش میگیریم. خب حالا شاید بپرسید که این a_jiها رو چیکار کنیم؟ اینا چین اصن اینا وزنهای ترکیب خطیان که هر چی بزرگتر باشن تاثیر V_j مربوطه بیشتر میشه پس در واقع بیشتر به توکن jام توجه میکنیم. در واقع باید از یه تابع کرنل استفاده کنیم که شباهت بین بردار iام و jام رو بسنجه مثلا:
a_ji = k(E_i, E_j) / Sum(j=1 to n) {k(E_i, E_j)}
خب حالا این تابع کرنل که مقاله معروف استفاده کرده به چه صورته؟(آماده ای طاقتشو داری؟)
Q_i = W_q * E_i
K_j = W_k * E_j
a_ji = Softmax(Q_i * K_1, Q_i * K_2, ... , Q_i * K_n)
یعنی چی اصن اینا؟ والا سوال خوبیه. این Wها رو که مثل قبل باید یاد بگیریم. softmax هم که اگه معرف حضورتون نیست از بین n تا عدد میگه کدوم احتمالا ماکزیممه (بهترین از این نتانم توضیحش بدم فرمولشو خودت ببین)
حالا چرا سه تا بردار درست کردیم Q, K, V والا ندانم اینم. ولی بیا بگم چرا بهشون میگیم Q, K, V؟
کاری که ما فک میکنیم این جا داره اتفاق میفته این طوریه که فرض کن یه جمله داریم مثل: «در جنگل یک شیر درنده را دیدم». حالا میخوای بدونیم این شیر کدوم شیره؟
هر کدوم از کلمه ها رو embeddingشون رو پیدا میکنیم و بعد میایم متناسب با وزن ها Q,K, V رو هم حساب میکنیم. Q شروع کلمه query عه یعنی انگار این بردار Q یه سوالی رو کدگذاری کرده . مثلا Q مرتبط با کلمه شیر(Q_4) این رو کد کرده که آیا بعد از من صفتی اومده که من رو توصیف کنه؟ K شروع کلمه Key و انگار این بردار داره جواب یه سوال خاصی رو کد میکنه. مثلا این طور که آیا من دارم کلمه قبل از خودم رو توصیف میکنم؟
حالا اتفاقی که میفته اینه که وقتی Qمرتبط با کلمه شیر رو در تک تک Kها ضرب میکنیم چون Q_4 با بردار K_5 در یک جهت هستن پس وقتی مفهوم کدگذاری شده برای کلمه شیر رو بروزرسانی بکنیم به کلمه «درنده» بیشتر توجه میکنیم و V_5 تاثیر زیادی رو ما میذاره؟
حالا این مکانیزم توجه برای کلمه شیر بود. مثلا کلمه درنده حالا میتونه دقیقا سوال برعکسی رو بپرسه بگه آیا قبل من اسمی وجود داره که من توصیفش کنم؟
حالا همه اینا تازه میشه یه head از این مکانیزم attention. توی هر مرحله میتونیم به ازای هر کلمه چندین بار سوال بپرسیم مثلا کلمه شیر بار بعدی میتونه بپرسه آیا قبل یا بعد من کلمه ای هست که مرتبط باشه با مفهوم طبیعیت و حیات وحش؟ حالا این بار وزن مرتبط با جنگل زیاد میشه و به اون توجه میکنه. خب پس این میشه Multi-Head attention mechanism.
خب حالا شاید سوال پیش بیاد مثلا مدلای مرسوم چند تا Head دارن؟ به قول یه بنده خدایی دارای صدها head. مثلا مدل GPT3 از ۹۶تا Head استفاده میکرد
و قسمت جذابش اینجاست که این ۹۶ تا به طور موازی انجام میشه و یهو برای همه iها هم انجام میشه من اینجا برای سادگی فقط برای یه دونه توضیح دادم. پس
E'_i = E_i + ΔE_i(1) + ΔE_i(2) + ... + ΔE_i(96)
#language_modeling #note
@SingularThinker
همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم attention چه شکلیه؟
با ذکر این نکته که این تنها حالت ساختن این مکانیزم نیست و اساسا خود نویسندههای مقاله تو گوگل خودشون این مفهوم رو از پژوهشهای قبلی الهام گرفته بودن ایشالا تو قسمتای اینده بیشتر در مورد تاریخش حرف میزنیم.
خب تا اینجا رو اومده بودیم که embedding درسته سعی میکنه معنای هر توکن رو تو یه بردار کدگذاری کنه ولی «این درد مشترک هرگز جدا جدا درمان نمی شود.» یعنی شما باید به کلمات قبل و بعد هم نگاه کنی تا بتونی دقیقا مفهوم اصلی هر کلمه/توکن رو بفهمی پس میایم با مکانیزم attention این بردار embedding برای هر کلمه رو بروزرسانی میکنیم. حالا بیاید یه مرحله بریم جلوتر و ببنیم چطوری این کارو انجام میدیم؟
خب بیاید تصور کنید که بردار E_i بردار embedding توکن iام در جمله باشه و شما میخواید اینو با استفاده از سایر کلمات بروزش بکنید. ساده ترین کار چیه؟ این که یه ترکیب خطی از سایر embeddingها رو با هم جمع کنیم.
E'_i = E_i + ΔE_i
ΔE_i = Sum(j=1 to n) {a_ji* E_j}
خب این خوبه ولی ممکنه یه سوال بکنه بگه که خب الان هر کدوم از این جهتا قبلا یه معنی خاصی داشت همین طوری ما زرتی اینا رو با هم جمع کنیم اینا که با هم قاطی میشه اینجاست که میگم که حق با شماست. پس بیایم چیکار کنیم بیایم اول با یه نگاشت خطی از فضای embedding بریم یه فضای دیگه و بعد همون قبلی رو بریم یعنی چی؟
V_j = W_v * E_j
ΔE_i = Sum(j=1 to n) {a_ji * V_j}
حالا این W_v رو از کجا میاریم هیچی دیگه اینم یه چیز رندومی میذاریم و در طی فرایند آموزش یادش میگیریم. خب حالا شاید بپرسید که این a_jiها رو چیکار کنیم؟ اینا چین اصن اینا وزنهای ترکیب خطیان که هر چی بزرگتر باشن تاثیر V_j مربوطه بیشتر میشه پس در واقع بیشتر به توکن jام توجه میکنیم. در واقع باید از یه تابع کرنل استفاده کنیم که شباهت بین بردار iام و jام رو بسنجه مثلا:
a_ji = k(E_i, E_j) / Sum(j=1 to n) {k(E_i, E_j)}
خب حالا این تابع کرنل که مقاله معروف استفاده کرده به چه صورته؟(آماده ای طاقتشو داری؟)
Q_i = W_q * E_i
K_j = W_k * E_j
a_ji = Softmax(Q_i * K_1, Q_i * K_2, ... , Q_i * K_n)
یعنی چی اصن اینا؟ والا سوال خوبیه. این Wها رو که مثل قبل باید یاد بگیریم. softmax هم که اگه معرف حضورتون نیست از بین n تا عدد میگه کدوم احتمالا ماکزیممه (بهترین از این نتانم توضیحش بدم فرمولشو خودت ببین)
حالا چرا سه تا بردار درست کردیم Q, K, V والا ندانم اینم. ولی بیا بگم چرا بهشون میگیم Q, K, V؟
کاری که ما فک میکنیم این جا داره اتفاق میفته این طوریه که فرض کن یه جمله داریم مثل: «در جنگل یک شیر درنده را دیدم». حالا میخوای بدونیم این شیر کدوم شیره؟
هر کدوم از کلمه ها رو embeddingشون رو پیدا میکنیم و بعد میایم متناسب با وزن ها Q,K, V رو هم حساب میکنیم. Q شروع کلمه query عه یعنی انگار این بردار Q یه سوالی رو کدگذاری کرده . مثلا Q مرتبط با کلمه شیر(Q_4) این رو کد کرده که آیا بعد از من صفتی اومده که من رو توصیف کنه؟ K شروع کلمه Key و انگار این بردار داره جواب یه سوال خاصی رو کد میکنه. مثلا این طور که آیا من دارم کلمه قبل از خودم رو توصیف میکنم؟
حالا اتفاقی که میفته اینه که وقتی Qمرتبط با کلمه شیر رو در تک تک Kها ضرب میکنیم چون Q_4 با بردار K_5 در یک جهت هستن پس وقتی مفهوم کدگذاری شده برای کلمه شیر رو بروزرسانی بکنیم به کلمه «درنده» بیشتر توجه میکنیم و V_5 تاثیر زیادی رو ما میذاره؟
حالا این مکانیزم توجه برای کلمه شیر بود. مثلا کلمه درنده حالا میتونه دقیقا سوال برعکسی رو بپرسه بگه آیا قبل من اسمی وجود داره که من توصیفش کنم؟
حالا همه اینا تازه میشه یه head از این مکانیزم attention. توی هر مرحله میتونیم به ازای هر کلمه چندین بار سوال بپرسیم مثلا کلمه شیر بار بعدی میتونه بپرسه آیا قبل یا بعد من کلمه ای هست که مرتبط باشه با مفهوم طبیعیت و حیات وحش؟ حالا این بار وزن مرتبط با جنگل زیاد میشه و به اون توجه میکنه. خب پس این میشه Multi-Head attention mechanism.
خب حالا شاید سوال پیش بیاد مثلا مدلای مرسوم چند تا Head دارن؟ به قول یه بنده خدایی دارای صدها head. مثلا مدل GPT3 از ۹۶تا Head استفاده میکرد
و قسمت جذابش اینجاست که این ۹۶ تا به طور موازی انجام میشه و یهو برای همه iها هم انجام میشه من اینجا برای سادگی فقط برای یه دونه توضیح دادم. پس
E'_i = E_i + ΔE_i(1) + ΔE_i(2) + ... + ΔE_i(96)
#language_modeling #note
@SingularThinker
🔥3❤1👍1
Singular Thinker
مدلسازی زبان - قسمت ششم همین اولش بگم این قسمت ازوناست که اگه نیبینی هم خیلی چیزی رو از دست نمیدی. پس اگه حال و حوصله نداری یا بعدا بخون یا بزن قسمت بعدی چون تو این قسمت میخوایم ببینیم داخل این مکانیزم attention چه شکلیه؟ با ذکر این نکته که این تنها حالت…
خب اگه متوجه نشدید که چی شده احتمالا تقصیر من و بخشی محدودیت انتقال محتوا از طریق متن باشه ولی اگه مشتاقید میتونید از من بپرسید و یا این ویدیو بسیار زیبا رو ببینید. ولی حالا آخرش شاید بپرسیم که حالا این GPT چطوری میتونه جمله «رییس جمهور آمریکا در سالم ۲۰۲۱ آقای ...» رو درست کامل کنه؟ این اطلاعات که اصن تو جملهها نبوده که سوال خوبیه ولی با همراه باشید و برخلاف عنوان مقاله attention is 1/3 of all you need :>
پ.ن: برابرهای فارسی embedding خیلی عجیبه مثلا «جاسازی» «تعبیه» «نهفته سازی» و شاید بهترینشون «درون سپاری» باشه.
پن۲: سربسته بگم این یکی از سختترین چیزایی بود که توضیح دادم چطور شد؟
#language_modeling #note
@SingularThinker
پ.ن: برابرهای فارسی embedding خیلی عجیبه مثلا «جاسازی» «تعبیه» «نهفته سازی» و شاید بهترینشون «درون سپاری» باشه.
پن۲: سربسته بگم این یکی از سختترین چیزایی بود که توضیح دادم چطور شد؟
#language_modeling #note
@SingularThinker
🔥3👎1