The Debugging Diaries
88 subscribers
63 photos
47 videos
33 files
73 links
گوشه‌ای برای یادداشت و ثبت مطالب مربوط به پایتون، یادگیری عمیق و هوش و هر چی که مربوط به تکنولوژی باشه.
加入频道
داشتم چندتا فایل‌ رو از چندتا دایرکتوری میخوندم سه تا متد خیلی ساده و کار راه بنداز توی کار در این زمینه هست که البته بیشتر به str ربط داره تا خوندن فایل، ولی احتمالا بیشتر زمانی که میخواین نوع یک فایل چک کنین استفاده بشه
دو متد str.startswith و str.endswith که یک رشته می گیره و اگه با اون رشته عبارت مد نظر شما شروع یا ختم شده باشه True یا False بر میگردونه
filename = "example.png"
filename.endswith('png')
#out put is true

می تونین یه رنج خاصی هم بهش بدین که توی اون رنج این شرط چک کنه.
متد سوم هم os.path.splitext هست که اسم یه برنامه رو میگیره و اسم و پسوندش رو بر میگردونه
import os

# File name
filename = "example.png"

# Split the file name
root, ext = os.path.splitext(filename)
# output for root is example and for ext is .png

#python
یکی از متدهای لینوکسی برای بک آپ گرفتن و تجمیع فایل tar هست.tar به طور پیش فرض مثل zip الگوریتم فشرده سازی نیست ولی می تونه با یسری آرگومان ها فشرده سازی هم انجام میده که در فایل با حجم بالا عملکرد بهتری در فشرده سازی از zip داره. بریم سراغ دستورهای پرکاربردش
tar -cf archive.tar <dir or file>

به این صورت میتونین فایل ها تون رو tar کنین c به معنی create و f هم برای نوشتن اسم فایل خروجی هست.
tar -czf archive.tar.gz

اگه بخواین فشرده بکنه z یکی از آرگومان هاش برای gzip هست.
tar -tf archive.tar

مشاهده محتوایات داخل فایل tar
tar -xf archive.tar

استخراج محتوایات فایل tar شده
The Debugging Diaries
الان که دارم این متن رو می نویسم دلار 72.5 ناقابل
یک از شرکت هایی دیگری که تو زمینه مدل های زمانی بزرگ فعالیت میکنه DeepSeek هستش. امروز یه مدل 613 میلیاردی رو اوپن سورس کرد و یه تکنیکال ریپورت هم منتشر کرده. نکته جالبش هزینه ساخت این مدل هستش که حدود 5.5 میلیون دلار شده(بدون در نظر گرفتن آزمون خطاهاش) که الان دارم این متن رو می نویسم دلار 81 تومن ناقابل هست که میشه حدود 450 میلیارد تومن.
توی سایت chat.deepseek.com می تونین از این مدل به صورت رایگان استفاده کنین
یه نکته مثبتش اینکه فیلتر نیست و برای دوستانی چینی هستش، قابلیت سرچ وب، آپلود فایل و حتی قابلیت thinking هم داره.

#LLM
دو تا از built-in functionهای پایتون که اکثرا کمتر شناخته شده است تابع ()any و ()all هست.
اما این دو تابع چه کاربردی دارند؟
مثلا زمانی که بخوایم تمام عناصر لیست یا تاپل (یا به عبارت دقیق تر یک Iterable) دارای یک شرط خاص باشند چیکار می‌کنیم؟
اولین ایده اینکه روی تمام آیتم‌هاش for بزنیم و شرط رو چک کنیم، اما راه حل پایتونیش استفاده از این دو تابع بالا هست.
برای حالت and یعنی برقرار شرط روی تک تک اعضا از تابع ()all و برای برقراری شرط حداقل برای یک عضو از تابع ()any استفاده می کنیم.
مثال :
## check for exist item less than two
dummy_num = [1,2,3,4,5,6]
any( i<2 for i in dummy_num )
#output True

## Check if all items are greater than two
dummy_num = [1,2,3,4,5,6]
all( i<2 for i in dummy_num )
#output False

#python
بعد مدت‌ها غیبت این دفعه میخوام راجع به دستورات لینوکسی بگم که خیلی به درد تحلیلگران و مهندسان داده میخوره. طبیعتا این دستورات چون با کرنل لینوکس کار می‌کنن و خیلی بهینه هستن، احتمالا از معادلشون تو پایتون سریع‌تر خواهند بود. بیشتر دستوراتی هم که در ادامه ذکر میشه مربوط به کار با فایل‌هاست.
از مقدماتی و ساده شروع کنیم و کم کم بریم به سمت پیشرفته‌ترش
اولیش برای باز کردن و دیدن محتویات یک فایل هست.
cat <file>

اشکال این دستور اینکه برای فایل‌هایی که خیلی طولانی هستن خوب نیست، پس از یه دستور دیگه به نام less برای خوندن فایل‌هایی با خطوط بالا استفاده میشه.
less <file>

این دستور آپشن‌های خوبی هم داره
مثلا
less -N <file>  
# show line number

less +F <file>
#Continuously displays new lines as they are added to the file.

یه توضیح کوچیک راجع به F+ اینکه اگه دارین فایلی رو میخونین و همزمان هم چیزی در فایل نوشته میشه، با این سوییچ، نوشته‌های جدید رو هم نشون میده. توی حالت less با space میتونین یک صفحه یک صفحه جلو برین و با G+ میتونین از انتها فایل رو مشاهده کنین.

برای مشاهده ابتدا و انتهای یک فایل هم می تونین از دستور head و tail استفاده کنین.
head -n 10 <file>
# show first 10 line

tail -n 10 <file>
# show last 10 line

به جای n- میتونین از c- برای نمایش چندین بایت اول یا آخر فایل هم استفاده کرد. یکی از کاربردی‌ترین حالت‌های برای مشاهده لاگ، دستور tail -f هست که به صورت برخط مواردی که به فایل اضافه میشه رو نشون میده.
#linux
بریم سراغ ادامه پارامترهای مدل‌های زبانی بزرگ و Repetition Penalty یا جریمه تکرار

جریمه‌تکرار، برای کاهش خروجی‌های تکراری و اضافی استفاده می‌شه. با استفاده از اون،مدل هنگام تولید توکن‌های بعدی، احتمال توکن‌های تولید شده قبلی را جریمه و کم می‌کنه اینکار باعث تنوع در متون و ایجاد خروجی‌های منسجم‌تر میشه.

مدل‌های زبانی بخصوص هنگام تولید خروجی‌های طولانی‌تر، عبارات و جملات تکراری تولید می‌کنند، این رفتار به این دلیل به وجود میاد که مدل اغلب احتمالات بالاتری رو به کلمات یا عباراتی که قبلاً در متن ایجاد شدن اختصاص میده، علتش هم اینکه از نظر زمینه‌ای(context) به متن مرتبط‌تر هستند. بدون در نظر گرفتن جریمه، این مدل‌ها ممکن است روی این توکن‌های تکراری با احتمال بالا، یک loop ایجاد بشه.
برای رفع این مشکل، با استفاده از نرخ جریمه تکرار احتمال توکن‌هایی که قبلا تولید شده باشن رو کاهش می دیم. برای کاهش احتمال توکن‌ها میزان نرخ جریمه‌تکرار بیشتر از یک و اغلب کمتر مساوی 2 است.(از نظر ریاضی از یک تا بینهایت می تونه باشه)
مثال:

without repetition penalty
Prompt: "The sky is blue and the sea is ....
answer: The sky is blue and the sea is blue. The sky is blue and the sea is blue.

with repetition penalty(1.2 - 1.5)
Prompt: "The sky is blue and the sea is
answer:The sky is blue and the sea is calm and vast under the bright sun.


شیوه کارش هم خیلی سر راست هست،کلماتی که قبلا تولید شده، احتمال تولید مجددش شدنش رو تقسیم بر نرخ جریمه‌تکرار یا Repetition Penalty میکنه

#LLM
در ادامه دستورهای کاربردی لینوکس برای حوزه داده دستوری رو معرفی میکنم که تعداد بایت های فایل، تعداد کارکترها و خط‌های یک فایل رو میشماره و نشون میده (صد البته که تعداد خط‌ها فقط غالبا برا مهمه)

wc <file>
#output is line counts - char counts - bytes counts

wc -l <file>
# line counts

wc -c <file>
# byte counts

wc -m <file>
# char counts

دستور بعدی sort هست که خیلی مفصل و کاربردیه

sort <file>
# show sort result in output

sort -r <file>
# sort reverse

sort -n <file>
# Use for numeric sort

