2024-04-13 08:20:53 +02:00
{
"cells": [
{
"cell_type": "markdown",
"id": "improved-register",
"metadata": {},
"source": [
"\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Komputerowe wspomaganie tłumaczenia </h1>\n",
"<h2> 8. <i>Wykorzystanie tłumaczenia automatycznego we wspomaganiu tłumaczenia</i> [laboratoria]</h2> \n",
"<h3>Rafał Jaworski (2021)</h3>\n",
"</div>\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"id": "hungarian-davis",
"metadata": {},
"source": [
"W dzisiejszych czasach, niezwykle ważną techniką wspomagania tłumaczenia jest użycie tłumaczenia maszynowego. Tekst źródłowy do tłumaczenia jest najpierw tłumaczony całkowicie autommatycznie, a następnie tłumacz ludzki dokonuje korekty wyniku. Technologia tłumaczenia maszynowego jest już na tyle dojrzała, że oferuje bardzo wysoką jakość wyników. Coraz częstsze stają się scenariusze, w których ludzka korekta to niemal całkowicie machinalne (sic!) zatwierdzanie wyników tłumaczenia maszynowego. Na dzisiejszych zajęciach poznamy techniki ewaluacji tłumaczenia maszynowego oraz sprawdzania jego przydatności w procesie wspomagania tłumaczenia ludzkiego."
]
},
{
"cell_type": "markdown",
"id": "posted-commons",
"metadata": {},
"source": [
"Jakość tłumaczenia maszynowego możemy oceniać na dwóch niezależnych płaszczyznach: dokładność i płynność. Płynność jest subiektywnie odbieranym odczuciem, że czytany tekst jest napisany językiem naturalnym i zrozumiałym. Systemy tłumaczenia maszynowego oparte na uczeniu głębokim z wykorzystaniem sieci neuronowych osiągają duży stopień płynności tłumaczenia. Niestety jednak ich dokładność nie zawsze jest równie wysoka."
]
},
{
"cell_type": "markdown",
"id": "referenced-implement",
"metadata": {},
"source": [
"Dokładność tłumaczenia maszynowego jest parametrem, który łatwiej zmierzyć. Wartość takich pomiarów daje obraz tego, jaka jest faktyczna jakość tłumaczenia maszynowego i jaka jest jego potencjalna przydatność we wspomaganiu tłumaczenia."
]
},
{
"cell_type": "markdown",
"id": "disturbed-january",
"metadata": {},
"source": [
"Najczęściej stosowaną techniką oceny tłumaczenia maszynowego jest ocena BLEU. Do obliczenia tej oceny potrzebny jest wynik tłumaczenia maszynowego oraz referencyjne tłumaczenie ludzkie wysokiej jakości."
]
},
{
"cell_type": "markdown",
"id": "dental-combination",
"metadata": {},
"source": [
"### Ćwiczenie 1: Zaimplementuj program do obliczania oceny BLEU dla korpusu w folderze data. Użyj implementacji BLEU z pakietu nltk. Dodatkowe wymaganie techniczne - napisz program tak, aby nie musiał rozpakwowywać pliku zip z korpusem na dysku."
]
},
2024-04-23 19:49:47 +02:00
{
"cell_type": "code",
"execution_count": 16,
"id": "10ba41d5-aec6-4a8c-96ad-8167af126735",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Collecting nltk\n",
" Downloading nltk-3.8.1-py3-none-any.whl.metadata (2.8 kB)\n",
"Requirement already satisfied: click in /usr/local/lib/python3.9/dist-packages (from nltk) (8.1.3)\n",
"Requirement already satisfied: joblib in /usr/lib/python3/dist-packages (from nltk) (0.17.0)\n",
"Requirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.9/dist-packages (from nltk) (2023.5.5)\n",
"Requirement already satisfied: tqdm in /usr/local/lib/python3.9/dist-packages (from nltk) (4.64.1)\n",
"Downloading nltk-3.8.1-py3-none-any.whl (1.5 MB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m17.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m0:01\u001b[0m\n",
"\u001b[?25hInstalling collected packages: nltk\n",
"\u001b[33m WARNING: The script nltk is installed in '/home/students/s444820/.local/bin' which is not on PATH.\n",
" Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\u001b[0m\u001b[33m\n",
"\u001b[0mSuccessfully installed nltk-3.8.1\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install nltk"
]
},
2024-04-13 08:20:53 +02:00
{
"cell_type": "code",
"execution_count": 1,
2024-04-23 19:49:47 +02:00
"id": "1e80adcf-ac34-4c38-a2c2-5735985c963e",
2024-04-13 08:20:53 +02:00
"metadata": {},
2024-04-23 19:49:47 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1001\n",
"1001\n"
]
},
{
"data": {
"text/plain": [
"0.7476897494228967"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import nltk\n",
"import zipfile\n",
"import string\n",
"from nltk.translate.bleu_score import corpus_bleu\n",
"def deletePunctuation(text):\n",
" translator = str.maketrans('', '', string.punctuation)\n",
" return text.translate(translator)\n",
"\n",
"def tokenization(i):\n",
" zip_path = './data/corpus_corrected.zip'\n",
" files = ['corpus_de_human.txt', 'corpus_de_nmt.txt', 'corpus_en.txt']\n",
" \n",
" result = []\n",
" with zipfile.ZipFile(zip_path, 'r') as zf:\n",
" with zf.open(files[i]) as f:\n",
" text = f.read().decode('utf-8')\n",
" text = text.split(\"\\n\") \n",
" for sentence in text:\n",
" if i == 0: \n",
" result.append([deletePunctuation(sentence).split()])\n",
" else:\n",
" result.append(deletePunctuation(sentence).split())\n",
" \n",
" return result\n",
"\n",
"\n",
"HUMAN = tokenization(0)\n",
"MACHINE = tokenization(1)\n",
"STANDARD = tokenization(2)\n",
"print(len(HUMAN))\n",
"print(len(MACHINE))\n",
"corpus_bleu(HUMAN,MACHINE)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "e0df3d36-9e5f-4111-a67b-3f5cc04d2cfe",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"0.7476897494228967"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
2024-04-13 08:20:53 +02:00
"source": [
"def calculate_bleu():\n",
2024-04-23 19:49:47 +02:00
" HUMAN = tokenization(0)\n",
" MACHINE = tokenization(1)\n",
" return corpus_bleu(HUMAN,MACHINE)\n",
"\n",
"calculate_bleu()"
2024-04-13 08:20:53 +02:00
]
},
{
"cell_type": "markdown",
"id": "jewish-ethics",
"metadata": {},
"source": [
"### Ćwiczenie 2: Oblicz wartość bleu na różnych fragmentach przykładowego korpusu (np. na pierwszych 100 zdaniach, zdaniach 500-600). Czy w jakimś fragmencie korpusu jakość tłumaczenia znacząco odbiega od średniej?"
]
},
{
"cell_type": "code",
2024-04-23 19:49:47 +02:00
"execution_count": 48,
2024-04-13 08:20:53 +02:00
"id": "lasting-rolling",
"metadata": {},
2024-04-23 19:49:47 +02:00
"outputs": [
{
"data": {
"image/png": "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vvjiC9x8880B06+urka/fv1QWlqKv/zlL2jTpg22bduGqVOn4vTp05g3bx4A4JlnnvEbEvr444+xevVqpKSkeF3noy/Tp0/HjBkzkJubiwcffBDFxcV444038P3332Pr1q2Ii4uDw+HAoEGDUFNTg0mTJiEtLQ2lpaX44osvYLPZ0LRpUwDAjBkzMH36dGRnZ+P555+HyWTCjh07sHHjRgwcODDgt3Nx//334+2338Ydd9yBv/3tb9ixYwdmzZqFH3/80Wue27Rp0/CPf/wDQ4cOxdChQ7F7924MHDiQ12qanJwcfPDBB+6/y8vLceDAAbd+uOrt5s2bkZKSgquvvhoA8P3332Pbtm24++670apVKxw7dgxvvPEG+vfvj4MHDyIhIcHrPQ899BBSUlIwbdo0VFVVYciQIfjpp5/wwQcf4JVXXnFHMF3lx+fbz549i4EDByIlJQVTpkyB1WrFsWPH8Omnn3q9+7777sNbb72FIUOG4P7770ddXR02b96M7777Dr169eJdHlx6995772HdunVu/S8rK8NNN92Euro6TJkyBYmJiXjzzTdhsVj80nvrrbfQqFEj5Ofno1GjRti4cSOmTZuGyspKv2jwhQsXMHjwYNx2223405/+hBUrVuCpp55Cly5dMGTIEN7fQASAEYQPBw4cYADYzJkzGWOM1dbWssTERPb2228zxhhLTU1lCxcuZIwxVllZyWJiYtiECRPcz69bt44BYF999ZVXul27dmX9+vVz/7106VIGgOXm5jKn0+m+/vjjj7OYmBhms9nc1/r16+f17DfffMMAsI8//phdvHiR9evXjyUnJ7M9e/aE/L6jR48yAJz/HnzwQa+8uN59zTXXBE3zueeeC5jmVVddxZlvLh5++GEWqlrW19ezJk2asMmTJzPGGHM6nax58+bszjvvZDExMezixYuMMcbmzp3LjEYju3DhQiiRuDl37hxr06YN69KlC7t06ZL7enV1tdd9DoeDde7cmf3hD3/wut62bVuWl5fn/nvmzJksMTGR/fTTT173TZkyhcXExLCSkhLOfOzatYvFx8ezcePGua/x1ZezZ88yk8nEBg4cyOrr6933vfbaawwAW7JkCWOMsT179gQtC8YYO3z4MDMajWzkyJFeaTHGvPLgq59cFBUVMQDs/vvv97r+xBNPMABs48aNXvm/+eabvd7x9NNPMwBe8uXi448/ZgDYwYMHGWOMrV69mpnNZjZ8+HB21113ue/r2rUrGzlypPtv3zJmjLHt27czAOydd95xX3OVww033MDq6uq87p8zZw4DwI4ePRrWt3/22WcMAPv+++8Dft/GjRsZAPbII4/4/eYpL19d5MPWrVtZXFwcGz9+vPvaY489xgCwHTt2uK+dPXuWNW3a1O9buWT4l7/8hSUkJLDLly+7r/Xr189PrjU1NSwtLY3dfvvtgvJMcEPDUoQfV199NZo3b+6eS/PDDz+gqqrKPSchOzsbW7duBdAwF6e+vt5rvk1ubi7S09Px/vvvu6/t378fe/fu9Zrj4uKBBx7wWiGUk5OD+vp6HD9+PGReKyoqMHDgQBw6dAibNm1CVlYW7+984IEHUFBQgIKCAnzyySd4+OGH8e9//9traEcon3zyiTtN17+lS5eGnR4XRqMR2dnZ+N///gcA+PHHH/H
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"['[800-900)', 52]"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
2024-04-13 08:20:53 +02:00
"source": [
2024-04-23 19:49:47 +02:00
"from nltk.translate.bleu_score import sentence_bleu\n",
"import matplotlib.pyplot as plt\n",
"def analyze_bleu(interval):\n",
" bleuResults = []\n",
" errorNumber = 0\n",
" er = []\n",
" index = 0\n",
" x = range(len(HUMAN)-1)\n",
" for y in x:\n",
" bleu = sentence_bleu(HUMAN[y], MACHINE[y])\n",
" if bleu <= 0.7476897494228967:\n",
" errorNumber += 1\n",
" \n",
" bleuResults.append(bleu)\n",
" if index % interval == 0 and index != 0:\n",
" er.append([f\"[{index-interval}-{index})\",errorNumber])\n",
" errorNumber = 0\n",
" index += 1\n",
"\n",
" plt.plot(x, bleuResults, 'o',markersize=1.7)\n",
" plt.xlabel('Nr zdania')\n",
" plt.ylabel('Bleu')\n",
" plt.title('Wynik BLEU w zależności od wartości zdań')\n",
" plt.grid(True)\n",
" plt.show()\n",
" \n",
" maxEr = max(er, key=lambda x: x[1])\n",
" return maxEr\n",
"\n",
"analyze_bleu(100)"
2024-04-13 08:20:53 +02:00
]
},
{
"cell_type": "markdown",
"id": "listed-bikini",
"metadata": {},
"source": [
"Inną metodą oceny jakości tłumaczenia maszynowego jest parametr WER - Word Error Rate. Definiuje się on w następujący sposób:\n",
"\n",
"$WER = \\frac{S+D+I}{N}=\\frac{S+D+I}{S+D+C}$\n",
"\n",
"gdzie:\n",
" * S - liczba substytucji (słów)\n",
" * D - liczba usunięć\n",
" * I - liczba wstawień\n",
" * C - liczba poprawnych śłów\n",
" * N - liczba słów w tłumaczeniu referencyjnym (N=S+D+C)"
]
},
{
"cell_type": "markdown",
"id": "conscious-cookbook",
"metadata": {},
"source": [
"Miara ta jest zwykle używana w do oceny systemów automatycznego rozpoznawania mowy, jednak w kontekście wspomagania tłumaczenia może być rozumiana jako wielkość nakładu pracy tłumacza nad poprawieniem tłumaczenia maszynowego."
]
},
{
"cell_type": "markdown",
"id": "split-palace",
"metadata": {},
"source": [
"### Ćwiczenie 3: Oblicz wartość WER dla przykładowego korpusu. Skorzystaj z gotowej implementacji WER."
]
},
{
"cell_type": "code",
2024-04-23 19:49:47 +02:00
"execution_count": 43,
2024-04-13 08:20:53 +02:00
"id": "occupied-swing",
"metadata": {},
2024-04-23 19:49:47 +02:00
"outputs": [
{
"data": {
"text/plain": [
"0.17738143121880412"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
2024-04-13 08:20:53 +02:00
"source": [
2024-04-23 19:49:47 +02:00
"from jiwer import wer\n",
"\n",
2024-04-13 08:20:53 +02:00
"def calculate_wer():\n",
2024-04-23 19:49:47 +02:00
" x = range(len(HUMAN)-1)\n",
" w = 0\n",
" for y in x:\n",
" w += wer(\" \".join(HUMAN[y][0]),\" \".join(MACHINE[y]))\n",
" \n",
" \n",
" return w/(len(HUMAN)-1)\n",
"calculate_wer()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "c822988d-fcbf-4a6c-977d-3eda1fab0d3f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0\n"
]
}
],
"source": [
"print(wer(\" \".join(HUMAN[0][0]),\" \".join(MACHINE[0])))"
2024-04-13 08:20:53 +02:00
]
},
{
"cell_type": "markdown",
"id": "stretch-wound",
"metadata": {},
"source": [
"Poza wymienionymi powyżej, stosować można jeszcze inne miary oparte na porównywaniu tłumaczenia maszynowego z ludzkim. Przypomnijmy sobie jedną, którą stosowaliśmy wcześniej."
]
},
{
"cell_type": "markdown",
"id": "abstract-wilderness",
"metadata": {},
"source": [
"### Ćwiczenie 4: Oblicz średnią wartość dystansu Levenshteina pomiędzy zdaniami przetłumaczonymi automatycznie oraz przez człowieka. Użyj implementacji z ćwiczeń nr 2."
]
},
{
"cell_type": "code",
2024-04-23 19:49:47 +02:00
"execution_count": 50,
2024-04-13 08:20:53 +02:00
"id": "immediate-element",
"metadata": {},
2024-04-23 19:49:47 +02:00
"outputs": [
{
"data": {
"text/plain": [
"0.8802718348367172"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
2024-04-13 08:20:53 +02:00
"source": [
2024-04-23 19:49:47 +02:00
"from Levenshtein import distance as levenshtein_distance\n",
"\n",
"def levenshtein_similarity(x,y):\n",
" return 1 - levenshtein_distance(x,y) / max(len(x), len(y))\n",
"\n",
2024-04-13 08:20:53 +02:00
"def calculate_levenshtein():\n",
2024-04-23 19:49:47 +02:00
" x = range(len(HUMAN)-1)\n",
" l = 0\n",
" for y in x:\n",
" l += levenshtein_similarity(\" \".join(HUMAN[y][0]),\" \".join(MACHINE[y]))\n",
" \n",
" return l/(len(HUMAN)-1)\n",
"\n",
"calculate_levenshtein()"
2024-04-13 08:20:53 +02:00
]
},
{
"cell_type": "markdown",
"id": "filled-burton",
"metadata": {},
"source": [
"A teraz sprawdźmy coś jeszcze. W danych przykładowego korpusu znajduje się także angielski tekst źródłowy. Teoretycznie, dobre tłumaczenie niemieckie powinno zawierać jak najwięcej słów z angielskiego źródła. Wykonajmy najstępujący eksperyment:"
]
},
{
"cell_type": "markdown",
"id": "grateful-recruitment",
"metadata": {},
"source": [
"### Ćwiczenie 5: Dla każdej trójki zdań z korpusu przykładowego wykonaj następujące kroki:\n",
" * Przetłumacz każde angielskie słowo na niemiecki przy użyciu modułu PyDictionary.\n",
" * Sprawdź, które z niemieckich tłumaczeń zawiera więcej spośród tych przetłumaczonych słów - automatyczne, czy ludzkie.\n",
"Następnie wypisz statystyki zbiorcze. Które tłumaczenie zawiera więcej słownikowych tłumaczeń słów ze źródła?"
]
},
{
"cell_type": "code",
2024-04-23 19:49:47 +02:00
"execution_count": 1,
"id": "49c68adb-f242-434a-94e0-8236bb944e1b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Invalid Word\n",
"None\n"
]
}
],
"source": [
"import PyDictionary \n",
"dictde = PyDictionary.PyDictionary() \n",
" \n",
"translation = dictde.translate(\"happy\",'de') \n",
"print(translation)"
]
},
{
"cell_type": "code",
"execution_count": 2,
2024-04-13 08:20:53 +02:00
"id": "descending-easter",
"metadata": {},
"outputs": [],
"source": [
2024-04-23 19:49:47 +02:00
"from PyDictionary import PyDictionary\n",
"\n",
"def translate(word):\n",
" dictionary = PyDictionary()\n",
" translation = dictionary.translate(word, 'de')\n",
" return translation\n",
"\n",
2024-04-13 08:20:53 +02:00
"def analyze_translations():\n",
2024-04-23 19:49:47 +02:00
" dictionary = PyDictionary()\n",
" result = []\n",
" for sentence in STANDARD:\n",
" words = []\n",
" for word in sentence:\n",
" words.append(dictionary.translate(word,'de'))\n",
" result.append(words)\n",
"\n"
2024-04-13 08:20:53 +02:00
]
}
],
"metadata": {
"author": "Rafał Jaworski",
"email": "rjawor@amu.edu.pl",
"kernelspec": {
2024-04-21 12:34:30 +02:00
"display_name": "Python 3 (ipykernel)",
2024-04-13 08:20:53 +02:00
"language": "python",
"name": "python3"
},
2024-04-21 12:34:30 +02:00
"lang": "pl",
2024-04-13 08:20:53 +02:00
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2024-04-21 12:34:30 +02:00
"version": "3.9.2"
},
"subtitle": "8. Wykorzystanie tłumaczenia automatycznego we wspomaganiu tłumaczenia",
"title": "Komputerowe wspomaganie tłumaczenia",
"year": "2021"
2024-04-13 08:20:53 +02:00
},
"nbformat": 4,
"nbformat_minor": 5
}