diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d72adb1..2b5b64e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,10 +1,16 @@ + + { - "image": "mcr.microsoft.com/devcontainers/python:3.11", + "name": "Python 3", + "image": "mcr.microsoft.com/devcontainers/python:0-3.11-bullseye", "features": { - "ghcr.io/devcontainers/features/python:1": { - "version": "3.11" - } + "ghcr.io/devcontainers-contrib/features/coverage-py:2": {} }, + + + + "postCreateCommand": "pip3 install --user -r requirements.txt", + "customizations": { "vscode": { "extensions": [ @@ -12,6 +18,7 @@ "ms-toolsai.jupyter" ] } - }, - "postCreateCommand": "pip install --upgrade pip && pip install numpy matplotlib tensorflow-cpu gensim sentence_transformers tf-keras torch --index-url https://download.pytorch.org/whl/cpu", -} + } + + +} \ No newline at end of file diff --git a/SemanticSearch.ipynb b/SemanticSearch.ipynb index 35dcdce..ca9c2ef 100644 --- a/SemanticSearch.ipynb +++ b/SemanticSearch.ipynb @@ -20,12 +20,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "wXaNXzn_lxVi", "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.1.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "[==================================================] 100.0% 252.1/252.1MB downloaded\n" + ] + } + ], "source": [ "%pip install -q gensim\n", "import gensim.downloader as api\n", @@ -35,12 +47,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "id": "in3MN8bB9o7H", "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[('father', 0.8118535280227661),\n", + " ('mother', 0.7553707957267761),\n", + " ('man', 0.7454989552497864),\n", + " ('brother', 0.7374289035797119),\n", + " ('son', 0.7233688235282898)]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "vec = model[\"mother\"] - model[\"woman\"] + model[\"man\"]\n", "\n", @@ -61,12 +88,46 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "7Gt0B52CVkfW", "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.1.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.1.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/vscode/.local/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n", + "2025-05-19 09:55:38.663058: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:467] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1747648538.677999 4397 cuda_dnn.cc:8579] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1747648538.682476 4397 cuda_blas.cc:1407] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "W0000 00:00:1747648538.695647 4397 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1747648538.695661 4397 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1747648538.695663 4397 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1747648538.695665 4397 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "2025-05-19 09:55:38.700501: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "Xet Storage is enabled for this repo, but the 'hf_xet' package is not installed. Falling back to regular HTTP download. For better performance, install the package with: `pip install huggingface_hub[hf_xet]` or `pip install hf_xet`\n" + ] + } + ], "source": [ "%pip install -q sentence_transformers\n", "%pip install -q torch tf-keras\n", @@ -78,12 +139,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "id": "Q5JgKETWVsTr", "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "\n", "sentences = [\n", @@ -99,11 +171,220 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "id": "A9-tKllOWRWE" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2.17507686e-02 -1.58684388e-01 -8.73355474e-03 -7.93801025e-02\n", + " 6.58603758e-02 4.32269052e-02 3.18210930e-01 -6.65029734e-02\n", + " -2.10551068e-01 -1.46435559e-01 4.53497544e-02 4.06425148e-02\n", + " -2.09189318e-02 2.17503548e-01 1.11100808e-01 -1.48284182e-01\n", + " 8.40316042e-02 1.30630851e-01 -1.76880702e-01 7.36415982e-02\n", + " 2.94402416e-04 -4.31842655e-02 -4.41200193e-03 1.00005958e-02\n", + " -3.15263569e-01 -2.16687873e-01 -1.94415554e-01 5.87974489e-02\n", + " -4.42587724e-03 7.49052390e-02 -6.34334097e-03 1.98147580e-01\n", + " 1.56810239e-01 1.27115369e-01 3.20420414e-02 -9.47865769e-02\n", + " -4.72161621e-02 -7.15053156e-02 -3.95139083e-02 2.39444539e-01\n", + " 4.23232257e-01 1.69619411e-01 -9.28514525e-02 -4.95444052e-02\n", + " -8.01617354e-02 1.64747387e-02 2.96002328e-01 -1.96525395e-01\n", + " 8.50908905e-02 9.59708020e-02 -6.30307272e-02 -4.90415171e-02\n", + " 1.38531551e-01 6.90234676e-02 -1.19049631e-01 1.51550815e-01\n", + " -9.94316265e-02 2.30667681e-01 2.85095751e-01 1.23887338e-01\n", + " 1.13073789e-01 6.53659031e-02 4.31966409e-02 -5.79593936e-03\n", + " -2.50324607e-03 -3.14325579e-02 3.51244867e-01 -2.27358297e-01\n", + " -1.45476565e-01 6.27028802e-03 2.41751432e-01 2.94217225e-02\n", + " -1.22285611e-03 4.03428962e-03 2.82795839e-02 1.87737778e-01\n", + " -4.88592647e-02 6.55294433e-02 -7.99754336e-02 4.20824960e-02\n", + " -2.30867304e-02 -1.17534079e-01 -3.01018264e-02 -7.69046992e-02\n", + " 1.83448926e-01 -2.20674686e-02 7.14618489e-02 1.95685804e-01\n", + " -2.44231507e-01 1.26275674e-01 1.06241778e-01 -1.96940497e-01\n", + " 1.20629743e-01 -2.93034643e-01 9.06143337e-02 4.37960634e-03\n", + " 6.10571727e-02 -3.15871537e-02 -1.02565959e-01 -6.58944696e-02\n", + " 1.50113612e-01 -1.09215844e-02 2.02499002e-01 8.04679245e-02\n", + " 1.90646961e-01 -2.56494462e-01 -1.31995037e-01 8.61084275e-03\n", + " 6.50078338e-03 9.64756832e-02 -1.50035799e-01 -2.13096052e-01\n", + " -1.32992193e-01 1.95734680e-01 -1.10271290e-01 -2.09216043e-01\n", + " 1.71716616e-01 6.20181076e-02 3.98182012e-02 -1.48955375e-01\n", + " 3.01190708e-02 1.39065117e-01 -2.13274267e-02 -2.25024521e-02\n", + " 3.85542251e-02 3.03882897e-01 -1.12427566e-02 1.43268853e-01\n", + " 1.24527015e-01 -6.47889525e-02 1.31800115e-01 -5.72158620e-02\n", + " -1.24177791e-01 3.07786260e-02 -5.23668118e-02 -2.30034679e-01\n", + " 1.12325691e-01 -1.20224673e-02 -2.38480657e-01 -9.29085612e-02\n", + " 2.68854141e-01 -2.91219596e-02 -1.34453565e-01 -9.07222480e-02\n", + " -6.47250284e-03 6.96950182e-02 -7.21289217e-02 1.15951516e-01\n", + " -1.56646632e-02 3.84240113e-02 -7.07540214e-02 2.16301507e-03\n", + " -1.21764220e-01 1.13989428e-01 1.60317153e-01 4.55582663e-02\n", + " 3.75846513e-02 3.52015272e-02 2.84932908e-02 8.34560022e-03\n", + " 1.39649153e-01 -1.33976964e-02 -4.93611544e-02 4.57049459e-02\n", + " -3.98927517e-02 1.55548546e-02 -3.11182797e-01 9.57429633e-02\n", + " -3.12323779e-01 -6.67839199e-02 4.04003002e-02 -4.51880060e-02\n", + " -4.30739745e-02 2.81383812e-01 1.18134812e-01 -2.01353997e-01\n", + " 1.26885235e-01 4.74583283e-02 1.55944750e-01 2.88477875e-02\n", + " -2.59344485e-02 5.37582636e-02 1.96356371e-01 3.12086880e-01\n", + " -5.62022701e-02 -4.11903933e-02 -2.29745209e-02 1.26185253e-01\n", + " -2.01084465e-01 6.11514375e-02 1.21974036e-01 -1.05807722e-01\n", + " 3.44495401e-02 1.15611002e-01 5.70527203e-02 2.38593534e-01\n", + " -6.66978285e-02 1.50692329e-01 -1.38399750e-01 -1.11968353e-01\n", + " -8.21189210e-02 -2.51083239e-03 1.25631005e-01 -1.41947493e-01\n", + " 1.26258121e-03 -5.95945716e-02 5.95415663e-03 -5.32069393e-02\n", + " 3.45039368e-02 5.82082979e-02 2.22643048e-01 -6.49276515e-03\n", + " 7.27190524e-02 -1.29056543e-01 1.79401860e-02 -9.05938894e-02\n", + " 1.01490781e-01 1.15685366e-01 -1.68552965e-01 1.09310821e-02\n", + " -1.35432273e-01 9.06615108e-02 7.99193457e-02 2.41421498e-02\n", + " -2.31238127e-01 -1.03922322e-01 -1.17066398e-01 -2.30290014e-02\n", + " 1.10752642e-01 -4.43959571e-02 -3.20417546e-02 8.72559920e-02\n", + " 6.00255355e-02 9.61250514e-02 -1.11057520e-01 8.56682509e-02\n", + " -6.31045029e-02 3.14440489e-01 -1.74439140e-03 -1.35929435e-01\n", + " 9.86575782e-02 1.57623738e-02 4.85920087e-02 3.69031020e-02\n", + " 3.57599184e-03 7.96477720e-02 6.76719919e-02 -7.47979283e-02\n", + " -1.73088871e-02 -5.85063472e-02 1.04520796e-02 8.35897848e-02\n", + " 4.22167853e-02 5.82882762e-02 -3.41183729e-02 1.78625554e-01\n", + " 4.96724211e-02 -6.01630379e-03 1.90587461e-01 1.45163506e-01\n", + " 2.92742431e-01 -1.33185238e-02 3.46303955e-02 5.76053858e-02\n", + " -1.21279098e-01 -1.12032056e-01 4.27892022e-02 6.02273233e-02\n", + " 4.64653820e-02 2.65893177e-03 -1.24580145e-01 3.42399888e-02\n", + " 4.24126014e-02 -1.11869112e-01 1.48223788e-01 8.96952860e-03\n", + " -1.81652337e-01 -1.07477908e-03 -2.11170197e-01 -1.17638037e-02\n", + " -2.57604639e-03 1.10269208e-02 -7.93513749e-03 -6.66716602e-03\n", + " -9.73415654e-03 -1.95444189e-02 6.17408231e-02 1.48227945e-01\n", + " -3.38140503e-02 5.64662144e-02 4.53053880e-03 1.56727689e-03\n", + " -2.49589048e-02 3.12751457e-02 6.83686957e-02 -4.89721298e-02\n", + " 2.70258095e-02 -9.16681513e-02 -1.15028676e-02 1.98250175e-01\n", + " -5.13290279e-02 -1.46834463e-01 -2.97099743e-02 9.25371647e-02\n", + " -2.13932488e-02 -2.21860129e-02 1.08121499e-01 -1.09768607e-01\n", + " 2.24132732e-01 1.00555241e-01 1.87434703e-01 4.23492752e-02\n", + " 1.38367321e-02 3.34970444e-01 -8.94525871e-02 1.88003093e-01\n", + " 2.47843832e-01 -1.10779718e-01 -4.04662415e-02 2.33163029e-01\n", + " 8.42885748e-02 1.83316078e-02 -4.82795276e-02 -7.81396404e-02\n", + " -1.81104571e-01 8.59132558e-02 3.28349695e-02 -3.03934179e-02\n", + " -6.87188655e-02 -5.54491095e-02 -1.16539076e-01 8.10939074e-02\n", + " 1.66151658e-01 -1.04204081e-01 -4.54659089e-02 3.46217990e-01\n", + " -6.87338412e-02 -2.79393137e-01 -6.11497872e-02 1.10450491e-01\n", + " 1.33808199e-02 3.10391095e-02 5.62274754e-02 -2.26349663e-02\n", + " 3.78253043e-01 9.29756463e-02 -2.95779519e-02 1.88408881e-01\n", + " -2.13043064e-01 1.44064546e-01 2.67401397e-01 -5.44703007e-02\n", + " -2.32595913e-02 -1.05153881e-01 -9.90558565e-02 1.31805003e-01\n", + " 1.85671076e-02 -1.22279026e-01 -1.74548984e-01 3.65480855e-02\n", + " 8.27224180e-02 -8.85890275e-02 -2.52251536e-01 1.33791342e-02\n", + " -2.06478864e-01 2.36792237e-01 1.43139496e-01 3.78896177e-01\n", + " -2.61094004e-01 -6.94778562e-03 1.02447331e-01 -9.56612006e-02\n", + " 1.61615014e-01 7.02993721e-02 2.02162147e-01 4.00088802e-02\n", + " 1.11095319e-02 1.97514802e-01 -3.20113540e-01 3.35540436e-02\n", + " 1.83484331e-03 -9.16052386e-02 3.03619176e-01 -5.63807413e-02\n", + " -5.23497351e-02 5.77888489e-02 -1.30018741e-01 1.06644750e-01\n", + " 1.56175345e-01 1.56132951e-01 3.52125103e-03 1.45888599e-02\n", + " 5.53498045e-02 -1.87324613e-01 9.90306288e-02 -6.11083619e-02\n", + " -5.22105210e-02 9.50702094e-03 4.12470475e-02 5.32815084e-02\n", + " 1.15712777e-01 7.95262307e-02 -2.55988896e-01 -3.58133130e-02\n", + " 1.11880451e-02 -2.30245255e-02 5.48269749e-02 3.91696244e-02\n", + " -1.52158409e-01 -9.44328085e-02 -1.75477326e-01 1.77097455e-01\n", + " -4.81040366e-02 -5.01764640e-02 -4.02727723e-02 1.28545582e-01\n", + " 3.59606519e-02 -3.68982442e-02 -7.22499713e-02 2.76763737e-02\n", + " -3.85689549e-02 -1.93693697e-01 -1.79018855e-01 -4.76863012e-02\n", + " -9.42009985e-02 -6.45715147e-02 -1.80334717e-01 2.04343840e-01\n", + " 5.69465803e-03 -2.59253886e-02 -3.33098099e-02 -1.83862224e-01\n", + " -8.52648094e-02 1.15508167e-02 5.81352189e-02 -1.33983210e-01\n", + " -1.10393859e-01 -6.89581037e-03 7.58414716e-02 3.43196765e-02\n", + " -1.34396004e-02 -1.52783349e-01 2.74066895e-01 -4.56747934e-02\n", + " -2.46156100e-02 2.83161134e-01 -4.80791554e-02 -1.74021512e-01\n", + " -1.06764734e-01 2.47774094e-01 -6.08022921e-02 -6.88287616e-03\n", + " -1.55047849e-01 3.68534252e-02 -1.52219996e-01 -5.63970394e-03\n", + " -1.50728539e-01 -1.91262409e-01 -1.18625583e-02 1.06365047e-01\n", + " 1.23742506e-01 5.07268190e-01 -1.58181459e-01 1.30536407e-01\n", + " -1.17095530e-01 -1.12515725e-01 9.80233178e-02 -2.78181255e-01\n", + " -1.69206411e-02 -8.10275376e-02 -1.28671557e-01 -2.57597119e-02\n", + " -5.37700541e-02 1.25524268e-01 4.31398228e-02 7.10597187e-02\n", + " -4.99772206e-02 5.21996245e-02 1.35898679e-01 -7.50691742e-02\n", + " 3.70494053e-02 -1.13780424e-01 -9.44700688e-02 -9.87421647e-02\n", + " -3.13188061e-02 -1.62290052e-01 -7.90826827e-02 -1.44645302e-02\n", + " -7.21682087e-02 2.55922433e-02 -5.64694889e-02 -1.44925443e-02\n", + " 6.22617528e-02 -1.08713701e-01 4.01526690e-03 4.10226807e-02\n", + " 4.15871441e-02 -3.84040661e-02 -1.39708251e-01 3.71084847e-02\n", + " 2.96907369e-02 -8.05159472e-03 -5.80743030e-02 1.99992396e-02\n", + " -1.73090041e-01 7.90285021e-02 -1.20680593e-01 5.04517369e-02\n", + " 6.70899078e-02 3.39251454e-03 2.97371484e-02 7.98447430e-02\n", + " 3.49063613e-02 -8.78541693e-02 -8.45664367e-02 4.91446033e-02\n", + " 1.84949085e-01 -1.87111631e-01 -4.64286506e-02 2.15648003e-02\n", + " 8.35067630e-02 -5.81395300e-03 -3.40652056e-02 5.82771823e-02\n", + " -1.55514479e-02 -5.97702079e-02 4.21513841e-02 -3.86341028e-02\n", + " -1.44392848e-01 2.21911035e-02 2.42751956e-01 -1.04216158e-01\n", + " -1.76630110e-01 -7.37440586e-02 -7.98976198e-02 3.48156214e-01\n", + " 4.56815287e-02 -1.83710568e-02 4.06874642e-02 1.31223336e-01\n", + " -1.72486633e-01 1.15986280e-02 -3.26897837e-02 -2.36280672e-02\n", + " -1.56974047e-01 -5.59649281e-02 8.71846452e-02 1.21380866e-01\n", + " -7.95097847e-04 7.23633990e-02 8.46616775e-02 -9.37139839e-02\n", + " -2.81199247e-01 6.47920519e-02 7.40280300e-02 -1.86444029e-01\n", + " -1.45378616e-02 -2.85382066e-02 1.14884302e-01 1.08750522e-01\n", + " -1.16895512e-01 -9.80315432e-02 -1.07453249e-01 -4.63581458e-02\n", + " -5.73092811e-02 -6.92468137e-02 -1.60591416e-02 -5.06357178e-02\n", + " -5.52285500e-02 2.38005351e-02 -1.52106583e-01 3.98728438e-02\n", + " 5.23092598e-03 -3.03036608e-02 -2.86633633e-02 -3.58668976e-02\n", + " -2.51923464e-02 -1.93694737e-02 -1.57438308e-01 -2.23388284e-01\n", + " -4.69097607e-02 2.04677582e-02 4.01819423e-02 -1.96079701e-01\n", + " 1.18868962e-01 3.62973288e-03 -2.22482178e-02 2.57773255e-03\n", + " -3.69595066e-02 -1.51077420e-01 1.45763442e-01 1.99723333e-01\n", + " 5.99575154e-02 -1.01890758e-01 -7.64687359e-02 2.26793252e-03\n", + " -2.57982761e-02 9.86009985e-02 1.36138529e-01 1.18427753e-01\n", + " 1.07316062e-01 -9.75074805e-03 4.57952693e-02 1.39061615e-01\n", + " -6.67170435e-02 8.85605067e-02 -1.85625106e-01 -2.53604855e-02\n", + " -5.66985980e-02 1.11719862e-01 1.21449992e-01 -2.63188928e-01\n", + " -1.56577542e-01 7.68720955e-02 -8.62184316e-02 -4.84464839e-02\n", + " -2.61202510e-02 1.21650323e-01 1.74283206e-01 -1.39217034e-01\n", + " 7.68341348e-02 -4.35012877e-02 -1.36327878e-01 1.11988083e-01\n", + " -1.07548691e-01 -4.62426506e-02 -2.84434464e-02 2.99584776e-01\n", + " 6.27722740e-02 -1.81447715e-04 -1.04803763e-01 -3.78453806e-02\n", + " 2.01567560e-01 -6.73242658e-03 -3.36488448e-02 -1.84171200e-02\n", + " 9.38138589e-02 -2.59510567e-03 1.67375401e-01 -1.23424456e-01\n", + " -1.10268280e-01 -1.68826193e-01 -3.03166900e-02 -9.54335257e-02\n", + " 6.24212846e-02 -9.49329347e-04 -3.48037705e-02 -4.92925476e-03\n", + " 1.46249652e-01 -2.93363538e-02 9.35991555e-02 1.32603183e-01\n", + " -7.64383227e-02 5.22850528e-02 -5.85905090e-02 -1.23766199e-01\n", + " -1.37803346e-01 7.76846334e-02 1.48454653e-02 2.02266842e-01\n", + " 3.06560434e-02 1.14135360e-02 -2.94189930e-01 5.06350286e-02\n", + " 5.25027327e-02 -3.63762565e-02 -4.85276468e-02 1.68133304e-02\n", + " 3.82005498e-02 -7.04133958e-02 -1.22735098e-01 -2.24003755e-02\n", + " 5.68516366e-03 -1.29689634e-01 1.58001751e-01 -1.88718855e-01\n", + " 4.98027876e-02 -1.63196594e-01 -1.84865564e-01 4.56589237e-02\n", + " -2.23059505e-02 2.14145094e-01 -9.09119844e-02 1.74170107e-01\n", + " 3.56387675e-01 -1.83951765e-01 -1.61227718e-01 3.10573280e-02\n", + " 3.08828913e-02 4.78554070e-02 1.85887784e-01 6.79247528e-02\n", + " 2.48016879e-01 2.52400637e-02 1.21261463e-01 -3.33513692e-02\n", + " -9.74473357e-02 1.32344082e-01 -1.28508076e-01 1.31601974e-01\n", + " -3.32840644e-02 -9.36583132e-02 2.29231074e-01 -1.62661046e-01\n", + " 1.82951808e-01 -1.85782373e-01 1.92117810e-01 1.73320517e-01\n", + " -1.36124464e-02 -2.37052068e-02 -1.42589316e-01 -5.37089035e-02\n", + " -1.69148535e-01 -1.11221172e-01 -9.42412168e-02 2.37114262e-02\n", + " 8.67379308e-02 1.35969922e-01 1.89521551e-01 -7.88056850e-02\n", + " 2.82734931e-02 -1.34884538e-02 4.24232781e-02 -8.12565461e-02\n", + " -5.84697351e-02 -6.83999795e-04 1.05115376e-01 -1.24736596e-02\n", + " -1.17534436e-02 -5.83527796e-02 9.37219486e-02 -3.10897939e-02\n", + " -1.24749422e-01 1.25918295e-02 -1.79369785e-02 -2.07104795e-02\n", + " -1.35280262e-03 -1.07412241e-01 -5.91101823e-03 1.40625816e-02\n", + " -9.66576114e-02 1.25946254e-01 -5.03075533e-02 -5.84706804e-03\n", + " -2.19545867e-02 -1.81083884e-02 1.14864409e-01 -1.01955749e-01\n", + " 1.06273532e-01 -1.14236437e-01 -2.72360956e-03 -1.15499660e-01\n", + " -8.42611790e-02 2.10824728e-01 -3.04660443e-02 -4.90653291e-02\n", + " -1.59012586e-01 -7.03004077e-02 6.88677803e-02 -9.19958875e-02\n", + " 8.93169940e-02 -1.08604968e-01 2.73419023e-02 1.33787721e-01\n", + " -2.52874345e-02 -4.03351672e-02 -1.14524618e-01 -9.97887105e-02]\n" + ] + }, + { + "data": { + "text/plain": [ + "tensor([[0.1857, 0.1904, 0.2388, 0.1931, 0.1920]])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "encodings = model.encode(sentences)\n", "\n", @@ -122,12 +403,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "id": "RyjOeXnjaP47", "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(2)\n", + "Generative adversarial networks are creating realistic images and videos.\n" + ] + } + ], "source": [ "# Der höchste Wert wird gesucht und der beste passendste Satz wird ausgegeben\n", "\n", @@ -172,9 +462,9 @@ "provenance": [] }, "kernelspec": { - "display_name": ".conda-default:Python", + "display_name": "Python 3", "language": "python", - "name": "conda-env-.conda-default-py" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -186,7 +476,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.11.4" } }, "nbformat": 4, diff --git a/aifromscratch.ipynb b/aifromscratch.ipynb index 265c438..6080482 100644 --- a/aifromscratch.ipynb +++ b/aifromscratch.ipynb @@ -17,11 +17,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "id": "O98tFj-h8QZJ" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.1.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-05-19 10:03:25.036227: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:467] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1747649008.492226 550 cuda_dnn.cc:8579] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1747649008.575626 550 cuda_blas.cc:1407] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "W0000 00:00:1747649008.902248 550 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1747649008.902325 550 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1747649008.902330 550 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "W0000 00:00:1747649008.902333 550 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", + "2025-05-19 10:03:28.932890: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + } + ], "source": [ "%pip install -q numpy matplotlib tensorflow\n", "import numpy as np\n", @@ -63,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "id": "xBF80T9i-grq" }, @@ -86,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "id": "E0Hjhfzk_doi" }, @@ -116,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "id": "rj_Z_mTx_xiP" }, @@ -182,7 +209,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "id": "mRAQoeWiBt5x" }, @@ -252,7 +279,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "id": "ftvrbpNwC4f0" }, @@ -276,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "id": "9Q6m1lyRD95U" }, @@ -297,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -305,7 +332,18 @@ "id": "z9LlNoJSEcIT", "outputId": "17e8d0c0-dd45-4863-97c0-7a0d8dc536f4" }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "train_labels" ] @@ -329,7 +367,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": { "id": "q7u8Ta65EmyW" }, @@ -352,7 +390,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "id": "IHy1Gz4PGe9X" }, @@ -379,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -387,13 +425,35 @@ "id": "88EKqTQhG8pN", "outputId": "d6c91591-4460-4db1-b0c3-30ab519f5113" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch:10, loss:0.9090706117455868\n", + "epoch:20, loss:0.8792199052092518\n", + "epoch:30, loss:0.8433070600236707\n", + "epoch:40, loss:0.7952942317265451\n", + "epoch:50, loss:0.7275478136526996\n", + "epoch:60, loss:0.6793746981509751\n", + "epoch:70, loss:0.6453599431786103\n", + "epoch:80, loss:0.6155342892412412\n", + "epoch:90, loss:0.5852734257995905\n", + "epoch:100, loss:0.550562144333948\n", + "epoch:110, loss:0.5070316593626228\n", + "epoch:120, loss:0.46003793476403065\n", + "epoch:130, loss:0.43367297893372514\n", + "epoch:140, loss:0.40788315019850213\n", + "epoch:150, loss:0.38594894722197964\n" + ] + } + ], "source": [ "epochs = 150\n", "\n", "losses = []\n", "for epoch in range(1,epochs+1):\n", - " loss =n.train(train_images, train_labels, 0.9)\n", + " loss =n.train(train_images, train_labels, 0.5)\n", " losses.append(loss)\n", " if (epoch)%10==0:\n", " print(f\"epoch:{epoch}, loss:{loss}\")" @@ -411,7 +471,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -420,7 +480,18 @@ "id": "IfvE-PlZHQ0M", "outputId": "e6b1a67d-be6d-4441-a7e6-dfcb159b93eb" }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGiCAYAAAA1LsZRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAARs5JREFUeJzt3XlYVGX/BvB7FmaGfREYFtndl4AQETWXV4zULKtfmRtkmmlqKr2VVupbvUXLm6lpuaRpmYmVWZZZRm4kgoJYbriwiqwqDCAMMHN+f6BT5BKDwIGZ+3Ndc11x5pw53yeVua/nPItEEAQBRERERCKRil0AERERmTeGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISldFhZP/+/Rg9ejQ8PDwgkUiwffv2256/bds2DB8+HC4uLrCzs0N4eDh++umnptZLREREJsboMFJZWYnAwECsXLmyUefv378fw4cPx86dO5GSkoKhQ4di9OjROHr0qNHFEhERkemR3MlGeRKJBN988w3GjBlj1HU9e/bE2LFjsWjRoqbemoiIiEyEvLVvqNfrUV5eDicnp1ueo9VqodVqG1xz+fJldOjQARKJpDXKJCIiojskCALKy8vh4eEBqfTWD2NaPYz873//Q0VFBR577LFbnhMbG4tXX321FasiIiKilpKbm4uOHTve8v1WfUyzefNmPPXUU/j2228RERFxy/P+3jNSVlYGb29v5Obmws7OrqnlEhERUSvSaDTw8vJCaWkp7O3tb3leq/WMbNmyBVOnTsWXX3552yACAEqlEkql8objdnZ2DCNERETtzD8NsWiVdUa++OILTJ48GV988QVGjRrVGrckIiKidsLonpGKigqcO3fO8HNmZibS0tLg5OQEb29vLFiwAHl5efj0008B1D+aiY6OxrJlyxAWFoaCggIAgKWl5W27bIiIiMg8GN0zcuTIEQQHByM4OBgAEBMTg+DgYMM03fz8fOTk5BjOX7NmDerq6jBz5ky4u7sbXnPmzGmmJhAREVF7dkcDWFuLRqOBvb09ysrKOGaEiIionWjs9zf3piEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiarWN8tqir1Mu4PcL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(losses)\n", "plt.show()" @@ -437,7 +508,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -445,7 +516,15 @@ "id": "YECqCWDULACN", "outputId": "9cdd0657-bc2d-43f3-8449-c346729ffd71" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Percentage: 73\n" + ] + } + ], "source": [ "outputs = n.feedForward(test_images)\n", "p = int(np.count_nonzero(np.argmax(outputs, axis=1) == test_labels)/100)\n", @@ -463,7 +542,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -472,7 +551,25 @@ "id": "HsX1FzWVes_b", "outputId": "2fa7770b-23dd-40bb-d550-6c58ae73b9e6" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAG05JREFUeJzt3X9s1PUdx/FXi/RAbQ9Laa8nBQv+wPCjZAxqhyKOBlo3IsIfIiaCcxK0OKE6TZ2Kbks6WYbMheE/hGoiyFj4Ef2DRaotOguGKiFks6FNHRhoGWy9gyIF6Wd/EG+elB/f467v3vF8JN+E3n0//b797tYn3/b4Ns055wQAQC9Ltx4AAHB1IkAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMDENdYDfF93d7cOHTqkzMxMpaWlWY8DAPDIOafjx48rGAwqPf3C1zl9LkCHDh1SQUGB9RgAgCt08OBBDR069ILP97lvwWVmZlqPAACIg0t9PU9YgFatWqWbbrpJAwYMUHFxsT799NPLWse33QAgNVzq63lCArRhwwZVVlZq2bJl+uyzz1RUVKQZM2boyJEjiTgcACAZuQSYNGmSq6ioiHx89uxZFwwGXXV19SXXhkIhJ4mNjY2NLcm3UCh00a/3cb8COn36tBobG1VaWhp5LD09XaWlpWpoaDhv/66uLoXD4agNAJD64h6go0eP6uzZs8rLy4t6PC8vT21tbeftX11dLb/fH9l4BxwAXB3M3wVXVVWlUCgU2Q4ePGg9EgCgF8T93wHl5OSoX79+am9vj3q8vb1dgUDgvP19Pp98Pl+8xwAA9HFxvwLKyMjQhAkTVFtbG3msu7tbtbW1KikpiffhAABJKiF3QqisrNT8+fP1wx/+UJMmTdLKlSvV2dmpRx55JBGHAwAkoYQE6IEHHtC///1vvfTSS2pra9P48eO1bdu2896YAAC4eqU555z1EN8VDofl9/utxwAAXKFQKKSsrKwLPm/+LjgAwNWJAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYiHuAXn75ZaWlpUVto0aNivdhAABJ7ppEfNLRo0dr+/bt/z/INQk5DAAgiSWkDNdcc40CgUAiPjUAIEUk5GdA+/fvVzAY1IgRI/TQQw/pwIEDF9y3q6tL4XA4agMApL64B6i4uFg1NTXatm2bVq9erdbWVt111106fvx4j/tXV1fL7/dHtoKCgniPBADog9Kccy6RB+jo6NDw4cO1YsUKPfroo+c939XVpa6ursjH4XCYCAFACgiFQsrKyrrg8wl/d8CgQYN06623qrm5ucfnfT6ffD5foscAAPQxCf93QCdOnFBLS4vy8/MTfSgAQBKJe4CeeeYZ1dfX68svv9Qnn3yi+++/X/369dODDz4Y70MBAJJY3L8F99VXX+nBBx/UsWPHNGTIEN15553auXOnhgwZEu9DAQCSWMLfhOBVOByW3++3HgMAcIUu9SYE7gUHADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJhI+C+kA5JJLHdtv/HGGz2v+dWvfuV5zY9+9CPPa1599VXPayRF/ZbiyzV+/HjPax5++GHPa/7zn/94XrN06VLPayTpr3/9a0zrcHm4AgIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJ7oaNlBTLnZkladOmTZ7X3HTTTZ7X/OEPf/C85he/+IXnNffee6/nNZK0ZMkSz2tGjx4d07G8iuXu43fccUdMx+Ju2InFFRAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYCLNOeesh/iucDgsv99vPQYuwzXXeL+X7RNPPOF5zaxZszyvKSkp8bxGknw+n+c1R44c8bymtLTU85p9+/Z5XhOrjIwMz2t66/WwfPlyz2tOnTrleY0kzZw50/Oa2tramI6VikKhkLKysi74PFdAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJbkaaYq6//nrPa8rKymI61sKFCz2vieUmnL1p27Ztntf8/Oc/97zm0KFDntekoiFDhnhe097enoBJetbQ0OB5zeTJkxMwSXLiZqQAgD6JAAEATHgO0I4dOzRz5kwFg0GlpaVpy5YtUc875/TSSy8pPz9fAwcOVGlpqfbv3x+veQEAKcJzgDo7O1VUVKRVq1b1+Pzy5cv1+uuv64033tCuXbt03XXXacaMGTH/QigAQGry/CsMy8vLVV5e3uNzzjmtXLlSL7zwgu677z5J0ltvvaW8vDxt2bJFc+fOvbJpAQApI64/A2ptbVVbW1vUO538fr+Ki4sv+G6Srq4uhcPhqA0AkPriGqC2tjZJUl5eXtTjeXl5kee+r7q6Wn6/P7IVFBTEcyQAQB9l/i64qqoqhUKhyHbw4EHrkQAAvSCuAQoEApLO/4di7e3tkee+z+fzKSsrK2oDAKS+uAaosLBQgUBAtbW1kcfC4bB27dqlkpKSeB4KAJDkPL8L7sSJE2pubo583Nraqj179ig7O1vDhg3TkiVL9Nvf/la33HKLCgsL9eKLLyoYDGrWrFnxnBsAkOQ8B2j37t265557Ih9XVlZKkubPn6+amho9++yz6uzs1MKFC9XR0aE777xT27Zt04ABA+I3NQAg6XEz0j5s/Pjxnte89tprntfcfffdntf0po8++sjzmrfeeiumY7355pue13zzzTcxHQtSTU2N5zUPP/xw/Ae5gD/+8Y+e1yxdujQBkyQnbkYKAOiTCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYMLzr2NA73n22Wc9r5k6darnNb15Q/QtW7Z4XvP88897XvPFF194XoPed+utt/bKcbq6umJat2LFijhPgu/iCggAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMMHNSPuwjz76yPOamTNnJmCSnq1cudLzmurqas9rTp486XkNet9zzz3nec2kSZM8r/nmm288r4nl/0uSdPDgwZjW4fJwBQQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmEhzzjnrIb4rHA7L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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "test_image = test_images[randint(0,len(test_images))]\n", "result = n.feedForward(test_image.reshape(1,784))\n", @@ -487,9 +584,9 @@ "provenance": [] }, "kernelspec": { - "display_name": ".conda-default:Python", + "display_name": "Python 3", "language": "python", - "name": "conda-env-.conda-default-py" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -501,7 +598,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.19" + "version": "3.11.4" } }, "nbformat": 4, diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bb0c3b6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +numpy +matplotlib +tensorflow-cpu +gensim +sentence_transformers +tf-keras +torch -f https://download.pytorch.org/whl/cpu \ No newline at end of file