sort -R <file>
# shuffle file and random sort

sort <file> -o <new-file>
# save sort result in new file

با این همه اما این دستور هنوز کلی آپشن داره
توی پست لینوکسی بعدی سعی میکنم یه کاربرد حرفه‌ای از مجموعه دستوراتی که تا الان ذکر شد بهتون نشون بدم
#linux
به عنوان ۵امین پارامتر مدل‌های زبانی بریم سراغ یک پارامتر ساده این مدل‌ها یعنی max_token. به معنای بیشترین تعداد توکنی که مدل میتونه پردازش کنه. هر چقدر max_token بیشتر باشه مدل ram بیشتری برای اجرا نیاز داره و خروجی که میتونه تولید کنه(البته بسته به پرامپت و غیره) طولانی‌تر هست.
بحث اما یخورده اختلافی هست بعضیا فقط تعداد توکن خروجی مدل رو به عنوان حد max_token می دونن و برخی مجموع توکن ورودی و خروجی رو
چیزی که در داکیومنت OpenAi نوشته بود مجموع ورودی و خروجی رو شامل میشد.

The maximum number of tokens to generate shared between the prompt and completion. The exact limit varies by model. (One token is roughly 4 characters for standard English text)

#LLM
خب در ادامه لینوکس برای حوزه داده، بریم برای یک مثال عملی فرض کنین یک فایل به نام word.csv دارین دارای دو ستون (در ابتدایی ترین حالت) به شکل زیر
word,freq
python,10
linux,8
llm,15
java,20

و میخواین دو کلمه‌ای که بیشترین تکرار رو داشته در یک فایل ذخیره کنین. خب برای این کار باید این فایل رو بر اساس ستون freq مرتب کنین. طبیعتا به سراغ دستور sort میریم اما آیا میشه یک فایل بر اساس یک ستون با این دستور مرتب کرد؟
جوابش بله است
sort -t',' -k2,2 -rn file.csv

در اینجا با استفاده از t- جدا کننده (که در فایل های csv کاما هست) مشخص شده با k- ستون‌هایی که میخواین مرتب سازی بر اساسش انجام بشه رو مشخص میکنیم که در اینجا از ستون 2 تا ستون 2 (به معنای انتخاب ستون دوم) که freq هست در نظر گرفته میشه.
در ادامه هم rn- به معنای مرتب سازی نزولی و در نظر گرفتن ستون به صورت عدد می باشد.
اما این کار یه ایرادی داره و اونم اینکه سطر اول که freq و header هست هم به عنوان یه خط در نظر گرفته میشه و فایل خروجی‌مون سرستون نخواهد داشت برای رفع این مشکل دستور رو به صورت زیر بازنویسی میکنیم.
head -n 1 word.csv && tail -n +2 word.csv | sort -t',' -k2,2 -rn


دستور فوق در واقع به دو بخش قبل و بعد && تقسیم میشه
در قسمت اول با استفاده head -n 1 word.csv سطر اول که سرستون‌های فایل هست جدا میشه (بخش اول دستور) بخش دوم که tail -n +2 word.csv به معنای خط دوم تا انتهای فایل هست(نکته مهم اینکه 2+ و 2 در دستورهای tail و head معنای متفاوت داره). با استفاده از عملگر پایپ | (وظیفه این دستور ارسال خروجی یک دستور به دستور دیگر است)خروجی این دستور به دستور sort که نوشته شد ارسال میشه. در نهایت بخش اول و دوم با استفاده از && بهم متصل می شوند. برای این که دو کلمه که بیشترین تکرار داشته باشند رو پیدا کنیم و در یک فایل ذخیره کنیم، دستور نهایی به شکل زیر است.
(head -n 1 word.csv && tail -n +2 word.csv | sort -t',' -k2,2 -rn) | head -n 3 > output.txt

خروجی دستور رو با عملگر پایپ | مجددا به head ارسال میشه و برای اینکه دو کلمه برتر پیدا بشه (چون یکیش سر ستون هست) n- برابر با 3 قرار میگره با عملگر < هم خروجی دستورات رو میشه در یک فایل نوشت که اینجا در فایل output.txt نوشته شده است. در نهایت
cat output.txt
#output
word,freq
java,20
llm,15

