forked from bfijalkowski/KWT-2024
385 lines
47 KiB
Plaintext
385 lines
47 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "improved-register",
|
|
"metadata": {},
|
|
"source": [
|
|
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\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",
|
|
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
|
|
]
|
|
},
|
|
{
|
|
"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."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "d83ccf58",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import warnings\n",
|
|
"warnings.filterwarnings(\"ignore\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "a72875eb",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(119008, 117487)"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import zipfile\n",
|
|
"\n",
|
|
"archive = zipfile.ZipFile('./data/corpus_corrected.zip', 'r')\n",
|
|
"\n",
|
|
"n_samples = -1\n",
|
|
"original_text = archive.read('corpus_en.txt').decode('utf-8')[:n_samples]\n",
|
|
"reference_text = archive.read('corpus_de_human.txt').decode('utf-8')[:n_samples]\n",
|
|
"candidate_text = archive.read('corpus_de_nmt.txt').decode('utf-8')[:n_samples]\n",
|
|
"\n",
|
|
"len(reference_text), len(candidate_text)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "05a447be",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from nltk.translate.bleu_score import sentence_bleu"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "moving-clothing",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"3.088188515329241e-232"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"def calculate_bleu():\n",
|
|
" return sentence_bleu(reference_text, candidate_text)\n",
|
|
"\n",
|
|
"calculate_bleu()"
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"execution_count": 5,
|
|
"id": "lasting-rolling",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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ZMkSbN26ddRY+vr60N7ePuQrWEn1P1nJEdAH6fT02/uPxP91/xm0dttkjoaILkba/pocGxa0r0ujuSzDnQCV1rSjuYuvWYHidQJ0/fXX495778WpU6c8t508eRL//d//jVWrVo35fhobG+F0OpGYOHSCd2JiImpra4f9ntra2lGvr6+vR2dnJx599FGsXLkSH3zwAb72ta/h61//Oj7++OMRY3nkkUdgtVo9X6mpwXuEWpoBFozbX5LcjFhkJUWgx+7E/+6pljscIroILR6BHyw+wozpie5TuZ+WcxUoULxOgB5//HGEhYUhKysL6enpSE9PR3Z2NmJjY/HEE0/4I8Yxc7ncE3Wvv/56/OAHP8DcuXNx33334atf/So2b9484vdt3LgRbW1tnq/q6uB90wyWGWCjEQTB0xjx5aJKTlomUjhpBShDowkQMPg4PMdiBIrXx+CtViuKioqwfft2HD582DMN/vLLL/fqfuLi4qDX61FXVzfk9rq6OiQlJQ37PUlJSaNeHxcXB4PBcEGNUnZ2Nj755JMRYzGbzTCbg6Mh4MUE6xH4862am4LHCo+htr0X7x+pxao5KXKHREQj0GoPoMHyMmPxUlElilkHFDBerwAB7k/YK1aswIYNG7Bu3TrMnj3b6/swmUxYsGABduzY4bnN5XJhx44dyM3NHfZ7cnNzh1wPANu3b/dcbzKZsGjRIhw7dmzINcePH8fkyZO9jjHYNHT0oaGjD4IAZCUFTxPE4ZgNenz7MvfP/E9sjEikaNIYjIx47Z0AkyzJiIVOcCeDNW09coejCV4nQI899hi2bNni+fONN96I2NhYTJgwAYcPH/bqvtavX4/nn38eL7/8MkpLS3HXXXehq6sLa9euBQDceuut2Lhxo+f6e+65B4WFhXjyySdRVlaGhx56CPv27cO6des812zYsAFbtmzB888/j5MnT2LTpk345z//if/6r//y9qkGHWn7Kz02DKGmcfXAVJVbLpsEk0GHw9WtOFDFOTtEStTncOJMi/sNX8srQNYQI2ZNsAIAV4ECxOsEaPPmzZ4i4e3bt2P79u14//33cc0112DDhg1e3ddNN92EJ554Ag888ADmzp2LQ4cOobCw0FPoXFVVNWTCfF5eHl577TU899xzmDNnDv76179i69atmDlzpuear33ta9i8eTMef/xxzJo1C3/84x/x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9hreeustREREoLa2FgBgtVoREhIic3TaExERcUH9VVhYGGJjY1mXJZMf/OAHyMvLw69+9SvceOON2LNnD5577jk899xzcoemSddddx1++ctfYtKkSZgxYwYOHjyIp556Crfffrvcoakaj8EH0KZNm/DrX/8atbW1mDt3Ln77299iyZIlcoelOYIgDHv7iy++iO985zuBDYaGdcUVV/AYvMzeeecdbNy4ESdOnEB6ejrWr1+PO++8U+6wNKmjowP3338//vGPf6C+vh4pKSm4+eab8cADD8BkMskdnmoxASIiIiLNYQ0QERERaQ4TICIiItIcJkBERESkOUyAiIiISHOYABEREZHmMAEiIiIizWECRERERJrDBIiIiIg0hwkQEdEoXnrpJURFRckdBhH5GBMgIlKF73znOxAEwfMVGxuLlStX4vPPPx/zfTz00EOYO3eu/4IkItVgAkREqrFy5UrU1NSgpqYGO3bsgMFgwFe/+lW5wyIiFWICRESqYTabkZSUhKSkJMydOxf33Xcfqqur0dDQAAD48Y9/jGnTpiE0NBQZGRm4//77YbfbAbi3sn7+85/j8OHDnlWkl156CQDQ2tqK//zP/0RiYiIsFgtmzpyJd955Z8hjb9u2DdnZ2QgPD/ckYkSkXga5AyAiGo/Ozk688sormDJlCmJjYwEAEREReOmll5CSkoIvvvgCd955JyIiIvCjH/0IN910E44cOYLCwkJ8+OGHAACr1QqXy4VrrrkGHR0deOWVV5CZmYmSkhLo9XrPY3V3d+OJJ57AX/7yF+h0OnzrW9/CD3/4Q7z66quyPHciunRMgIhINd555x2Eh4cDALq6upCcnIx33nkHOp17MftnP/uZ59q0tDT88Ic/xOuvv44f/ehHCAkJQXh4OAwGA5KSkjzXffDBB9izZw9KS0sxbdo0AEBGRsaQx7Xb7di8eTMyMzMBAOvWrcP//M//+PW5EpF/MQEiItW48sor8Yc//AEA0NLSgt///ve45pprsGfPHkyePBlbtmzBb3/7W5w6dQqdnZ1wOByIjIwc9T4PHTqEiRMnepKf4YSGhnqSHwBITk5GfX29b54UEcmCNUBEpBphYWGYMmUKpkyZgkWLFuGPf/wjurq68Pzzz6O4uBi33HILrr32Wrzzzjs4ePAgfvrTn8Jms416nyEhIRd9XKPROOTPgiBAFMVLei5EJC+uABGRagmCAJ1Oh56eHhQVFWHy5Mn46U9/6vn706dPD7neZDLB6XQOuW327Nk4c+YMjh8/PuoqEBEFFyZARKQafX19qK2tBeDeAtu0aRM6Oztx3XXXob29HVVVVXj99dexaNEivPvuu/jHP/4x5PvT0tJQUVHh2faKiIjA8uXLcfnll+OGG27AU089hSlTpqCsrAyCIGDlypVyPE0iCgBugRGRahQWFiI5ORnJyclYsmQJ9u7dizfffBNXXHEFVq1ahR/84AdYt24d5s6di6KiItx///1Dvv+GG27AypUrceWVVyI+Ph7/+7//CwD429/+hkWLFuHmm29GTk4OfvSjH12wUkREwUUQuZFNREREGsMVICIiItIcJkBERESkOUyAiIiISHOYABEREZHmMAEiIiIizWECRERERJrDBIiIiIg0hwkQERERaQ4TICIiItIcJkBERESkOUyAiIiISHP+P8ZMKbDK+zhmAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"def analyze_bleu():\n",
|
|
" reference_sentences = reference_text.split('\\n')\n",
|
|
" candidate_sentences = candidate_text.split('\\n')\n",
|
|
"\n",
|
|
" # Calculate BLEU scores for every group of 100 sentences\n",
|
|
" bleu_scores = []\n",
|
|
" for i in range(0, len(reference_sentences), 100):\n",
|
|
" reference_batch = reference_sentences[i:i+100]\n",
|
|
" candidate_batch = candidate_sentences[i:i+100]\n",
|
|
" bleu_scores.append(sentence_bleu([reference_batch], candidate_batch))\n",
|
|
"\n",
|
|
" plt.plot(bleu_scores)\n",
|
|
" plt.ylabel('BLEU score')\n",
|
|
" plt.xlabel('Batch')\n",
|
|
" plt.show()\n",
|
|
"\n",
|
|
"analyze_bleu()"
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"execution_count": 6,
|
|
"id": "occupied-swing",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0.16925791156687617"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from jiwer import wer\n",
|
|
"\n",
|
|
"def calculate_wer():\n",
|
|
" return wer(reference_text, candidate_text)\n",
|
|
"\n",
|
|
"calculate_wer()"
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"execution_count": 7,
|
|
"id": "immediate-element",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"14645"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from Levenshtein import distance\n",
|
|
"\n",
|
|
"def calculate_levenshtein():\n",
|
|
" return distance(reference_text, candidate_text)\n",
|
|
"\n",
|
|
"calculate_levenshtein()"
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"execution_count": null,
|
|
"id": "descending-easter",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from PyDictionary import PyDictionary\n",
|
|
"\n",
|
|
"def analyze_translations():\n",
|
|
" dictionary=PyDictionary()\n",
|
|
" english_words = set(original_text.split())\n",
|
|
" \n",
|
|
" german_words = set()\n",
|
|
" for word in english_words:\n",
|
|
" try:\n",
|
|
" german_word = dictionary.translate(word, 'de')\n",
|
|
" german_words.add(german_word)\n",
|
|
" except:\n",
|
|
" pass\n",
|
|
"\n",
|
|
" reference_words = set(reference_text.split())\n",
|
|
" candidate_words = set(candidate_text.split())\n",
|
|
"\n",
|
|
" manual_translations, automatic_translations = 0, 0\n",
|
|
" for word in german_words:\n",
|
|
" if word in candidate_words:\n",
|
|
" automatic_translations += 1 \n",
|
|
" if word in reference_words:\n",
|
|
" manual_translations += 1\n",
|
|
"\n",
|
|
" return manual_translations, automatic_translations\n",
|
|
"\n",
|
|
"manual_translations, automatic_translations = analyze_translations()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "3d7a9458",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Manual translations: 134\n",
|
|
"Automatic translations: 122\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(f\"Manual translations: {manual_translations}\")\n",
|
|
"print(f\"Automatic translations: {automatic_translations}\")"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"author": "Rafał Jaworski",
|
|
"email": "rjawor@amu.edu.pl",
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"lang": "pl",
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.14"
|
|
},
|
|
"subtitle": "8. Wykorzystanie tłumaczenia automatycznego we wspomaganiu tłumaczenia",
|
|
"title": "Komputerowe wspomaganie tłumaczenia",
|
|
"year": "2021"
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|