diff --git a/notebooks/datasets/filter-dataset.ipynb b/notebooks/datasets/filter-dataset.ipynb new file mode 100644 index 0000000..a55f94a --- /dev/null +++ b/notebooks/datasets/filter-dataset.ipynb @@ -0,0 +1,2316 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%pip uninstall easyllm -y\n", + "%pip install git+https://github.com/philschmid/easyllm.git@datafilter --upgrade" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "\n", + "ds = load_dataset('philschmid/oscar-2301-de-minhash-dedup',split=\"train\")\n", + "# ds = load_dataset('wikipedia','20220301.de',split=\"train\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Perplexity filtering \n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nach § 80 Abs. 5 Satz 1 Halbsatz 2 VwGO kann das Gericht der Hauptsache die aufschiebende Wirkung der Klage ganz oder teilweise wiederherstellen. Ist die sofortige Vollziehung von der Behörde den formellen Anforderungen des § 80 Abs. 3 Satz 1 VwGO genügend angeordnet worden, so entscheidet das Gericht nach § 80 Abs. 5 Satz 1 Halbsatz 2 VwGO über die Wiederherstellung der aufschiebenden Wirkung der Klage auf der Grundlage einer eigenen Abwägung des Interesses des Antragstellers, von der Vollziehung des angefochtenen Verwaltungsakts bis zur endgültigen Entscheidung über seine Rechtmäßigkeit verschont zu bleiben, gegen das besondere öffentliche Interesse an dessen sofortiger Vollziehung (vgl. BVerwG, Beschl. v. 19.12.2014 - 7 VR 5.14 -, juris Rn. 9; Nds. OVG, Beschl. v. 10.09.2014 - 8 ME 87/14 -, juris Rn. 2). Im Rahmen der Interessenabwägung haben die Erfolgsaussichten des in der Hauptsache eingelegten Rechtsbehelfs eine entscheidende Bedeutung. Ergibt sich bei der im Rahmen des vorläufigen Rechtsschutzes gebotenen, aber grundsätzlich auch ausreichenden (vgl. Nds. OVG, Beschl. v. 16.8.2017 - 13 ME 173/17 -, juris Rn. 4, vgl. auch Beschl. v. 24.01.2018 - 7 ME 110/17 -, juris Rn. 28) summarischen Überprüfung, dass der Rechtsbehelf in der Hauptsache keinen Erfolg haben wird, weil sich der angegriffene Verwaltungsakt als offensichtlich rechtmäßig erweist, so überwiegt regelmäßig das öffentliche Interesse an der sofortigen Vollziehung des Verwaltungsakts. Erweist sich der Rechtsbehelf bei summarischer Überprüfung demgegenüber als offensichtlich erfolgreich, überwiegt regelmäßig das Interesse des Adressaten des Verwaltungsakts, von dessen Vollziehung vorerst verschont zu bleiben. Stellen sich die Erfolgsaussichten des Rechtsbehelfs hingegen als offen dar, so ist eine Abwägung der widerstreitenden Interessen erforderlich, bei der in Rechnung zu stellen ist, welche Gründe bei bestehender Unsicherheit im Hinblick auf die Erfolgsaussichten des Rechtsbehelfs für und gegen eine Aufrechterhaltung der sofortigen Vollziehung des Verwaltungsakts sprechen (vgl. Nds. OVG, Beschl. v. 10.5.2010 - 13 ME 181/09 -, juris Rn. 4). Außerdem ist zu berücksichtigen, dass die voraussichtliche Rechtmäßigkeit eines Verwaltungsakts für sich allein nur das allgemeine Interesse an seiner Vollziehung begründet, nicht aber zugleich auch deren, für die behördliche Anordnung nach § 80 Abs. 2 Satz 1 Nr. 4 VwGO erforderliche Dringlichkeit (vgl. grundlegend BVerfG, Beschl. v. 27.4.2005 - 1 BvR 223/05 -, NVwZ 2005, 1303; Beschl. v. 18.7.1973, - 1 BvR 23/73 -, BVerfGE 35, 382, 402; Nds. OVG, Beschl. v. 10.9.2014, a.a.O.; Finkelnburg/Dombert/Külpmann, Vorläufiger Rechtsschutz im Verwaltungsstreitverfahren, 7. Aufl., Rn. 757 f. m.w.N.).\n" + ] + } + ], + "source": [ + "print(ds[456][\"text\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8071b0d5472949deabe06d5600f46054", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "add url (num_proc=128): 0%| | 0/53172498 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# df = ds.to_pandas()\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Example dataframe\n", + "def plot_distribution(dfs):\n", + " # Get summary stats and quartiles\n", + " q1 = dfs['perplexity'].quantile(.05)\n", + " q2 = dfs['perplexity'].quantile(.5)\n", + " q3 = dfs['perplexity'].quantile(.95)\n", + "\n", + " # Create line chart \n", + " counts, bins = np.histogram(dfs['perplexity'], bins=30000)\n", + " bin_centers = 0.5*(bins[1:] + bins[:-1])\n", + " plt.plot(bin_centers, counts)\n", + "\n", + " # Add vertical lines for quartiles \n", + " plt.axvline(x=q1, color='r')\n", + " plt.axvline(x=q2, color='g')\n", + " plt.axvline(x=q3, color='b')\n", + "\n", + " plt.title('Perplexity Distribution')\n", + " plt.xlabel('Perplexity')\n", + " plt.ylabel('Frequency')\n", + " plt.xscale('log')\n", + "\n", + " plt.show()\n", + "\n", + "plot_distribution(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "get some random samples from the dataset with low and high perplexity" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Low: 3.3\n", + "High: 1155.9099999999978\n" + ] + } + ], + "source": [ + "low = df.perplexity.quantile(0)\n", + "high = df.perplexity.quantile(0.9)\n", + "\n", + "print(f'Low: {low}')\n", + "print(f'High: {high}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_lowest sample:_\n", + "```\n", + "'Die Skulptur Madonna mit Kind in der katholischen Kirche St-Lucien in Angy, einer französischen Gemeinde im Département Oise in der Region Hauts-de-France, wurde im dritten Viertel des 14. Jahrhunderts geschaffen. Im Jahr 1912 wurde die gotische Skulptur als Monument historique in die Liste der geschützten Objekte (Base Palissy) in Frankreich aufgenommen.\\nDie 1,10 Meter hohe Skulptur aus Kalkstein ist farbig gefasst. Maria hält das Jesuskind auf dem linken Arm. Sein Gesicht wendet sich in Richtung des Betrachters. Maria, mit bäuerlichem Gesicht und roten Wangen, trägt auf ihrem Haupt eine Krone. Die vielen Falten von ihrem Kleid geben ihrer Erscheinung eine Fülle.'\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Filterstrategy: \n", + "\n", + "1. AlphanumericFilter remove sentence with more than 20% alphanumeric\n", + "2. ParenthesesRationFilter remove sentence with more than 5% parentheses\n", + "3. PunctuationFilter remove sentence with more than 15% missing punctuation\n", + "4. EllipsisFilter remove sentence with more than 30% ellipsis\n", + "5. LengthFilter: filter short documets < 5 words\n", + "6. LongWordFilter: for js stuff\n", + "7. CommonWordFilter: check if coherent sentence maybe not needed\n", + "8. RepeatedLinesFilter: remove repeated lines 30%\n", + "9. WhitespaceRatioFilter: remove sentence with more than 25% whitespace\n", + "10. UrlRatioFilter: remove sentence with more than 20% url\n", + "11. PerplexityFilter: remove sentence with perplexity > 1000\n", + "\n", + "\n", + "TODO: find law example which is super long and to filter it " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "wikipedia_filters = [\n", + " NonAlphaNumericFilter(),\n", + " LengthFilter(min_length=10),\n", + " CommonWordFilter(common_words=COMMON_WORDS_DE),\n", + " UrlRatioFilter(),\n", + " PerplexityFilter(language=\"de\",min_threshold=0,max_threshold=perplexity_threshold)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "da7067303e814628917d39b02cab5c0e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "filter documents... (num_proc=128): 0%| | 0/53172498 [00:00 300_000:\n", + " return False\n", + " return True\n", + "\n", + "\n", + "# datasets filters keeps true elements, meaning if the filter is we want to set it to false\n", + "ds = ds.filter(apply_filters,num_proc=os.cpu_count(),\n", + " desc=\"filter documents...\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "37786e0a47ec4375a7495bc1c5ed7ff2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Saving the dataset (0/564 shards): 0%| | 0/44401239 [00:00