به ظاهر شاید یخورده سخت باشه اما اگه با عملگرهای | و < که بهشون عملگرهای redirection و streaming میگن آشنا بوده باشین خیلی پیچیدگی دیگری نداره
در این مثال تقریبا از تمام مواردی که قبلا راجع بهشون صحبت کرده‌ بودیم استفاده کردیم.
#linux
👍2
دیروز OpenAi یک قابلیت جدید به نام tasks رو معرفی کرد. خلاصه‌اش میشه یک reminder خیلی هوشمند. فعلا حالت بتا هستش، برای کابران رایگان منتشر نشده ولی قول این رو دادن که برای همه منتشر بشه. این با توجه به تحریم‌ها و فیلترشکن چقد برای ما قابل استفاده هست هم جای ابهام داره.
🔥1
من بعد از رایگان شدن تسک :)
The Debugging Diaries
یک از شرکت هایی دیگری که تو زمینه مدل های زمانی بزرگ فعالیت میکنه DeepSeek هستش. امروز یه مدل 613 میلیاردی رو اوپن سورس کرد و یه تکنیکال ریپورت هم منتشر کرده. نکته جالبش هزینه ساخت این مدل هستش که حدود 5.5 میلیون دلار شده(بدون در نظر گرفتن آزمون خطاهاش) که…
دیروز یه اتفاق خوب دیگه هم افتاد اونم منتشر شدن آپ اندرویدی Deepseek بود. قبلش البته برای IOS منتشر شده بود که خیال طرفدارای اپل راحت باشه. مدل خوبیه واقعا، اما دیدم تو فضای مجازی نگرانی‌هایی راجع به نگهداری چت‌ها و حریم خصوصی در این مدل مطرح بود، فارغ از درست و غلط بودن، توی مواردی که با مدل چت میکنین جانب احتیاط رو رعایت کنین. روی چین و حزب کمونیستش هم حساس هست و با سوگیری جواب میده یا گارد مدل فعال میشه و جواب نمیده. غیر این موارد مدل عالی هست. رایگان در سطح Gpt4o، اوپن سورس، قابلیت سرچ، قابلیت تفکر و مهم‌تر از همه بدون تحریم برای ما.
تا اینجا سه هوش‌مصنوعی که اپ اندرویدی دارند و تحریم نیستن عبارت است از
Copilot
Perplexity
Deepseek
👏1
خب امشب هم بریم سراغ دوتا کامند مناسب کار با داده در لینوکس
اولیش spilt هست، همینطور که از اسمش هم مشخصه کارش تقسیم کردن یک فایل هست. فرض کنیم یه فایل داریم دارای 5 خط.

split -l 2 -d --additional-suffix=.txt <file> <split-file-name>

خب اولین سوییچ l- هست یعنی بر اساس خط، پس اینجا دو خط دو خط فایل تقسیم میکنه.به جاش می تونین n- استفاده کنین که میشه تعداد فایل‌های خروجی. d- به معنای شماره گذاری فایل‌های خروجی به صورت عددی هست. در حالت عادی این شماره گذاری به صورت حروف انگلیسی انجام میشه. additional suffix هم پسوند فایل خروجی مشخص میکنه.
بعد از فایل هم اسم فایل‌های خروجی قرار میگیره با فرض اینکه مقدار files نوشته شده باشه خروجی دستور بالا میشه

files00.txt files01.txt files02.txt


دستور بعدی sed هست برای حذف یا جایگزین کردن در فایل
sed  's/old/new/g' <file>
# s min replace and g means in all the line

sed '/pattern/d' <file>
# delete all thing that match with pattern

