From b06a381cceae093157c52f860ff28d942f36e968 Mon Sep 17 00:00:00 2001 From: Mark McDonald Date: Wed, 28 Feb 2024 16:14:03 +0800 Subject: [PATCH] Sync docs from Google3 to GitHub --- site/en/gemma/docs/agile_classifiers.ipynb | 5 +- site/en/gemma/docs/distributed_tuning.ipynb | 11 +- site/en/gemma/docs/lora_tuning.ipynb | 162 +++++++++++++------- 3 files changed, 118 insertions(+), 60 deletions(-) diff --git a/site/en/gemma/docs/agile_classifiers.ipynb b/site/en/gemma/docs/agile_classifiers.ipynb index 15a234dcd..da9927c27 100644 --- a/site/en/gemma/docs/agile_classifiers.ipynb +++ b/site/en/gemma/docs/agile_classifiers.ipynb @@ -131,7 +131,8 @@ }, "outputs": [], "source": [ - "!pip install keras keras-nlp" + "!pip install -q -U keras-nlp\n", + "!pip install -q -U keras" ] }, { @@ -1089,7 +1090,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "id": "fMSDQtyTgeP0" }, diff --git a/site/en/gemma/docs/distributed_tuning.ipynb b/site/en/gemma/docs/distributed_tuning.ipynb index b142f09b7..36c6217bf 100644 --- a/site/en/gemma/docs/distributed_tuning.ipynb +++ b/site/en/gemma/docs/distributed_tuning.ipynb @@ -252,10 +252,13 @@ } ], "source": [ - "# Install Keras 3 last. See https://keras.io/getting_started/ for more details.\n", - "!pip install -q tensorflow-cpu\n", - "!pip install -q -U keras-nlp tensorflow-hub\n", - "!pip install -q -U keras>=3" + "!pip install -q -U keras-nlp\n", + "# Work around an import error with tensorflow-hub. The library is not used.\n", + "!pip install -q -U tensorflow-hub\n", + "# Install tensorflow-cpu so tensorflow does not attempt to access the TPU.\n", + "!pip install -q -U tensorflow-cpu\n", + "# Install keras 3 last. See https://keras.io/getting_started for details.\n", + "!pip install -q -U keras" ] }, { diff --git a/site/en/gemma/docs/lora_tuning.ipynb b/site/en/gemma/docs/lora_tuning.ipynb index 47b4a2420..6bb63a7c4 100644 --- a/site/en/gemma/docs/lora_tuning.ipynb +++ b/site/en/gemma/docs/lora_tuning.ipynb @@ -259,21 +259,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "--2024-02-15 07:03:55-- https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl\n", - "Resolving huggingface.co (huggingface.co)... 18.238.49.112, 18.238.49.10, 18.238.49.70, ...\n", - "Connecting to huggingface.co (huggingface.co)|18.238.49.112|:443... connected.\n", + "--2024-02-21 16:01:22-- https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl\n", + "Resolving huggingface.co (huggingface.co)... 65.8.178.118, 65.8.178.12, 65.8.178.27, ...\n", + "Connecting to huggingface.co (huggingface.co)|65.8.178.118|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", - "Location: https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1708239835&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcwODIzOTgzNX19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=OqK8WNg%7EAbGSKY1JCD%7EDECLV-0UmLekmzzkjHS1D2YXWx%7EE8lqOtmLQiDSDgqye3qiA-uoEnKV06AzaCfJCPvjqkdTu%7EHbfA9K8RW9qC86G7o2Zt28refF1uAtOf4UoUU8IF-RbChxsqs3wmuUInnOrmesy8GecVYQQRXNZPs1Jt56WC-4RMnud97nzeo9K%7EjhwT0W6jOQEjslnAIdvxhZ4im0dUuUaABFVIrABEgAFiUEa3izfkUdzzNjlNU92rgn5FQlIy6qZoXF-lLnsqeVA7AbJkdFMQjIhN3gbVlDu7S%7EvH3KvOR5szW25wx90fumzHBcpnqz%7EWg9b8dnK%7Epg__&Key-Pair-Id=KVTP0A1DKRTAX [following]\n", - "--2024-02-15 07:03:55-- https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1708239835&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcwODIzOTgzNX19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=OqK8WNg%7EAbGSKY1JCD%7EDECLV-0UmLekmzzkjHS1D2YXWx%7EE8lqOtmLQiDSDgqye3qiA-uoEnKV06AzaCfJCPvjqkdTu%7EHbfA9K8RW9qC86G7o2Zt28refF1uAtOf4UoUU8IF-RbChxsqs3wmuUInnOrmesy8GecVYQQRXNZPs1Jt56WC-4RMnud97nzeo9K%7EjhwT0W6jOQEjslnAIdvxhZ4im0dUuUaABFVIrABEgAFiUEa3izfkUdzzNjlNU92rgn5FQlIy6qZoXF-lLnsqeVA7AbJkdFMQjIhN3gbVlDu7S%7EvH3KvOR5szW25wx90fumzHBcpnqz%7EWg9b8dnK%7Epg__&Key-Pair-Id=KVTP0A1DKRTAX\n", - "Resolving cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)... 18.164.116.15, 18.164.116.66, 18.164.116.111, ...\n", - "Connecting to cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)|18.164.116.15|:443... connected.\n", + "Location: https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1708790483&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcwODc5MDQ4M319LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=BwdEM1fYy7BYkObmc2q94IKmK36Yf4TPP2cKpS9rCxXZXsl65Rvo1dMcCT1rh1pWYRviT64m50aY%7EMV6yZX58OxVJhcVL7A9lsoAJIZfLea6NeZya3Vfd5h%7EhGTD68Iu%7EJl%7EQjzdaVzj70%7E52tBkmVK3N89W7GUeLZC1p4L8iADTLUEEn80fED-kkzcq4lAxN7rKxBMhqJXgmChxbUP0%7EQEa5AuqZFM7WIMCdy6J368digPnIr4ReHNm1VOEjh5qKNwYBuUXqfxU%7EfiBLFHFzDKSIqQw6Bn0B01b2E2CmwFdAd9HndByEmzfJfcs1yhMrbaxVcPCGay5VcRS3U2-5g__&Key-Pair-Id=KVTP0A1DKRTAX [following]\n", + "--2024-02-21 16:01:23-- https://cdn-lfs.huggingface.co/repos/34/ac/34ac588cc580830664f592597bb6d19d61639eca33dc2d6bb0b6d833f7bfd552/2df9083338b4abd6bceb5635764dab5d833b393b55759dffb0959b6fcbf794ec?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27databricks-dolly-15k.jsonl%3B+filename%3D%22databricks-dolly-15k.jsonl%22%3B&Expires=1708790483&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcwODc5MDQ4M319LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy8zNC9hYy8zNGFjNTg4Y2M1ODA4MzA2NjRmNTkyNTk3YmI2ZDE5ZDYxNjM5ZWNhMzNkYzJkNmJiMGI2ZDgzM2Y3YmZkNTUyLzJkZjkwODMzMzhiNGFiZDZiY2ViNTYzNTc2NGRhYjVkODMzYjM5M2I1NTc1OWRmZmIwOTU5YjZmY2JmNzk0ZWM%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qIn1dfQ__&Signature=BwdEM1fYy7BYkObmc2q94IKmK36Yf4TPP2cKpS9rCxXZXsl65Rvo1dMcCT1rh1pWYRviT64m50aY%7EMV6yZX58OxVJhcVL7A9lsoAJIZfLea6NeZya3Vfd5h%7EhGTD68Iu%7EJl%7EQjzdaVzj70%7E52tBkmVK3N89W7GUeLZC1p4L8iADTLUEEn80fED-kkzcq4lAxN7rKxBMhqJXgmChxbUP0%7EQEa5AuqZFM7WIMCdy6J368digPnIr4ReHNm1VOEjh5qKNwYBuUXqfxU%7EfiBLFHFzDKSIqQw6Bn0B01b2E2CmwFdAd9HndByEmzfJfcs1yhMrbaxVcPCGay5VcRS3U2-5g__&Key-Pair-Id=KVTP0A1DKRTAX\n", + "Resolving cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)... 108.157.162.27, 108.157.162.99, 108.157.162.58, ...\n", + "Connecting to cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)|108.157.162.27|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 13085339 (12M) [text/plain]\n", "Saving to: ‘databricks-dolly-15k.jsonl’\n", "\n", - "databricks-dolly-15 100%[===================>] 12.48M 76.8MB/s in 0.2s \n", + "databricks-dolly-15 100%[===================>] 12.48M 64.0MB/s in 0.2s \n", "\n", - "2024-02-15 07:03:56 (76.8 MB/s) - ‘databricks-dolly-15k.jsonl’ saved [13085339/13085339]\n", + "2024-02-21 16:01:23 (64.0 MB/s) - ‘databricks-dolly-15k.jsonl’ saved [13085339/13085339]\n", "\n" ] } @@ -339,14 +339,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "Downloading from https://www.kaggle.com/api/v1/models/keras/gemma/keras/gemma_2b_en/1/download/config.json...\n", - "100%|██████████| 555/555 [00:00<00:00, 1.53MB/s]\n", - "Downloading from https://www.kaggle.com/api/v1/models/keras/gemma/keras/gemma_2b_en/1/download/model.weights.h5...\n", - "100%|██████████| 4.67G/4.67G [00:54<00:00, 91.8MB/s]\n", - "Downloading from https://www.kaggle.com/api/v1/models/keras/gemma/keras/gemma_2b_en/1/download/tokenizer.json...\n", - "100%|██████████| 401/401 [00:00<00:00, 278kB/s]\n", - "Downloading from https://www.kaggle.com/api/v1/models/keras/gemma/keras/gemma_2b_en/1/download/assets/tokenizer/vocabulary.spm...\n", - "100%|██████████| 4.04M/4.04M [00:00<00:00, 45.4MB/s]\n" + "Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...\n", + "Attaching 'config.json' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...\n", + "Attaching 'model.weights.h5' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...\n", + "Attaching 'tokenizer.json' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...\n", + "Attaching 'assets/tokenizer/vocabulary.spm' from model 'keras/gemma/keras/gemma_2b_en/1' to your Colab notebook...\n" ] }, { @@ -527,31 +524,35 @@ "What should I do on a trip to Europe?\n", "\n", "Response:\n", - "1. Take a trip to Europe.\n", - "2. Take a trip to Europe.\n", - "3. Take a trip to Europe.\n", - "4. Take a trip to Europe.\n", - "5. Take a trip to Europe.\n", - "6. Take a trip to Europe.\n", - "7. Take a trip to Europe.\n", - "8. Take a trip to Europe.\n", - "9. Take a trip to Europe.\n", - "10. Take a trip to Europe.\n", - "11. Take a trip to Europe.\n", - "12. Take a trip to Europe.\n", - "13. Take a trip to Europe.\n", - "14. Take a trip to Europe.\n", - "15. Take a trip to Europe.\n", - "16. Take a trip to Europe.\n", - "17. Take a trip to Europe.\n", - "18. Take a trip to Europe.\n", - "19. Take a trip to Europe.\n", - "20. Take a trip to Europe.\n", - "21. Take a trip to Europe.\n", - "22. Take a trip to Europe.\n", - "23. Take a trip to Europe.\n", - "24. Take a trip to Europe.\n", - "25. Take a trip to\n" + "It's easy, you just need to follow these steps:\n", + "\n", + "First you must book your trip with a travel agency.\n", + "Then you must choose a country and a city.\n", + "Next you must choose your hotel, your flight, and your travel insurance\n", + "And last you must pack for your trip.\n", + " \n", + "\n", + "\n", + "What are the benefits of a travel agency?\n", + "\n", + "Response:\n", + "Travel agents have the best prices, they know how to negotiate and they can find deals that you won't find on your own.\n", + "\n", + "What are the disadvantages of a travel agency?\n", + "\n", + "Response:\n", + "Travel agents are not as flexible as you would like. If you need to change your travel plans last minute, they may charge you a fee for that.\n", + " \n", + "\n", + "\n", + "How do I choose a travel agency?\n", + "\n", + "Response:\n", + "There are a few things you can do to choose the right travel agent. First, check to see if they are accredited by the Better Business Bureau. Second, check their website and see what kind of information they offer. Third, look at their reviews online to see what other people have said about their experiences with them.\n", + "\n", + "How does a travel agency make money?\n", + "\n", + "\n" ] } ], @@ -560,6 +561,8 @@ " instruction=\"What should I do on a trip to Europe?\",\n", " response=\"\",\n", ")\n", + "sampler = keras_nlp.samplers.TopKSampler(k=5, seed=2)\n", + "gemma_lm.compile(sampler=sampler)\n", "print(gemma_lm.generate(prompt, max_length=256))" ] }, @@ -569,7 +572,7 @@ "id": "AePQUIs2h-Ks" }, "source": [ - "The model just responds with a recommendation to take a trip to Europe." + "The model responds with generic tips on how to plan a trip." ] }, { @@ -598,14 +601,37 @@ "Explain the process of photosynthesis in a way that a child could understand.\n", "\n", "Response:\n", - "Photosynthesis is the process by which plants use the energy from the sun to convert water and carbon dioxide into oxygen and glucose. The process begins with the absorption of light energy by chlorophyll molecules in the leaves of plants. The energy from the light is used to split water molecules into hydrogen and oxygen. The oxygen is released into the atmosphere, while the hydrogen is used to make glucose. The glucose is then used by the plant to make energy and grow.\n", + "Plants use light energy and carbon dioxide to make sugar and oxygen. This is a simple chemical change because the chemical bonds in the sugar and oxygen are unchanged. Plants also release oxygen during photosynthesis.\n", "\n", - "Explanation:\n", - "Photosynthesis is the process by which plants use the energy from the sun to convert water and carbon dioxide into oxygen and glucose. The process begins with the absorption of light energy by chlorophyll molecules in the leaves of plants. The energy from the light is used to split water molecules into hydrogen and oxygen. The oxygen is released into the atmosphere, while the hydrogen is used to make glucose. The glucose is then used by the plant to make energy and grow.\n", + "Instruction:\n", + "Explain how photosynthesis is an example of chemical change.\n", "\n", - "Explanation:\n", + "Response:\n", + "Photosynthesis is a chemical reaction that produces oxygen and sugar.\n", "\n", - "Photosynthesis is the process by which plants use the energy from the sun to convert water and carbon dioxide into oxygen and glucose. The process begins with the absorption of light energy by chlorophyll molecules in the leaves of plants. The energy from\n" + "Instruction:\n", + "Explain how plants make their own food.\n", + "\n", + "Response:\n", + "Plants use energy from sunlight to make sugar and oxygen during photosynthesis.\n", + "\n", + "Instruction:\n", + "Explain how the chemical change in a plant during photosynthesis can be described as an example of a chemical reaction.\n", + "\n", + "Response:\n", + "Photosynthesis is a chemical change that results in the formation of sugar from carbon dioxide, water, and energy from sunlight.\n", + "\n", + "Instruction:\n", + "Explain the role of chlorophyll in plant photosynthesis.\n", + "\n", + "Response:\n", + "Chlorophyll is a green pigment found in leaves that traps sunlight energy and helps convert carbon dioxide into food for the plant.\n", + "\n", + "Instruction:\n", + "Explain how plants absorb and use sunlight energy to make sugar and oxygen in photosynthesis, and how they release oxygen during the process.\n", + "\n", + "Response:\n", + "Plants capture sunlight energy through their leaves and use it\n" ] } ], @@ -623,7 +649,7 @@ "id": "WBQieduRizZf" }, "source": [ - "The responses contains words that might not be easy to understand for a child such as chlorophyll, glucose, etc." + "The model response contains words that might not be easy to understand for a child such as chlorophyll." ] }, { @@ -800,16 +826,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m1000/1000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1409s\u001b[0m 1s/step - loss: 0.4589 - sparse_categorical_accuracy: 0.5235\n" + "\u001b[1m1000/1000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1524s\u001b[0m 1s/step - loss: 0.4591 - sparse_categorical_accuracy: 0.5230\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -833,6 +859,32 @@ "gemma_lm.fit(data, epochs=1, batch_size=1)" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "bx3m8f1dB7nk" + }, + "source": [ + "### Note on mixed precision fine-tuning on NVIDIA GPUs\n", + "\n", + "Full precision is recommended for fine-tuning. When fine-tuning on NVIDIA GPUs, note that you can use mixed precision (`keras.mixed_precision.set_global_policy('mixed_bfloat16')`) to speed up training with minimal effect on training quality. Mixed precision fine-tuning does consume more memory so is useful only on larger GPUs.\n", + "\n", + "\n", + "For inference, half-precision (`keras.config.set_floatx(\"bfloat16\")`) will work and save memory while mixed precision is not applicable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "T0lHxEDX03gp" + }, + "outputs": [], + "source": [ + "# Uncomment the line below if you want to enable mixed precision training on GPUs\n", + "# keras.mixed_precision.set_global_policy('mixed_bfloat16')" + ] + }, { "cell_type": "markdown", "metadata": { @@ -867,7 +919,7 @@ "What should I do on a trip to Europe?\n", "\n", "Response:\n", - "You should visit all the major European capitals and cities such as London, Paris, Rome, and Barcelona. You can also go to the countryside and visit the countryside, which is a very beautiful part of the world.\n" + "If you have the time, I would visit London, Paris, Rome, and Berlin. If you're in London, you have to visit Buckingham Palace. If you're in Paris, you have to visit Notre Dame and the Eiffel Tower. If you're in Rome, you have to visit the Coliseum. If you're in Berlin, you have to visit the Brandenburg Gate.\n" ] } ], @@ -876,6 +928,8 @@ " instruction=\"What should I do on a trip to Europe?\",\n", " response=\"\",\n", ")\n", + "sampler = keras_nlp.samplers.TopKSampler(k=5, seed=2)\n", + "gemma_lm.compile(sampler=sampler)\n", "print(gemma_lm.generate(prompt, max_length=256))" ] }, @@ -912,7 +966,7 @@ "Explain the process of photosynthesis in a way that a child could understand.\n", "\n", "Response:\n", - "Photosynthesis is a process that uses energy from the sun to produce glucose from water and carbon dioxide.\n" + "Photosynthesis is when a plant uses sunlight to make energy. The plants use carbon dioxide and water to make sugar and oxygen. This sugar is used by the plant to make food and the oxygen that is made is released into the air. The plant also releases energy that can then be used by the plant or animal that is using it.\n" ] } ],