diff --git a/src/ol_openedx_ai_static_translations/CHANGELOG.rst b/src/ol_openedx_ai_static_translations/CHANGELOG.rst new file mode 100644 index 000000000..2e194af77 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/CHANGELOG.rst @@ -0,0 +1,11 @@ +Change Log +---------- + +.. + All enhancements and patches to ol_openedx_ai_static_translations will be documented + in this file. It adheres to the structure of https://keepachangelog.com/ , + but in reStructuredText instead of Markdown (for ease of incorporation into + Sphinx documentation and the PyPI description). + + This project adheres to Semantic Versioning (https://semver.org/). +.. There should always be an "Unreleased" section for changes pending release. diff --git a/src/ol_openedx_ai_static_translations/LICENSE.txt b/src/ol_openedx_ai_static_translations/LICENSE.txt new file mode 100644 index 000000000..83284fb7e --- /dev/null +++ b/src/ol_openedx_ai_static_translations/LICENSE.txt @@ -0,0 +1,28 @@ +Copyright (C) 2022 MIT Open Learning + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/ol_openedx_ai_static_translations/README.rst b/src/ol_openedx_ai_static_translations/README.rst new file mode 100644 index 000000000..fcfbb56fa --- /dev/null +++ b/src/ol_openedx_ai_static_translations/README.rst @@ -0,0 +1,98 @@ +OL Open edX AI Static Translations +==================================== + +An Open edX plugin that provides AI-powered static translation management. It syncs translation keys, translates them using LLM providers, and creates pull requests with translated content. + +Purpose +******* + +This plugin provides the ``sync_and_translate_language`` management command for syncing and translating Open edX static strings (frontend JSON and backend PO files) using LLM providers (OpenAI, Gemini, Mistral) with optional glossary support. + +Setup +===== + +For detailed installation instructions, please refer to the `plugin installation guide <../../docs#installation-guide>`_. + +Installation required in: + +* Studio (CMS) + +Configuration +============= + +This plugin shares settings with ``ol_openedx_course_translations``. Ensure the following settings are configured: + +.. code-block:: python + + TRANSLATIONS_PROVIDERS: { + "default_provider": "mistral", + "openai": {"api_key": "", "default_model": "gpt-5.2"}, + "gemini": {"api_key": "", "default_model": "gemini-3-pro-preview"}, + "mistral": {"api_key": "", "default_model": "mistral-large-latest"}, + } + TRANSLATIONS_GITHUB_TOKEN: # Personal access token with repo write permissions for creating PRs + TRANSLATIONS_REPO_PATH: "" # Local filesystem path where the translations repo will be cloned/checked out + TRANSLATIONS_REPO_URL: "https://github.com/mitodl/mitxonline-translations.git" # URL of the remote translations repository + +Generating static content translations +====================================== + +This command synchronizes translation keys from edx-platform and MFE's, translates empty keys using LLM, and automatically creates a pull request in the translations repository. + +**What it does:** + +1. Syncs translation keys from edx-platform and MFE's to the translations repository +2. Extracts empty translation keys that need translation +3. Translates empty keys using the specified LLM provider and model +4. Applies translations to JSON and PO files +5. Commits changes to a new branch +6. Creates a pull request with translation statistics + +**Usage:** + +1. Go to the CMS shell +2. Run the management command: + + .. code-block:: bash + + ./manage.py cms sync_and_translate_language [OPTIONS] + +**Required arguments:** + +- ``LANGUAGE_CODE``: Language code (e.g., ``el``, ``fr``, ``es_ES``) + +**Optional arguments:** + +- ``--iso-code``: ISO code for JSON files (default: same as language code) +- ``--provider``: Translation provider (``openai``, ``gemini``, ``mistral``). Default is taken from ``TRANSLATIONS_PROVIDERS['default_provider']`` setting +- ``--model``: LLM model name. If not specified, uses the ``default_model`` for the selected provider from ``TRANSLATIONS_PROVIDERS``. Examples: ``gpt-5.2``, ``gemini-3-pro-preview``, ``mistral-large-latest`` +- ``--repo-path``: Path to mitxonline-translations repository (can also be set via ``TRANSLATIONS_REPO_PATH`` setting or environment variable) +- ``--repo-url``: GitHub repository URL (default: ``https://github.com/mitodl/mitxonline-translations.git``, can also be set via ``TRANSLATIONS_REPO_URL`` setting or environment variable) +- ``--glossary``: Path to glossary directory (optional). Should contain language-specific files (e.g. ``{iso_code}.txt``). +- ``--batch-size``: Number of keys to translate per API request (default: 200, recommended: 200-300 for most models) +- ``--mfe``: Filter by specific MFE(s). Use ``edx-platform`` for backend translations +- ``--dry-run``: Run without committing or creating PR + +**Examples:** + + .. code-block:: bash + + # Use default provider (from TRANSLATIONS_PROVIDERS['default_provider']) with its default model + ./manage.py cms sync_and_translate_language el + + # Use OpenAI provider with its default model (gpt-5.2) + ./manage.py cms sync_and_translate_language el --provider openai + + # Use OpenAI provider with a specific model + ./manage.py cms sync_and_translate_language el --provider openai --model gpt-5.2 + + # Use Mistral provider with a specific model and glossary + ./manage.py cms sync_and_translate_language el --provider mistral --model mistral-large-latest --glossary /path/to/glossary --batch-size 250 + +License +******* + +The code in this repository is licensed under the BSD 3-Clause license unless +otherwise noted. + +Please see `LICENSE.txt `_ for details. diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/__init__.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/__init__.py new file mode 100644 index 000000000..13e6bccff --- /dev/null +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/__init__.py @@ -0,0 +1,3 @@ +""" +MIT's Open edX AI static translations plugin +""" diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/apps.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/apps.py new file mode 100644 index 000000000..e9757453b --- /dev/null +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/apps.py @@ -0,0 +1,24 @@ +""" +ol_openedx_ai_static_translations Django application initialization. +""" + +from django.apps import AppConfig +from edx_django_utils.plugins import PluginSettings +from openedx.core.djangoapps.plugins.constants import ProjectType, SettingsType + + +class OLOpenedXAIStaticTranslationsConfig(AppConfig): + """ + Configuration for the ol_openedx_ai_static_translations Django application. + """ + + name = "ol_openedx_ai_static_translations" + verbose_name = "OL AI Static Translations" + + plugin_app = { + PluginSettings.CONFIG: { + ProjectType.CMS: { + SettingsType.COMMON: {PluginSettings.RELATIVE_PATH: "settings.cms"}, + }, + }, + } diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/constants.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/constants.py new file mode 100644 index 000000000..c2f57f9e0 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/constants.py @@ -0,0 +1,235 @@ +"""Constants for AI static translation synchronization.""" + +# LLM Provider names +PROVIDER_DEEPL = "deepl" +PROVIDER_GEMINI = "gemini" +PROVIDER_MISTRAL = "mistral" +PROVIDER_OPENAI = "openai" + +# Learner-facing frontend applications that require translation +LEARNER_FACING_APPS = [ + "frontend-app-learning", + "frontend-app-learner-dashboard", + "frontend-app-learner-record", + "frontend-app-account", + "frontend-app-profile", + "frontend-app-authn", + "frontend-app-catalog", + "frontend-app-discussions", + "frontend-component-header", + "frontend-component-footer", + "frontend-app-ora", + "frontend-platform", +] + +# Plural forms configuration for different languages +# Based on GNU gettext plural forms specification +# See: https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html +PLURAL_FORMS = { + # Languages with no plural forms (nplurals=1) + "ja": "nplurals=1; plural=0;", # Japanese + "ko": "nplurals=1; plural=0;", # Korean + "zh": "nplurals=1; plural=0;", # Chinese (all variants) + "th": "nplurals=1; plural=0;", # Thai + "vi": "nplurals=1; plural=0;", # Vietnamese + "id": "nplurals=1; plural=0;", # Indonesian + "ms": "nplurals=1; plural=0;", # Malay + "km": "nplurals=1; plural=0;", # Khmer + "bo": "nplurals=1; plural=0;", # Tibetan + # Languages with 2 plural forms: plural=(n != 1) + "en": "nplurals=2; plural=(n != 1);", # English + "es": "nplurals=2; plural=(n != 1);", # Spanish (all variants) + "de": "nplurals=2; plural=(n != 1);", # German + "el": "nplurals=2; plural=(n != 1);", # Greek + "it": "nplurals=2; plural=(n != 1);", # Italian + "pt": "nplurals=2; plural=(n != 1);", # Portuguese (all variants) + "nl": "nplurals=2; plural=(n != 1);", # Dutch + "sv": "nplurals=2; plural=(n != 1);", # Swedish + "da": "nplurals=2; plural=(n != 1);", # Danish + "no": "nplurals=2; plural=(n != 1);", # Norwegian + "nb": "nplurals=2; plural=(n != 1);", # Norwegian Bokmål + "nn": "nplurals=2; plural=(n != 1);", # Norwegian Nynorsk + "fi": "nplurals=2; plural=(n != 1);", # Finnish + "is": "nplurals=2; plural=(n != 1);", # Icelandic + "et": "nplurals=2; plural=(n != 1);", # Estonian + "lv": "nplurals=2; plural=(n != 1);", # Latvian + "he": "nplurals=2; plural=(n != 1);", # Hebrew + "hi": "nplurals=2; plural=(n != 1);", # Hindi + "bn": "nplurals=2; plural=(n != 1);", # Bengali + "gu": "nplurals=2; plural=(n != 1);", # Gujarati + "kn": "nplurals=2; plural=(n != 1);", # Kannada + "ml": "nplurals=2; plural=(n != 1);", # Malayalam + "ta": "nplurals=2; plural=(n != 1);", # Tamil + "te": "nplurals=2; plural=(n != 1);", # Telugu + "or": "nplurals=2; plural=(n != 1);", # Oriya + "si": "nplurals=2; plural=(n != 1);", # Sinhala + "ne": "nplurals=2; plural=(n != 1);", # Nepali + "mr": "nplurals=2; plural=(n != 1);", # Marathi + "ur": "nplurals=2; plural=(n != 1);", # Urdu + "az": "nplurals=2; plural=(n != 1);", # Azerbaijani + "uz": "nplurals=2; plural=(n != 1);", # Uzbek + "kk": "nplurals=2; plural=(n != 1);", # Kazakh + "mn": "nplurals=2; plural=(n != 1);", # Mongolian + "sq": "nplurals=2; plural=(n != 1);", # Albanian + "eu": "nplurals=2; plural=(n != 1);", # Basque + "ca": "nplurals=2; plural=(n != 1);", # Catalan + "gl": "nplurals=2; plural=(n != 1);", # Galician + "tr": "nplurals=2; plural=(n != 1);", # Turkish + "af": "nplurals=2; plural=(n != 1);", # Afrikaans + "fil": "nplurals=2; plural=(n != 1);", # Filipino + # Languages with 2 plural forms: plural=(n > 1) + "fr": "nplurals=2; plural=(n > 1);", # French + "br": "nplurals=2; plural=(n > 1);", # Breton + # Languages with 3 plural forms + "pl": ( + "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Polish + "ru": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Russian + "uk": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Ukrainian + "be": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Belarusian + "sr": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Serbian + "hr": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Croatian + "bs": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Bosnian + "cs": "nplurals=3; plural=(n==1 ? 0 : (n>=2 && n<=4) ? 1 : 2);", # Czech + "sk": "nplurals=3; plural=(n==1 ? 0 : (n>=2 && n<=4) ? 1 : 2);", # Slovak + "lt": ( + "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " + "(n%100<10 || n%100>=20) ? 1 : 2);" + ), # Lithuanian + "hy": "nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);", # Armenian + "ro": ( + "nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);" + ), # Romanian + # Languages with 4 plural forms + "cy": ( + "nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : (n==8 || n==11) ? 2 : 3);" + ), # Welsh + "ga": "nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 : 3);", # Irish + "gd": ( + "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " + "(n>2 && n<20) ? 2 : 3);" + ), # Scottish Gaelic + "mt": ( + "nplurals=4; plural=(n==1 ? 0 : n==0 || (n%100>=2 && n%100<=10) ? 1 : " + "(n%100>=11 && n%100<=19) ? 2 : 3);" + ), # Maltese + # Languages with 6 plural forms + "ar": ( + "nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && " + "n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);" + ), # Arabic + # Other languages + "fa": "nplurals=2; plural=(n==0 || n==1 ? 0 : 1);", # Persian/Farsi + "hu": "nplurals=2; plural=(n != 1);", # Hungarian + "bg": "nplurals=2; plural=(n != 1);", # Bulgarian + "am": "nplurals=2; plural=(n > 1);", # Amharic +} + +# Default plural form fallback (English-style) +# Used when a language code is not found in PLURAL_FORMS +DEFAULT_PLURAL_FORM = "nplurals=2; plural=(n != 1);" + +# Typo patterns to fix in translation files +TYPO_PATTERNS = [ + ("Serch", "Search"), +] + +# Backend PO file names +BACKEND_PO_FILES = ["django.po", "djangojs.po"] + +# Backend plugin apps: (repo_dir, module_name) under translations/. +# Used by sync_and_translate_language to sync/translate at +# translations///conf/locale//LC_MESSAGES/django.po. +# When pulled in edx-platform (make pull_translations), these go to +# conf/plugins-locale/plugins//. +TRANSLATABLE_PLUGINS = [ + ("open-edx-plugins", "ol_openedx_chat"), +] + +# PO file header metadata +PO_HEADER_PROJECT_VERSION = "0.1a" +PO_HEADER_BUGS_EMAIL = "openedx-translation@googlegroups.com" +PO_HEADER_POT_CREATION_DATE = "2023-06-13 08:00+0000" +PO_HEADER_MIME_VERSION = "1.0" +PO_HEADER_CONTENT_TYPE = "text/plain; charset=UTF-8" +PO_HEADER_CONTENT_TRANSFER_ENCODING = "8bit" +PO_HEADER_TRANSIFEX_TEAM_BASE_URL = "https://app.transifex.com/open-edx/teams/6205" + +# File and directory names +TRANSLATION_FILE_NAMES = { + "transifex_input": "transifex_input.json", + "english": "en.json", + "messages_dir": "messages", + "i18n_dir": "i18n", + "locale_dir": "locale", + "lc_messages": "LC_MESSAGES", + "conf_dir": "conf", + "edx_platform": "edx-platform", +} + +# JSON file formatting +DEFAULT_JSON_INDENT = 2 + +# Language code to human-readable name mapping +# Used in PO file headers for Language-Team field +LANGUAGE_MAPPING = { + "ar": "Arabic", + "de": "German", + "el": "Greek", + "es": "Spanish", + "fr": "French", + "hi": "Hindi", + "id": "Indonesian", + "ja": "Japanese", + "kr": "Korean", + "pt": "Portuguese", + "ru": "Russian", + "sq": "Albanian", + "tr": "Turkish", + "zh": "Chinese", +} + +# Maximum number of retries for failed translation batches +MAX_RETRIES = 3 + +# Glossary parsing constants +EXPECTED_GLOSSARY_PARTS = 2 # English term and translation separated by "->" + +# HTTP Status Codes +HTTP_OK = 200 +HTTP_CREATED = 201 +HTTP_NOT_FOUND = 404 +HTTP_TOO_MANY_REQUESTS = 429 +HTTP_UNPROCESSABLE_ENTITY = 422 + +# Error message length limit +MAX_ERROR_MESSAGE_LENGTH = 200 + +# Maximum length for strings in log messages (truncate with "...") +MAX_LOG_STRING_LENGTH = 50 +MAX_LOG_ICU_STRING_LENGTH = 100 + +# Plural category counts (GNU gettext nplurals) +PLURAL_CATEGORIES_ARABIC = 6 # zero, one, two, few, many, other +PLURAL_CATEGORIES_FOUR = 4 # one, two, few, other +PLURAL_CATEGORIES_THREE = 3 # one, few, other +PLURAL_CATEGORIES_TWO = 2 # one, other (most languages) diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/__init__.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/commands/__init__.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/management/commands/sync_and_translate_language.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/commands/sync_and_translate_language.py similarity index 99% rename from src/ol_openedx_course_translations/ol_openedx_course_translations/management/commands/sync_and_translate_language.py rename to src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/commands/sync_and_translate_language.py index a69e25437..3f45fa91b 100644 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/management/commands/sync_and_translate_language.py +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/management/commands/sync_and_translate_language.py @@ -27,19 +27,7 @@ from django.core.management.base import BaseCommand, CommandError from litellm import completion -from ol_openedx_course_translations.utils.command_utils import ( - configure_litellm_for_provider, - create_branch_name, - get_config_value, - get_default_model_for_provider, - get_default_provider, - is_retryable_error, - normalize_language_code, - sanitize_for_git, - validate_branch_name, - validate_language_code, -) -from ol_openedx_course_translations.utils.constants import ( +from ol_openedx_ai_static_translations.constants import ( HTTP_CREATED, HTTP_NOT_FOUND, HTTP_OK, @@ -58,18 +46,28 @@ PROVIDER_GEMINI, PROVIDER_MISTRAL, ) -from ol_openedx_course_translations.utils.translation_sync import ( +from ol_openedx_ai_static_translations.utils import ( _get_base_lang, _get_numeric_plural_keys, _get_po_plural_count, apply_json_translations, apply_po_translations, + configure_litellm_for_provider, + create_branch_name, extract_empty_keys, + get_config_value, + get_default_model_for_provider, + get_default_provider, get_nplurals_from_po_file, + is_retryable_error, load_glossary, match_glossary_term, + normalize_language_code, plural_source_has_placeholders_not_in_singular, + sanitize_for_git, sync_all_translations, + validate_branch_name, + validate_language_code, ) logger = logging.getLogger(__name__) diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/__init__.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/__init__.py new file mode 100644 index 000000000..7ae9a6665 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/__init__.py @@ -0,0 +1 @@ +"""Settings package for ol_openedx_ai_static_translations.""" diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/cms.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/cms.py new file mode 100644 index 000000000..13bba5601 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/cms.py @@ -0,0 +1,10 @@ +"""Settings to provide to edX""" + +from ol_openedx_ai_static_translations.settings.common import apply_common_settings + + +def plugin_settings(settings): + """ + Populate cms settings + """ + apply_common_settings(settings) diff --git a/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/common.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/common.py new file mode 100644 index 000000000..3527c42e7 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/settings/common.py @@ -0,0 +1,40 @@ +"""Common settings for AI Static Translations plugin.""" + + +def apply_common_settings(settings): + """ + Apply custom settings for the AI Static Translations plugin. + + These settings are shared with ol_openedx_course_translations. + If that plugin is also installed, its settings take precedence + since both plugins configure the same keys. + """ + if not hasattr(settings, "TRANSLATIONS_PROVIDERS"): + settings.TRANSLATIONS_PROVIDERS = { + "default_provider": "mistral", + "deepl": { + "api_key": "", + }, + "openai": { + "api_key": "", + "default_model": "gpt-5.2", + }, + "gemini": { + "api_key": "", + "default_model": "gemini-3-pro-preview", + }, + "mistral": { + "api_key": "", + "default_model": "mistral-large-latest", + }, + } + if not hasattr(settings, "TRANSLATIONS_GITHUB_TOKEN"): + settings.TRANSLATIONS_GITHUB_TOKEN = "" + if not hasattr(settings, "TRANSLATIONS_REPO_URL"): + settings.TRANSLATIONS_REPO_URL = ( + "https://github.com/mitodl/mitxonline-translations.git" + ) + if not hasattr(settings, "TRANSLATIONS_REPO_PATH"): + settings.TRANSLATIONS_REPO_PATH = "" + if not hasattr(settings, "LITE_LLM_REQUEST_TIMEOUT"): + settings.LITE_LLM_REQUEST_TIMEOUT = 300 # seconds diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/translation_sync.py b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/utils.py similarity index 85% rename from src/ol_openedx_course_translations/ol_openedx_course_translations/utils/translation_sync.py rename to src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/utils.py index 2b6933013..27e89e1b0 100644 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/translation_sync.py +++ b/src/ol_openedx_ai_static_translations/ol_openedx_ai_static_translations/utils.py @@ -1,16 +1,20 @@ -"""Translation synchronization module for syncing and managing translation files.""" +"""Utility functions for AI static translation management commands.""" import json import logging +import os import re from collections import OrderedDict from collections.abc import Iterator +from datetime import UTC, datetime from pathlib import Path from typing import Any import polib # type: ignore[import-untyped] +from django.conf import settings +from django.core.management.base import CommandError -from ol_openedx_course_translations.utils.constants import ( +from ol_openedx_ai_static_translations.constants import ( BACKEND_PO_FILES, DEFAULT_JSON_INDENT, DEFAULT_PLURAL_FORM, @@ -26,6 +30,8 @@ PO_HEADER_POT_CREATION_DATE, PO_HEADER_PROJECT_VERSION, PO_HEADER_TRANSIFEX_TEAM_BASE_URL, + PROVIDER_GEMINI, + PROVIDER_MISTRAL, TRANSLATABLE_PLUGINS, TRANSLATION_FILE_NAMES, TYPO_PATTERNS, @@ -33,6 +39,236 @@ logger = logging.getLogger(__name__) +# ============================================================================ +# Validation Utilities +# ============================================================================ + +# Language code suffix length constants +REGION_CODE_LENGTH = 2 # 2-letter region codes (e.g., ES, BR) +SCRIPT_TAG_LENGTH = 4 # 4-letter script tags (e.g., Hans, Hant) + + +def normalize_language_code(code: str) -> str: + """Normalize language code to use underscores (Django/gettext format). + + Converts BCP 47 format (hyphens) to gettext format (underscores) and + normalizes case: language part lowercase, suffix properly cased. + Examples: + - 'es-419' -> 'es_419' + - 'ES-419' -> 'es_419' + - 'es-ES' -> 'es_ES' + - 'ES_ES' -> 'es_ES' + - 'zh-Hans' -> 'zh_Hans' + - 'ZH-HANS' -> 'zh_Hans' + - 'es_419' -> 'es_419' (unchanged) + - 'es' -> 'es' (unchanged) + """ + # Replace hyphens with underscores and split + parts = code.replace("-", "_").split("_", 1) + lang_part = parts[0].lower() # Language: always lowercase + + if len(parts) == 1: + return lang_part + + # Normalize suffix: uppercase 2-char regions, title case 4-char scripts + suffix = parts[1] + if len(suffix) == REGION_CODE_LENGTH: + suffix = suffix.upper() # Region codes: ES, BR, etc. + elif len(suffix) == SCRIPT_TAG_LENGTH and suffix[0].isalpha(): + suffix = suffix.title() # Script tags: Hans, Hant, etc. + # Numeric regions (419) and others stay as-is + + return f"{lang_part}_{suffix}" + + +def validate_language_code(code: str, field_name: str = "language code") -> None: + """Validate language code format. + + Accepts normalized codes (already normalized by normalize_language_code): + - xx (2 lowercase letters): e.g., 'el', 'es', 'ar' + - xx_XX (with 2-letter region): e.g., 'es_ES' + - xx_NNN (with UN M.49 numeric region): e.g., 'es_419' + - xx_Xxxx (with script subtag): e.g., 'zh_Hans' + """ + # Pattern: xx, xx_XX, xx_419, xx_Hans + pattern = r"^[a-z]{2}(_([A-Z]{2}|[0-9]{3}|[A-Z][a-z]{3}))?$" + if not re.match(pattern, code): + msg = ( + f"Invalid {field_name} format: {code}. " + f"Expected format: 'xx', 'xx_XX', 'xx_419', 'xx_Hans' " + f"(e.g., 'el', 'es_ES', 'es_419', 'zh_Hans')" + ) + raise CommandError(msg) + + +def validate_branch_name(branch_name: str) -> None: + """Validate branch name format to prevent injection.""" + if not re.match(r"^[a-z0-9/_-]+$", branch_name): + msg = f"Invalid branch name format: {branch_name}" + raise CommandError(msg) + + +# ============================================================================ +# Git Utilities +# ============================================================================ + + +def sanitize_for_git(text: str) -> str: + """Sanitize text for use in git operations.""" + return re.sub(r"[^\w\s-]", "", text) + + +def create_branch_name(lang_code: str) -> str: + """Create a safe branch name from language code.""" + safe_lang = re.sub(r"[^a-z0-9_-]", "", lang_code.lower()) + timestamp = datetime.now(tz=UTC).strftime("%Y%m%d-%H%M%S") + return f"feature/add-{safe_lang}-translations-{timestamp}" + + +# ============================================================================ +# Configuration Helpers +# ============================================================================ + + +def get_config_value(key: str, options: dict, default: Any = None) -> Any: + """Get configuration value from options, settings, or environment.""" + # Check command-line options first (Django converts --repo-path to repo_path) + option_value = options.get(key) or options.get(key.replace("_", "-")) + if option_value: + return option_value + + # Check settings with TRANSLATIONS_ prefix + setting_key = f"TRANSLATIONS_{key.upper().replace('-', '_')}" + if hasattr(settings, setting_key): + setting_value = getattr(settings, setting_key) + # Only use setting if it's not empty + if setting_value: + return setting_value + + # Check environment variable with TRANSLATIONS_ prefix + env_key = setting_key + env_value = os.environ.get(env_key) + if env_value: + return env_value + + # Return default if nothing found + return default + + +def get_default_provider() -> str | None: + """Get default provider from TRANSLATIONS_PROVIDERS.""" + providers = getattr(settings, "TRANSLATIONS_PROVIDERS", {}) + if not isinstance(providers, dict): + return None + return providers.get("default_provider") + + +def get_default_model_for_provider(provider: str) -> str | None: + """Get default model for a provider from TRANSLATIONS_PROVIDERS.""" + providers = getattr(settings, "TRANSLATIONS_PROVIDERS", {}) + if not isinstance(providers, dict): + return None + provider_config = providers.get(provider, {}) + if not isinstance(provider_config, dict): + return None + return provider_config.get("default_model") + + +def configure_litellm_for_provider( + provider: str, model: str, api_key: str | None, **base_kwargs +) -> dict[str, Any]: + """Configure LiteLLM completion kwargs for a specific provider.""" + completion_kwargs = dict(base_kwargs) + completion_kwargs["model"] = model + + if api_key: + completion_kwargs["api_key"] = api_key + if provider == PROVIDER_GEMINI: + # If no prefix, add gemini/ to force Gemini API usage (not Vertex AI) + # If vertex_ai/ or gemini/ prefix already exists, respect it + if not model.startswith(("gemini/", "vertex_ai/")): + completion_kwargs["model"] = f"gemini/{model}" + # Gemini 3 models require temperature = 1.0 to avoid issues: + # - Infinite loops in response generation + # - Degraded reasoning performance + # - Failure on complex tasks + # See: https://docs.litellm.ai/docs/providers/gemini + if "gemini-3" in model.lower(): + completion_kwargs["temperature"] = 1.0 + elif provider == PROVIDER_MISTRAL and not model.startswith("mistral/"): + completion_kwargs["model"] = f"mistral/{model}" + + return completion_kwargs + + +# ============================================================================ +# Error Handling Utilities +# ============================================================================ + + +def is_retryable_error(error: Exception) -> bool: + """ + Check if an error is retryable (network issues, rate limits, timeouts). + + Args: + error: The exception to check + + Returns: + True if the error is retryable, False otherwise + + Examples: + >>> is_retryable_error(ConnectionError("Connection timeout")) + True + >>> is_retryable_error(ValueError("Invalid API key")) + False + """ + error_str = str(error).lower() + + # Retryable errors + retryable_patterns = [ + "timeout", + "connection", + "rate limit", + "429", + "503", + "502", + "500", + "temporarily unavailable", + "service unavailable", + "too many requests", + ] + + # Non-retryable errors (don't retry these) + non_retryable_patterns = [ + "invalid api key", + "authentication", + "401", + "403", + "not found", + "404", + "bad request", + "400", + "commanderror", # Our custom errors that are usually non-retryable + ] + + # Check for non-retryable first + for pattern in non_retryable_patterns: + if pattern in error_str: + return False + + # Check for retryable patterns + for pattern in retryable_patterns: + if pattern in error_str: + return True + + # Default: retry unknown errors (could be transient) + return True + + +# ============================================================================ +# Translation File I/O +# ============================================================================ + def load_json_file(file_path: Path) -> dict: """Load a JSON translation file.""" @@ -139,6 +375,11 @@ def sync_or_create_json_file(en_file: Path, target_file: Path) -> dict: return stats +# ============================================================================ +# PO File Utilities +# ============================================================================ + + def _get_base_lang(lang_code: str) -> str: """Extract base language code from locale code (e.g., 'es_ES' -> 'es').""" return lang_code.split("_", maxsplit=1)[0] if "_" in lang_code else lang_code @@ -532,6 +773,11 @@ def sync_or_create_po_file( return stats +# ============================================================================ +# Translation Key Extraction +# ============================================================================ + + def _extract_empty_keys_from_frontend(base_dir: Path, iso_code: str) -> list[dict]: """Extract empty translation keys from frontend JSON files.""" logger.debug("Extracting empty keys from frontend apps for language: %s", iso_code) @@ -780,6 +1026,11 @@ def extract_empty_keys( return empty_keys +# ============================================================================ +# Translation Application +# ============================================================================ + + def apply_json_translations(file_path: Path, translations: dict[str, str]) -> int: """ Apply translations to a JSON file. @@ -940,6 +1191,11 @@ def match_glossary_term( return None +# ============================================================================ +# Translation Newline Normalization +# ============================================================================ + + def _normalize_translation_newlines(msgid: str, translation: str) -> str: """ Normalize translation to match msgid's newline structure EXACTLY. @@ -1039,6 +1295,11 @@ def _entry_has_brace_format(entry: polib.POEntry) -> bool: return bool(entry.flags and "python-brace-format" in entry.flags) +# ============================================================================ +# PO Translation Application Helpers +# ============================================================================ + + def _apply_numeric_plural_forms( entry: polib.POEntry, translation: dict[str, str], @@ -1484,6 +1745,11 @@ def apply_po_translations( return applied +# ============================================================================ +# Full Translation Sync +# ============================================================================ + + def _sync_frontend_translations(base_dir: Path, iso_code: str) -> dict[str, int]: """Sync frontend translation files. Returns stats.""" frontend_stats = {"added": 0, "fixed": 0, "removed": 0, "created": 0, "synced": 0} diff --git a/src/ol_openedx_ai_static_translations/pyproject.toml b/src/ol_openedx_ai_static_translations/pyproject.toml new file mode 100644 index 000000000..f502bcb05 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/pyproject.toml @@ -0,0 +1,38 @@ +[project] +name = "ol-openedx-ai-static-translations" +version = "0.1.0" +description = "An Open edX plugin for AI-powered static translation management" +authors = [ + {name = "MIT Office of Digital Learning"} +] +license = "BSD-3-Clause" +readme = "README.rst" +requires-python = ">=3.11" +keywords = ["Python", "edx"] +dependencies = [ + "Django>=4.0", + "GitPython>=3.1.40", + "litellm>=1.80.0", + "polib>=1.2.0", + "requests>=2.31.0", +] + +[project.entry-points."cms.djangoapp"] +ol_openedx_ai_static_translations = "ol_openedx_ai_static_translations.apps:OLOpenedXAIStaticTranslationsConfig" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["ol_openedx_ai_static_translations"] +include = [ + "ol_openedx_ai_static_translations/**/*.py", +] + +[tool.hatch.build.targets.sdist] +include = [ + "ol_openedx_ai_static_translations/**/*", + "README.rst", + "pyproject.toml", +] diff --git a/src/ol_openedx_ai_static_translations/setup.cfg b/src/ol_openedx_ai_static_translations/setup.cfg new file mode 100644 index 000000000..77a520e78 --- /dev/null +++ b/src/ol_openedx_ai_static_translations/setup.cfg @@ -0,0 +1,41 @@ +[isort] +include_trailing_comma = True +indent = ' ' +line_length = 120 +multi_line_output = 3 +skip= + migrations + +[wheel] +universal = 1 + +[tool:pytest] +pep8maxlinelength = 119 +DJANGO_SETTINGS_MODULE = lms.envs.test +addopts = --nomigrations --reuse-db --durations=20 +# Enable default handling for all warnings, including those that are ignored by default; +# but hide rate-limit warnings (because we deliberately don't throttle test user logins) +# and field_data deprecation warnings (because fixing them requires a major low-priority refactoring) +filterwarnings = + default + ignore::xblock.exceptions.FieldDataDeprecationWarning + ignore::pytest.PytestConfigWarning + ignore:No request passed to the backend, unable to rate-limit:UserWarning + ignore:Flags not at the start of the expression:DeprecationWarning + ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc':DeprecationWarning + ignore:invalid escape sequence:DeprecationWarning + ignore:`formatargspec` is deprecated since Python 3.5:DeprecationWarning + ignore:the imp module is deprecated in favour of importlib:DeprecationWarning + ignore:"is" with a literal:SyntaxWarning + ignore:defusedxml.lxml is no longer supported:DeprecationWarning + ignore: `np.int` is a deprecated alias for the builtin `int`.:DeprecationWarning + ignore: `np.float` is a deprecated alias for the builtin `float`.:DeprecationWarning + ignore: `np.complex` is a deprecated alias for the builtin `complex`.:DeprecationWarning + ignore: 'etree' is deprecated. Use 'xml.etree.ElementTree' instead.:DeprecationWarning + ignore: defusedxml.cElementTree is deprecated, import from defusedxml.ElementTree instead.:DeprecationWarning + + +junit_family = xunit2 +norecursedirs = .* *.egg build conf dist node_modules test_root cms/envs lms/envs +python_classes = +python_files = tests.py test_*.py tests_*.py *_tests.py __init__.py diff --git a/src/ol_openedx_course_translations/README.rst b/src/ol_openedx_course_translations/README.rst index 594c51b50..443513fde 100644 --- a/src/ol_openedx_course_translations/README.rst +++ b/src/ol_openedx_course_translations/README.rst @@ -48,9 +48,6 @@ Configuration "default_model": "mistral-large-latest", }, } - TRANSLATIONS_GITHUB_TOKEN: - TRANSLATIONS_REPO_PATH: "" - TRANSLATIONS_REPO_URL: "https://github.com/mitodl/mitxonline-translations.git" LITE_LLM_REQUEST_TIMEOUT: 300 # Timeout for LLM API requests in seconds - For Tutor installations, these values can also be managed through a `custom Tutor plugin `_. @@ -302,61 +299,6 @@ If subtitle translation fails after all attempts: - An error message will indicate which subtitle file caused the failure - No partial or corrupted translation files will be left behind -Generating static content translations -====================================== - -This command synchronizes translation keys from edx-platform and MFE's, translates empty keys using LLM, and automatically creates a pull request in the translations repository. - -**What it does:** - -1. Syncs translation keys from edx-platform and MFE's to the translations repository -2. Extracts empty translation keys that need translation -3. Translates empty keys using the specified LLM provider and model -4. Applies translations to JSON and PO files -5. Commits changes to a new branch -6. Creates a pull request with translation statistics - -**Usage:** - -1. Go to the CMS shell -2. Run the management command: - - .. code-block:: bash - - ./manage.py cms sync_and_translate_language [OPTIONS] - -**Required arguments:** - -- ``LANGUAGE_CODE``: Language code (e.g., ``el``, ``fr``, ``es_ES``) - -**Optional arguments:** - -- ``--iso-code``: ISO code for JSON files (default: same as language code) -- ``--provider``: Translation provider (``openai``, ``gemini``, ``mistral``). Default is taken from ``TRANSLATIONS_PROVIDERS['default_provider']`` setting -- ``--model``: LLM model name. If not specified, uses the ``default_model`` for the selected provider from ``TRANSLATIONS_PROVIDERS``. Examples: ``gpt-5.2``, ``gemini-3-pro-preview``, ``mistral-large-latest`` -- ``--repo-path``: Path to mitxonline-translations repository (can also be set via ``TRANSLATIONS_REPO_PATH`` setting or environment variable) -- ``--repo-url``: GitHub repository URL (default: ``https://github.com/mitodl/mitxonline-translations.git``, can also be set via ``TRANSLATIONS_REPO_URL`` setting or environment variable) -- ``--glossary``: Path to glossary directory (optional). Should contain language-specific files (e.g. ``{iso_code}.txt``). -- ``--batch-size``: Number of keys to translate per API request (default: 200, recommended: 200-300 for most models) -- ``--mfe``: Filter by specific MFE(s). Use ``edx-platform`` for backend translations -- ``--dry-run``: Run without committing or creating PR - -**Examples:** - - .. code-block:: bash - - # Use default provider (from TRANSLATIONS_PROVIDERS['default_provider']) with its default model - ./manage.py cms sync_and_translate_language el - - # Use OpenAI provider with its default model (gpt-5.2) - ./manage.py cms sync_and_translate_language el --provider openai - - # Use OpenAI provider with a specific model - ./manage.py cms sync_and_translate_language el --provider openai --model gpt-5.2 - - # Use Mistral provider with a specific model and glossary - ./manage.py cms sync_and_translate_language el --provider mistral --model mistral-large-latest --glossary /path/to/glossary --batch-size 250 - License ******* diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ar.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ar.txt deleted file mode 100644 index 246ddba39..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ar.txt +++ /dev/null @@ -1,175 +0,0 @@ -# AR HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> 'الدقة' -- 'activation function' -> 'دالّة التفعيل' -- 'artificial intelligence' -> 'الذكاء الاصطناعي' -- 'AUC' -> 'AUC' -- 'AUC (Area under the ROC curve)' -> 'المساحة تحت منحنى ROC' -- 'backpropagation' -> 'الانتشار العكسي' -- 'batch' -> 'دفعة' -- 'batch size' -> 'حجم الدفعة' -- 'bias (ethics/fairness)' -> 'التحيّز (الأخلاقيات/الإنصاف)' -- 'bias (math) or bias term' -> 'الانحياز (في الرياضيات) أو مصطلح الانحياز' -- 'bias in ethics and fairness' -> 'التحيز في الأخلاق والعدالة' -- 'bias term' -> 'مصطلح التحيز' -- 'binary classification' -> 'التصنيف الثنائي' -- 'bucketing' -> 'تصنيف البيانات' -- 'categorical' -> 'فئوية' -- 'categorical data' -> 'البيانات الفئوية' -- 'class' -> 'صنف' -- 'class-imbalanced dataset' -> 'مجموعة بيانات غير متوازنة الفئات' -- 'class-imbalanced datasets' -> 'مجموعات بيانات غير متوازنة الفئات' -- 'classification' -> 'التصنيف' -- 'classification model' -> 'نموذج التصنيف' -- 'classification threshold' -> 'عتبة التصنيف' -- 'classifier' -> 'مصنِّف' -- 'clipping' -> 'القص' -- 'confusion matrix' -> 'مصفوفة نجاح التوقعات' -- 'continuous feature' -> 'خاصية مستمرة' -- 'convergence' -> 'التقارب' -- 'data set or dataset' -> 'مجموعة البيانات' -- 'DataFrame' -> 'DataFrame' -- 'dataset' -> 'مجموعة بيانات' -- 'deep learning' -> 'التعلم العميق' -- 'deep model' -> 'نموذج عميق' -- 'dense feature' -> 'خاصية كثيفة' -- 'depth' -> 'العمق' -- 'discrete feature' -> 'خاصية محدّدة القيم' -- 'discrete features' -> 'الميزات المنفصلة' -- 'dynamic' -> 'ديناميكي' -- 'dynamic model' -> 'نموذج ديناميكي' -- 'early stopping' -> 'الإيقاف المبكر' -- 'embedding layer' -> 'طبقة التضمين' -- 'embedding layers' -> 'طبقات تضمين' -- 'epoch' -> 'حقبة' -- 'example' -> 'على سبيل المثال' -- 'false negative (FN)' -> 'سالب خاطئ (FN)' -- 'false negatives' -> 'الحالات السالبة الخاطئة' -- 'false positive (FP)' -> 'موجب خاطئ (FP)' -- 'false positive rate' -> 'معدّل الموجب الخاطئ' -- 'false positive rate (FPR)' -> 'معدّل الموجب الخاطئ' -- 'false positives' -> 'الحالات الموجبة الخاطئة' -- 'feature' -> 'ميزة' -- 'feature cross' -> 'مضروب مجموعات الخصائص' -- 'feature crosses' -> 'تقاطع الميزات' -- 'feature engineering' -> 'هندسة الميزات' -- 'feature set' -> 'مجموعة الميزات' -- 'feature vector' -> 'متّجه الميزات' -- 'feedback loop' -> 'حلقة الملاحظات' -- 'generalization' -> 'التعميم' -- 'generalization curve' -> 'منحنى التعميم' -- 'gradient descent' -> 'النزول المتدرّج' -- 'ground truth' -> 'معلومات فعلية' -- 'hidden layer' -> 'الطبقة المخفية' -- 'hidden layer(s)' -> 'الطبقات المخفية' -- 'hyperparameter' -> 'المعلَمة الفائقة' -- 'independently and identically distributed (i.i.d)' -> 'موزّعة بشكل مستقل ومتشابه' -- 'inference' -> 'الاستنتاج' -- 'input layer' -> 'طبقة الإدخال' -- 'interpretability' -> 'القابلية للتفسير' -- 'iteration' -> 'التكرار' -- 'L0regularization' -> 'التسوية من النوع L0' -- 'L1loss' -> 'L1' -- 'L1regularization' -> 'التسوية من النوع L1' -- 'L2loss' -> 'فقدانL2' -- 'L2regularization' -> 'التسوية من النوع L2' -- 'label' -> 'التصنيف' -- 'labeled example' -> 'مثال مصنّف' -- 'lambda' -> 'lambda' -- 'layer' -> 'طبقة' -- 'learning rate' -> 'معدّل التعلّم' -- 'linear' -> 'خطي' -- 'linear model' -> 'النموذج الخطي' -- 'linear models' -> 'النماذج الخطية' -- 'linear regression' -> 'الانحدار الخطي' -- 'Log Loss' -> 'الخسارة اللوغاريتمية' -- 'log-odds' -> 'لوغاريتم فرص الأفضلية' -- 'logistic regression' -> 'الانحدار اللوجستي' -- 'loss' -> 'خسارة' -- 'loss curve' -> 'منحنى الخسارة' -- 'loss function' -> 'دالة الخسارة' -- 'machine learning' -> 'تعلُم الآلة' -- 'majority class' -> 'الفئة الأكبر' -- 'mini-batch' -> 'دفعة صغيرة' -- 'minority class' -> 'فئة الأقلية' -- 'model' -> 'نموذج' -- 'multi-class classification' -> 'التصنيف المتعدّد الفئات' -- 'negative class' -> 'فئة سالبة' -- 'negative classes' -> 'الفئات السلبية' -- 'neural network' -> 'شبكة عصبونية' -- 'neural networks' -> 'للشبكات العصبية' -- 'neuron' -> 'عصبون' -- 'node (neural network)' -> 'عقدة (شبكة عصبونية)' -- 'nonlinear' -> 'غير خطي' -- 'nonstationarity' -> 'عدم الثبات' -- 'normalization' -> 'التسوية' -- 'numerical data' -> 'البيانات الرقمية' -- 'offline' -> 'بلا إنترنت' -- 'offline inference' -> 'الاستنتاج المؤخَّر' -- 'one-hot encoding' -> 'الترميز الأحادي' -- 'one-hot vector' -> 'متجهًا ذا ترميز ساخن' -- 'one-vs.-all' -> 'واحد-مقابل-الكل' -- 'online' -> 'online' -- 'online inference' -> 'الاستنتاج الحي' -- 'output layer' -> 'الطبقة النهائية' -- 'output layers' -> 'الطبقات النهائية' -- 'overfitting' -> 'فرط التخصيص' -- 'pandas' -> 'باندا' -- 'parameter' -> 'مَعلمة' -- 'positive class' -> 'فئة موجبة' -- 'positive classes' -> 'الفئات الإيجابية' -- 'post-processing' -> 'المعالجة اللاحقة' -- 'precision' -> 'الدقة' -- 'prediction' -> 'التوقّع' -- 'proxy labels' -> 'تصنيفات تقريبية' -- 'RAG' -> 'التوليد المعزّز بالاسترجاع (RAG)' -- 'rater' -> 'مُصنِّف' -- 'recall' -> 'تذكُّر الإعلان' -- 'Rectified Linear Unit (ReLU)' -> 'وحدة خطية مصحَّحة (ReLU)' -- 'regression model' -> 'نموذج الانحدار' -- 'regularization' -> 'التسوية' -- 'regularization rate' -> 'معدّل التسوية' -- 'ReLU' -> 'ReLU' -- 'retrieval-augmented generation' -> 'التوليد المعزّز بالاسترجاع' -- 'retrieval-augmented generation (RAG)' -> 'التوليد المعزّز بالاسترجاع (RAG)' -- 'ROC (receiver operating characteristic) Curve' -> 'منحنى الأمثلة الإيجابية' -- 'ROC curve' -> 'منحنى ROC' -- 'Root Mean Squared Error (RMSE)' -> 'جذر الخطأ التربيعي المتوسّط (RMSE)' -- 'sigmoid function' -> 'الدالّة الإسية' -- 'softmax' -> 'softmax' -- 'sparse feature' -> 'خاصية متناثرة' -- 'sparse representation' -> 'التمثيل المتناثر' -- 'sparse vector' -> 'متّجه متناثر' -- 'squared loss' -> 'الخسارة التربيعية' -- 'static' -> 'ثابت' -- 'static inference' -> 'الاستنتاج الثابت' -- 'static model' -> 'النموذج الثابت' -- 'stationarity' -> 'الثبات' -- 'Stochastic Gradient Descent (SGD)' -> 'النزول المتدرّج العشوائي (SGD)' -- 'supervised learning' -> 'التعلم المُوجّه' -- 'supervised machine learning' -> 'تعلُّم الآلة الخاضع للإشراف' -- 'synthetic feature' -> 'خاصية مصطنعة' -- 'synthetic features' -> 'ميزات اصطناعية' -- 'test loss' -> 'فقدان الاختبار' -- 'training' -> 'التدريب' -- 'training loss' -> 'فقدان التدريب' -- 'training set' -> 'مجموعة التدريب' -- 'training-serving skew' -> 'اختلاف بين بيانات التدريب وبيانات العرض' -- 'true negative (TN)' -> 'سالب صحيح' -- 'true negatives' -> 'الحالات السالبة الصحيحة' -- 'true positive (TP)' -> 'موجب صحيح (TP)' -- 'true positive rate' -> 'معدّل الإيجابية الحقيقية' -- 'true positive rate (TPR)' -> 'معدّل الموجب الصحيح (TPR)' -- 'true positives' -> 'الحالات الموجبة الصحيحة' -- 'underfitting' -> 'فرط التعميم' -- 'unlabeled example' -> 'مثال غير مصنّف' -- 'unsupervised machine learning' -> 'تعلُّم الآلة غير الموجَّه' -- 'validation' -> 'الإثبات' -- 'validation dataset' -> 'مجموعة بيانات التحقّق من الصحة' -- 'validation loss' -> 'فقدان التحقّق من الصحة' -- 'validation set' -> 'مجموعة التحقّق' -- 'weight' -> 'الوزن' -- 'weighted sum' -> 'المجموع الموزون' -- 'Z-score normalization' -> 'التسوية باستخدام الدرجة المعيارية' diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/de.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/de.txt deleted file mode 100644 index c53a3be9e..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/de.txt +++ /dev/null @@ -1,175 +0,0 @@ -# DE HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> ‚Genauigkeit' -- 'activation function' -> ‚Aktivierungsfunktion' -- 'artificial intelligence' -> ‚künstliche Intelligenz' -- 'AUC' -> ‚AUC' -- 'AUC (Area under the ROC curve)' -> ‚AUC (Area Under the ROC Curve, Bereich unter der ROC-Kurve)' -- 'backpropagation' -> ‚Rückpropagation' -- 'batch' -> ‚Batch' -- 'batch size' -> ‚Batchgröße' -- 'bias (ethics/fairness)' -> ‚Bias (Ethik/Fairness)' -- 'bias (math) or bias term' -> ‚Bias (mathematisch) oder Bias-Term' -- 'bias in ethics and fairness' -> ‚Bias in Bezug auf Ethik und Fairness' -- 'bias term' -> ‚Bias-Term' -- 'binary classification' -> ‚Binärklassifizierung' -- 'bucketing' -> ‚Bucketing' -- 'categorical' -> ‚kategorialen' -- 'categorical data' -> ‚Kategoriale Daten' -- 'class' -> ‚Klasse' -- 'class-imbalanced dataset' -> ‚Dataset mit Klassenungleichgewicht' -- 'class-imbalanced datasets' -> ‚Datasets mit ungleichmäßiger Klassenverteilung' -- 'classification' -> ‚Klassifizierungsaufgabe' -- 'classification model' -> ‚Klassifikationsmodell' -- 'classification threshold' -> ‚Klassifizierungsschwellenwert' -- 'classifier' -> ‚Klassifikator' -- 'clipping' -> ‚Clipping' -- 'confusion matrix' -> ‚Wahrheitsmatrix' -- 'continuous feature' -> ‚stetiges Feature' -- 'convergence' -> ‚Konvergenz' -- 'data set or dataset' -> ‚Dataset oder Dataset' -- 'DataFrame' -> ‚DataFrame' -- 'dataset' -> ‚Dataset' -- 'deep learning' -> ‚Deep Learning' -- 'deep model' -> ‚Deep-Modell' -- 'dense feature' -> ‚vollbesetztes Feature' -- 'depth' -> ‚Tiefe' -- 'discrete feature' -> ‚diskretes Feature' -- 'discrete features' -> ‚diskrete Features' -- 'dynamic' -> ‚dynamic' -- 'dynamic model' -> ‚dynamisches Modell' -- 'early stopping' -> ‚Vorzeitiges Beenden' -- 'embedding layer' -> ‚Einbettungsebene' -- 'embedding layers' -> ‚Einbettungsebenen' -- 'epoch' -> ‚Epoche' -- 'example' -> ‚Beispiel' -- 'false negative (FN)' -> ‚falsch negativ (FN)' -- 'false negatives' -> ‚falsch negativen Ergebnisse' -- 'false positive (FP)' -> ‚falsch positiv (FP)' -- 'false positive rate' -> ‚Falsch-Positiv-Rate' -- 'false positive rate (FPR)' -> ‚Rate falsch positiver Ergebnisse (False Positive Rate, FPR)' -- 'false positives' -> ‚falsch positiven Ergebnisse' -- 'feature' -> ‚Feature' -- 'feature cross' -> ‚Featureverknüpfung' -- 'feature crosses' -> ‚Feature-Kombinationen' -- 'feature engineering' -> ‚Feature Engineering' -- 'feature set' -> ‚Feature-Set' -- 'feature vector' -> ‚Featurevektor' -- 'feedback loop' -> ‚Feedbackschleife' -- 'generalization' -> ‚Generalisierung' -- 'generalization curve' -> ‚Verallgemeinerungskurve' -- 'gradient descent' -> ‚Gradientenabstieg' -- 'ground truth' -> ‚Ground Truth' -- 'hidden layer' -> ‚versteckte Ebene' -- 'hidden layer(s)' -> ‚verborgenen Schichten' -- 'hyperparameter' -> ‚Hyperparameter' -- 'independently and identically distributed (i.i.d)' -> ‚unabhängig und identisch verteilt (i.i.d.)' -- 'inference' -> ‚Inferenz' -- 'input layer' -> ‚Eingabelayer' -- 'interpretability' -> ‚Interpretierbarkeit' -- 'iteration' -> ‚Iteration' -- 'L0regularization' -> ‚L0-Regularisierung' -- 'L1loss' -> ‚L1-Verlust' -- 'L1regularization' -> ‚L1-Regularisierung' -- 'L2loss' -> ‚L2-Verlust' -- 'L2regularization' -> ‚L2-Regularisierung' -- 'label' -> ‚Label' -- 'labeled example' -> ‚Beispiel mit Label' -- 'lambda' -> ‚Lambda' -- 'layer' -> ‚Layer' -- 'learning rate' -> ‚Lernrate' -- 'linear' -> ‚Linear' -- 'linear model' -> ‚Lineares Modell' -- 'linear models' -> ‚linearen Modellen' -- 'linear regression' -> ‚lineare Regression' -- 'Log Loss' -> ‚Log Loss' -- 'log-odds' -> ‚Log-Odds' -- 'logistic regression' -> ‚logistische Regression' -- 'loss' -> ‚Niederlage' -- 'loss curve' -> ‚Verlustkurve' -- 'loss function' -> ‚Verlustfunktion' -- 'machine learning' -> ‚Machine Learning' -- 'majority class' -> ‚Mehrheitsklasse' -- 'mini-batch' -> ‚Mini-Batch' -- 'minority class' -> ‚Minderheitsklasse' -- 'model' -> ‚Modell' -- 'multi-class classification' -> ‚Klassifizierung mit mehreren Klassen' -- 'negative class' -> ‚negative Klasse' -- 'negative classes' -> ‚negativen Klassen' -- 'neural network' -> ‚neuronales Netzwerk' -- 'neural networks' -> ‚neuronale Netze' -- 'neuron' -> ‚Neuron' -- 'node (neural network)' -> ‚Knoten (neuronales Netzwerk)' -- 'nonlinear' -> ‚nicht linear' -- 'nonstationarity' -> ‚Nichtstationarität' -- 'normalization' -> ‚Normalisierung' -- 'numerical data' -> ‚Numerische Daten' -- 'offline' -> ‚offline' -- 'offline inference' -> ‚Offlineinferenz' -- 'one-hot encoding' -> ‚One-Hot-Codierung' -- 'one-hot vector' -> ‚One-Hot-Vektor' -- 'one-vs.-all' -> ‚One-vs.-All' -- 'online' -> ‚online' -- 'online inference' -> ‚Onlineinferenz' -- 'output layer' -> ‚Ausgabeschicht' -- 'output layers' -> ‚Ausgabelayer' -- 'overfitting' -> ‚Überanpassung' -- 'pandas' -> ‚pandas' -- 'parameter' -> ‚Parameter' -- 'positive class' -> ‚positive Klasse' -- 'positive classes' -> ‚positive Klassen' -- 'post-processing' -> ‚Nachbearbeitung' -- 'precision' -> ‚Precision' -- 'prediction' -> ‚Vorhersage-' -- 'proxy labels' -> ‚Proxy-Labels' -- 'RAG' -> ‚RAG' -- 'rater' -> ‚Bewerter' -- 'recall' -> ‚Rückruf' -- 'Rectified Linear Unit (ReLU)' -> ‚Rektifizierte lineare Einheit (ReLU)' -- 'regression model' -> ‚Regressionsmodell' -- 'regularization' -> ‚Regularisierung' -- 'regularization rate' -> ‚Regularisierungsrate' -- 'ReLU' -> ‚ReLU' -- 'retrieval-augmented generation' -> ‚Retrieval-Augmented Generation' -- 'retrieval-augmented generation (RAG)' -> ‚Retrieval-Augmented Generation (RAG)' -- 'ROC (receiver operating characteristic) Curve' -> ‚ROC-Kurve (Receiver Operating Characteristic)' -- 'ROC curve' -> ‚ROC-Kurve' -- 'Root Mean Squared Error (RMSE)' -> ‚Wurzel der mittleren Fehlerquadratsumme (RMSE)' -- 'sigmoid function' -> ‚Sigmoidfunktion' -- 'softmax' -> ‚Softmax-Funktion' -- 'sparse feature' -> ‚dünnbesetztes Feature' -- 'sparse representation' -> ‚dünnbesetzte Darstellung' -- 'sparse vector' -> ‚dünnbesetzter Vektor' -- 'squared loss' -> ‚Quadratischer Verlust' -- 'static' -> ‚Statisch' -- 'static inference' -> ‚Statische Inferenz' -- 'static model' -> ‚statischen Modell' -- 'stationarity' -> ‚Stationarität' -- 'Stochastic Gradient Descent (SGD)' -> ‚Stochastic Gradient Descent (SGD)' -- 'supervised learning' -> ‚überwachtes Lernen' -- 'supervised machine learning' -> ‚überwachtes maschinelles Lernen' -- 'synthetic feature' -> ‚synthetisches Feature' -- 'synthetic features' -> ‚synthetische Features' -- 'test loss' -> ‚Testverlust' -- 'training' -> ‚Training' -- 'training loss' -> ‚Trainingsverlust' -- 'training set' -> ‚Trainings-Dataset' -- 'training-serving skew' -> ‚Abweichungen zwischen Training und Bereitstellung' -- 'true negative (TN)' -> ‚richtig negativ (RN)' -- 'true negatives' -> ‚richtig negativen Ergebnisse' -- 'true positive (TP)' -> ‚Richtig positiv (TP)' -- 'true positive rate' -> ‚Rate der richtig positiven Ergebnisse' -- 'true positive rate (TPR)' -> ‚Rate richtig positiver Ergebnisse (True Positive Rate, TPR)' -- 'true positives' -> ‚richtig positiven Ergebnisse' -- 'underfitting' -> ‚Unteranpassung' -- 'unlabeled example' -> ‚Beispiel ohne Label' -- 'unsupervised machine learning' -> ‚unüberwachtes maschinelles Lernen' -- 'validation' -> ‚Validierung' -- 'validation dataset' -> ‚Validierungs-Dataset' -- 'validation loss' -> ‚Validierungsverlust' -- 'validation set' -> ‚Validierungs-Dataset' -- 'weight' -> ‚Gewicht' -- 'weighted sum' -> ‚gewichtete Summe' -- 'Z-score normalization' -> ‚Z-Score-Normalisierung' diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/el.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/el.txt deleted file mode 100644 index 22c5b4e4c..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/el.txt +++ /dev/null @@ -1,988 +0,0 @@ -# EL HINTS -## TERM MAPPINGS -The following mappings are the CANONICAL Greek translations for AI/ML terms. -When translating TO GREEK, you MUST use these exact Greek terms for the listed English expressions whenever the same technical meaning is intended. - -- 'a priori probability' -> «πιθανότητα εκ των προτέρων» -- 'A* Search' -> «αλγόριθμοι αναζήτησης Α*» -- 'Abductive logic programming (ALP)' -> «Προγραμματισμός απαγωγικής λογικής (ALP)» -- 'Abductive reasoning' -> «Απαγωγικός συλλογισμός» -- 'abductive reasoning' -> «απαγωγική συλλογιστική» -- 'Abstract data type' -> «Αφηρημένος τύπος δεδομένων» -- 'abstract plan' -> «αφηρημένο πλάνο» -- 'Abstraction' -> «Αφαίρεση» -- 'Accelerating change' -> «Επιταχυνόμενη αλλαγή» -- 'accretive associative memory' -> «προσαυξητική μνήμη συσχέτισης» -- 'acquisitional efficiency' -> «αποδοτικότητα απόκτησης» -- 'action' -> «ενέργεια» -- 'Action language' -> «Γλώσσα δράσης» -- 'Action model learning' -> «Εκμάθηση μοντέλου δράσης» -- 'action schemas' -> «σχήματα ενεργειών» -- 'Action selection' -> «Επιλογή δράσης» -- 'Activation function' -> «Λειτουργία ενεργοποίησης» -- 'activation function' -> «συνάρτηση ενεργοποίησης» -- 'active' -> «ενεργός» -- 'active database' -> «ενεργή βάση δεδομένων» -- 'active rule' -> «ενεργός κανόνας» -- 'active troubleshooting' -> «ενεργητική διάγνωση» -- 'Adaptive algorithm' -> «Προσαρμοστικός αλγόριθμος» -- 'Adaptive neuro fuzzy inference system (ANFIS)' -> «Προσαρμοστικό σύστημα ασαφών συμπερασμάτων δίκτυου» -- 'adaptivity' -> «προσαρμοστικότητα» -- 'add list' -> «λίστα προσθηκών» -- 'admissibility criterion' -> «κριτήριο αποδοχής» -- 'admissible' -> «αποδεκτός» -- 'Admissible heuristic' -> «Παραδεκτό ευρετικό» -- 'adversary game' -> «ανταγωνιστικό παίγνιο» -- 'Affective computing' -> «Συναισθηματική υπολογιστική» -- 'agent' -> «πράκτορας» -- 'Agent architecture' -> «Αρχιτεκτονική πράκτορα» -- 'agglomerative algorithm' -> «αλγόριθμος συγχώνευσης» -- 'AI' -> «τεχνητή νοημοσύνη» -- 'AI accelerator' -> «Επιταχυντής AI» -- 'AI-complete' -> «AI-πλήρης» -- 'Algorithm' -> «Αλγόριθμος» -- 'algorithm' -> «αλγόριθμος» -- 'Algorithmic efficiency' -> «Αλγοριθμική απόδοση» -- 'Algorithmic probability' -> «Αλγοριθμική πιθανότητα» -- 'Alpha-Beta algorithm' -> «αλγόριθμος άλφα-βήτα» -- 'Alpha-Beta search' -> «αναζήτηση άλφα-βήτα» -- 'Ambient intelligence (AmI)' -> «Ευφυΐα περιβάλλοντος» -- 'ambiguity' -> «πολυσημαντικότητα» -- 'analogical reasoning' -> «συλλογιστική με αναλογίες» -- 'Analysis of algorithms' -> «Ανάλυση αλγορίθμων» -- 'Analytics' -> «Ανάλυση» -- 'AND tree' -> «δένδρο ΚΑΙ» -- 'AND/OR tree' -> «δένδρο ΚΑΙ / Ή» -- 'Answer set programming (ASP)' -> «Προγραμματισμός συνόλου απαντήσεων» -- 'Anytime algorithm' -> «Ανα πάσα στιγμή Αλγόριθμος» -- 'Application programming interface (API)' -> «Διεπαφή προγραμματισμού εφαρμογών» -- 'Approximate string matching' -> «Κατά προσέγγιση ταίριασμα συμβολοσειρών» -- 'Approximation error' -> «Σφάλμα προσέγγισης» -- 'arc consistency' -> «συνέπεια τόξου» -- 'Argumentation framework' -> «Πλαίσιο επιχειρημάτων» -- 'artificial agent' -> «τεχνητός πράκτορας» -- 'Artificial general intelligence (AGI)' -> «Τεχνητή γενική νοημοσύνη» -- 'Artificial immune system (AIS)' -> «Τεχνητό ανοσοποιητικό σύστημα» -- 'artificial intelligence' -> «τεχνητή νοημοσύνη» -- 'Artificial Intelligence Markup Language' -> «Γλώσσα σήμανσης τεχνητής νοημοσύνης» -- 'Artificial intelligence (AI)' -> «Τεχνητή νοημοσύνη» -- 'Artificial neural network (ANN)' -> «Τεχνητό νευρωνικό δίκτυο» -- 'artificial neuron' -> «τεχνητός νευρώνας» -- 'association rules' -> «κανόνες συσχέτισης» -- 'associative memory' -> «μνήμη συσχέτισης» -- 'Asymptotic computational complexity' -> «Ασυμπτωτική υπολογιστική πολυπλοκότητα» -- 'atomic formula' -> «ατομικός τύπος» -- 'atoms' -> «άτομα» -- 'attribute selection' -> «επιλογή χαρακτηριστικών» -- 'attributes' -> «χαρακτηριστικά» -- 'Attributional calculus' -> «Λογισμός απόδοσης» -- 'auctions protocols' -> «πρωτόκολλα πλειστηριασμού» -- 'Augmented reality (AR)' -> «Επαυξημένη πραγματικότητα» -- 'auto-associative memories' -> «αυτοσυσχετιζόμενες μνήμες» -- 'Automata theory' -> «Θεωρία αυτομάτων» -- 'Automated machine learning (AutoML)' -> «Αυτοματοποιημένη μηχανική εκμάθηση» -- 'Automated planning and scheduling' -> «Αυτοματοποιημένος προγραμματισμός» -- 'Automated reasoning' -> «Αυτοματοποιημένη συλλογιστική» -- 'automated synopsis' -> «αυτόματη περίληψη» -- 'automatic translation' -> «αυτόματη μετάφραση» -- 'Autonomic computing (AC)' -> «Αυτόνομος Υπολογισμός» -- 'Autonomous car' -> «Αυτόνομο αυτοκίνητο» -- 'Autonomous robot' -> «Αυτόνομο ρομπότ» -- 'autonomy' -> «αυτονομία» -- 'average reward model' -> «μοντέλο μέσης ανταμοιβής» -- 'axon' -> «άξονας» -- 'back propagation' -> «ανάστροφη μετάδοση» -- 'Backpropagation' -> «Ο πίσω πολλαπλασιασμός» -- 'Backpropagation through time (BPTT)' -> «Πίσω διάδοση στο χρόνο (BPTT)» -- 'backtracking' -> «οπισθοδρόμηση» -- 'backtracking points' -> «σημεία οπισθοδρόμησης» -- 'Backward chaining' -> «Αλυσίδα προς τα πίσω» -- 'backward chaining' -> «ανάστροφη ακολουθία εκτέλεσης» -- 'backward pass' -> «ανάστροφο πέρασμα» -- 'Bag-of-words model' -> «Μοντέλο τσάντα με λέξεις» -- 'Bag-of-words model in computer vision' -> «Μοντέλο τσάντας λέξεων στην όραση υπολογιστή» -- 'basic probability assignment' -> «βασική κατανομή πιθανότητας» -- 'batch learning' -> «μάθηση δέσμης» -- 'Batch normalization' -> «Ομαλοποίηση παρτίδας» -- 'Bayesian programming' -> «Μπεϋζιανός προγραμματισμός» -- 'Beam Search' -> «ακτινωτή αναζήτηση» -- 'Bees algorithm' -> «Αλγόριθμος μελισσών» -- 'Behavior informatics (BI)' -> «Πληροφορική συμπεριφοράς» -- 'Behavior tree (BT)' -> «Δέντρο συμπεριφοράς» -- 'belief' -> «πεποίθηση» -- 'Belief-desire-intention software model (BDI)' -> «Μοντέλο λογισμικού πεποίθησης-επιθυμίας-πρόθεσης» -- 'benevolence' -> «αγαθή προαίρεση» -- 'Best-First Search' -> «αναζήτηση πρώτα στο καλύτερο» -- 'Bias–variance tradeoff' -> «Ανταλλαγή μεροληψίας-διακύμανσης» -- 'bidirectional associative memories' -> «μνήμη συσχέτισης διπλής κατεύθυνσης» -- 'Bidirectional Search' -> «αναζήτηση διπλής κατεύθυνσης» -- 'Big data' -> «Μεγάλα δεδομένα» -- 'Big O notation' -> «Σημείωση Big O» -- 'binary constraint' -> «δυαδικός περιορισμός» -- 'Binary tree' -> «Δυαδικό δέντρο» -- 'blackboard' -> «μαυροπίνακας» -- 'blackboard architecture' -> «αρχιτεκτονική μαυροπίνακα» -- 'Blackboard system' -> «Σύστημα μαυροπίνακα» -- 'blackboard systems' -> «συστήματα μαυροπίνακα» -- 'Blind Search' -> «τυφλή αναζήτηση» -- 'Boltzmann machine' -> «Μηχανή Boltzmann» -- 'Boolean satisfiability problem' -> «Πρόβλημα ικανοποίησης Boolean» -- 'Brain technology' -> «Τεχνολογία εγκεφάλου» -- 'Branch and Bound Search' -> «αναζήτηση με επέκταση και οριοθέτηση» -- 'Branching factor' -> «Συντελεστής διακλάδωσης» -- 'branching factor' -> «παράγοντας διακλάδωσης» -- 'Breadth First Search' -> «αναζήτηση πρώτα σε» -- 'Brute-force search' -> «Αναζήτηση ωμής βίας» -- 'candidate elimination' -> «απαλοιφή υποψηφίων» -- 'canonical form' -> «κανονική μορφή» -- 'canonical formation rules' -> «κανόνες ορθής διαμόρφωσης» -- 'Capsule neural network (CapsNet)' -> «Νευρωνικό δίκτυο κάψουλας» -- 'card sorting' -> «ταξινόμηση καρτών» -- 'case adaptation' -> «προσαρμογή περιπτώσεων» -- 'case indexing' -> «δεικτοδότηση περιπτώσεων» -- 'case learning' -> «εκμάθηση περιπτώσεων» -- 'case library' -> «βιβλιοθήκη περιπτώσεων» -- 'case retrieval' -> «ανάκληση περιπτώσεων» -- 'case verification' -> «επαλήθευση περιπτώσεων» -- 'case-based' -> «βασισμένο σε περιπτώσεις» -- 'case-based learning' -> «μάθηση κατά περίπτωση» -- 'case-based planning' -> «σχεδιασμός βασισμένος σε παραδείγματα» -- 'case-based reasoning' -> «συλλογιστική βασισμένη σε περιπτώσεις» -- 'Case-based reasoning (CBR)' -> «Συλλογισμός βάσει περιπτώσεων» -- 'causal link' -> «αιτιολογικές συνδέσεις» -- 'causal model' -> «αιτιοκρατικό μοντέλο» -- 'certainty factors' -> «συντελεστές βεβαιότητας» -- 'chaining' -> «ακολουθία εκτέλεσης κανόνων» -- 'chromosome' -> «χρωμόσωμα» -- 'chronological backtracking' -> «χρονική οπισθοδρόμηση» -- 'circumscription' -> «μέθοδος περιγράμματος» -- 'class' -> «κλάση» -- 'class extension' -> «επέκταση κλάσης» -- 'classical negation' -> «κλασική άρνηση» -- 'classification' -> «ταξινόμηση» -- 'classification rules' -> «κανόνες ταξινόμησης» -- 'classification trees' -> «δένδρο ταξινόμησης» -- 'clausal form' -> «προτασιακή μορφή» -- 'closed formula' -> «κλειστός τύπος» -- 'closed set' -> «κλειστό σύνολο» -- 'closed world' -> «κλειστός κόσμος» -- 'closed world assumption' -> «υπόθεση κλειστού κόσμού» -- 'Cloud robotics' -> «Cloud ρομποτική» -- 'CLP' -> «λογικός προγραμματισμός με περιορισμούς» -- 'Cluster analysis' -> «Ανάλυση συστάδων» -- 'clustering' -> «ομαδοποίηση» -- 'clusters' -> «ομάδες» -- 'coarse grain' -> «αδρή υφή» -- 'Cobweb' -> «Ιστός αράχνης» -- 'Cognitive architecture' -> «Γνωστική αρχιτεκτονική» -- 'Cognitive computing' -> «Γνωστική Υπολογιστική» -- 'Cognitive science' -> «Γνωστική επιστήμη» -- 'cognitive science' -> «γνωσιολογική επιστήμη» -- 'combinatorial explosion' -> «συνδυαστική έκρηξη» -- 'Combinatorial optimization' -> «Συνδυαστική βελτιστοποίηση» -- 'commitment' -> «δέσμευση» -- 'Committee machine' -> «Μηχανή επιτροπής» -- 'common sense' -> «κοινή λογική» -- 'Commonsense knowledge' -> «Κοινή γνώση» -- 'Commonsense reasoning' -> «Κοινός συλλογισμός» -- 'communication protocol' -> «πρωτόκολλο επικοινωνίας» -- 'competition' -> «ανταγωνισμός» -- 'competitive neural networks' -> «νευρωνικά δίκτυα με ανταγωνισμό» -- 'compiled knowledge' -> «αυτοματοποιημένη γνώση» -- 'complementary pairs' -> «συμπληρωματικά ζεύγη» -- 'complete' -> «πλήρης» -- 'complete plan' -> «πλήρες πλάνο» -- 'completeness' -> «πληρότητα» -- 'Computational chemistry' -> «Υπολογιστική χημεία» -- 'Computational complexity theory' -> «Υπολογιστική θεωρία πολυπλοκότητας» -- 'Computational creativity' -> «Υπολογιστική δημιουργικότητα» -- 'Computational cybernetics' -> «Υπολογιστική κυβερνητική» -- 'Computational humor' -> «Υπολογιστικό χιούμορ» -- 'computational intelligence' -> «υπολογιστική νοημοσύνη» -- 'Computational intelligence (CI)' -> «Υπολογιστική νοημοσύνη» -- 'Computational learning theory' -> «Υπολογιστική θεωρία μάθησης» -- 'Computational linguistics' -> «Υπολογιστική γλωσσολογία» -- 'Computational mathematics' -> «Υπολογιστικά μαθηματικά» -- 'Computational neuroscience' -> «Υπολογιστική νευροεπιστήμη» -- 'Computational number theory' -> «Υπολογιστική θεωρία αριθμών» -- 'Computational problem' -> «Υπολογιστικό πρόβλημα» -- 'Computational statistics' -> «Υπολογιστική στατιστική» -- 'Computational Tree Logic' -> «Λογική Υπολογιστικού Δένδρου» -- 'Computer audition (CA)' -> «Οντισιόν υπολογιστή (CA)» -- 'Computer science' -> «Επιστήμη των υπολογιστών» -- 'Computer vision' -> «Υπολογιστική όραση» -- 'Computer-automated design (CAutoD)' -> «Αυτοματοποιημένη σχεδίαση υπολογιστή» -- 'concept' -> «έννοια» -- 'Concept drift' -> «Εννοιολογική μετατόπιση» -- 'concept learning' -> «μάθηση εννοιών» -- 'concept type' -> «τύπος έννοιας» -- 'conceptual dependency' -> «εννοιολογική εξάρτηση» -- 'conceptual dependency graph' -> «γράφος εννοιολογικής εξάρτησης» -- 'conceptual dependency relationships' -> «σχέσεις εννοιολογικής εξάρτησης» -- 'conceptual graphs' -> «εννοιολογικός γράφος» -- 'conceptual relation' -> «εννοιολογικές σχέσεις» -- 'conditional effects' -> «αποτελέσματα υπό προϋπόθεση» -- 'conditional probability' -> «πιθανότητα υπό συνθήκη» -- 'confidence' -> «εμπιστοσύνη» -- 'configuration' -> «διαμόρφωση» -- 'conflict' -> «σύγκρουση κανόνων» -- 'conflict resolution' -> «επίλυση συγκρούσεων» -- 'conflict set' -> «σύνολο σύγκρουσης» -- 'conflicting literals' -> «αντικρουόμενα λεκτικά» -- 'conjunctive model of classification' -> «συζευκτικό μοντέλο ταξινόμησης» -- 'conjunctive normal form' -> «συζευκτική κανονική μορφή» -- 'Connectionism' -> «Συνδεσιονισμός» -- 'connectionist approach' -> «συνδετική προσέγγιση» -- 'connectives' -> «συνδετικά» -- 'consistency check' -> «έλεγχος συνέπειας» -- 'consistency check algorithms' -> «αλγόριθμος ελέγχου συνέπειας» -- 'Consistent heuristic' -> «Συνεπής ευρετική» -- 'Constrained conditional model (CCM)' -> «Περιορισμένο υπό όρους μοντέλο» -- 'constraint' -> «περιορισμός» -- 'constraint graph' -> «γράφος περιορισμών» -- 'Constraint logic programming' -> «Προγραμματισμός λογικής περιορισμών» -- 'Constraint Logic Programming' -> «λογικός προγραμματισμός με περιορισμούς» -- 'constraint programming' -> «προγραμματισμός με περιορισμούς» -- 'constraint propagation' -> «διάδοση περιορισμών» -- 'constraint satisfaction' -> «ικανοποίηση περιορισμών» -- 'constraint satisfaction problems' -> «προβλήματα ικανοποίησης περιορισμών» -- 'constraint solving problems' -> «προβλήματα επίλυσης περιορισμών» -- 'Constructed language' -> «Κατασκευασμένη γλώσσα» -- 'content addressability' -> «δυνατότητα ανάκλησης περιεχομένου» -- 'context' -> «συμφραζόμενα» -- 'contracting net protocol' -> «συντονισμός πρακτόρων με σύναψη συμβολαίων» -- 'control' -> «έλεγχος» -- 'Control theory' -> «Θεωρία ελέγχου» -- 'convention' -> «σύμβαση» -- 'Convolutional neural network' -> «Συνελικτικό νευρωνικό δίκτυο» -- 'cooperation' -> «συνεργασία» -- 'crisp value' -> «σαφής τιμή» -- 'critical point' -> «κρίσιμο σημείο» -- 'criticality value' -> «τιμή σημαντικότητας» -- 'critics' -> «κανόνες προσαρμογής περιπτώσεων» -- 'Crossover' -> «Διασταύρωση» -- 'crossover' -> «διασταύρωση» -- 'crossover mask' -> «μάσκα διασταύρωσης» -- 'Darkforest' -> «Σκοτεινό δάσος» -- 'Dartmouth workshop' -> «Εργαστήριο Dartmouth» -- 'data abstraction' -> «γενίκευση δεδομένων» -- 'Data augmentation' -> «Αύξηση δεδομένων» -- 'data driven' -> «αναζήτηση οδηγούμενη από δεδομένα» -- 'Data fusion' -> «Συγχώνευση δεδομένων» -- 'Data integration' -> «Ενοποίηση δεδομένων» -- 'Data mining' -> «Εξόρυξη δεδομένων» -- 'data mining' -> «εξόρυξη σε δεδομένα» -- 'data mining incremental' -> «εξόρυξη σε δεδομένα σταδιακή» -- 'Data science' -> «Επιστημονικά δεδομένα» -- 'Data set' -> «Σύνολο δεδομένων» -- 'data space' -> «χώρος δεδομένων» -- 'data warehouse' -> «συστήματα αποθήκευσης δεδομένων» -- 'Data warehouse (DW or DWH)' -> «Αποθήκη δεδομένων» -- 'Datalog' -> «Καταγραφή δεδομένων» -- 'deafisible inference' -> «αναιρέσιμη εξαγωγή συμπερασμάτων» -- 'decidable logic' -> «καταληκτική λογική» -- 'Decision boundary' -> «Όριο απόφασης» -- 'Decision support system (DSS)' -> «Σύστημα υποστήριξης αποφάσεων» -- 'Decision theory' -> «Θεωρία απόφασης» -- 'Decision tree learning' -> «Εκμάθηση του δέντρου αποφάσεων» -- 'Declarative programming' -> «Δηλωτικός προγραμματισμός» -- 'deduction system' -> «σύστημα εξαγωγής συμπερασμάτων» -- 'Deductive classifier' -> «Απαγωγικός ταξινομητής» -- 'deductive reasoning' -> «συνεπαγωγική συλλογιστική» -- 'Deep Blue' -> «Βαθύ μπλε» -- 'deep knowledge' -> «βαθιά γνώση» -- 'Deep learning' -> «Βαθιά μάθηση» -- 'DeepMind Technologies' -> «Τεχνολογίες DeepMind» -- 'default reasoning' -> «συλλογιστική εύλογων υποθέσεων» -- 'defeasible logic' -> «αναιρέσιμη λογική» -- 'defeasible rules' -> «αναιρέσιμοι κανόνες» -- 'defeasible theory' -> «αναιρέσιμη θεωρία» -- 'defeaters' -> «αναιρετές» -- 'definite clause grammars' -> «γραμματικές οριστικών προτάσεων» -- 'definite inference' -> «οριστική απόδειξη» -- 'defuzzification' -> «αποσαφήνιση» -- 'degree of consistency' -> «βαθμός συνέπειας» -- 'degree of truth' -> «βαθμός αληθείας» -- 'delete list' -> «λίστα διαγραφών» -- 'deliberative agent' -> «πράκτορας με εσωτερική κατάσταση» -- 'Delta rule' -> «κανόνας Δέλτα» -- 'demons' -> «δαίμονας» -- 'demotion' -> «υποβιβασμός» -- 'dendrite' -> «δενδρίτης» -- 'Depth-First Search' -> «αναζήτηση πρώτα σε βάθος» -- 'Description logic (DL)' -> «Λογική περιγραφής» -- 'design' -> «σχεδίαση» -- 'design stance' -> «σχεδιαστική προσέγγιση» -- 'detach' -> «διαχωρισμός» -- 'deterministic effects' -> «ντετερμινιστικά αποτελέσματα» -- 'Developmental robotics (DevRob)' -> «Αναπτυξιακή ρομποτική» -- 'Diagnosis' -> «Διάγνωση» -- 'diagnosis' -> «διάγνωση» -- 'Dialogue system' -> «Σύστημα διαλόγου» -- 'Dimensionality reduction' -> «Μείωση διαστάσεων» -- 'discrepancy' -> «ασυμφωνία τιμών» -- 'Discrete system' -> «Διακριτό σύστημα» -- 'discretization' -> «διακριτοποίηση» -- 'disjunctive normal form' -> «διαζευκτική κανονική μορφή» -- 'distributed artificial intelligence' -> «κατανεμημένη τεχνητή νοημοσύνη» -- 'Distributed artificial intelligence (DAI)' -> «Κατανεμημένη τεχνητή νοημοσύνη» -- 'distributed data mining' -> «κατανεμημένη εξόρυξη σε δεδομένα» -- 'distributed memory' -> «κατανεμημένη μνήμη» -- 'distributed multi-agent planning' -> «κατανεμημένος πολυπρακτορικός σχεδιασμός» -- 'divisive algorithm' -> «αλγόριθμος διαίρεσης» -- 'domain expert' -> «ειδικός του τομέα» -- 'Dynamic epistemic logic (DEL)' -> «Δυναμική επιστημική λογική» -- 'dynamic programming' -> «δυναμικός προγραμματισμός» -- 'Eager learning' -> «Πρόθυμη μάθηση» -- 'eager learning' -> «έγκαιρη μάθηση» -- 'Ebert test' -> «Τεστ Έμπερτ» -- 'Echo state network (ESN)' -> «Δίκτυο κατάστασης Echo» -- 'edge detection' -> «εντοπισμός ακμών» -- 'effectors' -> «εξαρτήματα δράσης» -- 'Embodied agent' -> «Ενσαρκωμένος πράκτορας» -- 'Embodied cognitive science' -> «Ενσωματωμένη γνωστική επιστήμη» -- 'encapsulation' -> «εγκλεισμός (αντικειμένου)» -- 'energy function' -> «συνάρτηση ενέργειας» -- 'Enforced Hill-Climbing Search' -> «αναζήτηση με εξαναγκασμένη αναρρίχηση λόφου» -- 'Ensemble averaging' -> «Μέσος όρος του συνόλου» -- 'entropy of information' -> «εντροπία πληροφορίας» -- 'episode mining algorithms' -> «εξόρυξη επεισοδίων» -- 'episodical knowledge' -> «επεισοδιακή γνώση» -- 'Epoch (machine learning)' -> «Εποχή (μηχανική μάθηση)» -- 'epochs' -> «εποχές» -- 'equivalence' -> «ισοδυναμία» -- 'equivalence rules' -> «κανόνες ισοδυναμίας» -- 'erasure' -> «διαγραφή» -- 'error driven learning' -> «μάθηση καθοδηγούμενη από το σφάλμα» -- 'Error-driven learning' -> «Μάθηση με γνώμονα τα σφάλματα» -- 'Ethics of artificial intelligence' -> «Ηθική της τεχνητής νοημοσύνης» -- 'Euclidian distance' -> «Ευκλείδεια απόσταση» -- 'evaluation' -> «αποτίμηση» -- 'evaluation function' -> «συνάρτηση αξιολόγησης» -- 'event-driven rule' -> «ενεργός κανόνας» -- 'evoking strength' -> «δύναμη πρόκλησης» -- 'Evolutionary algorithm (EA)' -> «Εξελικτικός αλγόριθμος» -- 'Evolutionary computation' -> «Εξελικτικός υπολογισμός» -- 'Evolving classification function (ECF)' -> «Εξελισσόμενη συνάρτηση ταξινόμησης» -- 'exhaustive search' -> «εξαντλητική αναζήτηση» -- 'existential graphs' -> «υπαρξιακοί γράφοι» -- 'existential quantifier' -> «υπαρξιακός ποσοδείκτης» -- 'Existential risk' -> «Υπαρξιακός κίνδυνος» -- 'exoneration' -> «αθώωση» -- 'Expert system' -> «Ειδικό σύστημα» -- 'expert system' -> «έμπειρο σύστημα» -- 'expert system shell' -> «κέλυφος έμπειρου συστήματος» -- 'explicit knowledge' -> «ρητή γνώση» -- 'extension principle' -> «αρχή της επέκτασης» -- 'Fast-and-frugal trees' -> «Γρήγορα και λιτά δέντρα» -- 'Feature extraction' -> «Εξαγωγή χαρακτηριστικών» -- 'Feature learning' -> «Εκμάθηση χαρακτηριστικών» -- 'Feature selection' -> «Επιλογή χαρακτηριστικών» -- 'Federated learning' -> «Ομοσπονδιακή μάθηση» -- 'feedback' -> «ανάδραση, ανατροφοδότηση» -- 'feedforward' -> «πρόσθια τροφοδότηση» -- 'filtering algorithm' -> «αλγόριθμος διήθησης τιμών» -- 'final state' -> «τελική κατάσταση» -- 'fine grain' -> «λεπτή υφή» -- 'first fail principle' -> «αρχή συντομότερης αποτυχίας» -- 'first order predicate logic' -> «κατηγορηματική λογική πρώτης τάξης» -- 'First-order logic' -> «Λογική πρώτης τάξης» -- 'fitness function' -> «συνάρτηση καταλληλότητας» -- 'Fluent' -> «Ευφραδής» -- 'Formal language' -> «Επίσημη γλώσσα» -- 'Forward chaining' -> «Αλυσίδα προς τα εμπρός» -- 'forward chaining' -> «ορθή ακολουθία εκτέλεσης» -- 'forward checking' -> «προοπτικός έλεγχος» -- 'Frame' -> «Πλαίσιο» -- 'frame axioms' -> «αξιώματα του πλαισίου» -- 'Frame language' -> «Γλώσσα πλαισίου» -- 'frame of discernment' -> «πλαίσιο διάκρισης» -- 'Frame problem' -> «Πρόβλημα πλαισίου» -- 'frame problem' -> «πρόβλημα πλαισίου» -- 'frames' -> «πλαίσια» -- 'Friendly artificial intelligence' -> «Φιλική τεχνητή νοημοσύνη» -- 'full look ahead' -> «πλήρης έγκαιρη εξέταση» -- 'functional dependency' -> «λειτουργική εξάρτηση» -- 'functional term' -> «συναρτησιακός όρος» -- 'Futures studies' -> «Μελλοντικές μελέτες» -- 'fuzzification' -> «μετατροπή μεγέθους σε ασαφές» -- 'fuzziness' -> «ασάφεια» -- 'fuzzy complement' -> «συμπληρωματικό ασαφούς συνόλου» -- 'fuzzy composition' -> «σύνθεση ασαφών σχέσεων» -- 'Fuzzy control system' -> «Ασαφές σύστημα ελέγχου» -- 'fuzzy linguistic description' -> «ασαφής λεκτική περιγραφή» -- 'fuzzy linguistic variable' -> «ασαφής λεκτική μεταβλητή» -- 'Fuzzy logic' -> «Ασαφής λογική» -- 'fuzzy logic' -> «ασαφής λογική» -- 'fuzzy numbers' -> «ασαφείς αριθμοί» -- 'fuzzy reasoning' -> «ασαφής συλλογιστική» -- 'fuzzy relations' -> «ασαφείς σχέσεις» -- 'Fuzzy rule' -> «Ασαφής κανόνας» -- 'fuzzy rule' -> «ασαφής κανόνας» -- 'Fuzzy set' -> «Ασαφές σύνολο» -- 'fuzzy set' -> «ασαφή σύνολα» -- 'fuzzy set theory' -> «θεωρία ασαφών συνόλων» -- 'fuzzy variable' -> «ασαφής μεταβλητή» -- 'Game theor' -> «Θεωρία παιγνίων» -- 'game tree' -> «δένδρο παιγνίου» -- 'gene' -> «γονίδιο» -- 'general problem solver' -> «γενικός επιλυτής προβλημάτων» -- 'generalization rule' -> «κανόνας γενίκευσης» -- 'generalized modus ponens' -> «γενικευμένος τρόπος του θέτειν» -- 'generalized modus tollens' -> «γενικευμένος τρόπος του αναιρείν» -- 'generate and test' -> «παραγωγή και δοκιμή» -- 'generation gap' -> «χάσμα γενεών» -- 'Generative adversarial network (GAN)' -> «Δημιουργικό ανταγωνιστικό δίκτυο» -- 'genetic algorithms' -> «γενετικοί αλγόριθμοι» -- 'Genetic algorithm (GA)' -> «Γενετικός αλγόριθμος» -- 'Genetic operator' -> «Γενετικός χειριστής» -- 'genetic programming' -> «γενετικός προγραμματισμός» -- 'genotype' -> «γονότυπος» -- 'Glowworm swarm optimization' -> «Βελτιστοποίηση σμήνους Glowworm» -- 'goal driven' -> «αναζήτηση οδηγούμενη από στόχους» -- 'goals of attainment' -> «στόχοι επίτευξης» -- 'graded learning' -> «βαθμολογημένη μάθηση» -- 'gradient descent' -> «επικλινής καθόδος» -- 'gradient descent optimization' -> «βελτιστοποίηση επικλινούς καθόδου» -- 'Graph (abstract data type)' -> «Γράφημα» -- 'Graph (discrete mathematics)' -> «Γράφημα (διακριτά μαθηματικά)» -- 'Graph database (GDB)' -> «Βάση δεδομένων γραφημάτων» -- 'graph expansion' -> «επέκταση γράφου» -- 'Graph theory' -> «Θεωρία γραφημάτων» -- 'Graph traversal' -> «Διασύνδεση γραφήματος» -- 'graph-based planning' -> «σχεδιασμός βασισμένος σε γράφους» -- 'grid' -> «πλέγμα» -- 'grip' -> «λαβή» -- 'ground term' -> «βασικός όρος» -- 'guided-probe approach' -> «προσέγγιση καθοδηγούμενων δοκιμών» -- 'hetero-associative memories' -> «ετεροσυσχετιζόμενες μνήμες» -- 'Heuristic' -> «Ευρετική» -- 'heuristic' -> «ευρετικός μηχανισμός» -- 'heuristic classification' -> «ευρετική κατηγοριοποίηση» -- 'heuristic function' -> «ευρετική συνάρτηση» -- 'heuristic match' -> «ευρετική ταυτοποίηση» -- 'heuristic search' -> «ευρετική αναζήτηση» -- 'heuristic value' -> «ευρετική τιμή» -- 'Hidden layer' -> «Κρυφό στρώμα» -- 'hidden layers' -> «κρυφά επίπεδα» -- 'Hidden unit' -> «Κρυφή μονάδα» -- 'hierarchical planning' -> «ιεραρχικός σχεδιασμός» -- 'Hierarchical Task Networks' -> «ιεραρχικά δίκτυα διεργασιών» -- 'hierarchy concept type' -> «ιεραρχία τύπων εννοιών» -- 'hierarchy relation type' -> «ιεραρχία τύπων σχέσεων» -- 'higher order constraint' -> «περιορισμός ανώτερης τάξης» -- 'Hill Climbing Search' -> «αναζήτηση αναρρίχησης λόφων» -- 'horizon effect' -> «φαινόμενο ορίζοντα» -- 'humanoid robots' -> «ανθρωποειδή ρομπότ» -- 'hybrid agent' -> «υβριδικός πράκτορας» -- 'Hyper-heuristic' -> «Υπερ-ευρετικό» -- 'hypotheses discrimination' -> «διάκριση υποθέσεων» -- 'hypothesis space' -> «χώρος υποθέσεων» -- 'hypothesize and test' -> «δημιουργία και έλεγχος υποθέσεων» -- 'IEEE Computational Intelligence Society' -> «Κοινωνία Υπολογιστικής Νοημοσύνης» -- 'if-needed demon' -> «προσκόλληση διαδικασιών» -- 'implication' -> «συνεπαγωγή» -- 'imprecise data' -> «ανακριβή δεδομένα» -- 'incomplete' -> «μη-πλήρης» -- 'incomplete data' -> «ελλιπή δεδομένα» -- 'inconsistency effects' -> «ασυνεπή αποτελέσματα» -- 'inconsistency support' -> «ασύμβατη υποστήριξη» -- 'Incremental learning' -> «Αυξητική μάθηση» -- 'incremental learning' -> «επαυξητική μάθηση» -- 'indivisible action' -> «αδιαίρετη ενέργεια» -- 'induction' -> «επαγωγή» -- 'inductive learning' -> «επαγωγική μάθηση» -- 'inductive learning hypothesis' -> «υπόθεση επαγωγικής μάθησης» -- 'inductive logic programming' -> «επαγωγικός λογικός προγραμματισμός» -- 'inductive reasoning' -> «επαγωγική συλλογιστική» -- 'inference' -> «εξαγωγή συμπερασμάτων» -- 'Inference engine' -> «Μηχανή συμπερασμάτων» -- 'inference engine' -> «μηχανή εξαγωγής συμπερασμάτων» -- 'inference mechanism' -> «μηχανισμός εξαγωγής συμπερασμάτων» -- 'inference rules' -> «κανόνες εξαγωγής συμπερασμάτων» -- 'inferential adequacy' -> «επάρκεια συνεπαγωγής» -- 'inferential efficiency' -> «αποδοτικότητα συνεπαγωγής» -- 'inferential inefficiency' -> «μη-αποδοτικότητα επαγωγής» -- 'information gain' -> «κέρδος πληροφορίας» -- 'Information integration (II)' -> «Ενοποίηση πληροφοριών» -- 'Information Processing Language (IPL)' -> «Γλώσσα επεξεργασίας πληροφοριών» -- 'information retrieval' -> «ανάκτηση πληροφοριών» -- 'information value theory' -> «θεωρία αξίας της πληροφορίας» -- 'informative patterns' -> «πρότυπα πληροφόρησης» -- 'inheritance' -> «κληρονομικότητα» -- 'initial state' -> «αρχική κατάσταση» -- 'input layer' -> «επίπεδο εισόδου» -- 'instance' -> «στιγμιότυπο» -- 'instance-based learning' -> «μάθηση κατά περίπτωση» -- 'Intelligence amplification (IA)' -> «Ενίσχυση νοημοσύνης» -- 'Intelligence explosion' -> «Έκρηξη πληροφοριών» -- 'intelligent agent' -> «ευφυής πράκτορας» -- 'Intelligent agent (IA)' -> «Ευφυής παράγοντας» -- 'Intelligent control' -> «Έξυπνος έλεγχος» -- 'Intelligent personal assistant' -> «Έξυπνος προσωπικός βοηθός» -- 'intention' -> «πρόθεση» -- 'intentional stance' -> «προθεσιαρχική προσέγγιση» -- 'inter-transactional association rules' -> «δια-συναλλακτικοί κανόνες συσχέτισης» -- 'interaction protocol' -> «πρωτόκολλο αλληλεπίδρασης» -- 'interference' -> «παρέμβαση» -- 'interoperability' -> «διαλειτουργικότητα» -- 'interpolative associative memories' -> «μνήμη συσχέτισης παρεμβολής» -- 'Interpretation' -> «Ερμηνεία» -- 'interpretation' -> «ερμηνεία» -- 'interpretation models' -> «ερμηνευτικά μοντέλα» -- 'interpreter' -> «διερμηνέας» -- 'intra-transactional association rules' -> «ενδο-συναλλακτικοί κανόνες συσχέτισης» -- 'Intrinsic motivation' -> «Εσωτερικά κίνητρα» -- 'Issue tree' -> «Δέντρο έκδοσης» -- 'Iterative Deepening A* Search' -> «αναζήτηση Α* με επαναληπτική εκβάθυνση» -- 'Iterative Deepening Search' -> «αναζήτηση επαναληπτικής εκβάθυνσης» -- 'job-shop scheduling' -> «χρονοπρογραμματισμός καταστημάτων εργασιών» -- 'join' -> «συνένωση» -- 'Junction tree algorithm' -> «Αλγόριθμος δέντρων διασταύρωσης» -- 'K-consistency' -> «Κ-συνέπεια» -- 'K-means algorithm' -> «αλγόριθμος Κ-μέσων» -- 'k-nearest neighbors algorithm' -> «αλγόριθμος κ-πλησιέστερων γειτόνων» -- 'Kernel method' -> «Μέθοδος πυρήνα» -- 'knapsack problem' -> «πρόβλημα ταξιδιωτικού σάκου» -- 'knowledge' -> «γνώση» -- 'Knowledge acquisition' -> «Απόκτηση γνώσης» -- 'knowledge acquisition' -> «απόκτηση γνώσης» -- 'knowledge base' -> «βάση γνώσης» -- 'knowledge based system' -> «σύστημα βασισμένο στη γνώση» -- 'knowledge capture' -> «σύλληψη γνώσης» -- 'knowledge elicitation' -> «εκμαίευση γνώσης» -- 'knowledge engineer' -> «μηχανικός γνώσης» -- 'knowledge engineering' -> «τεχνολογία γνώσης» -- 'Knowledge engineering (KE)' -> «Μηχανική Γνώσης» -- 'Knowledge extraction' -> «Εξαγωγή γνώσης» -- 'knowledge extraction' -> «εξαγωγή γνώσης» -- 'Knowledge Interchange Format (KIF)' -> «Μορφή ανταλλαγής γνώσεων» -- 'knowledge management' -> «διαχείριση γνώσης» -- 'knowledge modeling' -> «μοντελοποίηση γνώσης» -- 'Knowledge representation and reasoning (KR² or KR&R)' -> «Αναπαράσταση και συλλογιστική γνώσης» -- 'knowledge source' -> «πηγή γνώσης» -- 'knowledge system' -> «σύστημα βασισμένο στη γνώση» -- 'Knowledge-based system (KBS)' -> «Σύστημα βασισμένο στη γνώση» -- 'laddered grids' -> «βαθμωτά πλέγματα» -- 'lambda expressions' -> «εκφράσεις-λ» -- 'lateral excitation' -> «παράπλευρη διέγερση» -- 'lateral inhibition' -> «παράπλευρη καταστολή» -- 'layer' -> «στρώματα» -- 'Lazy learning' -> «Τεμπέλικη μάθηση» -- 'lazy learning' -> «αναβλητική μάθηση» -- 'learning' -> «μάθηση» -- 'learning from examples' -> «μάθηση με παραδείγματα» -- 'learning from observation' -> «μάθηση από παρατήρηση» -- 'least commitment principle' -> «αρχή της ελάχιστης δέσμευσης» -- 'linear associator' -> «γραμμικός συσχετιστής» -- 'linear plan' -> «γραμμικό πλάνο» -- 'linear regression' -> «γραμμική παρεμβολή» -- 'linear resolution' -> «γραμμική ανάλυση» -- 'linear time logic' -> «γραμμική χρονική λογική» -- 'linearly separable problems' -> «γραμμικώς διαχωρίσιμα προβλήματα» -- 'literal' -> «λεκτικό» -- 'local minima' -> «τοπικά ελάχιστα» -- 'logic clause' -> «λογική πρόταση» -- 'logic contradiction' -> «λογική αντίφαση» -- 'Logic programming' -> «Λογικός προγραμματισμός» -- 'logic semantics' -> «λογική σημασιολογία» -- 'logic substitution' -> «λογική αντικατάσταση» -- 'logical inadequacy' -> «λογική ανεπάρκεια» -- 'logical necessity' -> «λογική αναγκαιότητα» -- 'logical sufficiency' -> «λογική επάρκεια» -- 'logistic function' -> «λογιστική συνάρτηση» -- 'logistics' -> «εφοδιαστική» -- 'Long short-term memory (LSTM)' -> «Μακροπρόθεσμη μνήμη» -- 'machine evolution' -> «μηχανική εξέλιξη» -- 'machine learning' -> «μηχανική μάθηση» -- 'Machine learning (ML)' -> «Μηχανική μάθηση» -- 'Machine listening' -> «Μηχανική ακρόαση» -- 'Machine perception' -> «Μηχανική αντίληψη» -- 'machine vision' -> «μηχανική όραση» -- 'Machine vision (MV)' -> «Μηχανική όραση» -- 'maintaining arc consistency' -> «διατήρηση συνέπεια τόξου» -- 'manifestation frequency' -> «συχνότητα εκδήλωσης συμπτώματος» -- 'manufacturing robots' -> «κατασκευαστικά ρομπότ» -- 'Markov chain' -> «Αλυσίδα Markov» -- 'Markov decision process (MDP)' -> «Διαδικασία απόφασης Markov» -- 'mathematical logic' -> «μαθηματική λογική» -- 'Mathematical optimization' -> «Μαθηματική βελτιστοποίηση» -- 'means-ends analysis' -> «ανάλυση μέσων και στόχων» -- 'Mechanism design' -> «Σχεδιασμός μηχανισμού» -- 'Mechatronics' -> «Μηχατρονική» -- 'mediator' -> «διαμεσολαβητής» -- 'membership function' -> «συνάρτηση συγγένειας» -- 'memory capacity' -> «χωρητικότητα μνήμης» -- 'message passing systems' -> «συστήματα ανταλλαγής μηνυμάτων» -- 'meta -control' -> «μετα- έλεγχος» -- 'meta -knowledge' -> «μετα- γνώση» -- 'meta -rule' -> «μετα- κανόνας» -- 'Metabolic network reconstruction and simulation' -> «Ανακατασκευή και προσομοίωση μεταβολικού δικτύου» -- 'metadata' -> «μεταδεδομένα» -- 'Metaheuristic' -> «Μεταευρετική» -- 'mgu' -> «γενικότερος ενοποιητής» -- 'min conflicts heuristic' -> «ευριστικός μηχανισμός ελαχίστων συγκρούσεων» -- 'minimax algorithm' -> «αλγόριθμοι αναζήτησης ελαχίστου-μεγίστου» -- 'minimax search' -> «αναζήτηση ελαχίστου-μεγίστου» -- 'missing data' -> «ελλιπή δεδομένα» -- 'mobile robots' -> «μετακινούμενα ρομπότ» -- 'mobility' -> «κινητικότητα» -- 'modal logic' -> «λογική τροπική» -- 'model' -> «μοντέλο» -- 'Model checking' -> «Έλεγχος μοντέλου» -- 'model checking' -> «έλεγχος μοντέλων» -- 'model-based diagnosis' -> «διάγνωση βασισμένη σε μοντέλα» -- 'model-based reasoning' -> «συλλογιστική βασισμένη σε μοντέλα» -- 'module' -> «ενότητα» -- 'modus ponens' -> «τρόπος του θέτειν» -- 'modus tollens' -> «τρόπος του αναίρειν» -- 'Monte Carlo tree search' -> «Αναζήτηση δέντρων στο Μόντε Κάρλο» -- 'morphological analysis' -> «μορφολογική ανάλυση» -- 'morphology derivational' -> «μορφολογία ετυμολογική» -- 'morphology inflectional' -> «μορφολογία κλίσεων» -- 'most general unifier' -> «γενικότερος ενοποιητής» -- 'multi-agent planning' -> «πολυπρακτορικός σχεδιασμός» -- 'multi-agent system' -> «πολυπρακτορικό σύστημα» -- 'Multi-agent system (MAS)' -> «Σύστημα πολλαπλών πρακτόρων» -- 'Multi-swarm optimization' -> «Βελτιστοποίηση πολλαπλών σμήνων» -- 'multiple inheritance' -> «πολλαπλή κληρονομικότητα» -- 'multistage classification' -> «πολυβάθμια κατηγοριοποίηση» -- 'Mutation' -> «Μετάλλαξη» -- 'mutation' -> «μετάλλαξη» -- 'mutual exclusion relations' -> «σχέσεις αμοιβαίου αποκλεισμού» -- 'Naive Bayes classifier' -> «Ταξινομητής Naive Bayes» -- 'Naive semantics' -> «Αφελής σημασιολογία» -- 'Name binding' -> «Δέσμευση ονόματος» -- 'Named graph' -> «Ονομασμένο γράφημα» -- 'Named-entity recognition (NER)' -> «Αναγνώριση επώνυμης οντότητας» -- 'namespace' -> «χώρος ονομάτων» -- 'natural language' -> «φυσική γλώσσα» -- 'Natural language generation (NLG)' -> «Δημιουργία φυσικής γλώσσας» -- 'Natural language processing (NLP)' -> «Επεξεργασία φυσικής γλώσσας» -- 'Natural language programming' -> «Προγραμματισμός φυσικής γλώσσας» -- 'negation as failure' -> «άρνηση ως αποτυχία» -- 'negative context' -> «αρνητικό πλαίσιο (συμφραζόμενων)» -- 'negative preconditions' -> «αρνητικές προϋποθέσεις» -- 'negotiation' -> «διαπραγμάτευση» -- 'Network motif' -> «Μοτίβο δικτύου» -- 'network paralysis' -> «παράλυση νευρωνικού δικτύου» -- 'Neural machine translation (NMT)' -> «Νευρωνική μηχανική μετάφραση» -- 'neural network' -> «νευρωνικό δίκτυο» -- 'Neural Turing machine (NTM)' -> «Μηχανή Neural Turing» -- 'Neuro-fuzzy' -> «Νευρο-ασαφής» -- 'Neurocybernetics' -> «Νευροκυβερνητική» -- 'Neuromorphic engineering' -> «Νευρομορφική μηχανική» -- 'neuron' -> «νευρώνας» -- 'Node' -> «Κόμβος» -- 'node consistency' -> «συνέπεια κόμβου» -- 'noise reduction' -> «μείωση θορύβου» -- 'non-determinism' -> «μη-αιτιοκρατία» -- 'non-monotonic modal logic' -> «μη μονότονη τροπική λογική» -- 'non-symbolic artificial intelligence' -> «μη συμβολική τεχνητή νοημοσύνη» -- 'Nondeterministic algorithm' -> «Μη προσδιοριστικός αλγόριθμος» -- 'Nouvelle AI' -> «Νέο AI» -- 'NP-completeness' -> «NP-πληρότητα» -- 'NP-hardness' -> «NP-σκληρότητα» -- 'null plan' -> «μηδενικό πλάνο» -- 'object' -> «αντικείμενο» -- 'object instances' -> «στιγμιότυπα αντικειμένου» -- 'object-oriented programming' -> «αντικειμενοστραφής προγραμματισμός» -- 'obligation' -> «υποχρέωση» -- 'Occam's razor' -> «ξυράφι του Όκαμ» -- 'occurs check' -> «έλεγχος εμφάνισης» -- 'OCR – Optical Character Recognition' -> «οπτική αναγνώριση χαρακτήρων» -- 'Offline learning' -> «Εκμάθηση εκτός σύνδεσης» -- 'offsprings' -> «απόγονοι» -- 'omniscience' -> «παντογνωσία» -- 'Online machine learning' -> «Διαδικτυακή μηχανική εκμάθηση» -- 'ontology' -> «οντολογία» -- 'Ontology learning' -> «Εκμάθηση οντολογίας» -- 'open world' -> «ανοιχτός κόσμος» -- 'Open-source software (OSS)' -> «Λογισμικό ανοιχτού κώδικα» -- 'opportunistic scheduling' -> «καιροσκοπικός χρονοπρογραμματισμός» -- 'optimal solution' -> «βέλτιστη λύση» -- 'optimization' -> «βελτιστοποίηση» -- 'order inconsistent plan' -> «πλάνο ασυνεπές ως προς τις διατάξεις» -- 'ordered game tree' -> «διατεταγμένο δένδρο» -- 'ordering constraint' -> «περιορισμοί διάταξης» -- 'output layer' -> «επίπεδα εξόδου» -- 'overfitting' -> «υπερπροσαρμογή» -- 'overloading' -> «υπερφόρτωση» -- 'parallel search' -> «παράλληλη αναζήτηση» -- 'parse tree' -> «δένδρο συντακτικής ανάλυσης» -- 'partial look ahead algorithm' -> «αλγόριθμος έγκαιρης μερικής εξέτασης» -- 'Partial order reduction' -> «Μερική μείωση παραγγελίας» -- 'Partially observable Markov decision process (POMDP)' -> «Μερικώς παρατηρήσιμη διαδικασία απόφασης Markov» -- 'Particle swarm optimization (PSO)' -> «Βελτιστοποίηση σμήνος σωματιδίων» -- 'passive troubleshooting' -> «παθητική διάγνωση» -- 'path consistency algorithm' -> «αλγόριθμος συνέπειας μονοπατιού» -- 'Pathfinding' -> «Διαδρομή» -- 'pattern' -> «πρότυπα» -- 'pattern matching' -> «ταυτοποίηση» -- 'pattern of activity' -> «πρότυπα δραστηριότητας» -- 'Pattern recognition' -> «Αναγνώριση μοτίβου» -- 'phenotype' -> «φαινότυπο» -- 'phonemes' -> «φθόγγοι» -- 'physical stance' -> «φυσική προσέγγιση» -- 'pixel' -> «εικονοστοιχείο» -- 'plan' -> «πλάνο» -- 'plan solution' -> «λύση πλάνου» -- 'plan space' -> «χώρος πλάνων» -- 'planner' -> «σχεδιαστής» -- 'planning contingency' -> «σχεδιασμός πολλαπλών ενδεχομένων» -- 'planning graph' -> «γράφος σχεδιασμού» -- 'planning system' -> «σύστημα σχεδιασμού» -- 'polymorphism' -> «πολυμορφισμός» -- 'portals' -> «διαδικτυακές πύλες» -- 'positive context' -> «θετικό πλαίσιο συμφραζόμενων» -- 'powerset' -> «δυναμοσύνολο» -- 'pragmatic analysis' -> «πραγματολογική ανάλυση» -- 'precondition list' -> «λίστα προϋποθέσεων» -- 'predicate' -> «κατηγόρημα» -- 'Predicate logic' -> «Λογική κατηγορήματος» -- 'predicate logic' -> «κατηγορηματική λογική» -- 'prediction' -> «πρόγνωση» -- 'Predictive analytics' -> «Προγνωστική ανάλυση» -- 'predictive models' -> «μοντέλο πρόβλεψης» -- 'prenex conjunctive normal form' -> «προσημασμένη συζευκτική κανονική μορφή» -- 'primitive action' -> «αρχέγονη ενέργεια» -- 'primitive conceptualizations' -> «αρχέγονες εννοιολογικές μορφές» -- 'primitive problem' -> «αρχέγονο πρόβλημα» -- 'Principal component analysis (PCA)' -> «Ανάλυση κύριου συστατικού» -- 'Principle of rationality' -> «Αρχή του ορθολογισμού» -- 'prior probability' -> «προϋπάρχουσα πιθανότητα» -- 'pro-activeness' -> «προνοητικότητα» -- 'Probabilistic programming (PP)' -> «Πιθανοτικός προγραμματισμός» -- 'probability planning' -> «σχεδιασμός με πιθανότητες» -- 'problem description' -> «περιγραφή προβλήματος» -- 'problem world' -> «κόσμος προβλήματος» -- 'procedural knowledge' -> «διαδικαστική γνώση» -- 'production rules' -> «κανόνες παραγωγής» -- 'Production system' -> «Σύστημα παραγωγής» -- 'production system' -> «σύστημα κανόνων παραγωγής» -- 'Programming language' -> «Γλώσσα προγραμματισμού» -- 'progression' -> «ορθή διάσχιση» -- 'projection' -> «προβολή» -- 'promotion' -> «προβιβασμός» -- 'proof' -> «απόδειξη» -- 'proof by contradiction' -> «εις άτοπο απαγωγή» -- 'proof layer' -> «επίπεδο αξιοπιστίας» -- 'proof procedure' -> «διαδικασία απόδειξης» -- 'Propositional calculus' -> «Προτασιακός λογισμός» -- 'propositional logic' -> «προτασιακή λογική» -- 'propositional rules' -> «προτασιακοί κανόνες» -- 'pruning' -> «κλάδεμα» -- 'pure node' -> «αμιγής κόμβος» -- 'pure tree' -> «αμιγές δένδρο» -- 'Python' -> «Πύθων» -- 'Qualification problem' -> «Πρόβλημα προσόντων» -- 'qualitative reasoning' -> «ποιοτική συλλογιστική» -- 'Quantifier' -> «Ποσοτικοποιητής» -- 'quantifier' -> «ποσοδείκτες» -- 'Quantum computing' -> «Κβαντική Υπολογιστική» -- 'Query language' -> «Γλώσσα ερωτήματος» -- 'R programming language' -> «Γλώσσα προγραμματισμού R» -- 'Radial basis function network' -> «Δίκτυο λειτουργίας ακτινικής βάσης» -- 'Random forest' -> «Τυχαίο δάσος» -- 'random learning' -> «τυχαία μάθηση» -- 'rationality' -> «λογικότητα» -- 'reactive agent' -> «αντιδραστικός πράκτορας» -- 'reactive rules' -> «αντιδραστικοί κανόνες» -- 'reactiveness' -> «αντιδραστικότητα» -- 'reasoning' -> «συλλογιστική» -- 'Reasoning system' -> «Σύστημα συλλογισμού» -- 'recurrent' -> «ανατροφοδοτούμενος» -- 'recurrent neural networks' -> «νευρωνικά δίκτυα με ανατροφοδότηση» -- 'Recurrent neural network (RNN)' -> «Επαναλαμβανόμενο νευρωνικό δίκτυο» -- 'recursion' -> «αναδρομή» -- 'reduction' -> «αναγωγή» -- 'reduction operator' -> «τελεστής αναγωγής» -- 'refutation' -> «εις άτοπο απαγωγή» -- 'refutation completeness' -> «πληρότητα ατόπου» -- 'Region connection calculus' -> «Λογισμός σύνδεσης περιοχής» -- 'regression' -> «παλινδρόμηση» -- 'reinforcement learning' -> «ενισχυτική μάθηση» -- 'Reinforcement learning (RL)' -> «Ενισχυτική μάθηση» -- 'repair algorithm' -> «αλγόριθμος επιδιόρθωσης» -- 'repair space' -> «χώρος επιδιορθώσεων» -- 'replanning' -> «επανασχεδιασμός» -- 'representational adequacy' -> «επάρκεια αναπαράστασης» -- 'Reservoir computing' -> «Υπολογισμός δεξαμενής» -- 'resolution principle' -> «αρχή της ανάλυσης» -- 'resolvent' -> «αναλυθέν» -- 'resource competition' -> «ανταγωνισμός πόρων» -- 'Resource Description Framework (RDF)' -> «Πλαίσιο Περιγραφής Πόρων» -- 'resource planning' -> «σχεδιασμός με πόρους» -- 'Restricted Boltzmann machine (RBM)' -> «Περιορισμένη μηχανή Boltzmann» -- 'restriction' -> «περιορισμός» -- 'reversible operator' -> «τελεστής αντιστρέψιμος» -- 'robot' -> «ρομπότ» -- 'robotic agent' -> «ρομποτικός πράκτορας» -- 'Robotics' -> «Ρομποτική» -- 'rule action' -> «ενέργεια κανόνα» -- 'rule base' -> «βάση κανόνων» -- 'rule cluster' -> «ομάδα κανόνων» -- 'rule conclusion' -> «συμπέρασμα κανόνα» -- 'rule condition' -> «συνθήκη κανόνα» -- 'rule of inference' -> «κανόνας συμπερασμού» -- 'Rule-based system' -> «Σύστημα βασισμένο σε κανόνες» -- 'Satisfiability' -> «Ικανοποίηση» -- 'scheduler' -> «χρονοπρογραμματιστής» -- 'schema theorem' -> «θεώρημα σχημάτων» -- 'scout' -> «ανιχνευτής» -- 'scripts' -> «σενάρια» -- 'Search algorithm' -> «Αλγόριθμος αναζήτησης» -- 'search algorithms' -> «αλγόριθμοι αναζήτησης» -- 'search engines' -> «μηχανές αναζήτησης» -- 'search frontier' -> «μέτωπο αναζήτησης» -- 'search space' -> «χώρος αναζήτησης» -- 'search thread' -> «νήμα αναζήτησης» -- 'search tree' -> «δένδρο αναζήτησης» -- 'Selection' -> «Επιλογή» -- 'selection fitness proportionate' -> «επιλογή αναλογικής καταλληλότητας» -- 'selection roulette wheel' -> «επιλογή ρουλέτας» -- 'selection tournament' -> «επιλογή τουρνουά» -- 'Selective Linear Definite clause resolution' -> «Επιλεκτική γραμμική ανάλυση οριστικής πρότασης» -- 'self decay' -> «εξασθένιση» -- 'Self-management' -> «Αυτοδιαχείρηση» -- 'self-organizing feature map' -> «αυτο-οργανούμενη απεικόνιση» -- 'semantic analysis' -> «σημασιολογική ανάλυση» -- 'semantic knowledge' -> «σημασιολογική γνώση» -- 'Semantic network' -> «Σημασιολογικό δίκτυο» -- 'semantic networks' -> «σημασιολογικά δίκτυα» -- 'Semantic query' -> «Σημασιολογική ερώτηση» -- 'Semantic reasoner' -> «Σημασιολογικός λογιστής» -- 'semantic web' -> «σημασιολογικός ιστός» -- 'Semantics' -> «Σημασιολογία» -- 'semantics' -> «σημασιολογία» -- 'sensor' -> «αισθητήρας» -- 'Sensor fusion' -> «Σύντηξη αισθητήρα» -- 'Separation logic' -> «Λογική χωρισμού» -- 'sequential covering algorithm' -> «αλγόριθμος σειριακής κάλυψης» -- 'sequential pattern minimg' -> «εξόρυξη ακολουθιακών προτύπων» -- 'shallow knowledge' -> «ρηχή γνώση» -- 'shell' -> «κέλυφος έμπειρου συστήματος» -- 'sigmoid functions' -> «σιγμοειδείς συναρτήσεις» -- 'sign function' -> «συνάρτηση πρόσημου» -- 'Similarity learning' -> «Εκμάθηση ομοιότητας» -- 'simplification' -> «απλοποίηση» -- 'Simulated Annealing Search' -> «αναζήτηση προσομοιωμένης ανόπτησης» -- 'Simulated annealing (SA)' -> «Προσομοίωση ανόπτησης» -- 'Situated approach' -> «Τοποθετημένη προσέγγιση» -- 'Situation calculus' -> «Λογισμός καταστάσεων» -- 'situation calculus' -> «λογισμός καταστάσεων» -- 'skeptical logic' -> «σκεπτικιστική λογική» -- 'skolemization' -> «σκολεμοποίηση» -- 'smoothing' -> «εξομάλυνση» -- 'social ability' -> «κοινωνικότητα» -- 'softbot' -> «λογισμικός πράκτορας» -- 'Software' -> «Λογισμικό» -- 'software agent' -> «λογισμικός πράκτορας» -- 'Software engineering' -> «Μηχανική Λογισμικού» -- 'solution extraction' -> «εξαγωγή λύσης» -- 'solution refinement' -> «επιλογή λύσης» -- 'sparse data' -> «αραιά δεδομένα» -- 'Spatial-temporal reasoning' -> «Χωροχρονικός συλλογισμός» -- 'specialization rule' -> «κανόνας εξειδίκευσης» -- 'spectrogram' -> «φασματογράφημα» -- 'Speech Act Theory' -> «Θεωρία Πράξεων Λόγου» -- 'Speech recognition' -> «Αναγνώρισης ομιλίας» -- 'speech recognition' -> «αναγνώριση ομιλίας» -- 'spelling correction rules' -> «αλγόριθμος διόρθωσης ορθογραφικών λαθών» -- 'Spiking neural network (SNN)' -> «Spiking νευρωνικό δίκτυο» -- 'Stanford Research Institute Problem Solver (STRIPS)' -> «Επίλυση προβλημάτων του Ερευνητικού Ινστιτούτου Στάνφορντ» -- 'State' -> «Κατάσταση» -- 'state' -> «κατάσταση» -- 'state space' -> «χώρος καταστάσεων» -- 'state-space planning' -> «σχεδιασμός χώρου καταστάσεων» -- 'static world' -> «στατικός κόσμος» -- 'Statistical classification' -> «Στατιστική ταξινόμηση» -- 'Statistical relational learning (SRL)' -> «Στατιστική σχεσιακή μάθηση» -- 'step function' -> «βηματική συνάρτηση» -- 'Stochastic optimization (SO)' -> «Στοχαστική βελτιστοποίηση» -- 'Stochastic semantic analysis' -> «Στοχαστική σημασιολογική ανάλυση» -- 'strict rules' -> «ισχυροί κανόνες» -- 'strong negation' -> «κλασική άρνηση» -- 'Subject-matter expert' -> «Εμπειρογνώμονας σε θέματα» -- 'subsumption architecture' -> «αρχιτεκτονική υπαγωγής» -- 'Superintelligence' -> «Υπερευφυΐα» -- 'superiority relation' -> «σχέση υπεροχής» -- 'Supervised learning' -> «Επίβλεψη μάθησης» -- 'supervised learning' -> «μάθηση με επίβλεψη» -- 'support' -> «υποστήριξη» -- 'Support Vector Machines' -> «μηχανές διανυσμάτων υποστήριξης» -- 'Support-vector machines' -> «Υποστήριξη-διανυσματικά μηχανήματα» -- 'Swarm intelligence (SI)' -> «Νοημοσύνη σμήνους» -- 'Symbolic artificial intelligence' -> «Συμβολική τεχνητή νοημοσύνη» -- 'symbolic artificial intelligence' -> «συμβολική τεχνητή νοημοσύνη» -- 'symbolic logic' -> «συμβολική λογική» -- 'synapse' -> «σύναψη» -- 'syntactic analysis' -> «συντακτική ανάλυση» -- 'Synthetic intelligence (SI)' -> «Συνθετική νοημοσύνη» -- 'system model' -> «μοντέλο συστήματος» -- 'Systems neuroscience' -> «Συστημική νευροεπιστήμη» -- 'Tabu Search' -> «αναζήτηση με απαγορευμένες καταστάσεις» -- 'tacit knowledge' -> «άρρητη γνώση» -- 'target function' -> «συνάρτηση στόχος» -- 'tautology' -> «ταυτολογία» -- 'teach-back' -> «επαναδιδασκαλία» -- 'Technological singularity' -> «Τεχνολογική ιδιομορφία» -- 'temporal association rules' -> «κανόνες συσχέτισης χρονικοί» -- 'Temporal difference learning' -> «Εκμάθηση χρονικής διαφοράς» -- 'temporal logic' -> «λογική χρονική» -- 'Tensor network theory' -> «Θεωρία τανυστικού δικτύου» -- 'term' -> «όρος» -- 'term assignment' -> «ανάθεση όρων» -- 'terminal state' -> «τερματική κατάσταση» -- 'text categorization' -> «κατηγοριοποίηση κειμένων» -- 'text planning' -> «σχεδιασμός κειμένου» -- 'Theoretical computer science (TCS)' -> «Θεωρητική επιστήμη των υπολογιστών» -- 'Theory of computation' -> «Θεωρία υπολογισμού» -- 'therapy space' -> «χώρος θεραπειών» -- 'Thompson sampling' -> «Δειγματοληψία Thompson» -- 'threat' -> «απειλή» -- 'threshold effect' -> «φαινόμενο κατωφλίου» -- 'threshold function' -> «συνάρτηση ενεργοποίησης» -- 'Time complexity' -> «Χρονική πολυπλοκότητα» -- 'timetable' -> «ωρολόγιο πρόγραμμα» -- 'topological sort' -> «τοπολογική διάταξη» -- 'total ordered plan' -> «πλάνο πλήρους διάταξης» -- 'Transhumanism' -> «Υπερανθρωπισμός» -- 'transition operator' -> «τελεστής μετάβασης» -- 'Transition system' -> «Σύστημα μετάβασης» -- 'Tree traversal' -> «Διάβαση δέντρου» -- 'trigger' -> «σκανδαλιστές» -- 'troubleshooting' -> «επιδιόρθωση βλαβών» -- 'True quantified Boolean formula' -> «Αληθής ποσοτικοποιημένος τύπος Boolean» -- 'trust layer' -> «επίπεδο αξιοπιστίας» -- 'truth maintenance' -> «συντήρηση αλήθειας» -- 'truth table' -> «πίνακας αληθείας» -- 'Turing machine' -> «Μηχανή Turing» -- 'Turing test' -> «Δοκιμή Turing» -- 'tutorial interview' -> «διδακτική συνέντευξη» -- 'two-person game' -> «παίγνια δύο αντιπάλων» -- 'Type system' -> «Σύστημα τύπου» -- 'unary constraint' -> «μοναδιαίος περιορισμός» -- 'unconditional probability' -> «πιθανότητα άνευ συνθηκών» -- 'underfitting' -> «υποπροσαρμογή» -- 'unification' -> «ενοποίηση» -- 'unifier' -> «ενοποιητής» -- 'unit clause' -> «μοναδιαία πρόταση» -- 'universal quantifier' -> «καθολικός ποσοδείκτης» -- 'unrestrict' -> «επέκταση» -- 'Unsupervised learning' -> «Εκμάθηση χωρίς επίβλεψη» -- 'unsupervised learning' -> «μάθηση χωρίς επίβλεψη» -- 'valence' -> «σθένος» -- 'valid plan' -> «έγκυρο πλάνο» -- 'validation' -> «έλεγχος αξιοπιστίας» -- 'validation data' -> «δεδομένα επικύρωσης» -- 'veracity' -> «ειλικρίνεια» -- 'verification' -> «επαλήθευση» -- 'Vision processing unit (VPU)' -> «Μονάδα επεξεργασίας όρασης» -- 'Weak AI' -> «Αδύναμη AI» -- 'web portals' -> «πύλες παγκόσμιου ιστού» -- 'web resource' -> «πόρος παγκόσμιου ιστού» -- 'web services' -> «υπηρεσίες παγκόσμιου ιστού» -- 'well formed formulae' -> «ορθά δομημένοι τύποι» -- 'working memory' -> «χώρος εργασίας» -- 'World Wide Web Consortium (W3C)' -> «Κοινοπραξία World Wide Web» diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/es.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/es.txt deleted file mode 100644 index 1412f5b64..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/es.txt +++ /dev/null @@ -1,175 +0,0 @@ -# ES HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> 'exactitud' -- 'activation function' -> 'función de activación' -- 'artificial intelligence' -> 'inteligencia artificial' -- 'AUC' -> 'AUC' -- 'AUC (Area under the ROC curve)' -> 'AUC (área bajo la curva ROC)' -- 'backpropagation' -> 'propagación inversa' -- 'batch' -> 'lote' -- 'batch size' -> 'tamaño del lote' -- 'bias (ethics/fairness)' -> 'sesgo (ética/equidad)' -- 'bias (math) or bias term' -> 'ordenada al origen (matemática) o término de sesgo' -- 'bias in ethics and fairness' -> 'sesgo en ética y equidad' -- 'bias term' -> 'término de sesgo' -- 'binary classification' -> 'Clasificación binaria' -- 'bucketing' -> 'Agrupamiento' -- 'categorical' -> 'categórico' -- 'categorical data' -> 'datos categóricos' -- 'class' -> 'clase' -- 'class-imbalanced dataset' -> 'conjunto de datos con desequilibrio de clases' -- 'class-imbalanced datasets' -> 'conjuntos de datos con desequilibrio de clases' -- 'classification' -> 'clasificación' -- 'classification model' -> 'modelo de clasificación' -- 'classification threshold' -> 'umbral de clasificación' -- 'classifier' -> 'clasificador' -- 'clipping' -> 'recorte' -- 'confusion matrix' -> 'matriz de confusión' -- 'continuous feature' -> 'atributo continuo' -- 'convergence' -> 'convergencia' -- 'data set or dataset' -> 'conjunto de datos (data set o dataset)' -- 'DataFrame' -> 'DataFrame' -- 'dataset' -> 'conjunto de datos' -- 'deep learning' -> 'aprendizaje profundo' -- 'deep model' -> 'modelo profundo' -- 'dense feature' -> 'atributo denso' -- 'depth' -> 'depth' -- 'discrete feature' -> 'atributo discreto' -- 'discrete features' -> 'atributos discretos' -- 'dynamic' -> 'dinámico' -- 'dynamic model' -> 'modelo dinámico' -- 'early stopping' -> 'Interrupción anticipada' -- 'embedding layer' -> 'Capa de embedding' -- 'embedding layers' -> 'capas de incorporación' -- 'epoch' -> 'época' -- 'example' -> 'ejemplo' -- 'false negative (FN)' -> 'falso negativo (FN)' -- 'false negatives' -> 'falsos negativos' -- 'false positive (FP)' -> 'Falso positivo (FP)' -- 'false positive rate' -> 'tasa de falsos positivos' -- 'false positive rate (FPR)' -> 'tasa de falsos positivos (FPR)' -- 'false positives' -> 'falsos positivos' -- 'feature' -> 'función' -- 'feature cross' -> 'combinación de atributos' -- 'feature crosses' -> 'combinaciones de atributos' -- 'feature engineering' -> 'ingeniería de atributos.' -- 'feature set' -> 'conjunto de atributos' -- 'feature vector' -> 'vector de atributos' -- 'feedback loop' -> 'ciclo de retroalimentación' -- 'generalization' -> 'generalización' -- 'generalization curve' -> 'Curva de generalización' -- 'gradient descent' -> 'descenso de gradientes' -- 'ground truth' -> 'Verdad fundamental' -- 'hidden layer' -> 'Capa oculta' -- 'hidden layer(s)' -> 'capas ocultas' -- 'hyperparameter' -> 'hiperparámetro' -- 'independently and identically distributed (i.i.d)' -> 'independiente e idénticamente distribuido (i.i.d.)' -- 'inference' -> 'Inferencia' -- 'input layer' -> 'capa de entrada' -- 'interpretability' -> 'interpretabilidad' -- 'iteration' -> 'iteración' -- 'L0regularization' -> 'Regularización L0' -- 'L1loss' -> 'pérdida L1' -- 'L1regularization' -> 'regularización L1' -- 'L2loss' -> 'pérdida L2' -- 'L2regularization' -> 'regularización L2' -- 'label' -> 'etiqueta' -- 'labeled example' -> 'ejemplo etiquetado' -- 'lambda' -> 'lambda' -- 'layer' -> 'oculta' -- 'learning rate' -> 'Tasa de aprendizaje' -- 'linear' -> 'linear' -- 'linear model' -> 'modelo lineal' -- 'linear models' -> 'modelos lineales' -- 'linear regression' -> 'regresión lineal' -- 'Log Loss' -> 'pérdida logística' -- 'log-odds' -> 'Logaritmo de probabilidad' -- 'logistic regression' -> 'regresión logística' -- 'loss' -> 'pérdida' -- 'loss curve' -> 'Curva de pérdida' -- 'loss function' -> 'función de pérdida' -- 'machine learning' -> 'aprendizaje automático' -- 'majority class' -> 'clase mayoritaria' -- 'mini-batch' -> 'minilote' -- 'minority class' -> 'clase minoritaria' -- 'model' -> 'modelo' -- 'multi-class classification' -> 'clasificación de clases múltiples' -- 'negative class' -> 'clase negativa' -- 'negative classes' -> 'clases negativas' -- 'neural network' -> 'neuronal prealimentada' -- 'neural networks' -> 'redes neuronales' -- 'neuron' -> 'neurona' -- 'node (neural network)' -> 'nodo (red neuronal)' -- 'nonlinear' -> 'no lineal' -- 'nonstationarity' -> 'no estacionariedad' -- 'normalization' -> 'Normalización' -- 'numerical data' -> 'datos numéricos' -- 'offline' -> 'Sin conexión' -- 'offline inference' -> 'inferencia sin conexión' -- 'one-hot encoding' -> 'codificación one-hot' -- 'one-hot vector' -> 'vector de un solo 1' -- 'one-vs.-all' -> 'uno frente a todos' -- 'online' -> 'en línea' -- 'online inference' -> 'inferencia en línea' -- 'output layer' -> 'capa de salida' -- 'output layers' -> 'capas de salida' -- 'overfitting' -> 'sobreajuste' -- 'pandas' -> 'pandas' -- 'parameter' -> 'parámetro' -- 'positive class' -> 'clase positiva' -- 'positive classes' -> 'clases positivas' -- 'post-processing' -> 'posprocesamiento' -- 'precision' -> 'precision' -- 'prediction' -> 'predicción' -- 'proxy labels' -> 'etiquetas de proxy' -- 'RAG' -> 'RAG' -- 'rater' -> 'evaluador' -- 'recall' -> 'recall' -- 'Rectified Linear Unit (ReLU)' -> 'Unidad lineal rectificada (ReLU)' -- 'regression model' -> 'modelo de regresión' -- 'regularization' -> 'regularización' -- 'regularization rate' -> 'tasa de regularización' -- 'ReLU' -> 'ReLU' -- 'retrieval-augmented generation' -> 'generación aumentada por recuperación' -- 'retrieval-augmented generation (RAG)' -> 'Generación mejorada por recuperación (RAG)' -- 'ROC (receiver operating characteristic) Curve' -> 'Curva ROC (característica operativa del receptor)' -- 'ROC curve' -> 'curva ROC' -- 'Root Mean Squared Error (RMSE)' -> 'Raíz cuadrada del error cuadrático medio (RMSE)' -- 'sigmoid function' -> 'función sigmoidea' -- 'softmax' -> 'softmax' -- 'sparse feature' -> 'atributo disperso' -- 'sparse representation' -> 'representación dispersa' -- 'sparse vector' -> 'vector disperso' -- 'squared loss' -> 'Pérdida al cuadrado' -- 'static' -> 'static' -- 'static inference' -> 'Inferencia estática' -- 'static model' -> 'modelo estático' -- 'stationarity' -> 'Estacionariedad' -- 'Stochastic Gradient Descent (SGD)' -> 'Descenso de gradientes estocástico (SGD)' -- 'supervised learning' -> 'aprendizaje supervisado' -- 'supervised machine learning' -> 'aprendizaje automático supervisado' -- 'synthetic feature' -> 'atributo sintético' -- 'synthetic features' -> 'atributos sintéticos' -- 'test loss' -> 'Pérdida de prueba' -- 'training' -> 'entrenamiento' -- 'training loss' -> 'Pérdida de entrenamiento' -- 'training set' -> 'conjunto de entrenamiento' -- 'training-serving skew' -> 'Sesgo entre el entrenamiento y la entrega' -- 'true negative (TN)' -> 'verdadero negativo (VN)' -- 'true negatives' -> 'verdaderos negativos' -- 'true positive (TP)' -> 'verdadero positivo (VP)' -- 'true positive rate' -> 'tasa de verdaderos positivos' -- 'true positive rate (TPR)' -> 'tasa de verdaderos positivos (TVP)' -- 'true positives' -> 'verdaderos positivos' -- 'underfitting' -> 'Subajuste' -- 'unlabeled example' -> 'ejemplo sin etiqueta' -- 'unsupervised machine learning' -> 'aprendizaje automático no supervisado' -- 'validation' -> 'validación' -- 'validation dataset' -> 'conjunto de datos de validación' -- 'validation loss' -> 'Pérdida de validación' -- 'validation set' -> 'conjunto de validación' -- 'weight' -> 'peso' -- 'weighted sum' -> 'suma ponderada' -- 'Z-score normalization' -> 'normalización de la puntuación Z' diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/es_419.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/es_419.txt deleted file mode 100644 index 1412f5b64..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/es_419.txt +++ /dev/null @@ -1,175 +0,0 @@ -# ES HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> 'exactitud' -- 'activation function' -> 'función de activación' -- 'artificial intelligence' -> 'inteligencia artificial' -- 'AUC' -> 'AUC' -- 'AUC (Area under the ROC curve)' -> 'AUC (área bajo la curva ROC)' -- 'backpropagation' -> 'propagación inversa' -- 'batch' -> 'lote' -- 'batch size' -> 'tamaño del lote' -- 'bias (ethics/fairness)' -> 'sesgo (ética/equidad)' -- 'bias (math) or bias term' -> 'ordenada al origen (matemática) o término de sesgo' -- 'bias in ethics and fairness' -> 'sesgo en ética y equidad' -- 'bias term' -> 'término de sesgo' -- 'binary classification' -> 'Clasificación binaria' -- 'bucketing' -> 'Agrupamiento' -- 'categorical' -> 'categórico' -- 'categorical data' -> 'datos categóricos' -- 'class' -> 'clase' -- 'class-imbalanced dataset' -> 'conjunto de datos con desequilibrio de clases' -- 'class-imbalanced datasets' -> 'conjuntos de datos con desequilibrio de clases' -- 'classification' -> 'clasificación' -- 'classification model' -> 'modelo de clasificación' -- 'classification threshold' -> 'umbral de clasificación' -- 'classifier' -> 'clasificador' -- 'clipping' -> 'recorte' -- 'confusion matrix' -> 'matriz de confusión' -- 'continuous feature' -> 'atributo continuo' -- 'convergence' -> 'convergencia' -- 'data set or dataset' -> 'conjunto de datos (data set o dataset)' -- 'DataFrame' -> 'DataFrame' -- 'dataset' -> 'conjunto de datos' -- 'deep learning' -> 'aprendizaje profundo' -- 'deep model' -> 'modelo profundo' -- 'dense feature' -> 'atributo denso' -- 'depth' -> 'depth' -- 'discrete feature' -> 'atributo discreto' -- 'discrete features' -> 'atributos discretos' -- 'dynamic' -> 'dinámico' -- 'dynamic model' -> 'modelo dinámico' -- 'early stopping' -> 'Interrupción anticipada' -- 'embedding layer' -> 'Capa de embedding' -- 'embedding layers' -> 'capas de incorporación' -- 'epoch' -> 'época' -- 'example' -> 'ejemplo' -- 'false negative (FN)' -> 'falso negativo (FN)' -- 'false negatives' -> 'falsos negativos' -- 'false positive (FP)' -> 'Falso positivo (FP)' -- 'false positive rate' -> 'tasa de falsos positivos' -- 'false positive rate (FPR)' -> 'tasa de falsos positivos (FPR)' -- 'false positives' -> 'falsos positivos' -- 'feature' -> 'función' -- 'feature cross' -> 'combinación de atributos' -- 'feature crosses' -> 'combinaciones de atributos' -- 'feature engineering' -> 'ingeniería de atributos.' -- 'feature set' -> 'conjunto de atributos' -- 'feature vector' -> 'vector de atributos' -- 'feedback loop' -> 'ciclo de retroalimentación' -- 'generalization' -> 'generalización' -- 'generalization curve' -> 'Curva de generalización' -- 'gradient descent' -> 'descenso de gradientes' -- 'ground truth' -> 'Verdad fundamental' -- 'hidden layer' -> 'Capa oculta' -- 'hidden layer(s)' -> 'capas ocultas' -- 'hyperparameter' -> 'hiperparámetro' -- 'independently and identically distributed (i.i.d)' -> 'independiente e idénticamente distribuido (i.i.d.)' -- 'inference' -> 'Inferencia' -- 'input layer' -> 'capa de entrada' -- 'interpretability' -> 'interpretabilidad' -- 'iteration' -> 'iteración' -- 'L0regularization' -> 'Regularización L0' -- 'L1loss' -> 'pérdida L1' -- 'L1regularization' -> 'regularización L1' -- 'L2loss' -> 'pérdida L2' -- 'L2regularization' -> 'regularización L2' -- 'label' -> 'etiqueta' -- 'labeled example' -> 'ejemplo etiquetado' -- 'lambda' -> 'lambda' -- 'layer' -> 'oculta' -- 'learning rate' -> 'Tasa de aprendizaje' -- 'linear' -> 'linear' -- 'linear model' -> 'modelo lineal' -- 'linear models' -> 'modelos lineales' -- 'linear regression' -> 'regresión lineal' -- 'Log Loss' -> 'pérdida logística' -- 'log-odds' -> 'Logaritmo de probabilidad' -- 'logistic regression' -> 'regresión logística' -- 'loss' -> 'pérdida' -- 'loss curve' -> 'Curva de pérdida' -- 'loss function' -> 'función de pérdida' -- 'machine learning' -> 'aprendizaje automático' -- 'majority class' -> 'clase mayoritaria' -- 'mini-batch' -> 'minilote' -- 'minority class' -> 'clase minoritaria' -- 'model' -> 'modelo' -- 'multi-class classification' -> 'clasificación de clases múltiples' -- 'negative class' -> 'clase negativa' -- 'negative classes' -> 'clases negativas' -- 'neural network' -> 'neuronal prealimentada' -- 'neural networks' -> 'redes neuronales' -- 'neuron' -> 'neurona' -- 'node (neural network)' -> 'nodo (red neuronal)' -- 'nonlinear' -> 'no lineal' -- 'nonstationarity' -> 'no estacionariedad' -- 'normalization' -> 'Normalización' -- 'numerical data' -> 'datos numéricos' -- 'offline' -> 'Sin conexión' -- 'offline inference' -> 'inferencia sin conexión' -- 'one-hot encoding' -> 'codificación one-hot' -- 'one-hot vector' -> 'vector de un solo 1' -- 'one-vs.-all' -> 'uno frente a todos' -- 'online' -> 'en línea' -- 'online inference' -> 'inferencia en línea' -- 'output layer' -> 'capa de salida' -- 'output layers' -> 'capas de salida' -- 'overfitting' -> 'sobreajuste' -- 'pandas' -> 'pandas' -- 'parameter' -> 'parámetro' -- 'positive class' -> 'clase positiva' -- 'positive classes' -> 'clases positivas' -- 'post-processing' -> 'posprocesamiento' -- 'precision' -> 'precision' -- 'prediction' -> 'predicción' -- 'proxy labels' -> 'etiquetas de proxy' -- 'RAG' -> 'RAG' -- 'rater' -> 'evaluador' -- 'recall' -> 'recall' -- 'Rectified Linear Unit (ReLU)' -> 'Unidad lineal rectificada (ReLU)' -- 'regression model' -> 'modelo de regresión' -- 'regularization' -> 'regularización' -- 'regularization rate' -> 'tasa de regularización' -- 'ReLU' -> 'ReLU' -- 'retrieval-augmented generation' -> 'generación aumentada por recuperación' -- 'retrieval-augmented generation (RAG)' -> 'Generación mejorada por recuperación (RAG)' -- 'ROC (receiver operating characteristic) Curve' -> 'Curva ROC (característica operativa del receptor)' -- 'ROC curve' -> 'curva ROC' -- 'Root Mean Squared Error (RMSE)' -> 'Raíz cuadrada del error cuadrático medio (RMSE)' -- 'sigmoid function' -> 'función sigmoidea' -- 'softmax' -> 'softmax' -- 'sparse feature' -> 'atributo disperso' -- 'sparse representation' -> 'representación dispersa' -- 'sparse vector' -> 'vector disperso' -- 'squared loss' -> 'Pérdida al cuadrado' -- 'static' -> 'static' -- 'static inference' -> 'Inferencia estática' -- 'static model' -> 'modelo estático' -- 'stationarity' -> 'Estacionariedad' -- 'Stochastic Gradient Descent (SGD)' -> 'Descenso de gradientes estocástico (SGD)' -- 'supervised learning' -> 'aprendizaje supervisado' -- 'supervised machine learning' -> 'aprendizaje automático supervisado' -- 'synthetic feature' -> 'atributo sintético' -- 'synthetic features' -> 'atributos sintéticos' -- 'test loss' -> 'Pérdida de prueba' -- 'training' -> 'entrenamiento' -- 'training loss' -> 'Pérdida de entrenamiento' -- 'training set' -> 'conjunto de entrenamiento' -- 'training-serving skew' -> 'Sesgo entre el entrenamiento y la entrega' -- 'true negative (TN)' -> 'verdadero negativo (VN)' -- 'true negatives' -> 'verdaderos negativos' -- 'true positive (TP)' -> 'verdadero positivo (VP)' -- 'true positive rate' -> 'tasa de verdaderos positivos' -- 'true positive rate (TPR)' -> 'tasa de verdaderos positivos (TVP)' -- 'true positives' -> 'verdaderos positivos' -- 'underfitting' -> 'Subajuste' -- 'unlabeled example' -> 'ejemplo sin etiqueta' -- 'unsupervised machine learning' -> 'aprendizaje automático no supervisado' -- 'validation' -> 'validación' -- 'validation dataset' -> 'conjunto de datos de validación' -- 'validation loss' -> 'Pérdida de validación' -- 'validation set' -> 'conjunto de validación' -- 'weight' -> 'peso' -- 'weighted sum' -> 'suma ponderada' -- 'Z-score normalization' -> 'normalización de la puntuación Z' diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/fr.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/fr.txt deleted file mode 100644 index 3f64f3098..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/fr.txt +++ /dev/null @@ -1,175 +0,0 @@ -# FR HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> 'accuracy' -- 'activation function' -> 'fonction d'activation' -- 'artificial intelligence' -> 'intelligence artificielle' -- 'AUC' -> 'AUC' -- 'AUC (Area under the ROC curve)' -> 'AUC (aire sous la courbe ROC)' -- 'backpropagation' -> 'rétropropagation' -- 'batch' -> 'lot' -- 'batch size' -> 'taille du lot' -- 'bias (ethics/fairness)' -> 'biais (éthique/équité) (bias (ethics/fairness))' -- 'bias (math) or bias term' -> 'biais (mathématiques) ou terme de biais' -- 'bias in ethics and fairness' -> 'biais en matière d'éthique et d'équité' -- 'bias term' -> 'biais' -- 'binary classification' -> 'classification binaire' -- 'bucketing' -> 'le binning' -- 'categorical' -> 'catégorielle' -- 'categorical data' -> 'données catégorielles' -- 'class' -> 'classe' -- 'class-imbalanced dataset' -> 'ensemble de données avec déséquilibre des classes' -- 'class-imbalanced datasets' -> 'ensembles de données déséquilibrés en termes de classes' -- 'classification' -> 'classification' -- 'classification model' -> 'modèle de classification' -- 'classification threshold' -> 'seuil de classification' -- 'classifier' -> 'classificateur' -- 'clipping' -> 'écrêtage' -- 'confusion matrix' -> 'matrice de confusion' -- 'continuous feature' -> 'caractéristique continue' -- 'convergence' -> 'convergence' -- 'data set or dataset' -> 'ensemble de données (data set ou dataset)' -- 'DataFrame' -> 'DataFrame' -- 'dataset' -> 'ensemble de données' -- 'deep learning' -> 'deep learning' -- 'deep model' -> 'modèle deep learning' -- 'dense feature' -> 'caractéristique dense' -- 'depth' -> 'profondeur' -- 'discrete feature' -> 'caractéristique discrète' -- 'discrete features' -> 'caractéristiques discrètes' -- 'dynamic' -> 'dynamic' -- 'dynamic model' -> 'modèle dynamique' -- 'early stopping' -> 'arrêt prématuré' -- 'embedding layer' -> 'couche d'embedding' -- 'embedding layers' -> 'couches d'embedding' -- 'epoch' -> 'epoch' -- 'example' -> 'exemple' -- 'false negative (FN)' -> 'Faux négatif (FN)' -- 'false negatives' -> 'faux négatifs' -- 'false positive (FP)' -> 'Faux positif (FP)' -- 'false positive rate' -> 'taux de faux positifs' -- 'false positive rate (FPR)' -> 'taux de faux positifs (TFP) (false positive rate (FPR))' -- 'false positives' -> 'faux positifs' -- 'feature' -> 'fonctionnalité' -- 'feature cross' -> 'croisement de caractéristiques' -- 'feature crosses' -> 'caractéristiques croisées' -- 'feature engineering' -> 'l'ingénierie des caractéristiques.' -- 'feature set' -> 'ensemble de fonctionnalités' -- 'feature vector' -> 'vecteur de caractéristiques' -- 'feedback loop' -> 'boucle de rétroaction' -- 'generalization' -> 'généralisation' -- 'generalization curve' -> 'courbe de généralisation' -- 'gradient descent' -> 'descente de gradient' -- 'ground truth' -> 'vérité terrain' -- 'hidden layer' -> 'couche cachée' -- 'hidden layer(s)' -> 'couches cachées' -- 'hyperparameter' -> 'hyperparamètre' -- 'independently and identically distributed (i.i.d)' -> 'variables indépendantes et identiquement distribuées (i.i.d)' -- 'inference' -> 'inférence' -- 'input layer' -> 'couche d'entrée' -- 'interpretability' -> 'interprétabilité' -- 'iteration' -> 'itération' -- 'L0regularization' -> 'Régularisation L0' -- 'L1loss' -> 'perte L1' -- 'L1regularization' -> 'régularisationL1' -- 'L2loss' -> 'perte L2' -- 'L2regularization' -> 'régularisationL2' -- 'label' -> 'étiquette' -- 'labeled example' -> 'exemple étiqueté' -- 'lambda' -> 'lambda' -- 'layer' -> 'cachée)' -- 'learning rate' -> 'taux d'apprentissage' -- 'linear' -> 'linear' -- 'linear model' -> 'modèle linéaire' -- 'linear models' -> 'modèles linéaires' -- 'linear regression' -> 'régression linéaire' -- 'Log Loss' -> 'perte logistique' -- 'log-odds' -> 'logarithme de cote' -- 'logistic regression' -> 'régression logistique' -- 'loss' -> 'perte' -- 'loss curve' -> 'courbe de perte' -- 'loss function' -> 'fonction de perte' -- 'machine learning' -> 'machine learning' -- 'majority class' -> 'classe majoritaire' -- 'mini-batch' -> 'mini-lot' -- 'minority class' -> 'classe minoritaire' -- 'model' -> 'modèle' -- 'multi-class classification' -> 'classification à classes multiples' -- 'negative class' -> 'classe négative' -- 'negative classes' -> 'classes négatives' -- 'neural network' -> 'neurones feedforward' -- 'neural networks' -> 'réseaux de neurones' -- 'neuron' -> 'neurone' -- 'node (neural network)' -> 'nœud (réseau de neurones)' -- 'nonlinear' -> 'non linéaire' -- 'nonstationarity' -> 'non-stationnarité' -- 'normalization' -> 'normalisation' -- 'numerical data' -> 'données numériques' -- 'offline' -> 'Hors connexion' -- 'offline inference' -> 'inférence hors connexion' -- 'one-hot encoding' -> 'Encodage one-hot' -- 'one-hot vector' -> 'vecteur one-hot' -- 'one-vs.-all' -> 'un contre tous' -- 'online' -> 'online' -- 'online inference' -> 'inférence en ligne' -- 'output layer' -> 'couche de sortie' -- 'output layers' -> 'couches de sortie' -- 'overfitting' -> 'surapprentissage' -- 'pandas' -> 'pandas' -- 'parameter' -> 'paramètre' -- 'positive class' -> 'classe positive' -- 'positive classes' -> 'classes positives' -- 'post-processing' -> 'post-traitement' -- 'precision' -> 'precision' -- 'prediction' -> 'prédiction' -- 'proxy labels' -> 'étiquettes de substitution' -- 'RAG' -> 'RAG' -- 'rater' -> 'évaluateur' -- 'recall' -> 'recall (rappel)' -- 'Rectified Linear Unit (ReLU)' -> 'Unité de rectification linéaire (ReLU)' -- 'regression model' -> 'modèle de régression' -- 'regularization' -> 'régularisation' -- 'regularization rate' -> 'taux de régularisation' -- 'ReLU' -> 'ReLU' -- 'retrieval-augmented generation' -> 'génération augmentée par récupération' -- 'retrieval-augmented generation (RAG)' -> 'génération augmentée par récupération (RAG)' -- 'ROC (receiver operating characteristic) Curve' -> 'Courbe ROC (receiver operating characteristic)' -- 'ROC curve' -> 'courbe ROC' -- 'Root Mean Squared Error (RMSE)' -> 'la racine carrée de l'erreur quadratique moyenne (RMSE, Root Mean Squared Error)' -- 'sigmoid function' -> 'fonction sigmoïde' -- 'softmax' -> 'softmax' -- 'sparse feature' -> 'caractéristique creuse' -- 'sparse representation' -> 'représentation creuse' -- 'sparse vector' -> 'vecteur creux' -- 'squared loss' -> 'perte quadratique' -- 'static' -> 'static' -- 'static inference' -> 'inférence statique' -- 'static model' -> 'modèle statique' -- 'stationarity' -> 'stationnarité' -- 'Stochastic Gradient Descent (SGD)' -> 'Descente de gradient stochastique (SGD, Stochastic Gradient Descent)' -- 'supervised learning' -> 'apprentissage supervisé' -- 'supervised machine learning' -> 'machine learning supervisé' -- 'synthetic feature' -> 'caractéristique synthétique' -- 'synthetic features' -> 'caractéristiques synthétiques' -- 'test loss' -> 'perte de test' -- 'training' -> 'entraînement' -- 'training loss' -> 'perte d'entraînement' -- 'training set' -> 'ensemble d'entraînement' -- 'training-serving skew' -> 'décalage entraînement/mise en service' -- 'true negative (TN)' -> 'vrai négatif (VN)' -- 'true negatives' -> 'vrais négatifs' -- 'true positive (TP)' -> 'vrai positif (VP)' -- 'true positive rate' -> 'taux de vrais positifs' -- 'true positive rate (TPR)' -> 'taux de vrais positifs (TVP)' -- 'true positives' -> 'vrais positifs' -- 'underfitting' -> 'sous-ajustement' -- 'unlabeled example' -> 'exemple sans étiquette' -- 'unsupervised machine learning' -> 'machine learning non supervisé' -- 'validation' -> 'validation' -- 'validation dataset' -> 'ensemble de données de validation' -- 'validation loss' -> 'perte de validation' -- 'validation set' -> 'ensemble de validation' -- 'weight' -> 'weight' -- 'weighted sum' -> 'Somme pondérée' -- 'Z-score normalization' -> 'Normalisation du score Z' diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ja.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ja.txt deleted file mode 100644 index fb3787a79..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ja.txt +++ /dev/null @@ -1,175 +0,0 @@ -# JA HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> 「accuracy」 -- 'activation function' -> 「活性化関数」 -- 'artificial intelligence' -> 「AI」 -- 'AUC' -> 「AUC」 -- 'AUC (Area under the ROC curve)' -> 「AUC(ROC 曲線の下の面積)」 -- 'backpropagation' -> 「バックプロパゲーション」 -- 'batch' -> 「Batch」 -- 'batch size' -> 「バッチサイズ」 -- 'bias (ethics/fairness)' -> 「バイアス(倫理/公平性)」 -- 'bias (math) or bias term' -> 「バイアス(数学)またはバイアス項」 -- 'bias in ethics and fairness' -> 「倫理と公平性のバイアス」 -- 'bias term' -> 「バイアス項」 -- 'binary classification' -> 「バイナリ分類」 -- 'bucketing' -> 「バケット化、」 -- 'categorical' -> 「カテゴリカル」 -- 'categorical data' -> 「カテゴリデータ」 -- 'class' -> 「クラス」 -- 'class-imbalanced dataset' -> 「クラスの不均衡なデータセット」 -- 'class-imbalanced datasets' -> 「クラス不均衡データセット」 -- 'classification' -> 「分類」 -- 'classification model' -> 「分類モデル」 -- 'classification threshold' -> 「分類しきい値」 -- 'classifier' -> 「分類器」 -- 'clipping' -> 「クリッピング」 -- 'confusion matrix' -> 「混同行列」 -- 'continuous feature' -> 「連続特徴」 -- 'convergence' -> 「収束」 -- 'data set or dataset' -> 「データセット」 -- 'DataFrame' -> 「DataFrame」 -- 'dataset' -> 「データセット」 -- 'deep learning' -> 「ディープ ラーニング」 -- 'deep model' -> 「ディープモデル」 -- 'dense feature' -> 「密な特徴」 -- 'depth' -> 「深さ」 -- 'discrete feature' -> 「離散特徴」 -- 'discrete features' -> 「離散特徴」 -- 'dynamic' -> 「動的」 -- 'dynamic model' -> 「動的モデル」 -- 'early stopping' -> 「早期停止」 -- 'embedding layer' -> 「エンベディング レイヤ」 -- 'embedding layers' -> 「エンベディング レイヤ」 -- 'epoch' -> 「エポック」 -- 'example' -> 「例」 -- 'false negative (FN)' -> 「偽陰性(FN)」 -- 'false negatives' -> 「偽陰性」 -- 'false positive (FP)' -> 「偽陽性(FP)」 -- 'false positive rate' -> 「偽陽性率」 -- 'false positive rate (FPR)' -> 「偽陽性率(FPR)」 -- 'false positives' -> 「偽陽性」 -- 'feature' -> 「機能」 -- 'feature cross' -> 「特徴クロス」 -- 'feature crosses' -> 「特徴交差」 -- 'feature engineering' -> 「2つのステップが含まれます」 -- 'feature set' -> 「機能セット」 -- 'feature vector' -> 「特徴ベクトル」 -- 'feedback loop' -> 「フィードバック ループ」 -- 'generalization' -> 「一般化」 -- 'generalization curve' -> 「汎化曲線」 -- 'gradient descent' -> 「勾配降下法」 -- 'ground truth' -> 「グラウンド トゥルース」 -- 'hidden layer' -> 「隠れ層」 -- 'hidden layer(s)' -> 「隠れ層」 -- 'hyperparameter' -> 「ハイパーパラメータ」 -- 'independently and identically distributed (i.i.d)' -> 「独立同分布(i.i.d)」 -- 'inference' -> 「推論」 -- 'input layer' -> 「入力レイヤ」 -- 'interpretability' -> 「解釈可能性」 -- 'iteration' -> 「繰り返し」 -- 'L0regularization' -> 「L0正規化」 -- 'L1loss' -> 「L1損失」 -- 'L1regularization' -> 「L1正則化」 -- 'L2loss' -> 「L2損失」 -- 'L2regularization' -> 「L2正則化」 -- 'label' -> 「ラベル」 -- 'labeled example' -> 「ラベル付きの例」 -- 'lambda' -> 「lambda」 -- 'layer' -> 「レイヤ」 -- 'learning rate' -> 「学習率」 -- 'linear' -> 「線形」 -- 'linear model' -> 「線形モデル」 -- 'linear models' -> 「線形モデル」 -- 'linear regression' -> 「線形回帰」 -- 'Log Loss' -> 「対数損失」 -- 'log-odds' -> 「対数オッズ」 -- 'logistic regression' -> 「ロジスティック回帰」 -- 'loss' -> 「損失」 -- 'loss curve' -> 「損失曲線」 -- 'loss function' -> 「損失関数」 -- 'machine learning' -> 「機械学習」 -- 'majority class' -> 「多数派クラス」 -- 'mini-batch' -> 「ミニバッチ」 -- 'minority class' -> 「少数派クラス」 -- 'model' -> 「モデル」 -- 'multi-class classification' -> 「マルチクラス分類」 -- 'negative class' -> 「陰性クラス」 -- 'negative classes' -> 「陰性クラス」 -- 'neural network' -> 「ニューラル ネットワークの」 -- 'neural networks' -> 「ニューラル ネットワーク」 -- 'neuron' -> 「ニューロン」 -- 'node (neural network)' -> 「ノード(ニューラル ネットワーク)」 -- 'nonlinear' -> 「非線形」 -- 'nonstationarity' -> 「非定常性」 -- 'normalization' -> 「正規化」 -- 'numerical data' -> 「数値データ」 -- 'offline' -> 「オフライン」 -- 'offline inference' -> 「オフライン推論」 -- 'one-hot encoding' -> 「ワンホット エンコード」 -- 'one-hot vector' -> 「ワンホット ベクトル」 -- 'one-vs.-all' -> 「1 対すべて」 -- 'online' -> 「オンライン」 -- 'online inference' -> 「オンライン推論」 -- 'output layer' -> 「出力レイヤ」 -- 'output layers' -> 「出力レイヤ」 -- 'overfitting' -> 「過学習」 -- 'pandas' -> 「pandas」 -- 'parameter' -> 「パラメータ」 -- 'positive class' -> 「陽性クラス」 -- 'positive classes' -> 「陽性クラス」 -- 'post-processing' -> 「後処理」 -- 'precision' -> 「precision」 -- 'prediction' -> 「予測」 -- 'proxy labels' -> 「プロキシラベル」 -- 'RAG' -> 「RAG」 -- 'rater' -> 「rater」 -- 'recall' -> 「recall」 -- 'Rectified Linear Unit (ReLU)' -> 「正規化線形ユニット(ReLU)」 -- 'regression model' -> 「回帰モデル」 -- 'regularization' -> 「正則化」 -- 'regularization rate' -> 「正則化率」 -- 'ReLU' -> 「ReLU」 -- 'retrieval-augmented generation' -> 「検索拡張生成」 -- 'retrieval-augmented generation (RAG)' -> 「検索拡張生成(RAG)」 -- 'ROC (receiver operating characteristic) Curve' -> 「ROC(受信者操作特性)曲線」 -- 'ROC curve' -> 「ROC 曲線」 -- 'Root Mean Squared Error (RMSE)' -> 「二乗平均平方根誤差(RMSE)」 -- 'sigmoid function' -> 「シグモイド関数」 -- 'softmax' -> 「Softmax」 -- 'sparse feature' -> 「スパース特徴」 -- 'sparse representation' -> 「スパース表現」 -- 'sparse vector' -> 「スパース ベクトル」 -- 'squared loss' -> 「二乗損失」 -- 'static' -> 「static」 -- 'static inference' -> 「静的推論」 -- 'static model' -> 「静的モデル」 -- 'stationarity' -> 「定常性」 -- 'Stochastic Gradient Descent (SGD)' -> 「確率的勾配降下法(SGD)」 -- 'supervised learning' -> 「教師あり学習」 -- 'supervised machine learning' -> 「教師あり機械学習」 -- 'synthetic feature' -> 「合成特徴」 -- 'synthetic features' -> 「合成特徴」 -- 'test loss' -> 「テスト損失」 -- 'training' -> 「トレーニング」 -- 'training loss' -> 「トレーニングの損失」 -- 'training set' -> 「トレーニング セット」 -- 'training-serving skew' -> 「トレーニング サービング スキュー」 -- 'true negative (TN)' -> 「真陰性(TN)」 -- 'true negatives' -> 「真陰性」 -- 'true positive (TP)' -> 「真陽性(TP)」 -- 'true positive rate' -> 「真陽性率」 -- 'true positive rate (TPR)' -> 「真陽性率(TPR)」 -- 'true positives' -> 「真陽性」 -- 'underfitting' -> 「アンダーフィット」 -- 'unlabeled example' -> 「ラベルのない例」 -- 'unsupervised machine learning' -> 「教師なし機械学習」 -- 'validation' -> 「検証」 -- 'validation dataset' -> 「検証データセット」 -- 'validation loss' -> 「検証損失」 -- 'validation set' -> 「検証セット」 -- 'weight' -> 「weight」 -- 'weighted sum' -> 「加重合計」 -- 'Z-score normalization' -> 「Z スコアの正規化」 diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/pt_BR.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/pt_BR.txt deleted file mode 100644 index 16b2b9dee..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/pt_BR.txt +++ /dev/null @@ -1,175 +0,0 @@ -# PT-BR HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> 'precisão' -- 'activation function' -> 'função de ativação' -- 'artificial intelligence' -> 'inteligência artificial' -- 'AUC' -> 'AUC' -- 'AUC (Area under the ROC curve)' -> 'AUC (área sob a curva ROC)' -- 'backpropagation' -> 'retropropagação' -- 'batch' -> 'lote' -- 'batch size' -> 'tamanho do lote' -- 'bias (ethics/fairness)' -> 'viés (ética/justiça)' -- 'bias (math) or bias term' -> 'viés (matemática) ou termo de viés' -- 'bias in ethics and fairness' -> 'viés em ética e justiça' -- 'bias term' -> 'termo de viés' -- 'binary classification' -> 'classificação binária' -- 'bucketing' -> 'agrupamento por classes' -- 'categorical' -> 'categórico' -- 'categorical data' -> 'dados categóricos' -- 'class' -> 'classe' -- 'class-imbalanced dataset' -> 'conjunto de dados não balanceado' -- 'class-imbalanced datasets' -> 'conjuntos de dados com classes desbalanceadas' -- 'classification' -> 'classificação' -- 'classification model' -> 'modelo de classificação' -- 'classification threshold' -> 'limiar de classificação' -- 'classifier' -> 'classificador' -- 'clipping' -> 'corte' -- 'confusion matrix' -> 'matriz de confusão' -- 'continuous feature' -> 'atributo contínuo' -- 'convergence' -> 'convergência' -- 'data set or dataset' -> 'conjunto de dados' -- 'DataFrame' -> 'DataFrame' -- 'dataset' -> 'conjunto de dados' -- 'deep learning' -> 'aprendizado profundo' -- 'deep model' -> 'modelo profundo' -- 'dense feature' -> 'atributo denso' -- 'depth' -> 'profundidade' -- 'discrete feature' -> 'atributo discreto' -- 'discrete features' -> 'recursos discretos' -- 'dynamic' -> 'dinâmico' -- 'dynamic model' -> 'modelo dinâmico' -- 'early stopping' -> 'parada antecipada' -- 'embedding layer' -> 'camada de embedding' -- 'embedding layers' -> 'camadas de embedding' -- 'epoch' -> 'época' -- 'example' -> 'exemplo' -- 'false negative (FN)' -> 'falso negativo (FN)' -- 'false negatives' -> 'falsos negativos' -- 'false positive (FP)' -> 'falso positivo (FP)' -- 'false positive rate' -> 'taxa de falso positivo' -- 'false positive rate (FPR)' -> 'taxa de falso positivo (FPR)' -- 'false positives' -> 'falsos positivos' -- 'feature' -> 'recurso' -- 'feature cross' -> 'cruzamento de atributos' -- 'feature crosses' -> 'cruzamentos de recursos' -- 'feature engineering' -> 'engenharia de atributos' -- 'feature set' -> 'conjunto de atributos' -- 'feature vector' -> 'vetor de atributos' -- 'feedback loop' -> 'ciclo de feedback' -- 'generalization' -> 'generalização' -- 'generalization curve' -> 'curva de generalização' -- 'gradient descent' -> 'gradiente descendente' -- 'ground truth' -> 'informações empíricas' -- 'hidden layer' -> 'camada oculta' -- 'hidden layer(s)' -> 'camadas ocultas' -- 'hyperparameter' -> 'hiperparâmetro' -- 'independently and identically distributed (i.i.d)' -> 'independente e identicamente distribuído (i.i.d)' -- 'inference' -> 'inferência' -- 'input layer' -> 'camada de entrada' -- 'interpretability' -> 'interpretabilidade' -- 'iteration' -> 'iteração' -- 'L0regularization' -> 'Regularização L0' -- 'L1loss' -> 'L1' -- 'L1regularization' -> 'regularização L1' -- 'L2loss' -> 'perda L2' -- 'L2regularization' -> 'regularizaçãoL2' -- 'label' -> 'o rótulo.' -- 'labeled example' -> 'exemplo rotulado' -- 'lambda' -> 'lambda' -- 'layer' -> 'layer' -- 'learning rate' -> 'taxa de aprendizado' -- 'linear' -> 'linear' -- 'linear model' -> 'modelo linear' -- 'linear models' -> 'modelos lineares' -- 'linear regression' -> 'regressão linear' -- 'Log Loss' -> 'perda logarítmica' -- 'log-odds' -> 'log-odds' -- 'logistic regression' -> 'regressão logística' -- 'loss' -> 'perda' -- 'loss curve' -> 'curva de perda' -- 'loss function' -> 'função de perda' -- 'machine learning' -> 'machine learning' -- 'majority class' -> 'classe majoritária' -- 'mini-batch' -> 'minilote' -- 'minority class' -> 'classe minoritária' -- 'model' -> 'modelo' -- 'multi-class classification' -> 'classificação multiclasse' -- 'negative class' -> 'classe negativa' -- 'negative classes' -> 'classes negativas' -- 'neural network' -> 'do feedforward' -- 'neural networks' -> 'redes neurais' -- 'neuron' -> 'neurônio' -- 'node (neural network)' -> 'nó (rede neural)' -- 'nonlinear' -> 'não linear' -- 'nonstationarity' -> 'não estacionariedade' -- 'normalization' -> 'normalização' -- 'numerical data' -> 'dados numéricos' -- 'offline' -> 'off-line' -- 'offline inference' -> 'inferência off-line' -- 'one-hot encoding' -> 'codificação one-hot' -- 'one-hot vector' -> 'vetor one-hot' -- 'one-vs.-all' -> 'um-contra-todos' -- 'online' -> 'on-line' -- 'online inference' -> 'inferência on-line' -- 'output layer' -> 'camada de saída' -- 'output layers' -> 'camadas de saída' -- 'overfitting' -> 'overfitting' -- 'pandas' -> 'pandas' -- 'parameter' -> 'parâmetro' -- 'positive class' -> 'classe positiva' -- 'positive classes' -> 'classes positivas' -- 'post-processing' -> 'pós-processamento' -- 'precision' -> 'precision' -- 'prediction' -> 'previsão' -- 'proxy labels' -> 'rotulação indireta' -- 'RAG' -> 'RAG' -- 'rater' -> 'rotulador' -- 'recall' -> 'recall' -- 'Rectified Linear Unit (ReLU)' -> 'Unidade linear retificada (ReLU)' -- 'regression model' -> 'modelo de regressão' -- 'regularization' -> 'regularização' -- 'regularization rate' -> 'taxa de regularização' -- 'ReLU' -> 'ReLU' -- 'retrieval-augmented generation' -> 'geração aumentada de recuperação' -- 'retrieval-augmented generation (RAG)' -> 'geração aumentada de recuperação (RAG)' -- 'ROC (receiver operating characteristic) Curve' -> 'Curva ROC' -- 'ROC curve' -> 'curva ROC' -- 'Root Mean Squared Error (RMSE)' -> 'Raiz do erro quadrático médio (RMSE)' -- 'sigmoid function' -> 'função sigmoide' -- 'softmax' -> 'softmax' -- 'sparse feature' -> 'atributo esparso' -- 'sparse representation' -> 'representação esparsa' -- 'sparse vector' -> 'vetor esparso' -- 'squared loss' -> 'perda quadrática' -- 'static' -> 'static' -- 'static inference' -> 'inferência estática' -- 'static model' -> 'modelo estático' -- 'stationarity' -> 'estacionariedade' -- 'Stochastic Gradient Descent (SGD)' -> 'Gradiente descendente estocástico (GDE)' -- 'supervised learning' -> 'aprendizado supervisionado' -- 'supervised machine learning' -> 'aprendizado de máquina supervisionado' -- 'synthetic feature' -> 'atributo sintético' -- 'synthetic features' -> 'recursos sintéticos' -- 'test loss' -> 'perda de teste' -- 'training' -> 'treinamento' -- 'training loss' -> 'perda de treinamento' -- 'training set' -> 'conjunto de treinamento' -- 'training-serving skew' -> 'desvio entre treinamento e disponibilização' -- 'true negative (TN)' -> 'verdadeiro negativo (VN)' -- 'true negatives' -> 'verdadeiros negativos' -- 'true positive (TP)' -> 'verdadeiro positivo (VP)' -- 'true positive rate' -> 'taxa de verdadeiros positivos' -- 'true positive rate (TPR)' -> 'taxa de verdadeiro positivo (TVP)' -- 'true positives' -> 'verdadeiros positivos' -- 'underfitting' -> 'underfitting' -- 'unlabeled example' -> 'exemplo sem rótulo' -- 'unsupervised machine learning' -> 'aprendizado de máquina sem supervisão' -- 'validation' -> 'validação' -- 'validation dataset' -> 'conjunto de dados de validação' -- 'validation loss' -> 'perda de validação' -- 'validation set' -> 'conjunto de validação' -- 'weight' -> 'peso' -- 'weighted sum' -> 'soma de pesos' -- 'Z-score normalization' -> 'Normalização de pontuação Z' diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ru.txt b/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ru.txt deleted file mode 100644 index 0c87ef85e..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/glossaries/machine_learning/ru.txt +++ /dev/null @@ -1,213 +0,0 @@ -# RU HINTS -## TERM MAPPINGS -These are preferred terminology choices for this language. Use them whenever they sound natural; adapt freely if context requires. - -- 'accuracy' -> «точность» -- 'activation function' -> «функция активации» -- 'artificial intelligence' -> «искусственный интеллект» -- 'AUC' -> «AUC» -- 'AUC (Area under the ROC curve)' -> «AUC (площадь под ROC-кривой)» -- 'backpropagation' -> «обратное распространение» -- 'batch' -> «партия» -- 'batch size' -> «размер партии» -- 'bias (ethics/fairness)' -> «предвзятость (этика/справедливость)» -- 'bias (math) or bias term' -> «предвзятость (математика) или термин предвзятости» -- 'bias in ethics and fairness' -> «предвзятостью в этике и справедливости» -- 'bias term' -> «термином «смещение»» -- 'binary classification' -> «бинарная классификация» -- 'bucketing' -> «распределение» -- 'categorical' -> «категориальном» -- 'categorical data' -> «категориальные данные» -- 'class' -> «сорт» -- 'class-imbalanced dataset' -> «набор данных с несбалансированным классом» -- 'class-imbalanced datasets' -> «несбалансированные по классам наборы данных» -- 'classification' -> «классификации» -- 'classification model' -> «модель классификации» -- 'classification threshold' -> «порог классификации» -- 'classifier' -> «классификатор» -- 'clipping' -> «вырезка» -- 'confusion matrix' -> «матрица путаницы» -- 'continuous feature' -> «непрерывная функция» -- 'convergence' -> «конвергенция» -- 'data set or dataset' -> «набор данных или набор данных» -- 'DataFrame' -> «DataFrame» -- 'dataset' -> «Набор данных» -- 'deep learning' -> «глубоком обучении» -- 'deep model' -> «глубокая модель» -- 'dense feature' -> «плотная особенность» -- 'depth' -> «глубина» -- 'discrete feature' -> «дискретная особенность» -- 'discrete features' -> «дискретными признаками» -- 'dynamic' -> «динамический» -- 'dynamic model' -> «динамическая модель» -- 'early stopping' -> «ранняя остановка» -- 'embedding layer' -> «слой внедрения» -- 'embedding layers' -> «встраиваемых слоев» -- 'epoch' -> «эпоха» -- 'example' -> «пример» -- 'false negative (FN)' -> «ложноотрицательный результат (ЛО)» -- 'false negatives' -> «ложноотрицательных результатов» -- 'false positive (FP)' -> «ложноположительный результат (ЛП)» -- 'false positive rate' -> «false positive rate» -- 'false positive rate (FPR)' -> «частота ложноположительных результатов (FPR)» -- 'false positives' -> «ложноположительных результатов» -- 'feature' -> «особенность» -- 'feature cross' -> «кросс-функция» -- 'feature crosses' -> «пересечение признаков» -- 'feature engineering' -> «проектирование функций» -- 'feature set' -> «набор функций» -- 'feature vector' -> «вектор признаков» -- 'feedback loop' -> «петля обратной связи» -- 'generalization' -> «обобщение» -- 'generalization curve' -> «кривая обобщения» -- 'gradient descent' -> «градиентный спуск» -- 'ground truth' -> «истина» -- 'hidden layer' -> «скрытый слой» -- 'hidden layer(s)' -> «скрытых слоях» -- 'hyperparameter' -> «гиперпараметр» -- 'independently and identically distributed (i.i.d)' -> «независимо и одинаково распределены (iid)» -- 'inference' -> «вывод» -- 'input layer' -> «входной слой» -- 'interpretability' -> «интерпретируемость» -- 'iteration' -> «итерация» -- 'L0regularization' -> «L0регуляризация» -- 'L1loss' -> «потеряL1» -- 'L1regularization' -> «регуляризации L1» -- 'L2loss' -> «Потери L2» -- 'L2regularization' -> «регуляризацииL2» -- 'label' -> «этикетка» -- 'labeled example' -> «помеченный пример» -- 'lambda' -> «лямбда» -- 'layer' -> «слой» -- 'learning rate' -> «скорость обучения» -- 'linear' -> «линейный» -- 'linear model' -> «линейная модель» -- 'linear models' -> «линейных моделях» -- 'linear regression' -> «линейная регрессия» -- 'Log Loss' -> «Log Loss» -- 'log-odds' -> «логарифмические шансы» -- 'logistic regression' -> «логистическая регрессия» -- 'loss' -> «потеря» -- 'loss curve' -> «кривая потерь» -- 'loss function' -> «функция потерь» -- 'machine learning' -> «машинное обучение» -- 'majority class' -> «класс большинства» -- 'mini-batch' -> «мини-партия» -- 'minority class' -> «класс меньшинства» -- 'model' -> «модель» -- 'multi-class classification' -> «многоклассовой классификацией» -- 'negative class' -> «отрицательный класс» -- 'negative classes' -> «отрицательные классы» -- 'neural network' -> «нейронная сеть» -- 'neural networks' -> «нейронным сетям» -- 'neuron' -> «нейрон» -- 'node (neural network)' -> «узел (нейронная сеть)» -- 'nonlinear' -> «нелинейный» -- 'nonstationarity' -> «нестационарность» -- 'normalization' -> «нормализация» -- 'numerical data' -> «числовые данные» -- 'offline' -> «офлайн» -- 'offline inference' -> «автономный вывод» -- 'one-hot encoding' -> «горячее кодирование» -- 'one-hot vector' -> «вектор с одним целым» -- 'one-vs.-all' -> «один против всех» -- 'online' -> «онлайн» -- 'online inference' -> «онлайн-вывод» -- 'output layer' -> «выходной слой» -- 'output layers' -> «выходных слоев» -- 'overfitting' -> «переобучение» -- 'pandas' -> «панды» -- 'parameter' -> «параметр» -- 'positive class' -> «позитивный класс» -- 'positive classes' -> «положительные» -- 'post-processing' -> «постобработка» -- 'precision' -> «точность» -- 'prediction' -> «прогноз» -- 'proxy labels' -> «прокси-метки» -- 'RAG' -> «ТРЯПКА» -- 'rater' -> «оценщик» -- 'recall' -> «отзывать» -- 'Rectified Linear Unit (ReLU)' -> «Rectified Linear Unit (ReLU)» -- 'regression model' -> «регрессионная модель» -- 'regularization' -> «регуляризация» -- 'regularization rate' -> «regularization rate» -- 'ReLU' -> «РеЛУ» -- 'retrieval-augmented generation' -> «генерации с расширенным поиском» -- 'retrieval-augmented generation (RAG)' -> «retrieval-augmented generation (RAG)» -- 'ROC (receiver operating characteristic) Curve' -> «ROC (receiver operating characteristic) Curve» -- 'ROC curve' -> «ROC-кривой» -- 'Root Mean Squared Error (RMSE)' -> «Root Mean Squared Error (RMSE)» -- 'sigmoid function' -> «sigmoid function» -- 'softmax' -> «софтмакс» -- 'sparse feature' -> «sparse feature» -- 'sparse representation' -> «sparse representation» -- 'sparse vector' -> «sparse vector» -- 'squared loss' -> «квадрат потерь» -- 'static' -> «статический» -- 'static inference' -> «static inference» -- 'static model' -> «статической моделью» -- 'stationarity' -> «стационарность» -- 'Stochastic Gradient Descent (SGD)' -> «Стохастический градиентный спуск (SGD)» -- 'supervised learning' -> «контролируемом обучении» -- 'supervised machine learning' -> «контролируемое машинное обучение» -- 'synthetic feature' -> «synthetic feature» -- 'synthetic features' -> «синтетические признаки» -- 'test loss' -> «test loss» -- 'training' -> «обучение» -- 'training loss' -> «training loss» -- 'training set' -> «обучающий набор» -- 'training-serving skew' -> «training-serving skew» -- 'true negative (TN)' -> «true negative (TN)» -- 'true negatives' -> «истинно отрицательных результатов» -- 'true positive (TP)' -> «true positive (TP)» -- 'true positive rate' -> «истинный положительный уровень» -- 'true positive rate (TPR)' -> «true positive rate (TPR)» -- 'true positives' -> «истинно положительных результатов» -- 'underfitting' -> «недообучение» -- 'unlabeled example' -> «unlabeled example» -- 'unsupervised machine learning' -> «неконтролируемое машинное обучение» -- 'validation' -> «проверка» -- 'validation dataset' -> «проверочном наборе данных» -- 'validation loss' -> «validation loss» -- 'validation set' -> «набор для проверки» -- 'weight' -> «масса» -- 'weighted sum' -> «взвешенная сумма» -- 'Z-score normalization' -> «нормализацию Z-показателя» - -# STRICTNESS NOTE -TERM MAPPINGS above are flexible preferences. The following rules are STRICT and override them. - -## 2. Strict, Binding Terminology Rules (MANDATORY) -This section defines terminology and formatting that must always be used in Russian translations. -These rules override any flexible terminology and must be followed exactly. - -# MANDATORY RUSSIAN TERMINOLOGY RULES -## 2.1 Key Translations (Strict) -- 'Shared learning' -> «совместное обучение» - AVOID: «общее обучение». -- 'Multisource data' -> «данные из нескольких источников» - AVOID: «мультиисточниковые данные». -- 'Input embedding' -> «входное векторное представление (эмбеддинг)» -- 'Embedding' -> «эмбеддинг» -- 'Embedding space' -> «пространство представлений (пространство эмбеддингов)» -- 'Task-specific branches' -> «ветви, специфичные для задачи» -- 'Pipeline' -> «конвейер обработки данных» - «пайплайн» допускается только в неформальном контексте. - -## 2.2 Official Google Colab UI (Strict) -Use the official Russian UI strings: -- 'Change Runtime Type' -> «Сменить среду выполнения» -- 'Save a copy in Drive' -> «Сохранить копию на Диске» - -Filenames must remain in ENGLISH exactly as written. -Example: «Копия блокнота OriginalNotebookName.ipynb» - -## 2.3 Abbreviations and Hyphenation (Strict) -Keep all ML/AI abbreviations in English: ROC, AUC, TPR, FPR, L1, L2, UI, API, CNN, RNN, GPT. -Do NOT invent Russian abbreviations for these. - -When an English abbreviation precedes a Russian noun, use a hyphen: -- ROC-кривая -- AUC-показатель -- L1-регуляризация -- UI-дизайн diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/settings/common.py b/src/ol_openedx_course_translations/ol_openedx_course_translations/settings/common.py index e6e1b0174..fb9eb3acd 100644 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/settings/common.py +++ b/src/ol_openedx_course_translations/ol_openedx_course_translations/settings/common.py @@ -55,15 +55,6 @@ def apply_common_settings(settings): "default_model": "mistral-large-latest", }, } - settings.TRANSLATIONS_GITHUB_TOKEN = "" - # Translation repository settings (used by sync_and_translate_language command) - # Git URL of the translations repository (e.g. mitxonline-translations). - settings.TRANSLATIONS_REPO_URL = ( - "https://github.com/mitodl/mitxonline-translations.git" - ) - # Local path to a clone of the translations repo; leave empty to clone - # at the default path from TRANSLATIONS_REPO_URL. - settings.TRANSLATIONS_REPO_PATH = "" settings.LITE_LLM_REQUEST_TIMEOUT = 300 # seconds # HTML/XML translation safety/perf knobs (LLM providers only) diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/command_utils.py b/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/command_utils.py deleted file mode 100644 index 50a92f431..000000000 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/command_utils.py +++ /dev/null @@ -1,244 +0,0 @@ -""" -Utility functions for management commands. - -This module provides reusable utilities for Django management commands, -including validation, error handling, git operations, and configuration helpers. -""" - -import os -import re -from datetime import UTC, datetime -from typing import Any - -from django.conf import settings -from django.core.management.base import CommandError - -from ol_openedx_course_translations.utils.constants import ( - PROVIDER_GEMINI, - PROVIDER_MISTRAL, -) - -# ============================================================================ -# Validation Utilities -# ============================================================================ - -# Language code suffix length constants -REGION_CODE_LENGTH = 2 # 2-letter region codes (e.g., ES, BR) -SCRIPT_TAG_LENGTH = 4 # 4-letter script tags (e.g., Hans, Hant) - - -def normalize_language_code(code: str) -> str: - """Normalize language code to use underscores (Django/gettext format). - - Converts BCP 47 format (hyphens) to gettext format (underscores) and - normalizes case: language part lowercase, suffix properly cased. - Examples: - - 'es-419' -> 'es_419' - - 'ES-419' -> 'es_419' - - 'es-ES' -> 'es_ES' - - 'ES_ES' -> 'es_ES' - - 'zh-Hans' -> 'zh_Hans' - - 'ZH-HANS' -> 'zh_Hans' - - 'es_419' -> 'es_419' (unchanged) - - 'es' -> 'es' (unchanged) - """ - # Replace hyphens with underscores and split - parts = code.replace("-", "_").split("_", 1) - lang_part = parts[0].lower() # Language: always lowercase - - if len(parts) == 1: - return lang_part - - # Normalize suffix: uppercase 2-char regions, title case 4-char scripts - suffix = parts[1] - if len(suffix) == REGION_CODE_LENGTH: - suffix = suffix.upper() # Region codes: ES, BR, etc. - elif len(suffix) == SCRIPT_TAG_LENGTH and suffix[0].isalpha(): - suffix = suffix.title() # Script tags: Hans, Hant, etc. - # Numeric regions (419) and others stay as-is - - return f"{lang_part}_{suffix}" - - -def validate_language_code(code: str, field_name: str = "language code") -> None: - """Validate language code format. - - Accepts normalized codes (already normalized by normalize_language_code): - - xx (2 lowercase letters): e.g., 'el', 'es', 'ar' - - xx_XX (with 2-letter region): e.g., 'es_ES' - - xx_NNN (with UN M.49 numeric region): e.g., 'es_419' - - xx_Xxxx (with script subtag): e.g., 'zh_Hans' - """ - # Pattern: xx, xx_XX, xx_419, xx_Hans - pattern = r"^[a-z]{2}(_([A-Z]{2}|[0-9]{3}|[A-Z][a-z]{3}))?$" - if not re.match(pattern, code): - msg = ( - f"Invalid {field_name} format: {code}. " - f"Expected format: 'xx', 'xx_XX', 'xx_419', 'xx_Hans' " - f"(e.g., 'el', 'es_ES', 'es_419', 'zh_Hans')" - ) - raise CommandError(msg) - - -def validate_branch_name(branch_name: str) -> None: - """Validate branch name format to prevent injection.""" - if not re.match(r"^[a-z0-9/_-]+$", branch_name): - msg = f"Invalid branch name format: {branch_name}" - raise CommandError(msg) - - -# ============================================================================ -# Git Utilities -# ============================================================================ - - -def sanitize_for_git(text: str) -> str: - """Sanitize text for use in git operations.""" - return re.sub(r"[^\w\s-]", "", text) - - -def create_branch_name(lang_code: str) -> str: - """Create a safe branch name from language code.""" - safe_lang = re.sub(r"[^a-z0-9_-]", "", lang_code.lower()) - timestamp = datetime.now(tz=UTC).strftime("%Y%m%d-%H%M%S") - return f"feature/add-{safe_lang}-translations-{timestamp}" - - -# ============================================================================ -# Configuration Helpers -# ============================================================================ - - -def get_config_value(key: str, options: dict, default: Any = None) -> Any: - """Get configuration value from options, settings, or environment.""" - # Check command-line options first (Django converts --repo-path to repo_path) - option_value = options.get(key) or options.get(key.replace("_", "-")) - if option_value: - return option_value - - # Check settings with TRANSLATIONS_ prefix - setting_key = f"TRANSLATIONS_{key.upper().replace('-', '_')}" - if hasattr(settings, setting_key): - setting_value = getattr(settings, setting_key) - # Only use setting if it's not empty - if setting_value: - return setting_value - - # Check environment variable with TRANSLATIONS_ prefix - env_key = setting_key - env_value = os.environ.get(env_key) - if env_value: - return env_value - - # Return default if nothing found - return default - - -def get_default_provider() -> str | None: - """Get default provider from TRANSLATIONS_PROVIDERS.""" - providers = getattr(settings, "TRANSLATIONS_PROVIDERS", {}) - if not isinstance(providers, dict): - return None - return providers.get("default_provider") - - -def get_default_model_for_provider(provider: str) -> str | None: - """Get default model for a provider from TRANSLATIONS_PROVIDERS.""" - providers = getattr(settings, "TRANSLATIONS_PROVIDERS", {}) - if not isinstance(providers, dict): - return None - provider_config = providers.get(provider, {}) - if not isinstance(provider_config, dict): - return None - return provider_config.get("default_model") - - -def configure_litellm_for_provider( - provider: str, model: str, api_key: str | None, **base_kwargs -) -> dict[str, Any]: - """Configure LiteLLM completion kwargs for a specific provider.""" - completion_kwargs = dict(base_kwargs) - completion_kwargs["model"] = model - - if api_key: - completion_kwargs["api_key"] = api_key - if provider == PROVIDER_GEMINI: - # If no prefix, add gemini/ to force Gemini API usage (not Vertex AI) - # If vertex_ai/ or gemini/ prefix already exists, respect it - if not model.startswith(("gemini/", "vertex_ai/")): - completion_kwargs["model"] = f"gemini/{model}" - # Gemini 3 models require temperature = 1.0 to avoid issues: - # - Infinite loops in response generation - # - Degraded reasoning performance - # - Failure on complex tasks - # See: https://docs.litellm.ai/docs/providers/gemini - if "gemini-3" in model.lower(): - completion_kwargs["temperature"] = 1.0 - elif provider == PROVIDER_MISTRAL and not model.startswith("mistral/"): - completion_kwargs["model"] = f"mistral/{model}" - - return completion_kwargs - - -# ============================================================================ -# Error Handling Utilities -# ============================================================================ - - -def is_retryable_error(error: Exception) -> bool: - """ - Check if an error is retryable (network issues, rate limits, timeouts). - - Args: - error: The exception to check - - Returns: - True if the error is retryable, False otherwise - - Examples: - >>> is_retryable_error(ConnectionError("Connection timeout")) - True - >>> is_retryable_error(ValueError("Invalid API key")) - False - """ - error_str = str(error).lower() - - # Retryable errors - retryable_patterns = [ - "timeout", - "connection", - "rate limit", - "429", - "503", - "502", - "500", - "temporarily unavailable", - "service unavailable", - "too many requests", - ] - - # Non-retryable errors (don't retry these) - non_retryable_patterns = [ - "invalid api key", - "authentication", - "401", - "403", - "not found", - "404", - "bad request", - "400", - "commanderror", # Our custom errors that are usually non-retryable - ] - - # Check for non-retryable first - for pattern in non_retryable_patterns: - if pattern in error_str: - return False - - # Check for retryable patterns - for pattern in retryable_patterns: - if pattern in error_str: - return True - - # Default: retry unknown errors (could be transient) - return True diff --git a/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/constants.py b/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/constants.py index cd1118c49..c1dd803b6 100644 --- a/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/constants.py +++ b/src/ol_openedx_course_translations/ol_openedx_course_translations/utils/constants.py @@ -1,4 +1,4 @@ -"""Constants for translation synchronization.""" +"""Constants for course translation utilities.""" # LLM Provider names PROVIDER_DEEPL = "deepl" @@ -6,234 +6,6 @@ PROVIDER_MISTRAL = "mistral" PROVIDER_OPENAI = "openai" -# Learner-facing frontend applications that require translation -LEARNER_FACING_APPS = [ - "frontend-app-learning", - "frontend-app-learner-dashboard", - "frontend-app-learner-record", - "frontend-app-account", - "frontend-app-profile", - "frontend-app-authn", - "frontend-app-catalog", - "frontend-app-discussions", - "frontend-component-header", - "frontend-component-footer", - "frontend-app-ora", - "frontend-platform", -] - -# Plural forms configuration for different languages -# Based on GNU gettext plural forms specification -# See: https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html -PLURAL_FORMS = { - # Languages with no plural forms (nplurals=1) - "ja": "nplurals=1; plural=0;", # Japanese - "ko": "nplurals=1; plural=0;", # Korean - "zh": "nplurals=1; plural=0;", # Chinese (all variants) - "th": "nplurals=1; plural=0;", # Thai - "vi": "nplurals=1; plural=0;", # Vietnamese - "id": "nplurals=1; plural=0;", # Indonesian - "ms": "nplurals=1; plural=0;", # Malay - "km": "nplurals=1; plural=0;", # Khmer - "bo": "nplurals=1; plural=0;", # Tibetan - # Languages with 2 plural forms: plural=(n != 1) - "en": "nplurals=2; plural=(n != 1);", # English - "es": "nplurals=2; plural=(n != 1);", # Spanish (all variants) - "de": "nplurals=2; plural=(n != 1);", # German - "el": "nplurals=2; plural=(n != 1);", # Greek - "it": "nplurals=2; plural=(n != 1);", # Italian - "pt": "nplurals=2; plural=(n != 1);", # Portuguese (all variants) - "nl": "nplurals=2; plural=(n != 1);", # Dutch - "sv": "nplurals=2; plural=(n != 1);", # Swedish - "da": "nplurals=2; plural=(n != 1);", # Danish - "no": "nplurals=2; plural=(n != 1);", # Norwegian - "nb": "nplurals=2; plural=(n != 1);", # Norwegian Bokmål - "nn": "nplurals=2; plural=(n != 1);", # Norwegian Nynorsk - "fi": "nplurals=2; plural=(n != 1);", # Finnish - "is": "nplurals=2; plural=(n != 1);", # Icelandic - "et": "nplurals=2; plural=(n != 1);", # Estonian - "lv": "nplurals=2; plural=(n != 1);", # Latvian - "he": "nplurals=2; plural=(n != 1);", # Hebrew - "hi": "nplurals=2; plural=(n != 1);", # Hindi - "bn": "nplurals=2; plural=(n != 1);", # Bengali - "gu": "nplurals=2; plural=(n != 1);", # Gujarati - "kn": "nplurals=2; plural=(n != 1);", # Kannada - "ml": "nplurals=2; plural=(n != 1);", # Malayalam - "ta": "nplurals=2; plural=(n != 1);", # Tamil - "te": "nplurals=2; plural=(n != 1);", # Telugu - "or": "nplurals=2; plural=(n != 1);", # Oriya - "si": "nplurals=2; plural=(n != 1);", # Sinhala - "ne": "nplurals=2; plural=(n != 1);", # Nepali - "mr": "nplurals=2; plural=(n != 1);", # Marathi - "ur": "nplurals=2; plural=(n != 1);", # Urdu - "az": "nplurals=2; plural=(n != 1);", # Azerbaijani - "uz": "nplurals=2; plural=(n != 1);", # Uzbek - "kk": "nplurals=2; plural=(n != 1);", # Kazakh - "mn": "nplurals=2; plural=(n != 1);", # Mongolian - "sq": "nplurals=2; plural=(n != 1);", # Albanian - "eu": "nplurals=2; plural=(n != 1);", # Basque - "ca": "nplurals=2; plural=(n != 1);", # Catalan - "gl": "nplurals=2; plural=(n != 1);", # Galician - "tr": "nplurals=2; plural=(n != 1);", # Turkish - "af": "nplurals=2; plural=(n != 1);", # Afrikaans - "fil": "nplurals=2; plural=(n != 1);", # Filipino - # Languages with 2 plural forms: plural=(n > 1) - "fr": "nplurals=2; plural=(n > 1);", # French - "br": "nplurals=2; plural=(n > 1);", # Breton - # Languages with 3 plural forms - "pl": ( - "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Polish - "ru": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Russian - "uk": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Ukrainian - "be": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Belarusian - "sr": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Serbian - "hr": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Croatian - "bs": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Bosnian - "cs": "nplurals=3; plural=(n==1 ? 0 : (n>=2 && n<=4) ? 1 : 2);", # Czech - "sk": "nplurals=3; plural=(n==1 ? 0 : (n>=2 && n<=4) ? 1 : 2);", # Slovak - "lt": ( - "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " - "(n%100<10 || n%100>=20) ? 1 : 2);" - ), # Lithuanian - "hy": "nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);", # Armenian - "ro": ( - "nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);" - ), # Romanian - # Languages with 4 plural forms - "cy": ( - "nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : (n==8 || n==11) ? 2 : 3);" - ), # Welsh - "ga": "nplurals=4; plural=(n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 : 3);", # Irish - "gd": ( - "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " - "(n>2 && n<20) ? 2 : 3);" - ), # Scottish Gaelic - "mt": ( - "nplurals=4; plural=(n==1 ? 0 : n==0 || (n%100>=2 && n%100<=10) ? 1 : " - "(n%100>=11 && n%100<=19) ? 2 : 3);" - ), # Maltese - # Languages with 6 plural forms - "ar": ( - "nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && " - "n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);" - ), # Arabic - # Other languages - "fa": "nplurals=2; plural=(n==0 || n==1 ? 0 : 1);", # Persian/Farsi - "hu": "nplurals=2; plural=(n != 1);", # Hungarian - "bg": "nplurals=2; plural=(n != 1);", # Bulgarian - "am": "nplurals=2; plural=(n > 1);", # Amharic -} - -# Default plural form fallback (English-style) -# Used when a language code is not found in PLURAL_FORMS -DEFAULT_PLURAL_FORM = "nplurals=2; plural=(n != 1);" - -# Typo patterns to fix in translation files -TYPO_PATTERNS = [ - ("Serch", "Search"), -] - -# Backend PO file names -BACKEND_PO_FILES = ["django.po", "djangojs.po"] - -# Backend plugin apps: (repo_dir, module_name) under translations/. -# Used by sync_and_translate_language to sync/translate at -# translations///conf/locale//LC_MESSAGES/django.po. -# When pulled in edx-platform (make pull_translations), these go to -# conf/plugins-locale/plugins//. -TRANSLATABLE_PLUGINS = [ - ("open-edx-plugins", "ol_openedx_chat"), -] - -# PO file header metadata -PO_HEADER_PROJECT_VERSION = "0.1a" -PO_HEADER_BUGS_EMAIL = "openedx-translation@googlegroups.com" -PO_HEADER_POT_CREATION_DATE = "2023-06-13 08:00+0000" -PO_HEADER_MIME_VERSION = "1.0" -PO_HEADER_CONTENT_TYPE = "text/plain; charset=UTF-8" -PO_HEADER_CONTENT_TRANSFER_ENCODING = "8bit" -PO_HEADER_TRANSIFEX_TEAM_BASE_URL = "https://app.transifex.com/open-edx/teams/6205" - -# File and directory names -TRANSLATION_FILE_NAMES = { - "transifex_input": "transifex_input.json", - "english": "en.json", - "messages_dir": "messages", - "i18n_dir": "i18n", - "locale_dir": "locale", - "lc_messages": "LC_MESSAGES", - "conf_dir": "conf", - "edx_platform": "edx-platform", -} - -# JSON file formatting -DEFAULT_JSON_INDENT = 2 - -# Language code to human-readable name mapping -# Used in PO file headers for Language-Team field -LANGUAGE_MAPPING = { - "ar": "Arabic", - "de": "German", - "el": "Greek", - "es": "Spanish", - "fr": "French", - "hi": "Hindi", - "id": "Indonesian", - "ja": "Japanese", - "kr": "Korean", - "pt": "Portuguese", - "ru": "Russian", - "sq": "Albanian", - "tr": "Turkish", - "zh": "Chinese", -} - -# Maximum number of retries for failed translation batches -MAX_RETRIES = 3 - -# Glossary parsing constants -EXPECTED_GLOSSARY_PARTS = 2 # English term and translation separated by "->" - -# HTTP Status Codes -HTTP_OK = 200 -HTTP_CREATED = 201 -HTTP_NOT_FOUND = 404 -HTTP_TOO_MANY_REQUESTS = 429 -HTTP_UNPROCESSABLE_ENTITY = 422 - -# Error message length limit -MAX_ERROR_MESSAGE_LENGTH = 200 - -# Maximum length for strings in log messages (truncate with "...") -MAX_LOG_STRING_LENGTH = 50 -MAX_LOG_ICU_STRING_LENGTH = 100 - -# Plural category counts (GNU gettext nplurals) -PLURAL_CATEGORIES_ARABIC = 6 # zero, one, two, few, many, other -PLURAL_CATEGORIES_FOUR = 4 # one, two, few, other -PLURAL_CATEGORIES_THREE = 3 # one, few, other -PLURAL_CATEGORIES_TWO = 2 # one, other (most languages) - ENGLISH_LANGUAGE_CODE = "en" # HTML/XML attribute translation policy diff --git a/src/ol_openedx_course_translations/pyproject.toml b/src/ol_openedx_course_translations/pyproject.toml index d62c64855..1a753fe85 100644 --- a/src/ol_openedx_course_translations/pyproject.toml +++ b/src/ol_openedx_course_translations/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ol-openedx-course-translations" -version = "0.5.3" +version = "0.6.0" description = "An Open edX plugin to translate courses" authors = [ {name = "MIT Office of Digital Learning"} @@ -14,9 +14,6 @@ dependencies = [ "djangorestframework>=3.14.0", "deepl>=1.25.0", "litellm==1.82.5", - "GitPython>=3.1.40", - "requests>=2.31.0", - "polib>=1.2.0", "srt>=3.5.3", "edx-opaque-keys", ] diff --git a/uv.lock b/uv.lock index 93e25d16d..e80e19a81 100644 --- a/uv.lock +++ b/uv.lock @@ -11,6 +11,7 @@ resolution-markers = [ members = [ "edx-sysadmin", "edx-username-changer", + "ol-openedx-ai-static-translations", "ol-openedx-auto-select-language", "ol-openedx-canvas-integration", "ol-openedx-chat", @@ -2029,6 +2030,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] +[[package]] +name = "ol-openedx-ai-static-translations" +version = "0.1.0" +source = { editable = "src/ol_openedx_ai_static_translations" } +dependencies = [ + { name = "django", version = "5.2.12", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "django", version = "6.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, + { name = "gitpython" }, + { name = "litellm" }, + { name = "polib" }, + { name = "requests" }, +] + +[package.metadata] +requires-dist = [ + { name = "django", specifier = ">=4.0" }, + { name = "gitpython", specifier = ">=3.1.40" }, + { name = "litellm", specifier = ">=1.80.0" }, + { name = "polib", specifier = ">=1.2.0" }, + { name = "requests", specifier = ">=2.31.0" }, +] + [[package]] name = "ol-openedx-auto-select-language" version = "0.1.0" @@ -2207,7 +2230,7 @@ requires-dist = [ [[package]] name = "ol-openedx-course-translations" -version = "0.5.2" +version = "0.6.0" source = { editable = "src/ol_openedx_course_translations" } dependencies = [ { name = "deepl" }, @@ -2215,10 +2238,7 @@ dependencies = [ { name = "django", version = "6.0.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, { name = "djangorestframework" }, { name = "edx-opaque-keys" }, - { name = "gitpython" }, { name = "litellm" }, - { name = "polib" }, - { name = "requests" }, { name = "srt" }, ] @@ -2228,10 +2248,7 @@ requires-dist = [ { name = "django", specifier = ">=4.0" }, { name = "djangorestframework", specifier = ">=3.14.0" }, { name = "edx-opaque-keys" }, - { name = "gitpython", specifier = ">=3.1.40" }, { name = "litellm", specifier = "==1.82.5" }, - { name = "polib", specifier = ">=1.2.0" }, - { name = "requests", specifier = ">=2.31.0" }, { name = "srt", specifier = ">=3.5.3" }, ]