sed -i.bak 's/old/new/g' <file>
# first get backup then Edit in place
کم کم به انتهای مبحث پارامترهای مدل‌های زبانی داریم میرسیم و پارامتر 6ام فک کنم که بررسی میکنیم presence penalty یا جریمه حضور( چالش ترجمه🫠) است.
این پارامتر در واقع بر روی اینکه مدل در مورد همون موضوع صحبت کنه یا ایده‌ها و موضوعات جدید رو مطرح کنه اثر میذاره. این پارامتر خیلی شبیه جریمه تکرار هست ولی از یه بعد دیگه به قضیه نگاه میکنه(اسپویل آلرت!! پارامتر بعدی که قرار معرفی شه هم خیلی شبیه اینه).جریمه حضور، مدل رو به تولید کلمات یا مفاهیمی که قبلاً در متن ظاهر شده‌اند، تشویق یا جریمه می کنه. مقدار این پارامتر بین 2 تا 2- هستش
مقدارهای مثبت بحث زیاد راجع به موضوع فعلی رو جریمه و مقدار منفی به معنای موندن و توضیح و تکرار بیشتر موضوع فعلی هست. خلاصه‌اش اینکه مدل روی همین موضوع تمرکز و تکرار کنه یا بره سراغ مفاهیم مرتبط و نزدیک به بحث اصلی. پس بحث این پارامتر روی تکرار کلمات نیست بلکه روی موضوعات تمرکز داره.
برای مثال برخلاف جریمه حضور ( و جریمه فرکانس که آینده خواهید دید) در یک متن مثلا در مورد "AI"، جریمه حضور زیاد مدل را از تولید مجدد عبارت "AI" باز می داره، حتی اگر اخیراً دقیقاً از آن کلمه استفاده نشده باشد.

High Presence Penalty (1.5)
User: "What is the current state of space exploration?"
Bot: "Humanity has made significant strides with Mars missions and the Artemis program, which aims to return astronauts to the Moon. There’s also a growing interest in asteroid mining and commercial space travel."
User: "What are the biggest challenges for the future of space exploration?"
Bot: "Challenges include the cost of space missions, developing sustainable life support systems for long-duration space travel, and the need for innovative propulsion technologies."


مدل در سوال دوم سعی میکنه از یه جنبه دیگه به مدل بپردازه و دیگه به مریخ و .. اشاره نمیکنه
Low Presence Penalty (0):
User: "What is the current state of space exploration?"
Bot: "Humanity has made significant strides with Mars missions and the Artemis program, which aims to return astronauts to the Moon. There’s also a growing interest in asteroid mining and commercial space travel."
User: "What are the biggest challenges for the future of space exploration?"
Bot: "The challenges for space exploration include the cost of Mars missions, the need for sustainable life support systems for long-term missions, and the challenges of deep space exploration."


اشاره مجدد به مریخ و مباحث گذشته
#LLM
تو این چند وقته که درگیر امتحانات و پروژه‌ها بودم کلی اتفاق افتاد که ازشون رد میشیم
و با عرضه رسمی o3-mini برای همه کاربران اخبار رو ادامه میدیم
باید گفت این رو مدیون Deepseek و به عبارت کلی‌تر دنیای نرم افزار‌های آزاد هستیم.
👍3
بهترین تعریف از sql injection :)
بریم سراغ لینوکس و این دفعه دستور grep
وظیفه این دستور جست و جوی پترنهای متنی در فایلهاست.
grep [options] "<pattern>" <file(s)>

grep -i "error" log.txt
# case-insensitive search

grep -v "debug" log.txt
# Shows all lines except those containing debug

grep -r "error" <dir path>
# search error in one dir

grep -c "error" log.txt
# count number of matching

grep -w "cat" animals.txt
# matches cat but not something like catch

چند نکته
در صورت یافتن پترن کل اون خط رو بر میگردونه
تو این مثالها از یه متن معمولی استفاده شده ولی از Regex یا همون عبارت باقاعده هم میشه استفاده کرد.
خیلی با ( | ) پایپ استفاده میشه در واقع خروجی یه دستور بهش داده میشه و روی آن فیلتر انجام میده
ls /etc | grep resol
# output resolv.conf
👍2
یکی از مشکلات ما توی دانلود پکیج یا ایمیج های توی داکر یا پایتون هستن
تحریم یا SSL ارور و کندی و هزارتا مشکل دیگه
یکی از راه حل ها استفاده از سرورهای Mirror هستش
یه Mirror برای دانلود پکیج های پایتونی runflare هستش با استفاده از این سرور میتونین سرعت دانلود پکیج ها توی پایتون ( در ایران مخصوصا ) خیلی زیاد کنین
برای استفاده به شکل زیر عمل کنین
pip install -i https://mirror-pypi.runflare.com/simple/ <package name>

برای استفاده از ایمیج های داکر هم ریجستری Mirror آروان خیلی خوبه کافیه آدرس زیر رو قبل از اسم
docker.arvancloud.ir/
کافیه اسم ایمیج بیارین
docker pull docker.arvancloud.ir/kibana:latest

توی داکر کامپوز هم جوابه
services:  
kibana:
image: docker.arvancloud.ir/kibana:7.17.24
👍3