diff --git a/course/ar/chapter1/section3.ipynb b/course/ar/chapter1/section3.ipynb new file mode 100644 index 00000000..16d299cd --- /dev/null +++ b/course/ar/chapter1/section3.ipynb @@ -0,0 +1,472 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# المحولات، ما الذي يمكنها فعله؟" + ], + "metadata": { + "id": "5yr2y-5cz8QH" + } + }, + { + "cell_type": "markdown", + "source": [ + "ثبّت مكتبات المحولات ومجموعات البيانات والتقييم لتتمكّن من تشغيل هذا الدفتر البرمجي." + ], + "metadata": { + "id": "tzUCgOJ_0BRk" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install datasets evaluate IProgress tqdm ipywidgets sacremoses \"transformers[sentencepiece]\"" + ], + "metadata": { + "id": "qt-Ym6WL0DXw" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "من مكتبة\n", + "\n", + "`transformers`\n", + "\n", + "استورد الدالة\n", + "\n", + "`pipeline`." + ], + "metadata": { + "id": "oNO84Dn7m9aq" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import pipeline" + ], + "metadata": { + "id": "SasHk5uVnDl8" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "نختار محولًا مفتوح المصدر ونبدأ في استخدامه. كمثال، استخدمت\n", + "\n", + "نموذجًا مخصصًا من:\n", + "\n", + "[مختبر كامل](https://huggingface.co/CAMeL-Lab)\n" + ], + "metadata": { + "id": "Uxyf36TR0U4z" + } + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Fw8owxGXwGQ1", + "outputId": "8780c0fa-596b-4e84-eec9-ec70886e628c" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'label': 'positive', 'score': 0.757685661315918}]" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ], + "source": [ + "sentimentAnalysisModelName = 'MaagDeveloper/CAMeL-Lab-arabic-sentiment-analysis'\n", + "classifier = pipeline(task=\"sentiment-analysis\", model=sentimentAnalysisModelName)\n", + "\n", + "classifier(\"لقد كنتُ أنتظر الدورة من هاجِّنغ فيس طوال حياتي.\")" + ] + }, + { + "cell_type": "code", + "source": [ + "classifier(\n", + " [\"لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.\", \"أكره هذا بشدّة!\"]\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tdQdVBw8y5kA", + "outputId": "ea20d649-542c-44b6-e565-db986a53a246" + }, + "execution_count": 18, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'label': 'positive', 'score': 0.9497042894363403},\n", + " {'label': 'negative', 'score': 0.9927158951759338}]" + ] + }, + "metadata": {}, + "execution_count": 18 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من\n", + "\n", + "[موريتس لاورَر](https://huggingface.co/MoritzLaurer) 😅 يارب أكون ترجمت اسمك صح.\n" + ], + "metadata": { + "id": "fDylTUq-4NFw" + } + }, + { + "cell_type": "code", + "source": [ + "zeroShotTextClassificationModelName = 'MaagDeveloper/MoritzLaurer-mDeBERTa-v3-base-mnli-xnli'\n", + "classifier = pipeline(\"zero-shot-classification\", model=zeroShotTextClassificationModelName)\n", + "\n", + "classifier(\n", + " \"لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.\",\n", + " candidate_labels=[\"التعليم\", \"التكنولوجيا\", \"الترفيه\"]\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OYM_zzPr4y5U", + "outputId": "c0da3f3a-14a8-4213-9982-5953fbd7d9f8" + }, + "execution_count": 19, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'sequence': 'لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.',\n", + " 'labels': ['التعليم', 'الترفيه', 'التكنولوجيا'],\n", + " 'scores': [0.9193072319030762, 0.056315358728170395, 0.024377452209591866]}" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من [عابد خولي](https://huggingface.co/akhooli).\n", + "\n", + "💡 ملحوظة: أضفت\n", + "\n", + "`truncation=True`\n", + "\n", + " لتجنب كتابة توكنز أكثر من 30، كما تم تحديده في\n", + "\n", + " `max_length`.\n" + ], + "metadata": { + "id": "8dO6X7RG9lpx" + } + }, + { + "cell_type": "code", + "source": [ + "textGenerationModelName = 'MaagDeveloper/akhooli-gpt2-small-arabic'\n", + "generator = pipeline(\"text-generation\", model=textGenerationModelName)\n", + "generator(\n", + " \"للمهتمين بالتكنولوجيا، سوف نعلمك في هذا الكورس كيف\",\n", + " max_length=30,\n", + " num_return_sequences=2,\n", + " truncation=True\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GiQusx6a9ijB", + "outputId": "718c5d8d-4b93-4322-893a-79388be6a0cd" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'generated_text': 'للمهتمين بالتكنولوجيا، سوف نعلمك في هذا الكورس كيف تكون الأشياء من دون الحاسوب، يمكن للمرء أن يقول ما الذي يمكنك قوله هكذا.'},\n", + " {'generated_text': 'للمهتمين بالتكنولوجيا، سوف نعلمك في هذا الكورس كيف ولماذا يمكنك الحصول على عمل وأنفسك عن غير قصد. سوف تجد له معلومات'}]" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من\n", + "\n", + "[مختبر تطوير الذكاء الآلي في الجامعة الأمريكية في بيروت (AUB)](https://huggingface.co/aubmindlab).\n" + ], + "metadata": { + "id": "fqjC9JPauzus" + } + }, + { + "cell_type": "code", + "source": [ + "fillMaskModelName = 'MaagDeveloper/aubmindlab-bert-base-arabertv02'\n", + "unmasker = pipeline(\"fill-mask\", model=fillMaskModelName)\n", + "unmasker(\"هذا الكورس سيعلمك كل شيء عن النماذج [MASK].\", top_k=2)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hpAGHI6js3RA", + "outputId": "463b66f1-7a32-44e3-c783-5e20b3d98e99" + }, + "execution_count": 21, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'score': 0.046427544206380844,\n", + " 'token': 4035,\n", + " 'token_str': 'البشرية',\n", + " 'sequence': 'هذا الكورس سيعلمك كل شيء عن النماذج البشرية.'},\n", + " {'score': 0.04319816455245018,\n", + " 'token': 2976,\n", + " 'token_str': 'الرياضية',\n", + " 'sequence': 'هذا الكورس سيعلمك كل شيء عن النماذج الرياضية.'}]" + ] + }, + "metadata": {}, + "execution_count": 21 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من\n", + "\n", + "[محمد حاتمي - موحه](https://huggingface.co/aubmindlab).\n" + ], + "metadata": { + "id": "XxlG3ZvIyysy" + } + }, + { + "cell_type": "code", + "source": [ + "namedEntityRecognitionModelName = 'MaagDeveloper/hatmimoha-arabic-ner'\n", + "ner = pipeline(\"ner\", model=namedEntityRecognitionModelName, grouped_entities=True)\n", + "ner(\"اسمي محمد وأنا مجرد فلاح من مركز منيا القمح.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zK48iUK_wdQW", + "outputId": "0cd52d98-e444-4ee3-d3f6-1609bb9074a4" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'entity_group': 'PERSON',\n", + " 'score': np.float32(0.9798584),\n", + " 'word': 'محمد',\n", + " 'start': 5,\n", + " 'end': 9},\n", + " {'entity_group': 'ORGANIZATION',\n", + " 'score': np.float32(0.58339274),\n", + " 'word': 'مركز منيا القمح',\n", + " 'start': 28,\n", + " 'end': 43}]" + ] + }, + "metadata": {}, + "execution_count": 23 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من\n", + "\n", + "[زياد أحمد](https://huggingface.co/ZeyadAhmed).\n" + ], + "metadata": { + "id": "_3V-PB5n1bzw" + } + }, + { + "cell_type": "code", + "source": [ + "questionAnsweringModelName = 'MaagDeveloper/ZeyadAhmed-AraElectra-Arabic-SQuADv2-QA'\n", + "question_answerer = pipeline(\"question-answering\", model=questionAnsweringModelName)\n", + "question_answerer(\n", + " question=\"ما هو مكان عملي؟\",\n", + " context=\"اسمي محمد وأعمل من المنزل.\",\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qyUpeWGP0K_D", + "outputId": "a03058ab-a654-410f-81f9-5af75b0d0b2e" + }, + "execution_count": 24, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'score': 0.8270246386528015, 'start': 19, 'end': 25, 'answer': 'المنزل'}" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من\n", + "\n", + "[مجموعة معالجة اللغة الطبيعية بقسم علوم الحاسوب والهندسة في جامعة BUET](https://huggingface.co/csebuetnlp)." + ], + "metadata": { + "id": "uRLz_FgvZQPe" + } + }, + { + "cell_type": "code", + "source": [ + "summarizationModelName = 'MaagDeveloper/csebuetnlp-mT5_multilingual_XLSum'\n", + "summarizer = pipeline(\"summarization\", model=summarizationModelName)\n", + "\n", + "text = \"فلسطين، هذا البلد الذي يعاني منذ عقود من الاحتلال والصراع المستمر، حيث يعيش شعبه في ظل ظروف صعبة للغاية، يسعى بجهد مستمر لاستعادة حقوقه المشروعة وإقامة دولته المستقلة على أراضيه التي لا تزال محتلة. ومع ذلك، فإن حلم التحرر يظل حياً في قلوب الفلسطينيين الذين لا يتوقفون عن النضال لتحقيق هذا الهدف الكبير، في وقت تواجه فيه القضية الفلسطينية تحديات كبيرة من محاولات تغيير الواقع على الأرض ومحاربة الهوية الوطنية.\"\n", + "summary = summarizer(text)\n", + "print(summary)\n" + ], + "metadata": { + "id": "ZHCGbZTfRKsy", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "de3f28d3-89d8-4611-8ceb-681ff9bd3a4f" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[{'summary_text': 'على الرغم من استمرار الاحتلال الفلسطيني منذ عقود، يواجه الفلسطينيون تحديًا كبيراً.'}]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "يوجد العديد من المحولات التي بها جميع اللغات ولكن الأفضل التخصص لضمان نتائج أفضل.\n", + "\n", + "وبالمثل 🛠️ نختار محولًا مفتوح المصدر ونبدأ في استخدامه.\n", + "\n", + "كمثال، قمت بنسخ هذا الموديل من\n", + "\n", + "[إبراهيم محمد](https://huggingface.co/mobarmg)." + ], + "metadata": { + "id": "jgA2U8dkeSr5" + } + }, + { + "cell_type": "code", + "source": [ + "translateFromArabicToEnglishModelName = 'MaagDeveloper/mobarmg-Marian-en-ar'\n", + "translator = pipeline(\"translation\", model=translateFromArabicToEnglishModelName)\n", + "\n", + "# text = 'لقد كنتُ أنتظر الدورة من هاجِّنغ فيس طوال حياتي.'\n", + "text = \"I've been waiting for a HuggingFace course my whole life.\"\n", + "translation = translator(text)\n", + "print(translation)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "id": "LmKG6hQeasZF", + "outputId": "714fc9c7-fd79-47f4-c977-baa631b9a375" + }, + "execution_count": 27, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[{'translation_text': 'لقد انتظرت دورة HugggFace طوال حياتي.'}]\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/course/ar/chapter1/section8.ipynb b/course/ar/chapter1/section8.ipynb new file mode 100644 index 00000000..15d2b187 --- /dev/null +++ b/course/ar/chapter1/section8.ipynb @@ -0,0 +1,62 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "KoipzSs3gaQb" + }, + "outputs": [], + "source": [ + "!pip install datasets evaluate IProgress tqdm ipywidgets sacremoses \"transformers[sentencepiece]\"" + ] + }, + { + "cell_type": "code", + "source": [ + "from transformers import pipeline\n", + "\n", + "fillMaskModelName = 'MaagDeveloper/aubmindlab-bert-base-arabertv02'\n", + "unmasker = pipeline(\"fill-mask\", model=fillMaskModelName)\n", + "\n", + "result = unmasker(\"هذا الكورس سيعلمك كل شيء عن النماذج [MASK].\")\n", + "print([r[\"token_str\"] for r in result])\n", + "\n", + "result = unmasker(\"الغباء الاصطناعي يمكنه تحسين [MASK] بشكل كبير.\")\n", + "print([r[\"token_str\"] for r in result])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "losXHNiEgc5L", + "outputId": "a7606e28-0f26-4675-ede6-77583562be56" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['البشرية', 'الرياضية', 'التجارية', 'الحسابية', 'المصغرة']\n", + "['الحياة', 'الذكاء', 'الصحة', 'حياتنا', 'الدماغ']\n" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/course/ar/chapter2/section2_pt.ipynb b/course/ar/chapter2/section2_pt.ipynb new file mode 100644 index 00000000..e6c56dde --- /dev/null +++ b/course/ar/chapter2/section2_pt.ipynb @@ -0,0 +1,565 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# خلف الكواليس (باستخدام بايتورتش)\n", + "\n", + "قم بتثبيت مكتبات\n", + "\n", + "transformers, datasets, evaluate\n", + "\n", + "لتشغيل هذا الدفتر." + ], + "metadata": { + "id": "ZwjM7JIeB9CA" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CVzGc8qqBzDM" + }, + "outputs": [], + "source": [ + "!pip install datasets evaluate transformers[sentencepiece]" + ] + }, + { + "cell_type": "code", + "source": [ + "from transformers import pipeline\n", + "\n", + "sentimentAnalysisModelName = 'MaagDeveloper/CAMeL-Lab-arabic-sentiment-analysis'\n", + "classifier = pipeline(\"sentiment-analysis\", model=sentimentAnalysisModelName)\n", + "classifier(\n", + " [\n", + " \"لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.\",\n", + " \"أكره هذا بشدّة!\"\n", + " ]\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4WgqjvDXCY7U", + "outputId": "b49b851b-688e-487b-b56a-c80195553f0d" + }, + "execution_count": 43, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Device set to use cpu\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'label': 'positive', 'score': 0.9497042894363403},\n", + " {'label': 'negative', 'score': 0.9927158951759338}]" + ] + }, + "metadata": {}, + "execution_count": 43 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "تحميل محول النصوص\n", + "\n", + "ال tokenizer\n", + "\n", + "هو المسؤول عن تحويل الكلام لأرقام لان المحولات لا تفهم الكلام ولكن الأرقام فقط." + ], + "metadata": { + "id": "OM7zR68PDrjw" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import AutoTokenizer\n", + "checkpoint = \"MaagDeveloper/CAMeL-Lab-arabic-sentiment-analysis\"\n", + "tokenizer = AutoTokenizer.from_pretrained(checkpoint)" + ], + "metadata": { + "id": "srPaCrRqDE5k" + }, + "execution_count": 45, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "لو لاحظنا، الجملتين مش بنفس الطول – واحدة أطول من الثانية. وهنا عندنا خيارين عشان نخليهم بنفس الطول:\n", + "\n", + "1. الحشو (Padding): نضيف رموز إضافية (غالباً أصفار) في نهاية الجمل الأقصر عشان توصل لطول الجملة الأطول.\n", + "\n", + "2. الاقتطاع (Truncation): نقطع الجمل الأطول ونخليها بنفس طول الجمل الأقصر أو الطول اللي نحدده.\n", + "\n", + "الهدف إن النموذج ياخذ مدخلات بطول موحد، لأن النماذج ما تشتغل بكفاءة على جمل بطول متغير.\n", + "\n", + "# مثال 1: الحشو فقط" + ], + "metadata": { + "id": "CZXqXpkjDxbr" + } + }, + { + "cell_type": "code", + "source": [ + "raw_inputs = [\n", + " \"لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.\",\n", + " \"أكره هذا بشدّة!\"\n", + "]\n", + "\n", + "inputs = tokenizer(raw_inputs, padding=True, return_tensors=\"pt\")\n", + "print(inputs)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6Q_ypdwJDM1u", + "outputId": "eed00c4d-fc73-483d-a3a8-4d90bf3a2672" + }, + "execution_count": 46, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'input_ids': tensor([[ 2, 3863, 1, 1, 6371, 1908, 1, 11256, 8026, 5097,\n", + " 18, 3],\n", + " [ 2, 5983, 2197, 2085, 1, 5, 3, 0, 0, 0,\n", + " 0, 0]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],\n", + " [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]])}\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# مثال 2: الحشو + الاقتطاع" + ], + "metadata": { + "id": "sj5zo8RNFiRM" + } + }, + { + "cell_type": "code", + "source": [ + "\n", + "raw_inputs = [\n", + " \"لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.\",\n", + " \"أكره هذا بشدّة!\"\n", + "]\n", + "inputs = tokenizer(raw_inputs, padding=True, truncation=True, max_length=5, return_tensors=\"pt\")\n", + "print(inputs)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Jn_2W5DkFWlY", + "outputId": "8d4e0efe-87e1-4562-ecdf-76ec2110b5e5" + }, + "execution_count": 47, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'input_ids': tensor([[ 2, 3863, 1, 1, 3],\n", + " [ 2, 5983, 2197, 2085, 3]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1],\n", + " [1, 1, 1, 1, 1]])}\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# مثال 3: الحشو لعدد معين دائمًا" + ], + "metadata": { + "id": "DeVok23TFlSq" + } + }, + { + "cell_type": "code", + "source": [ + "\n", + "raw_inputs = [\n", + " \"لقد كنتُ أترقّب الدورة من هاجِّنغ فيس طوال حياتي.\",\n", + " \"أكره هذا بشدّة!\"\n", + "]\n", + "inputs = tokenizer(raw_inputs, padding='max_length', truncation=True, max_length=5, return_tensors=\"pt\")\n", + "print(inputs)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "GSFJEKMvFbI1", + "outputId": "e19efe17-964d-4968-f351-17ab8e44a328" + }, + "execution_count": 48, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'input_ids': tensor([[ 2, 3863, 1, 1, 3],\n", + " [ 2, 5983, 2197, 2085, 3]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0],\n", + " [0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1],\n", + " [1, 1, 1, 1, 1]])}\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# تحميل المحول نفسه" + ], + "metadata": { + "id": "Wyua4fKiF93o" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import AutoModel\n", + "checkpoint = \"MaagDeveloper/CAMeL-Lab-arabic-sentiment-analysis\"\n", + "model = AutoModel.from_pretrained(checkpoint)" + ], + "metadata": { + "id": "8Hpu61W6FuDU" + }, + "execution_count": 50, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + " شكل (أبعاد) تمثيل الكلمات داخل النموذج.\n", + "\n", + "last_hidden_state هو مصفوفة فيها التمثيلات النهائية لكل كلمة في الجملة.\n", + "\n", + "الشكل بيكون: (batch_size, sequence_length, hidden_size)\n", + "\n", + "يعني: عدد الجمل × طول الجملة (عدد التوكنز) × عدد الخصائص (الأبعاد) لكل كلمة." + ], + "metadata": { + "id": "DiKmUJoCGa9k" + } + }, + { + "cell_type": "code", + "source": [ + "outputs = model(**inputs)\n", + "print(outputs.last_hidden_state.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9s3i2HOhGK95", + "outputId": "82230058-bc8d-4a78-e107-ad7713d5b67b" + }, + "execution_count": 51, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch.Size([2, 5, 768])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# أول حاجة بنجيب موديل جاهز للتصنيف من مكتبة\n", + "\n", + "transformers:" + ], + "metadata": { + "id": "wSNcacOzGvbi" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import AutoModelForSequenceClassification" + ], + "metadata": { + "id": "fT7rJH2TGhsv" + }, + "execution_count": 52, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "بعدين بنحدد نقطة التحميل (checkpoint) للموديل اللي مدربينه على تحليل المشاعر بالعربي:" + ], + "metadata": { + "id": "xbHXqsaSHBqD" + } + }, + { + "cell_type": "code", + "source": [ + "checkpoint = \"MaagDeveloper/CAMeL-Lab-arabic-sentiment-analysis\"\n" + ], + "metadata": { + "id": "89rK9EPUHERZ" + }, + "execution_count": 53, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "نحمّل الموديل الجاهز ده:" + ], + "metadata": { + "id": "1Ihd6-k2HF4S" + } + }, + { + "cell_type": "code", + "source": [ + "model = AutoModelForSequenceClassification.from_pretrained(checkpoint)" + ], + "metadata": { + "id": "w_xmFwRVHHc9" + }, + "execution_count": 54, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "بعدين ندخل عليه البيانات اللي جهزناها (inputs) عشان يطلع النتائج:" + ], + "metadata": { + "id": "1LodEcs7HNe4" + } + }, + { + "cell_type": "code", + "source": [ + "outputs = model(**inputs)" + ], + "metadata": { + "id": "pKX_1J7kHO2i" + }, + "execution_count": 55, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "هنا بنطبع شكل النواتج:\n", + "\n", + "logits دي الأرقام الخام اللي النموذج حسبها قبل ما نطلع منها التوقع النهائي.\n", + "\n", + "شكلها بيكون (batch_size, num_labels) يعني: عدد الجمل × عدد الفئات اللي بنصنفها (مثلاً إيجابي، سلبي، محايد)." + ], + "metadata": { + "id": "tvPWNZ4kHYsr" + } + }, + { + "cell_type": "code", + "source": [ + "print(outputs.logits.shape)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "T4781_FHHY6Y", + "outputId": "19a0dd91-203d-4586-b457-56b4916f0087" + }, + "execution_count": 56, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch.Size([2, 3])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "القيم نفسها:\n", + "\n", + "دي الأرقام اللي النموذج حسبها لكل فئة قبل ما نطبق عليها دالة مثل softmax لتحويلها لاحتمالات." + ], + "metadata": { + "id": "s0BQbghbHhyq" + } + }, + { + "cell_type": "code", + "source": [ + "print(outputs.logits)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YPtm7HgjHk01", + "outputId": "f1afc6d5-9050-41d8-a153-ff71180b316f" + }, + "execution_count": 57, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor([[ 0.0743, -0.7427, -0.4310],\n", + " [-2.6578, 3.5516, -1.4452]], grad_fn=)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "أول شيء بنستخدم دالة\n", + "\n", + "softmax\n", + "\n", + "لتحويل الأرقام الخام\n", + "\n", + "(logits)\n", + "\n", + "اللي طلعها النموذج إلى احتمالات فعلية:\n", + "\n", + "\n", + "ليه softmax\n", + "\n", + "لأن\n", + "\n", + "logits\n", + "\n", + "هي أرقام ممكن تكون موجبة أو سالبة، مش مقيّدة بين 0 و1، ومش بتعبر عن احتمال.\n", + "\n", + "دالة\n", + "\n", + "softmax\n", + "\n", + "بتحولهم لمجموعة احتمالات مجموعها 1 لكل جملة، يعني كل رقم صار يمثل احتمال إن الجملة تنتمي لكل فئة.\n", + "\n", + "dim=-1\n", + "\n", + " معناها بنطبق العملية على آخر بعد في المصفوفة، اللي هو عدد الفئات.\n", + "\n" + ], + "metadata": { + "id": "iSNhKO4DHtpW" + } + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "\n", + "predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)\n", + "print(predictions)\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NjmDg3JmH8C2", + "outputId": "8d3b7eb6-2cb1-4a83-d4b8-d28faadedfe6" + }, + "execution_count": 58, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor([[0.4890, 0.2160, 0.2950],\n", + " [0.0020, 0.9913, 0.0067]], grad_fn=)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "دي حاجة موجودة في إعدادات الموديل، وتربط بين أرقام الفئات وتسمياتها الحقيقية.\n", + "\n", + "يعني بدل ما تشوف رقم زي 0 أو 1 أو 2، تقدر تعرف إذا الرقم ده يعني \"سلبي\" أو \"محايد\" أو \"إيجابي\".\n", + "\n", + "ببساطة، هي \"قاموس\" بيربط كل رقم تصنيف بالاسم أو الوصف بتاعه.\n", + "\n", + "تقدر تستخدمها عشان تفهم نتائج النموذج بشكل أوضح." + ], + "metadata": { + "id": "MxhK8UWJIWCB" + } + }, + { + "cell_type": "code", + "source": [ + "model.config.id2label" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "M5WLyO2BIWNs", + "outputId": "6a63a7be-b993-4bdb-9d94-6f1316b7513d" + }, + "execution_count": 59, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{0: 'positive', 1: 'negative', 2: 'neutral'}" + ] + }, + "metadata": {}, + "execution_count": 59 + } + ] + } + ] +} \ No newline at end of file diff --git a/course/ar/chapter2/section3_pt.ipynb b/course/ar/chapter2/section3_pt.ipynb new file mode 100644 index 00000000..62a5a1f1 --- /dev/null +++ b/course/ar/chapter2/section3_pt.ipynb @@ -0,0 +1,414 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# النماذج (بايتورتش)\n", + "\n", + "لتشغيل هذا الدفتر، قم بتثبيت مكتبات\n", + "\n", + "Transformers, Datasets, Evaluate." + ], + "metadata": { + "id": "FIYCZVC6JzMh" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VFLFH_XCJyYw" + }, + "outputs": [], + "source": [ + "!pip install datasets evaluate transformers[sentencepiece]" + ] + }, + { + "cell_type": "code", + "source": [ + "# أول حاجة بنستورد إعدادات وموديل بيرت\n", + "from transformers import BertConfig, BertModel\n", + "\n", + "# ننشئ إعدادات جديدة من غير تحميل موديل جاهز\n", + "config = BertConfig()\n", + "\n", + "# نبني الموديل باستخدام الإعدادات\n", + "model = BertModel(config)\n", + "\n", + "# الموديل هنا لسه متسحبش أوزان مدربة، يعني\n", + "# الموديل متهيأ بشكل عشوائي من البداية، مش موديل جاهز أو متدرب" + ], + "metadata": { + "id": "zdRbpZHWKWF2" + }, + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# شرح الإعدادات\n", + "\n", + "\"attention_probs_dropout_prob\": 0.1\n", + "ده نسبة الحشو العشوائي اللي بيتطبق على احتمالات الانتباه عشان يمنع الإفراط في التعلّم.\n", + "\n", + "\"hidden_act\": \"gelu\"\n", + "دالة التفعيل المستخدمة جوه الطبقات المخفية، هنا gelu اللي هي الأفضل عادة لبيرت.\n", + "\n", + "\"hidden_dropout_prob\": 0.1\n", + "نسبة الـ dropout اللي بيتطبق على الطبقات المخفية نفسها.\n", + "\n", + "\"hidden_size\": 768\n", + "عدد الأبعاد في تمثيل كل كلمة داخل النموذج، يعني حجم كل embedding.\n", + "\n", + "\"initializer_range\": 0.02\n", + "النطاق اللي بتبدأ منه أوزان النموذج لما يتم تهيئتها.\n", + "\n", + "\"intermediate_size\": 3072\n", + "حجم الطبقة البين مخفية في الـ Transformer، غالبًا أكبر من hidden_size.\n", + "\n", + "\"layer_norm_eps\": 1e-12\n", + "ثابت صغير للثبات العددي في الطبقات التنسيقية (layer normalization).\n", + "\n", + "\"max_position_embeddings\": 512\n", + "أقصى طول للجملة (عدد الكلمات) اللي يقدر النموذج يتعامل معها.\n", + "\n", + "\"model_type\": \"bert\"\n", + "نوع النموذج، هنا بيرت.\n", + "\n", + "\"num_attention_heads\": 12\n", + "عدد رؤوس الانتباه المتوازية في كل طبقة.\n", + "\n", + "\"num_hidden_layers\": 12\n", + "عدد طبقات الـ Transformer.\n", + "\n", + "\"pad_token_id\": 0\n", + "رقم رمز الحشو (padding token) المستخدم.\n", + "\n", + "\"position_embedding_type\": \"absolute\"\n", + "نوع تمثيل المواضع، هنا تمثيل مطلق.\n", + "\n", + "\"transformers_version\": \"4.51.3\"\n", + "إصدار مكتبة Transformers المستخدم.\n", + "\n", + "\"type_vocab_size\": 2\n", + "عدد أنواع الرموز (token types)، عادة لتمييز بين جملتين (مثلاً في الـ NSP).\n", + "\n", + "\"use_cache\": true\n", + "يعني النموذج يستخدم التخزين المؤقت عشان يسرع التوليد.\n", + "\n", + "\"vocab_size\": 30522\n", + "حجم القاموس اللي بيشتغل عليه النموذج، عدد الكلمات أو الرموز اللي بيعرفها.\n" + ], + "metadata": { + "id": "ujD6o25JK3D4" + } + }, + { + "cell_type": "code", + "source": [ + "print(config)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7afQme0dK0mR", + "outputId": "9879246c-de77-456c-8f85-e999b4d0c207" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "BertConfig {\n", + " \"_attn_implementation_autoset\": true,\n", + " \"attention_probs_dropout_prob\": 0.1,\n", + " \"classifier_dropout\": null,\n", + " \"hidden_act\": \"gelu\",\n", + " \"hidden_dropout_prob\": 0.1,\n", + " \"hidden_size\": 768,\n", + " \"initializer_range\": 0.02,\n", + " \"intermediate_size\": 3072,\n", + " \"layer_norm_eps\": 1e-12,\n", + " \"max_position_embeddings\": 512,\n", + " \"model_type\": \"bert\",\n", + " \"num_attention_heads\": 12,\n", + " \"num_hidden_layers\": 12,\n", + " \"pad_token_id\": 0,\n", + " \"position_embedding_type\": \"absolute\",\n", + " \"transformers_version\": \"4.51.3\",\n", + " \"type_vocab_size\": 2,\n", + " \"use_cache\": true,\n", + " \"vocab_size\": 30522\n", + "}\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "# دلوقتي خلينا نجيب موديل بيرت جاهز ومدرب\n", + "وبعدين نحفظ الموديل على الججهاز في مجلد معين" + ], + "metadata": { + "id": "7SjI-Nn_MITJ" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import BertModel\n", + "model = BertModel.from_pretrained(\"MaagDeveloper/CAMeL-Lab-arabic-sentiment-analysis\")\n", + "model.save_pretrained(\"./arabic-text-classification\")" + ], + "metadata": { + "id": "ilAIhyM9MXPL" + }, + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + " دلوقتي نقدر نحمل الموديل من الجهاز نفسه" + ], + "metadata": { + "id": "L0BY5kphMm9g" + } + }, + { + "cell_type": "code", + "source": [ + "from transformers import BertModel\n", + "model = BertModel.from_pretrained(\"./arabic-text-classification\")\n" + ], + "metadata": { + "id": "2uMPwDG8MsFx" + }, + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "sequences = [\"مرحبا!\", \"رائع.\", \"جميل!\"]\n", + "encoded_sequences = [\n", + " [101, 7592, 999, 102],\n", + " [101, 4658, 1012, 102],\n", + " [101, 3835, 999, 102],\n", + "]\n", + "\n", + "import torch\n", + "\n", + "model_inputs = torch.tensor(encoded_sequences)\n", + "\n", + "output = model(model_inputs)" + ], + "metadata": { + "id": "vvveALfwMwJl" + }, + "execution_count": 19, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# نطبع شكل التمثيلات النهائية (last hidden state)\n", + "print(output.last_hidden_state.shape)\n", + "\n", + "# نطبع التمثيل الرقمي لأول كلمة في أول جملة كمثال\n", + "print(output.last_hidden_state[0][0])\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WFhIfCTcM0a_", + "outputId": "301d79f0-14ec-43db-bd6f-fddbfae3443b" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "torch.Size([3, 4, 768])\n", + "tensor([ 6.0414e-01, -6.7840e-01, -7.6100e-02, -7.6404e-01, -3.2396e-01,\n", + " -8.6319e-01, 8.5808e-01, -3.1407e-01, -4.8735e-01, 3.0841e-01,\n", + " 9.7315e-02, -1.2555e-01, -1.5174e+00, -2.0979e-01, 1.6218e+00,\n", + " -8.9025e-01, -6.9443e-01, 9.1505e-01, 2.0974e+00, 1.5701e+00,\n", + " -2.3838e-01, 3.3086e-01, -3.7255e-02, 1.3675e+00, 4.8083e-01,\n", + " -1.1527e+00, 1.1307e-01, -2.5177e+00, -1.5687e-01, -1.3606e+00,\n", + " 1.7679e+00, 8.1987e-01, -2.0425e-01, 5.1670e-01, 1.6265e-01,\n", + " 2.5822e-01, -5.6666e-01, 2.2636e-01, -2.7602e+00, 8.2814e-01,\n", + " -2.2897e-01, 3.7343e-01, -8.4101e-01, 4.6564e-01, 2.2139e-01,\n", + " 9.2169e-01, -3.1532e-01, -1.0179e+00, -6.4545e-01, 9.6741e-03,\n", + " 7.3953e-01, -5.0955e-01, -8.1881e-01, 1.0717e+00, -9.4403e-01,\n", + " 6.1612e-01, 1.5819e+00, 1.3539e+00, 7.0886e-01, 8.4094e-01,\n", + " -1.8329e+00, 1.4981e+00, -1.4466e+00, -4.4330e-01, 1.5533e+00,\n", + " -1.4940e-01, -1.5369e-01, -1.5838e+00, 4.3377e-02, 7.4634e-01,\n", + " -5.2022e-01, -1.8995e-02, 5.1991e-01, 6.9615e-01, 4.8141e-01,\n", + " 1.2490e+00, -1.8162e-01, -5.7348e-01, 1.1679e-01, 1.2399e+00,\n", + " 1.9424e+00, 8.4752e-01, -9.8478e-01, -8.6372e-01, 1.6471e-01,\n", + " 9.5868e-01, 1.5943e-01, 2.0086e+00, 7.1719e-01, -1.2354e+00,\n", + " 1.4464e+00, -3.8888e-01, -5.8014e-01, -1.5217e+00, 1.4367e+00,\n", + " 1.0086e+00, 2.4810e+00, 1.0607e-01, -3.2298e-02, 1.3449e+00,\n", + " -7.4510e-01, 9.9042e-02, 8.6544e-01, -4.9046e-01, -2.8590e-01,\n", + " -5.0446e-01, 1.3398e+00, 2.9204e-01, 1.7230e-01, -7.4652e-01,\n", + " -8.9799e-01, 4.9259e-01, 9.9340e-01, 2.3716e+00, -1.3424e+00,\n", + " 2.7005e-01, -7.2878e-01, 5.7668e-01, 3.7309e-01, 8.3640e-01,\n", + " -1.9395e-01, -7.0547e-01, -1.2837e+00, 1.4623e+00, 1.1806e+00,\n", + " -1.0026e+00, -3.4214e-01, 4.0434e-01, 2.6986e-01, -1.2325e+00,\n", + " 1.4397e+00, -2.9686e-01, -3.7717e-01, -6.2980e-01, 9.2590e-01,\n", + " 2.4520e+00, -2.5345e+00, 1.3692e+00, -1.1605e+00, 6.5785e-02,\n", + " -7.1714e-01, -1.6332e+00, 7.2173e-01, 6.3195e-01, -1.1022e+00,\n", + " 3.6027e-01, -1.9038e+00, 8.6878e-01, 1.2877e+00, 1.1492e+00,\n", + " -1.1531e-01, -5.7707e-01, -6.7023e-01, 1.9538e-01, -1.8445e+00,\n", + " 1.6082e+00, -1.5348e+00, -7.5253e-01, 1.2905e+00, -2.1745e-01,\n", + " 1.2132e+00, 1.4773e-01, 1.0868e+00, -1.0766e+00, -9.9415e-01,\n", + " 1.6805e+00, -5.4107e-01, 1.2360e+00, -5.6864e-01, 1.7197e+00,\n", + " -2.0720e-01, -4.2762e-01, 1.4268e-01, -2.2773e-01, -2.2994e+00,\n", + " -7.0005e-01, 1.0493e-01, 1.4555e+00, -4.2576e-01, -9.1176e-02,\n", + " 4.1667e-01, 1.3463e+00, 1.2952e+00, -1.0432e-01, 1.0128e-01,\n", + " 1.6041e+00, -9.9858e-02, -6.4431e-01, 2.1665e-01, 2.8945e-01,\n", + " -1.7888e+00, -8.6260e-01, -9.1080e-01, -1.2121e+00, -9.1996e-01,\n", + " 1.5644e+00, -3.0482e-01, 6.2019e-01, -1.2666e+00, 5.7410e-01,\n", + " 7.1531e-01, -9.9870e-01, 6.2917e-01, -1.7714e+00, 5.8701e-01,\n", + " 4.9767e-01, 4.1620e-01, -3.8302e-01, 7.4622e-01, -5.4842e-01,\n", + " 4.7330e-01, 1.7470e+00, 4.7572e-01, 1.4162e+00, 6.3434e-01,\n", + " 4.3046e-01, -6.1662e-01, 8.3407e-01, -2.6649e-01, -4.9038e-01,\n", + " -5.6951e-01, 8.6061e-01, -5.7472e-01, -7.5472e-01, -1.1824e+00,\n", + " -2.7461e+00, -1.5998e-01, 1.5189e+00, 4.3781e-01, 7.4455e-01,\n", + " 2.7289e-01, -7.5063e-01, -1.0517e+00, 5.3462e-01, -4.8539e-01,\n", + " -4.4885e-01, -9.6349e-01, -5.9553e-01, 1.3817e+00, 7.1003e-01,\n", + " -7.1259e-01, -2.1154e+00, -8.4846e-02, -2.1758e-01, -1.5792e+00,\n", + " -1.7175e+00, 3.7386e-01, -3.3118e-01, 1.1884e+00, 9.7851e-01,\n", + " 2.7462e-01, 2.8141e-01, 5.7008e-01, 3.5805e-01, 1.9310e-01,\n", + " 2.1169e+00, -2.7465e+00, 4.0209e-01, -6.1107e-01, 4.1934e-01,\n", + " -7.0477e+00, 1.9994e+00, -5.7084e-02, -9.3913e-01, -1.7181e+00,\n", + " -1.6684e+00, -3.2737e-01, 1.3047e+00, -2.2929e-01, -3.6436e-01,\n", + " -5.4731e-01, -1.1464e+00, 6.5369e-01, -1.7856e-01, 2.7210e-01,\n", + " 1.4460e+00, -3.9550e-01, -3.7768e-01, -1.1913e+00, 6.3565e-01,\n", + " -1.5832e+00, 1.4189e+00, 6.9362e-01, -3.3851e-01, -5.8574e-01,\n", + " 3.9701e-02, -1.4505e+00, -3.3936e-01, -1.8429e-01, -2.0388e+00,\n", + " 7.4285e-01, -8.4615e-01, -1.0959e+00, -6.1754e-01, -4.8375e-01,\n", + " 1.3218e-01, -1.8636e+00, 1.8541e-01, 1.5328e-01, -1.1053e-01,\n", + " -3.8042e-02, -9.1449e-01, -5.6062e-01, 2.8673e-01, 5.9899e-01,\n", + " -4.9081e-01, -2.6523e-01, 2.4556e-01, 4.3214e-01, 1.8908e-01,\n", + " -3.2883e-01, -6.7412e-01, 7.4241e-01, 1.1376e+00, -8.6065e-01,\n", + " 7.0464e-01, -1.8914e+00, 1.0049e+00, 3.4101e-01, 1.1992e+00,\n", + " -5.8560e-01, -2.2287e-01, -2.1314e+00, 9.6868e-01, -2.1735e-01,\n", + " -1.0282e-01, -2.9930e-01, -6.7599e-01, -3.2131e-01, 6.2756e-01,\n", + " -3.0210e-01, -1.2928e+00, -2.0541e+00, 8.6257e-01, 7.6873e-01,\n", + " 1.8682e+00, 1.0945e+00, 1.4045e+00, 7.6385e-01, -8.2840e-01,\n", + " 2.3827e-01, 9.6876e-01, -8.0713e-01, -3.3972e-01, -7.9284e-01,\n", + " -1.0875e-01, -6.9871e-01, 6.3587e-01, -1.7895e+00, -2.8989e-01,\n", + " -1.7502e-01, -1.0416e+00, 3.7413e-01, 6.2987e-01, -5.7398e-01,\n", + " -1.5580e+00, 9.8082e-01, -6.7550e-03, 1.1028e+00, 4.2111e-01,\n", + " 1.7667e-02, -3.8795e-01, -4.5415e-01, 4.7587e-01, 5.7520e-02,\n", + " 1.1199e+00, -6.4775e-01, -4.2196e-01, -5.1408e-01, 6.5339e-01,\n", + " 8.0579e-01, -9.8413e-01, -3.2229e-01, 2.8582e-01, 9.5050e-01,\n", + " 4.6487e-01, 1.3273e+00, -1.1723e+00, -4.1278e-01, -6.1438e-01,\n", + " 1.4249e+00, -2.5642e-02, 9.4847e-01, 2.7417e-01, -1.4750e-01,\n", + " 8.2064e-01, 1.8121e-01, 1.3974e+00, -5.3716e-01, 8.5026e-01,\n", + " 2.2525e-01, 8.1051e-01, 9.6643e-01, 2.1580e-01, -3.7579e-01,\n", + " 3.8935e-01, -1.8925e+00, 6.2438e-01, -3.0756e-01, -8.7696e-01,\n", + " -8.8403e-01, -5.0995e-01, 2.1880e+00, -2.1328e+00, -7.3457e-01,\n", + " -7.3433e-01, -4.9077e-01, -2.2636e-01, -5.4855e-02, -1.1556e+00,\n", + " -2.6655e-01, -3.4524e-01, -1.1240e+00, 2.0768e-01, 1.5794e-01,\n", + " 2.6083e-01, -2.7863e-01, -1.9284e-03, -8.8025e-01, 1.0034e-02,\n", + " -6.1150e-01, -1.3001e+00, -1.6952e+00, 7.6892e-01, 1.5824e+00,\n", + " 1.4745e+00, -4.4876e-01, 2.8272e-01, 6.9740e-01, -1.7272e+00,\n", + " 3.0737e-01, -1.9529e-01, 8.4838e-01, -1.0752e+00, 5.2835e-01,\n", + " 1.3291e+00, -2.0003e-01, 8.8900e-01, 2.8081e-01, 1.1003e+00,\n", + " -5.9489e-01, -7.5142e-01, 1.1872e-02, 6.5548e-01, 9.1345e-04,\n", + " 4.7495e-01, 2.4911e-01, -4.5105e-01, -1.3390e+00, -2.7755e-01,\n", + " 2.6104e-01, 1.4244e+00, 3.0125e-01, 9.1370e-01, 3.0975e-01,\n", + " -8.7073e-02, -1.0677e+00, 4.8575e-01, 4.0928e-01, 3.5525e-01,\n", + " -1.3222e+00, 3.3710e-01, -8.3502e-01, -2.8023e-01, 1.0072e+00,\n", + " -6.4545e-02, -5.2530e-01, 1.0907e+00, 3.3315e-01, 4.4337e-01,\n", + " -9.3121e-01, 5.3177e-01, 3.5109e-01, 1.2728e+00, -2.4284e-01,\n", + " -1.3328e+00, 5.6031e-01, -3.0385e-01, 9.6569e-01, 1.4544e+00,\n", + " -2.5030e+00, -1.3482e-01, 1.0835e+00, -1.4123e-01, -7.6488e-02,\n", + " -5.3498e-02, 4.3704e-02, 8.2010e-01, 1.0580e+00, 7.2042e-02,\n", + " -5.5234e-01, -8.5328e-01, 1.2716e+00, 4.1626e-01, -5.6409e-01,\n", + " 1.5595e+00, 1.4998e+00, -1.5448e-01, 1.4759e+00, -1.2556e+00,\n", + " -5.7800e-01, 5.4236e-02, 4.4237e-01, -4.0356e-01, 2.9604e-01,\n", + " -7.9134e-01, 1.4610e-01, 5.1275e-01, -4.6692e-01, 1.7093e+00,\n", + " 2.2053e+00, -7.2668e-01, -1.1836e+00, 2.8342e-01, -2.7105e-01,\n", + " 6.0424e-01, 9.3440e-01, -5.2631e-01, -6.4235e-01, -2.0357e-02,\n", + " -2.4713e+00, -1.0113e+00, -2.4660e-01, -1.8817e+00, -1.8934e-01,\n", + " 3.2197e-01, 2.1380e-01, 1.5863e-01, -1.8487e+00, -2.5572e-01,\n", + " -1.2721e+00, 1.3005e+00, 3.2057e+00, -7.2899e-02, -8.3657e-01,\n", + " -4.3525e-01, 4.4425e-02, -3.3412e-01, 1.9507e+00, 1.1671e+00,\n", + " 1.6448e+00, 5.6195e-01, -2.3514e-01, -8.9486e-01, -8.6887e-01,\n", + " 2.2680e-01, 6.5264e-01, -1.5854e+00, 1.3726e+00, 3.7547e-01,\n", + " -1.1424e+00, 2.1723e-01, -1.3210e+00, -1.4151e+00, -2.9553e-01,\n", + " -3.8027e-01, 4.6817e-01, -1.0063e+00, -3.9432e-02, 1.1091e+00,\n", + " -8.1770e-01, 1.0291e+00, -5.3101e-01, 2.2926e-01, 9.7719e-02,\n", + " -1.2865e+00, -9.1007e-01, 7.8424e-01, 7.9835e-01, 2.6280e-02,\n", + " -1.6076e-01, -1.1096e+00, -5.0521e-01, 1.0466e+00, -1.8109e-01,\n", + " 1.0128e-01, -6.6686e-01, -4.1812e-01, 7.9227e-01, -2.4915e+00,\n", + " -7.2421e-01, -1.2712e+00, -6.0610e-01, 8.4113e-01, 1.7925e+00,\n", + " -1.9532e-01, -5.9647e-01, 2.3521e+00, -9.2012e-01, 3.7344e-01,\n", + " 1.6197e+00, 1.1066e+00, -3.5725e-02, 1.0598e-01, 2.7046e-01,\n", + " 8.6487e-02, -2.7862e-01, 8.3227e-01, 8.3264e-01, 6.4806e-01,\n", + " -6.6621e-01, 4.0689e-02, -1.6857e+00, 9.2917e-01, -9.7420e-01,\n", + " 1.1488e+00, -9.3209e-01, -2.8226e+00, 6.3443e-01, -1.3755e-01,\n", + " -9.9379e-01, 4.3619e-01, 6.0585e-01, 1.2515e+00, -3.9704e-01,\n", + " -3.2474e-01, 1.8345e-01, -6.4462e-01, 6.3548e-01, -2.8374e+00,\n", + " -7.7960e-01, -1.5991e-01, -2.1504e-01, -2.9516e-01, -1.1804e+00,\n", + " -6.5418e-02, 4.7247e-02, -6.7059e-01, -4.3479e-01, 1.4767e-01,\n", + " -3.4603e-01, -1.0998e+00, 8.6715e-01, 9.9061e-01, -3.1970e-02,\n", + " -4.4341e-01, -1.0145e+00, 1.0172e+00, 1.6030e+00, -1.0980e+00,\n", + " 1.1422e-01, -5.2238e-01, 6.8980e-01, 1.1357e+00, 2.1700e-01,\n", + " 8.1769e-01, -1.1091e-01, 7.0654e-01, 2.0060e-02, -3.3632e-01,\n", + " 7.8987e-01, -1.1879e-01, -7.2834e-01, 1.4166e+00, -1.6032e+00,\n", + " -2.3250e-01, 1.0618e+00, -1.4924e+00, 4.9069e-01, -6.8033e-01,\n", + " -1.5385e+00, 1.1769e+00, -6.0508e-01, 9.1064e-01, -1.2617e+00,\n", + " 1.8769e+00, -9.6714e-01, -9.6500e-02, -1.3154e+00, -1.5707e-01,\n", + " 2.9199e-01, 2.2721e-01, -9.2303e-01, 1.3975e-01, 5.3480e-01,\n", + " 7.9661e-01, 1.5066e+00, -2.0853e+00, 1.6463e+00, -1.1201e+00,\n", + " 1.2769e+00, -1.4405e+00, -7.8126e-01, -9.6857e-02, -1.5158e+00,\n", + " 1.1262e+00, -1.0672e+00, -1.1990e+00, 5.4555e-01, 1.0490e+00,\n", + " -1.3682e+00, 3.7938e-01, -1.9024e-01, -2.5870e-01, -1.8271e-01,\n", + " -6.0505e-01, 8.9513e-02, 2.0081e+00, -1.2733e+00, -1.6339e-01,\n", + " 1.4607e+00, -1.7474e-01, -6.1898e-01, 6.1655e-01, 4.5170e-01,\n", + " -2.1186e-01, 1.1789e+00, 2.7846e-01, 8.9301e-01, 1.1193e+00,\n", + " 1.5098e+00, -1.5903e+00, 1.7980e-02, -1.6189e-01, -1.4911e+00,\n", + " 4.6018e-01, -9.0513e-01, -4.3464e-01, 6.5961e-01, 9.1006e-01,\n", + " 9.1493e-01, 8.8525e-01, 7.0131e-01, 1.4403e+00, -1.0727e+00,\n", + " -7.4908e-01, 7.4123e-01, -7.0228e-01, 3.1658e-01, 7.3042e-01,\n", + " 6.2021e-01, 5.9580e-01, 1.4865e+00, 1.4739e+00, 3.9438e-01,\n", + " 4.0632e-02, -4.6692e-02, 2.9453e-01, -1.5398e-02, 4.6945e-01,\n", + " -4.8027e-02, -1.2530e+00, -9.1685e-01, -6.6250e-01, 2.3719e+00,\n", + " -1.2005e+00, 6.6656e-01, 3.7940e-01, -1.0520e+00, -1.2825e+00,\n", + " 4.5793e-01, 8.1487e-01, -3.0988e-01, 1.0291e-01, -2.4124e-01,\n", + " -1.6683e+00, 6.2315e-02, -3.5859e-01, 1.1329e+00, 1.5421e+00,\n", + " -1.7863e-01, 1.5741e-01, 1.1983e+00, 4.2350e-01, 1.3554e+00,\n", + " -2.9751e-02, -1.0020e+00, 6.7636e-01], grad_fn=)\n" + ] + } + ] + } + ] +} \ No newline at end of file