Created
February 22, 2024 07:08
-
-
Save iamaziz/a1e60d78a71c1afe949b70e20b20a303 to your computer and use it in GitHub Desktop.
Custom open `local` LLMs (Ollama) for Arabic language
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Experimenting with customized Open 'local' LLMs (Ollama) for **_Arabic language_**" | |
], | |
"metadata": { | |
"collapsed": false | |
}, | |
"id": "48b352cd975addd9" | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"> example video https://youtu.be/k-lX2GYy5Qw?si=RMIeVCVt5ijIj0LF" | |
], | |
"metadata": { | |
"collapsed": false | |
}, | |
"id": "65ca8e928542db73" | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Overwriting Modelfile\n" | |
] | |
} | |
], | |
"source": [ | |
"%%writefile Modelfile\n", | |
"FROM deepseek-llm:67b \n", | |
"\n", | |
"PARAMETER temperature 0.5\n", | |
"\n", | |
"# set the system prompt\n", | |
"SYSTEM \"\"\"\n", | |
"You are programmed to simulate a native Arabic speaker. Your responses must be exclusively in Arabic.\n", | |
"\n", | |
"Your operation involves a three-step process for every Arabic question:\n", | |
"1. Silently translate the question from Arabic to English.\n", | |
"2. Formulate the response in English.\n", | |
"3. Translate your English response back into Arabic, and provide this as your reply.\n", | |
"\n", | |
"Do not provide the English translation of the question or the English version of the answer in your response.\n", | |
"\n", | |
"Here are two examples to illustrate this process:\n", | |
"\n", | |
"-- Example 1:\n", | |
"\n", | |
"USER:\n", | |
" ماهو تاريخ اليوم؟\n", | |
"\n", | |
"(Translated-question: What is the date today?)\n", | |
"\n", | |
"(Answer in English: Today is December 25, 2023.)\n", | |
"\n", | |
"ASSISTANT:\n", | |
" اليوم هو الخامس والعشرون من ديسمبر لعام 2023.\n", | |
"\n", | |
"-- Example 2:\n", | |
"\n", | |
"USER:\n", | |
" ماهي عاصمة السعودية؟\n", | |
"\n", | |
"(Translated-question: What is the capital of Saudi Arabia?)\n", | |
"\n", | |
"(Answer in English: Riyadh is the capital of Saudi Arabia.)\n", | |
"\n", | |
"ASSISTANT:\n", | |
" الرياض هي عاصمة السعودية.\n", | |
"\n", | |
"\n", | |
"Remember, only provide the Arabic translation in your response. Nothing else. \n", | |
"Take your time to formulate your response.\n", | |
"\"\"\"" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:49:37.204055Z", | |
"start_time": "2024-02-22T06:49:37.198265Z" | |
} | |
}, | |
"id": "97c109d9e91ecc6", | |
"execution_count": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## A custom `deepseek-llm:67b` model " | |
], | |
"metadata": { | |
"collapsed": false | |
}, | |
"id": "54ec3de799688e5a" | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"deleted 'arabic_deepseek-llm:67b'\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\u001B[?25ltransferring model data \n", | |
"reading model metadata \n", | |
"creating system layer \n", | |
"creating parameters layer \n", | |
"creating config layer \n", | |
"using already created layer sha256:0449aade56f56ffa4060e8b86d745cb14d1a76a8dc8757ef4126b87269c5a294 \n", | |
"using already created layer sha256:d1c131da816c149fb99ee8bf0ce627d2d3d95ee3135ab8536ee198ad68fb0ec9 \n", | |
"using already created layer sha256:337975570f30ba6033c81a8f2cd75b59c4e520bce951bab98d8dc0ccee91c46a \n", | |
"writing layer sha256:60f88edacd8e0bee14b42bbbba322c1a369d23f34ee785adc78fccffe462ca71 \n", | |
"writing layer sha256:f9b1edda8b84a455bf8a17ca4341d16dbee8e5f70d78c905f048dedaced1a49d \n", | |
"writing layer sha256:340726cb6f6f95de4fd550b083a4b28a37c1a28f12494e4b99cb40ff2fb22c66 \n", | |
"writing manifest \n", | |
"success \u001B[?25h\n" | |
] | |
} | |
], | |
"source": [ | |
"%%bash\n", | |
"ollama rm arabic_deepseek-llm:67b\n", | |
"ollama create arabic_deepseek-llm:67b -f Modelfile" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:49:37.299798Z", | |
"start_time": "2024-02-22T06:49:37.201542Z" | |
} | |
}, | |
"id": "80bfaf8f138a6caf", | |
"execution_count": 2 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [], | |
"source": [ | |
"from ollama import chat # pip install ollama" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:49:37.409010Z", | |
"start_time": "2024-02-22T06:49:37.289808Z" | |
} | |
}, | |
"id": "f765bcf8882684b9", | |
"execution_count": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [], | |
"source": [ | |
"OLLAMA_MODEL_NAME = \"arabic_deepseek-llm:67b\" # \"arabic_nous-hermes2:34b\"\n", | |
"\n", | |
"def ask(user_message, model=OLLAMA_MODEL_NAME):\n", | |
" messages = [{\"role\": \"user\", \"content\": user_message}]\n", | |
" response = chat(model=model, messages=messages)\n", | |
" answer = response[\"message\"][\"content\"]\n", | |
" return answer\n", | |
"\n", | |
"\n", | |
"def rtl(text):\n", | |
" from IPython.display import HTML\n", | |
" return HTML(f\"<div style='direction: rtl; text-align: right; font-size: 36px;'>{text}</div>\")" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:49:37.413010Z", | |
"start_time": "2024-02-22T06:49:37.410857Z" | |
} | |
}, | |
"id": "3e989e3364acf786", | |
"execution_count": 4 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 12.1 ms, sys: 7.66 ms, total: 19.7 ms\n", | |
"Wall time: 2min 44s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>تحياتي! انا واجهة المستخدم لبرنامج برمجي مدعوم بالمعلومات. انا لست شخصًا حقيقيًا ولست قادرة على الاعتراف بشخصية كاملة.\n\nعاصمة السعودية هي الرياض، وهي من أكبر المدن في المملكة العربية السعودية. تعتبر الرياض عاصمة السعودية قانونيًا منذ عام 1982 وهي الحالة الحالية للملك سلطان.\n\nفي الوقت الحاضر، يعد عدد سكان السعودية حوالي 35 مليون شخصًا. وهم يتكونون من مجموعة متنوعة من الشرائح العرقية والثقافية، بما في ذلك السعوديين الأصليين والمهاجرين.\n\nتعتبر الرياض مركزًا رئيسيًا للسياحة في السعودية، بما في ذلك القصر الأحمر والبنايات التاريخية والجامعات. تشهد الرياض ازديادًا في عدد سكانها منذ بداية القرن العشرين، ولا يزال هناك تحديات كبيرة تواجه المدينة في التعامل مع ذلك.</div>" | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"\n", | |
"question = \"\"\"\n", | |
"لدي مجموعة الأسئلة التالية. أجب عليها سؤال بعد الآخر:\n", | |
"من انت ؟\n", | |
"ماهي عاصمة السعودية ؟\n", | |
"كم يبلغ عدد سكان السعودية ؟\n", | |
"ماذا تعرف عن عاصمة السعودية ؟\n", | |
"\"\"\"\n", | |
"\n", | |
"answer = ask(question)\n", | |
"\n", | |
"rtl(answer)" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:52:21.855293Z", | |
"start_time": "2024-02-22T06:49:37.414307Z" | |
} | |
}, | |
"id": "b08c6e66c23018bd", | |
"execution_count": 5 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 32.7 ms, sys: 13.3 ms, total: 46 ms\n", | |
"Wall time: 43.5 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>الفرق بين الذكاء الاصطناعي والتعلم الآلي هو أن الذكاء الاصطناعي يشمل مجموعة واسعة من التقنيات والأساليب التي تستخدم فيها خوارزميات تعلّم مائلة إلى الصعوبة لتعلم مهام معينة. بينما يشمل التعلم الآلي فقط استخدام خوارزميات تعلّم مائلة إلى السهولة لتعلم مهام معينة.</div>" | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"rtl(ask(\"ما هو الفرق بين الذكاء الاصطناعي والتعلم الآلي ؟\"))" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:53:05.416020Z", | |
"start_time": "2024-02-22T06:52:21.889267Z" | |
} | |
}, | |
"id": "8bee85a48a29fbd5", | |
"execution_count": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 4.09 ms, sys: 4.85 ms, total: 8.94 ms\n", | |
"Wall time: 13.6 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>الذكاء الاصطناعي هو نوع من التقنيات الحديثة تستخدم الحاسوب الآلي والرياضيات لنفس الغرض.</div>" | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"rtl(ask(\"ما هو الذكاء الاصطناعي ؟\"))" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:53:19.038314Z", | |
"start_time": "2024-02-22T06:53:05.420311Z" | |
} | |
}, | |
"id": "1e0d8d819779bae7", | |
"execution_count": 7 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 5.08 ms, sys: 2.69 ms, total: 7.78 ms\n", | |
"Wall time: 17 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>التعلم الآلي هو تقنية تستخدم برامج الحاسوب لتعلم استخدام مجموعة من المباني والقواعد التي يمكن أن تحسن الأداء بشكل دائم.</div>" | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"rtl(ask(\"ما هو التعلم الآلي ؟\"))" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:53:36.012105Z", | |
"start_time": "2024-02-22T06:53:19.024506Z" | |
} | |
}, | |
"id": "614bd1482c21d2a0", | |
"execution_count": 8 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 6.66 ms, sys: 7.88 ms, total: 14.5 ms\n", | |
"Wall time: 45.9 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>تعريف الإحصاء الرياضي هو تقسيم الناس إلى مجموعات بناءً على استجابتهم للأسئلة. وفروع الإحصاء الرياضي تشمل:\n1- الإحصاء الكلي: هو عندما نقوم بالتجارب على مجموعة شاملة من السكان.\n2- الإحصاء الشبهي: هو عندما نختار مجموعة من السكان بالقرب من المجموعة الشاملة.\n3- الإحصاء المثالي: هو عندما نختار مجموعة من السكان بالقرب من المجموعة الشاملة.</div>" | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"rtl(ask(\"ماهو تعريف الإحصاء الرياضي وماهي فروعه ؟\"))" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:54:21.982737Z", | |
"start_time": "2024-02-22T06:53:36.014009Z" | |
} | |
}, | |
"id": "8dbf1ff927cd81b2", | |
"execution_count": 9 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 4.03 ms, sys: 4.59 ms, total: 8.62 ms\n", | |
"Wall time: 13.5 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>المعادلة التي تستخدم لتوضيح مسافة الانحدار الخطي هي y = mx + b، حيث m هو ميل الخط وb هي التعويض.</div>" | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"rtl(ask(\"ماهي المعادلة الرياضية للانحدار الخطي في الإحصاء ؟\"))" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:54:35.518341Z", | |
"start_time": "2024-02-22T06:54:21.971404Z" | |
} | |
}, | |
"id": "1f7834aec260eee2", | |
"execution_count": 10 | |
}, | |
{ | |
"cell_type": "code", | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 7.87 ms, sys: 8.51 ms, total: 16.4 ms\n", | |
"Wall time: 2min 3s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": "<IPython.core.display.HTML object>", | |
"text/html": "<div style='direction: rtl; text-align: right; font-size: 36px;'>نعم بالفعل، وكانت نظرية الجاذبية النسبية لأينشتاين موجزًا لتغير عقلية جهد الفيزياء. تعتمد نظرية الجاذبية النسبية على استخدام ميكانيكا الكم والنظرية النسبية والقواعد الفيزيائية الأساسية. تعتبر نظرية الجاذبية النسبية لآينشتاين إحدى أهم النظريات في مجال الفيزياء.\n\nكان على آينشتاين بناء نظرية الجاذبية النسبية إعادة تحليل قوانين الجاذبية ومفاهيمها. وخصّص مكانه في هذا التحليل لأساليب الرياضيات العديدة، حيث استخدم بعض الإشارات والمعادلات الرياضية لوصف قوانين الجاذبية.\n\nتعتمد نظرية الجاذبية النسبية على استخدام ميكانيكا الكم والنظرية النسبية وقواعد الفيزياء الأساسية. يعتبر نظرية الجاذبية النسبية آينشتاين إحدى أهم النظريات في مجال الفيزياء.\n\nكان على آينشتاين بناء نظرية الجاذبية النسبية إعادة تحليل قوانين الجاذبية ومفاهيمها. وخصّص مكانه في هذا التحليل لأساليب الرياضيات العديدة، حيث استخدم بعض الإشارات والمعادلات الرياضية لوصف قوانين الجاذبية.</div>" | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"rtl(ask(\"اشرح لي نظرية الجاذبية النسبية لـ آينشتاين؟\"))" | |
], | |
"metadata": { | |
"collapsed": false, | |
"ExecuteTime": { | |
"end_time": "2024-02-22T06:56:39.340951Z", | |
"start_time": "2024-02-22T06:54:35.521369Z" | |
} | |
}, | |
"id": "a51aa035e1593a04", | |
"execution_count": 11 | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment