Bachelorscriptie Informatiekunde
Automatische Categorisatie van Afwijkende Vertalingen in een Taalonderzoekssysteem
Marvin Siliakus 6 juli 2008
Scriptiebegeleider: dr. S. Kürschner
Inhoudsopgave 1. Inleiding..............................................................................................3 2. Verkenningsfase.....................................................................................5 3. Een definitie.......................................................................................10 4. Ontwerpfase.......................................................................................14 5. Implementatie.....................................................................................17
2
1.
Inleiding
Het Language Research System (LRS) is een webapplicatie die onder andere het afnemen van een Language Understanding Test (LUT) faciliteert, in het kader van een onderzoek naar het begrip van geschreven en gesproken woorden[1]. Een deelnemer aan de LUT krijgt een stimulus (e.g. Stunde) gepresenteerd in een bepaalde testtaal (e.g. Duits), welke hij of zij moet vertalen naar zijn of haar moedertaal (e.g. Nederlands). De deelnemer moet zijn of haar vertaling (e.g. uur) invullen in een tekstveld. Het systeem vergelijkt deze vertaling met de verwachte vertaling (e.g. les). Eenzelfde vergelijking maakt het systeem tussen de overige ingevoerde en verwachte vertalingen. Aan de hand daarvan berekent het systeem vervolgens een score (het percentage correcte antwoorden). In dit voorbeeld komt de door de deelnemer ingevoerde vertaling (uur) niet overeen met de door het systeem verwachte vertaling (les). De reden dat de deelnemer heeft gekozen voor uur is afhankelijk van zijn of haar gedachtegang, maar hoogstwaarschijnlijk heeft hij of zij een andere betekenis van Stunde gekozen dan de onderzoekers die de bij het systeem behorende dataset hebben opgesteld. De vraag is in hoeverre het systeem een verschijnsel als dit als fout moet aanmerken; de deelnemer heeft immers een correcte vertaling gegeven. Iedere deelnemer aan de LUT kan een vertaling bedenken en invoeren, die afwijkt van de verwachte vertaling. Een dergelijke afwijking kan een oorsprong als hiervoor genoemd hebben, of een andere oorsprong. Een deelnemer kan bijvoorbeeld een synoniem van de verwachte vertaling invoeren (arts in plaats van dokter bij stimulus Arzt), een spelfout maken (gerantie in plaats van garantie bij stimulus Garantie), of een derivatieaffix zoals in de testtaal toepassen (ziekelijkheid in plaats van ziekte bij stimulus Krankheit). Een ander verschijnsel, dat mogelijk ten grondslag ligt aan afwijkende vertalingen, ontstaat door woorden in de moedertaal die verwant zijn aan het woord in de testtaal (de stimulus). Een voorbeeld hiervan is het Duitse woord Liste wat als verwachte Nederlandse vertaling lijst heeft maar wat een deelnemer ook met list zou kunnen vertalen. Dit verschijnsel is mogelijk te verklaren door een neighborhood activation model[3]. Automatische categorisatie Het doel van dit onderzoek is inzicht te krijgen in afwijkende vertalingen zoals hiervoor beschreven, in de categorieën waarin zij zijn in te delen en de redenen die deelnemers hebben om voor deze vertalingen te kiezen. Ter ondersteuning van dit onderzoek hebben wij een systeem ontwikkeld dat afwijkende vertalingen automatisch kan categoriseren; een automatische categorisator voor afwijkende vertalingen. De initiële ideeën voor onderzoeksgebieden waren: • •
De verschillende soorten afwijkende vertalingen en hun oorzaken; De invloed van de plek van de toetsen op het toetsenbord op type- en spellingsfouten;
3
•
Het toepassen van een neighborhood activation model om afwijkende vertalingen, ontstaan door met de stimulus verwante woorden in de moedertaal (Liste en list i.pv. lijst), te verklaren.
Niet al deze ideeën zijn gerealiseerd. De invloed van de plek van toetsen op het toetsenbord, is niet in het onderzoek betrokken (maar vormt uiteraard een geschikt onderzoeksgebied voor eventueel toekomstig onderzoek). Het toepassen van een neighborhood activation model is uitgevoerd door Anne van de Wetering en wordt overeenkomstig in haar werk behandeld[4].
4
2.
Verkenningsfase
Voor de ontwikkeling van het systeem hanteerden wij een taakverdeling. Marvin heeft zich gericht op de ontwikkeling van de gebruikersinterface, de belangrijkste mechanismen daarachter en een functie om een beperkte categorisatie van de afwijkende vertalingen uit te voeren. Anne van de Wetering zich heeft gericht op de diepgaande categorisatie (inclusief de controle op het gebruik van synoniemen en verkeerde derivatieaffixen en de aanwezigheid van een neighborhood activation effect) en het toepassen van woordenlijsten (om per ingevoerde vertaling aan te geven of deze op een woordenlijst is gevonden – dit ter informatie van de gebruikers van het systeem). Zie daarvoor haar werk[4]. Om te beginnen, heb ik het volgende concept bedacht van een tabel, die een overzicht geeft van afwijkende vertalingen (hier vertalingsfouten genoemd1; zie Tabel 1). Een dergelijke tabel zou door het te ontwikkelen automatische categorisatiesysteem, gegeneerd moeten worden. Testtaal Moedertaal Stimulus Verwachte Vertaling Frequentie Soort van vertaling vertalingsfout deelnemer Duits
Nederlands
Stunde
Duits
Nederlands
Duits ...
les
uur
25 (50%)
Alt. betekenis
Garantie garantie
gerantie
1 (2%)
Spellingsfout
Nederlands
Liste
lijst
list
27 (54%)
Verw. woord
...
...
...
...
...
...
Tabel 1. Concept van een tabel met vertalingsfouten (fictieve gegevens)
Eerste idee voor een MySQL-query Om een tabel als deze (nog zonder de kolom Soort vertalingsfout) te verkrijgen vanuit de database van het LRS, heb ik een MySQL-query bedacht (Codefragment 1)2. Een aangepaste query Voordat ik dit onderzoek kan vervolgen zal ik eerst een analyse moeten maken van eventueel bestaande vertalingsfouten, om vanaf dat punt ten eerste te definiëren wat ik eigenlijk versta onder een vertalingsfout en ten tweede een plan te ontwikkelen om deze vertalingsfouten, of een deel daarvan, als dat dan al mogelijk blijkt te zijn, automatisch in categorieën in te delen. Het uitvoeren van bovenstaande query, zonder de beperkende clausule LIMIT 0, 30
levert echter een resultaat op van enorme grootte. 1 De aanduiding afwijkende vertalingen is echter passender omdat deze betrekking heeft op vertalingsfouten én op vertalingen die anders zijn dan de verwachte vertaling, maar achteraf correct (i.e. alternatieve correcte vertalingen). 2 Het duurde aanvankelijk enkele minuten om deze query uit te voeren; de query is nu echter opgenomen in de query cache en wordt overeenkomstig vrijwel zonder wachttijd uitgevoerd.
5
Het zou voor een eerste analyse dan ook niet praktisch zijn met deze gegevens te werken, vanwege de omvang maar ook vanwege het feit dat de gegevens afkomstig zijn van tests gemaakt in potentieel alle negen moedertalen en zeven testtalen; het doen van een volledige uitspraak over eventuele vertalingsfouten in deze gegevens zou taalkundige kennis van ieder van deze talen vereisen. Daarom heb ik mij in deze initiële fase beperkt tot de gegevens die betrekking hebben op tests met als testtaal Duits en gemaakt door personen met als moedertaal Nederlands. Hiervoor heb ik de eerder genoemde MySQL-query aangepast (Codefragment 2). In deze query heb ik twee voorwaarden toegevoegd om alleen de gegevens behorende bij tests met als testtaal Duits en als moedertaal Nederlands op te halen. Verder heb ik de (nu overbodige) selectie van de eerste twee kolommen verwijderd. SELECT tl.tv_value "Testtaal", pl.tv_value "Moedertaal", t1.tr_value "Stimulus", t2.tr_value "Verwachting", ta.ta_value "Vertaling", COUNT(*) "Frequentie" FROM gr_testanswer ta, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "to_language" ORDER BY t_id) tl, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "from_language" ORDER BY t_id) pl, gr_translation t1, gr_translation t2 WHERE ta.ta_value != "" AND ta.ta_correct = 0 AND ta.t_id = tl.t_id AND ta.t_id = pl.t_id AND ta.w_id = t1.w_id AND ta.w_id = t2.w_id AND tl.tv_value = t1.tr_language AND pl.tv_value = t2.tr_language AND tl.tv_value != pl.tv_value GROUP BY tl.tv_value, pl.tv_value, t1.tr_value, t2.tr_value, ta.ta_value ORDER BY tl.tv_value, pl.tv_value, t1.tr_value, t2.tr_value, ta.ta_value, COUNT(*) DESC LIMIT 0, 30
Codefragment 1. MySQL-query om afwijkende vertalingen op te halen (voor alle talencombinaties) SELECT t1.tr_value "Stimulus", t2.tr_value "Verwachting", ta.ta_value "Vertaling", COUNT(*) "Frequentie" FROM gr_testanswer ta, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "to_language" AND tv_value = "de" ORDER BY t_id) tl, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "from_language" AND tv_value = "nl" ORDER BY t_id) pl, gr_translation t1, gr_translation t2 WHERE ta.ta_value != "" AND ta.ta_correct = 0 AND ta.t_id = tl.t_id
6
AND ta.t_id = pl.t_id AND ta.w_id = t1.w_id AND ta.w_id = t2.w_id AND tl.tv_value = t1.tr_language AND pl.tv_value = t2.tr_language AND tl.tv_value != pl.tv_value GROUP BY tl.tv_value, pl.tv_value, t1.tr_value, t2.tr_value, ta.ta_value ORDER BY tl.tv_value, pl.tv_value, t1.tr_value, t2.tr_value, ta.ta_value, COUNT(*) DESC LIMIT 0, 30
Codefragment 2. MySQL-query om afwijkende vertalingen op te halen, voor testtaal Duits (“de”) en moedertaal Nederlands (“nl”)
Eerste resultaten Het uitvoeren van deze tweede query levert een resultaat op met een grootte van 2.237 records. Geëxporteerd naar een PDF-bestand, komt dit neer op 51 pagina's met tabellen. Een relatief overzichtelijke hoeveelheid gegevens, maar voor een eerste analyse toch een te grote taak. Daarom heb ik, in overleg met Anne, besloten om een selectie uit de vertalingsfouten te nemen (de eerste vier pagina's). Zij zal vervolgens de eerste twee pagina's analyseren (zie daarvoor haar werk), ik de derde en vierde pagina. Hieronder volgt de analyse van mijn deel van de selectie. Allereerst een tabel, met een overzicht van de frequenties van de vertalingsfouten (Tabel 2). Pagina Stimulus
Aantal verschillende Aantal verschillende afwijkende vertalingen afwijkende vertalingen met frequentie > 10
Totaal aantal afwijkende vertalingen
3
Arzt
6
0
14
Asche
5
0
7
Atmosphäre
2
1
14
Auflösung
8
0
11
Aufmerksamk 10 eit
0
13
Aufsicht
10
1
44
Auge
4
1
32
Augenblick
2
0
2
Ausbildung
6
0
10
Ausgabe
7
0
12
Ausland
2
0
2
Aussprache
2
0
2
Austausch
12
0
12
4
7
Auto
2
0
2
Balance
10
0
18
Tabel 2. Steekproef uit vertalingsfouten in testen met testtaal Duits en moedertaal Nederlands
Wat opvalt, is dat er in deze korte reeks al een relatief groot aantal afwijkende vertalingen is te vinden en dat er binnen deze afwijkingen tevens een relatief grote variatie bestaat. Wat tevens opvalt, is dat er in 3 gevallen (bij de stimuli Atmosphäre, Aufsicht en Auge) een relatief groot aantal deelnemers (> 10) voor een afwijkende vertalingen kiest (ik kon in deze initiële fase geen percentages geven). Mogelijk, is daar een speciale reden voor. Het zou kunnen dat deze afwijkende vertalingen vertalingen van een synoniem van het doelwoord zijn, of dat deze vertalingen fonologisch verwanter zijn met de stimulus dan de verwachte vertalingen (zie ook eerder in deze tekst). Mogelijk, zijn het echter ook “gewone” vertalingsfouten. De vertalingsfouten met een lage frequentie (< 10) zijn waarschijnlijk spelfouten of bijzondere vertalingen. Ik zal nu voor twee stimuli in meer detail bekijken, welke vertalingsfouten deelnemers hebben gemaakt. •
De stimulus Arzt (verwachte vertaling: dokter); in totaal werden 14 afwijkende vertalingen ingevoerd in 6 verschillende vormen. Vertaling Frequentie arts
8
arts]
1
at
1
hardst
1
kunst
2
tv
1
Het woord arts lijkt hier een afwijkende, doch correcte vertaling; arts kan namelijk als een synoniem van het doelwoord dokter worden beschouwd. arts] lijkt een spelfout veroorzaakt door een verkeerde aanslag op het toetsenbord (i.e. een typefout). De overige woorden (at, hardst, kunst en tv) lijken bijzondere vertalingen of mogelijk gokpogingen van de betreffende deelnemers. kunst kan nog duiden op verwarring met het gelijkende Engelse woord art. •
De stimulus Auge (verwachte vertaling: oog); in totaal werden 32 afwijkende vertalingen ingevoerd in 4 verschillende vormen.
8
Vertaling
Frequentie
augen
1
boogie woogie nigger 1 ogen
29
ook
1
De frequente vertaling ogen in plaats van oog geeft aan dat er bij de Nederlandse deelnemers verwarring is over het feit dat het om een enkelvoudsvorm gaat. augen is eerder een herhaling dan een vertaling, als het om een auditieve stimulus ging veronderstelde de deelnemer mogelijk het gehoorde woord te moeten transcriberen. boogie woogie nigger is een wel heel bijzondere associatie met Auge (of wellicht een vorm van verveling of humor van een deelnemer). ook lijkt een opzichzelfstaande, maar onsuccesvolle, vertaalpoging. Presentatie wijze De stimuli in de gepresenteerde tabel met vertalingsfouten (Tabel 2) zijn zowel visueel als auditief aangeboden, de vertalingen zijn ten gevolge gebaseerd op zowel visuele als auditieve prikkels. Wellicht is het voor verdere redenering van belang, hier een onderscheid in te maken.
9
3.
Een definitie
Nu ik een beeld heb gekregen van een aantal van de huidige afwijkende vertalingen en de verschillende oorzaken daarachter, ben ik op het punt gekomen om een definitie op te stellen van een vertalingsfout. Deze definitie is essentieel voor het categoriseren van vertalingsfouten (het is onpraktisch dit te doen zonder precies te weten wat een vertalingsfout is). De definitie die ik zal hanteren luidt als volgt. Een vertalingsfout is een door een persoon, in dit onderzoek zijnde een deelnemer aan de LUT, gemaakte fout, bij de interpretatie van een stimulus, het bedenken van een vertaling en/of het invoeren van een vertaling, resulterend in een vertaling welke afwijkt van de door het systeem initieel verwachte vertaling en NIET een alternatieve, correcte vertaling is. Vertalingen waarin een vertalingsfout is gemaakt wijken af van de bijbehorende verwachte vertaling. Iedere vertalingsfout resulteert dus in een afwijkende vertaling. Niet iedere afwijkende vertaling is echter ontstaan door een vertalingsfout. Er bestaan ook vertalingen, die anders zijn dan de verwachte vertaling, maar achteraf correct zijn. De deelnemer had in dat geval een juiste gedachtegang, echter heeft het systeem dat niet als dusdanig aangemerkt. Afwijkende vertalingen die fout zijn (vertalingsfouten) zouden gezien kunnen worden als true negatives (echte negatieven), afwijkende vertalingen die goed zijn als false negatives (valse negatieven). In dit onderzoek ben ik geïnteresseerd in beide vormen van afwijkende vertalingen; het is dan ook beter om vanaf dit punt als onderzoeksthema het bestuderen van de verschillende soorten afwijkende vertalingen in te stellen (in plaats van vertalingsfouten). Om met een helder uitgangspunt verder te werken, heb ik ook een definitie van een afwijkende vertaling opgesteld. Deze luidt als volgt. Een afwijkende vertaling is een door een persoon, in dit onderzoek zijnde een deelnemer aan de LUT, ingevoerde vertaling, welke afwijkt van de door het systeem initieel verwachte vertaling en waaraan óf een vertalingsfout, óf een afwijkende maar juiste gedachtegang ten grondslag ligt. Deze definitie omvat dus zowel incorrecte vertalingen (vertalingsfouten) als (achteraf) correcte vertalingen. Wat nu nog resteert is de definitie van een aantal categorieën afwijkende vertalingen, met het oog op het ontwikkelen en toepassen van een oplossing om de afwijkende vertalingen automatisch te categoriseren. Ik zal de volgende categorieën hanteren. Merk op dat overlap tussen de verschillende categorieën niet uitgesloten is. Er zijn situaties (e.g. stimulus: “boer”, vertaling: “boert”) waarin twee of meer interpretaties mogelijk zijn (e.g. een typefout of de keuze van een geheel ander woord). •
Vertalingen met een typefout: vertalingen met een afwijking, waaraan een niet bedoelde toetsaanslag ten grondslag ligt, herkenbaar door •
de toevoeging (additie) van
10
•
•
•
•
één of meer alfabetische tekens (a-z en A-Z)3, e.g. dokterr i.p.v. dokter;
•
één of meer numerieke tekens (0-9), e.g. dokte3r i.p.v. dokter;
•
interpunctie, e.g. dokter. i.p.v. dokter;
•
één of meer overige tekens, e.g. dokter] i.p.v. dokter;
de vervanging (substitutie) van één of meer tekens (in het systeem beperkt tot alfabetische tekens en liggende streepjes) door een ander teken (zoals hiervoor opgesomd), e.g. doktet i.p.v. dokter; de verwisseling (transpositie) van één of meer tekens (alfabetisch of liggend streepje) en een naastgelegen teken (alfabetisch of liggend streepje), e.g. doktre i.p.v. dokter; de verwijdering (deletie) van één of meer tekens (alfabetisch of liggend streepje), e.g. doker i.p.v. dokter.
De verwachte lengte van een typefout is 1-2 teken(s). Bij vertalingen met grotere lengte (> 5) zijn typefouten waarschijnlijker. Vertalingen met een typefout zijn herkenbaar doordat ze niet op een woordenlijst staan (uitgezonderd van typefouten die toevallig een bestaand woord opleveren4). Het systeem zal dan ook een woordenlijst moeten toepassen, zie hiervoor Anne's werk[4]. Automatisch aanmerken als correct: als bij deze vertalingen met redelijke zekerheid is vastgesteld dat het om typefouten gaat (i.e. een vertaling met een afwijking zoals hiervoor beschreven waarbij de vertaling met afwijking niet een bestaand woord is), kunnen de vertalingen automatisch als correct beschouwd worden (om een foutloze afwikkeling te garanderen ligt deze keuze in het uiteindelijke systeem echter altijd bij de gebruiker annex onderzoeker). •
Vertalingen met een spelfout: vertalingen met een afwijking, waaraan een verkeerde toepassing van de spellingsregels van de betreffende taal ten grondslag ligt, e.g. beidrage i.p.v. bijdrage in het geval van de Nederlandse spellingsregels. Soms gaat het ook om een alternatieve spelling (aktie i.p.v. actie). Ook vertalingen met een spelfout zijn herkenbaar doordat ze niet op een woordenlijst staan (spelfouten die bestaande woorden opleveren daar gelaten). Zie hiervoor Anne's werk[4]. Automatisch aanmerken als correct: waarschijnlijke spelfouten kunnen ook automatisch als correct worden aangemerkt.
•
Vertalingen van een alternatieve betekenis van de stimulus: vertalingen waarbij de deelnemer in plaats van de door de onderzoekers bedoelde betekenis van de stimulus een alternatieve betekenis heeft vertaald, e.g. uur i.p.v. les bij Stunde.
3 Eventueel inclusief diakritisch teken (zoals bij ë). 4 Een deelnemer kan bijvoorbeeld licht invoeren terwijl hij of zij lucht bedoelt.
11
Automatisch aanmerken als correct: ja, maar beoordeling door de onderzoekers is waarschijnlijk noodzakelijk. •
Synoniemen van de door het systeem verwachte vertaling: vertalingen waarbij de deelnemer de stimulus met een synoniem van de verwachte vertaling heeft vertaald, e.g. arts i.p.v. dokter. Automatisch aanmerken als correct: idem.
•
Het toepassen van derivatieaffixen zoals in de testtaal: vertalingen waarbij in plaats van een correcte derivatieaffix, een derivatieaffix uit de testtaal (afgeleid van de stimulus) is gebruikt, e.g. ziekelijkheid in plaats van ziekte bij stimulus Krankheit. Automatisch aanmerken als correct: idem.
•
Aan de stimulus grafisch of fonologisch verwante woorden (mogelijk opgeroepen door een neighborhood activation effect): vertalingen waarbij de deelnemer de stimulus met een aan de stimulus grafisch of fonologisch verwant woord (al dan niet méér verwant dan de verwachte vertaling) heeft vertaald, e.g. list i.p.v. lijst bij Liste (list is zowel grafisch als fonologisch verwant aan Liste). Automatisch aanmerken als correct: idem.
•
Vertalingen van valse vrienden van de stimulus in andere talen: vertalingen waarbij de deelnemer een valse vriend van de stimulus in een andere taal heeft vertaald, e.g. kunst i.p.v. aard bij Art (de valse vriend is hier het Engelse art). Automatisch aanmerken als correct: nee, het betreft een serieuze fout. Voor het identificeren van de fout blijft presentatie aan de onderzoekers echter onvermijdelijk.
•
Nonsens vertalingen: in enkele gevallen vulden deelnemers, omdat zij geen passende vertaling kunnen bedenken, uit verveling, als grap of met een andere reden een nonsens vertaling in. Deze vertalingen zijn niet onder te brengen in de eerder genoemde categorieën. Wellicht is het nuttig dat de te ontwikkelen oplossing in het geval van een dergelijke vertaling de mogelijkheid biedt alle vertalingen van de betreffende deelnemer weer te geven en zo nodig te filteren. Automatisch aanmerken als correct: idem.
•
Vertalingen ten gevolge van een verkeerde interpretatie van de opdracht: in enkele andere gevallen hebben deelnemers de opdracht (vertalen van de stimulus) verkeerd begrepen en hebben zij, bijvoorbeeld, de stimulus getranscribeerd (indien het een auditieve stimulus betrof). Automatisch aanmerken als correct: idem.
Het in dit werk beschreven deel van het systeem heeft alleen ondersteuning voor de categorieën Typefout en Spelfout5.
5 En daarnaast nog de categorieën Overige fout en Onbekende fout; dit wordt later in detail behandeld.
12
Zoals bij onze taakverdeling afgesproken ondersteunt Anne's programmeerwerk[4] een meer diepgaande categorisatie (inclusief ondersteuning voor synoniemen, verkeerde toepassingen van derivatieaffixen en neighborhood activation effecten). Nu gedefinieerd is wat een vertalingsfout en een afwijkende vertaling zijn en wat de verschillende categorieën waarin deze zijn in te delen inhouden, is de toegang geopend tot de volgende ontwikkelingsfase, het ontwerp.
13
4.
Ontwerpfase
Een belangrijk onderdeel van het te ontwikkelen systeem om afwijkende vertalingen automatisch te extraheren en categoriseren is de gebruikersinterface. Deze vormt de schakel tussen de gebruikers (i.e. de bij het project betrokken onderzoekers) en de database met vertalingen. Aan deze interface zijn de volgende eisen gesteld (door de toekomstige gebruikers annex onderzoekers): •
• •
•
De gebruiker moet per stimulus een systematische opstelling van vertalingen kunnen zien; Vertalingen moeten daarbij automatisch zijn ingedeeld in categorieën; De gebruiker moet het absolute aantal afwijkende vertalingen (e.g. 10) en het relatieve aantal afwijkende vertalingen (e.g. 10%) kunnen zien; Het systeem moet nagaan, of er aan de stimulus verwante woorden in de moedertaal zijn die sterker lijken op de stimulus dan de verwachte vertaling. Daartoe zal een woordenlijst gebruikt moeten worden (zie Anne's werk[4]).
Daaraan zijn na verdere analyse van de situatie en na verder overleg met de gebruikers de volgende punten toegevoegd: •
•
•
•
Het systeem moet de mogelijkheid bieden, de afwijkende vertalingen te filteren op een bepaalde combinatie van testtaal en moedertaal (e.g. Duits en Nederlands); Het systeem moet de mogelijkheid bieden, een handeling uit te voeren gezien de gevonden categorisering van vertalingsfouten. E.g., vindt het systeem dat een aanzienlijk deel van de gebruikers een bepaalde synoniem van de verwachte vertaling heeft gekozen, dan moet de gebruiker (onderzoeker) de mogelijkheid hebben deze synoniem als correcte vertaling aan te merken, dan wel de mogelijkheid hebben de scores voor de betreffende deelnemers aan te passen; Er moet een mogelijkheid zijn voor onderzoekers om aan te geven, welke afwijkende vertalingen zij behandeld hebben, bijvoorbeeld door middel van een selectievakje (een “vinkje”); Onderzoekers moeten inzicht kunnen krijgen in de vertalingsfouten per deelnemer; zo kan een onderzoeker bepalen of een deelnemer serieus mee deed aan de test of dat hij of zij geen echte pogingen heeft gedaan om de stimuli te vertalen (“boogie woogie nigger” bij Auge, “dark feder” bij Feder en “groene monster” bij Schreck). Op deze manier kan een onderzoeker ook zien of een deelnemer de bedoeling van de test goed heeft begrepen of dat hij of zij (bijvoorbeeld) de auditieve stimuli ging transcriberen in plaats van vertalen.
•
Zoals al eerder genoemd, moet een onderzoeker voor een correcte interpretatie van de resultaten tevens kunnen zien of stimuli visueel of juist auditief waren aangeboden aan de deelnemers. 14
Een prototype Aan de hand van de tot nu toe opgestelde ideeën en de op papier getekende schets heb ik op dit punt een prototype ontwikkeld van het beoogde systeem om afwijkende vertalingen op te sporen en waar mogelijk automatisch te categoriseren (in coöperatie met Anne). Ik heb mij daarbij geconcentreerd op de gebruikersinterface, echter is een deel van het achterliggende mechanisme ook al werkzaam. Dit prototype is te bereiken via de URL: germanic/deviatingtranslations/6.
http://www.let.rug.nl/lrs/admincp-
Zoals gewoonlijk voor het LRS systeem, dient men eerst in te loggen via: http://www.let.rug.nl/lrs/admincp/. Weer een aangepaste query Ik heb in deze fase de eerder genoemde MySQL-query (Codefragment 1 en Codefragment 2) uitgebreid. De vorige versie van de query heb ik enigszins ingekort. Vervolgens heb ik er een paar functies aan toegevoegd om de relatieve frequenties van de afwijkende vertalingen te berekenen (Codefragment 3). SELECT t1.tr_value "Stimulus", t2.tr_value "Verwachting", ta.ta_value "Vertaling", COUNT(*) "Abs. frequentie", CONCAT(ROUND(COUNT(*) / cc.correct_count * 100, 1), "%") "Rel. frequentie" FROM gr_testanswer ta, (SELECT t_id FROM gr_testvariable WHERE tv_name = "to_language" AND tv_value = "de" ORDER BY t_id) tl, (SELECT t_id FROM gr_testvariable WHERE tv_name = "from_language" AND tv_value = "nl" ORDER BY t_id) pl, gr_translation t1, gr_translation t2, (SELECT w_id, COUNT(*) correct_count FROM gr_testanswer WHERE ta_correct = 1 GROUP BY w_id ORDER BY w_id) cc WHERE ta.ta_value != "" AND ta.ta_correct = 0 AND ta.t_id = tl.t_id AND ta.t_id = pl.t_id AND ta.w_id = t1.w_id AND ta.w_id = t2.w_id AND ta.w_id = cc.w_id AND t1.tr_language = "de" AND t2.tr_language = "nl" GROUP BY t1.tr_value, t2.tr_value, ta.ta_value ORDER BY t1.tr_value, ta.ta_value, COUNT(*) DESC LIMIT 0, 30
Codefragment 3. MySQL-query om afwijkende vertalingen op te halen, met beperking van testtaal en moedertaal en berekening van relatieve frequentie Wat op dit punt nog ontbreekt aan de query is 6 Deze URL verwijst nu naar de definitieve versie van het systeem.
15
•
De selectie van de presentatie wijze (“Auditief” of “Visueel”). Dit blijkt echter complex en is mogelijk niet in één query te integreren;
•
De selectie van een deelnemer ID (“1”, “2”...). Later moet deze kolom ook “klikbaar” zijn;
•
De selectie van een boolse waarde welke aangeeft of een vertaling al dan niet op een woordenlijst staat, ter ondersteuning van de onderzoekers (de daadwerkelijke controle is te implementeren door Anne – zie daarvoor haar werk[4]);
•
De selectie van de voorspelde categorie. Ik zal mij richten op het ontwikkelen van een basale classificatiemethode, terwijl Anne een meer diepgaande classificatiemethode zal ontwikkelen – zie daarvoor haar werk [4]. Ik verwacht alleen sommige typefouten (addities van tekens anders dan alfabetische tekens of een liggend streepje) en mogelijk ook sommige spelfouten met enige zekerheid te kunnen identificeren;
•
De selectie van een boolse waarde welke aangeeft of een onderzoeker een vertaling al dan niet heeft afgehandeld.
Al deze punten zijn uiteindelijk geïntegreerd in de query, met uitzondering van de boolse waarde welke aangeeft of een vertaling al dan niet op een woordenlijst staat (dit is afgevangen in Anne's programmeerwerk[4]). Dit betekent dat ook de presentatie wijze uiteindelijk in dezelfde query is geïntegreerd. Het verder uitbreiden van de query is geschied in de volgende ontwikkelingsfase, de implementatie.
16
5.
Implementatie
Deze sectie beschrijft de daadwerkelijke constructie en codering van het categorisatiesysteem. In deze constructie zijn de hiervoor bediscussieerde aandachtspunten opgenomen, alsmede de van de toekomstige gebruikers verkregen feedback op het initiële ontwerp en de de daaruit voortgekomen prototypen. Om te beginnen geeft Afbeelding 1 een indruk van het uiterlijk van het uiteindelijke systeem.
Afbeelding 1a. Weergave van de grafische gebruikersinterface (in Mozilla Firefox).
Afbeelding 1b. Actie drop-down menu (hierboven niet zichtbaar). In de rest van deze sectie wordt de werking van het systeem behandeld. De focus ligt daarbij niet op het in detail toelichten van het gebruik van variabelen, functies of andere delen van de code; zie daarvoor eventueel de in de code opgenomen commentaarregels (zie het bijgevoegde programmeerwerk). Het uitgangspunt is hier het schetsen van een globaal beeld van de mechanismen die ten grondslag liggen aan de verwerking van een door een gebruiker opgegeven zoekopdracht en het aansluitend verzamelen en presenteren van eventueel uit de achterliggende database verkregen resultaten. De nadruk ligt dan ook vooral op de werking van de code in grote lijnen. Modulaire opzet De modulaire opzet van de implementatie is op bestandsniveau beperkt tot een tweetal zelfstandige PHP-bestanden, een uitbreiding van een PHP-bestand dat dient voor de 17
inclusie van functies, een zelfstandig JavaScript-bestand en een zelfstandig Cascading Stylesheet-bestand voor de controle van de presentatie van de gebruikersinterface7. Een overzicht van deze bestanden is weergegeven in Tabel 3. Bestandsnaam
Scripttaal Belangrijkste functionaliteit
deviatingtranslations.php PHP
Gebruikersinterface, centrale aansturing, verwerking van zoekopdrachten, verzameling van resultaten, presentatie van resultaten
functions.inc.php
PHP
Bepaling van afstanden, bepaling van categorieën, classificatie van type- en spelfouten, controle over per vertaling in de database opgenomen status*
participants.php
PHP
Uitvoeren van zoekopdrachten met betrekking tot specifieke testdeelnemers
dev_trans.js
JavaScript Verwerking van gebeurtenissen
dev_trans.css
N.v.t.
*Naast
Controle over presentatie gebruikersinterface
de al in het script opgenomen functionaliteit
Tabel 3. Overzicht van de van het systeem deel uitmakende bestanden
deviatingtranslations.php Globaal zorgt dit script voor de presentatie van de gebruikersinterface (i.e. de plaats waar de gebruiker zoekopdrachten naar afwijkende vertalingen kan opgeven), de centrale aansturing van de overige PHP scripts (functions.inc.php en participants.php), de verwerking van zoekopdrachten en de verzameling en presentatie van de eventuele resultaten daarvan. De structuur van de gebruikersinterface is gedefinieerd in HTML en wordt als dusdanig uitgevoerd door het script. De gebruikersinterface biedt, zoals gezegd, ondersteuning voor het specificeren van een zoekopdracht naar afwijkende vertalingen. Een zoekopdracht omvat in de eerste plaats de selectie van waarden voor twee belangrijke parameters, zijnde de taal waarin de deelnemers (waarvan de gebruiker de vertalingen wil vinden) getest zijn (in de interface wordt hiervoor de term Test language gebruikt) en de taal van de deelnemers zelf (Participant language). Anders gezegd, zijn dit de talen waarin de stimuli (van de tests waarvan de gebruiker de vertalingen wil vinden) werden gepresenteerd en de taal waarin de bijbehorende verwachte vertalingen in het systeem zijn opgeslagen (dit zijn de vertalingen die een deelnemer aan de test voor een correct antwoord zou moeten invoeren). De gebruiker kan één van de zeven testtalen (zie ook de Inleiding) opgeven (afgekort tot “nl”, “da”, “sv”, “no”, “fr”, “de” en “nd”), en één van de zes deelnemertalen (afgekort tot “nl”, “da”, “sv”, “no”, “fr” en “de” - “nd” ontbreekt als deelnemertaal). In de tweede plaats omvat een zoekopdracht de eventuele selectie van een drietal opties. De eerste optie (in de interface Only valid genoemd) dient om alleen vertalingen van als valide (i.e. sysvalid of manvalid en niet guest of nonvalid) aangemerkte deelnemers weer te geven in de tabel met resultaten. 7 Naast deze bestanden is ook een lichte wijzig toegebracht aan page.class.php, een script die een klasse met onder andere een functie voor het toevoegen van inhoud aan pagina's definieert.
18
De tweede optie (in de interface Only untreated genoemd) dient om alleen onbehandelde vertalingen weer te geven. Het nut van deze optie zal later duidelijk worden. De derde optie (in de interface Show distance genoemd) dient om de afstanden tussen de stimuli en de door de deelnemers ingevoerde vertalingen weer te geven. Dit heeft voornamelijk een informatief doel (details volgen later). Het onderliggende algoritme is als volgt: •
•
•
•
•
•
Geef initieel een beperkte gebruikersinterface weer (i.e. met alleen een mogelijkheid de genoemde talencombinatie en eventueel één of meer van de genoemde opties te kiezen). Voer, na een verzoek van een gebruiker, een query uit op de database (i.e. een zoekopdracht welke afwijkende vertalingen vindt voor de gekozen talencombinatie en eventueel conform de gekozen opties). Probeer aan iedere gevonden afwijkende vertaling een categorie toe te kennen. In de hier besproken constructie8 is dit beperkt tot Typefout, Spelfout, Overige fout of Onbekende fout (in de interface Typing error, Spelling error, Miscellaneous error of Unknown error genoemd). Zie voor de details de bespreking van functions.inc.php. Bepaal voor iedere combinatie van verwachte en ingevoerde vertaling de afstand en geef deze weer, mits de eerder genoemde corresponderende optie is gekozen. Voor de berekening van de afstand wordt gebruik gemaakt van het Levenshteinalgoritme[2]. Zie ook de bespreking van functions.inc.php. Geef de set resultaten weer. Dit omvat de weergave van een zevental door middel van de query verkregen kolommen en een drietal daaraan toegevoegde kolommen9. De kolommen die door de query zijn geselecteerd zijn de kolommen Deelnemer, Stimulus, Presentatie wijze, Verwachting, Vertaling, Absolute frequentie en Relatieve frequentie (in de interface geheten Participant, Stimulus, Pres. method, Expectation, Translation, Abs. frequency en Rel. frequency). De kolommen die daaraan zijn toegevoegd zijn Voorspelde categorie, Op woordenlijst en Status (Pred. category, At word list en State). Zie Afbeelding 1 en zie hieronder voor de bespreking van deze kolommen. Geef een uitgebreidere gebruikersinterface weer. In de eerste plaats omvat dit de weergave van een drop-down menu en twee hyperlinks die de navigatie door de verschillende pagina's van de resultatenset faciliteren. In de tweede plaats omvat dit de weergave van selectievakjes (“vinkjes”) voorafgaand aan iedere vertaling en de weergave van een drop-down menu om een actie te kiezen, welke dan na een verzoek van de gebruiker uitgevoerd wordt op de door middel van deze selectievakjes geselecteerde vertalingen. Het drietal acties dat de gebruiker kan kiezen bestaat uit een actie om de geselecteerde vertaling(en) goed te keuren (in de interface genoemd Approve (mark as correct + recalculate scores + add to alternative translations)), een actie om de geselecteerde vertaling(en) af te keuren (Disapprove) en een actie om alle eerder op de de geselecteerde vertaling(en) uitgevoerde acties ongedaan te maken (Undo action).
8 I.e. het door Marvin uitgewerkte deel. 9 Aangenomen dat de kolom Voorspelde categorie (Pred. category) van Anne van de Wetering en mij zijn samengevoegd tot één kolom.
19
Zie Afbeelding 1, zie hieronder voor de bespreking van deze acties en zie ook de bespreking van functions.inc.php. De kolommen De kolom Deelnemer (Participant) bevat een integer (geheel getal) die een identificatie van één van de unieke deelnemers aan het experiment representeert. Deze betreffende deelnemer, is de deelnemer (of de eerste van de deelnemers, als er meerdere waren) die de bijbehorende vertaling (weergegeven in de kolom Vertaling / Translation) heeft ingevoerd. Het nut van deze kolom wordt duidelijk in de situatie dat er meerdere deelnemers zijn; de weergegeven integer is in dat geval namelijk gekoppeld aan een lijst van de identificaties van alle betrokken deelnemers. De integer is een hyperlink waarop de gebruiker kan klikken om de lijst op te roepen. Iedere in deze lijst opgenomen identificatie is opnieuw een hyperlink; het aanklikken ervan levert de set specifieke resultaten van de betreffende deelnemer op. Op deze wijze kan de gebruiker, annex onderzoeker, inzicht krijgen in de algehele prestatie van een deelnemer die een afwijkende vertaling heeft ingevoerd. Ook een eventuele verkeerde interpretatie van de taak door de deelnemer of een geval waarin een deelnemer niet serieus heeft deelgenomen aan de taak, komt hierbij aan het licht. De betekenis van de overige kolommen ligt voor de hand. In de kolom Stimulus staat, zoals deze naam doet vermoeden, het op auditieve dan wel visuele wijze aan de deelnemers aangeboden zelfstandige naamwoord uit de testtaal. In de door hen uit te voeren taak moesten de deelnemers deze stimulus vertalen naar hun moedertaal. Dit leverde de invoer op zoals in de kolom Vertaling (Translation). De vertaling die het systeem als correct accepteert (wat belangrijk is voor de berekening van de testscore voor iedere deelnemer) staat in de kolom Verwachting (Expectation). Dit hoeft logischerwijs niet de enige juiste vertaling te zijn, het is slechts de vertaling die de oorspronkelijke ontwikkelaars van het systeem als juist beschouwden en die om die reden is opgeslagen in het systeem. In de meeste gevallen kent het systeem maar één juiste vertaling; het belangrijkste doel van het hier gepresenteerde systeem is juist het identificeren van alternatieve juiste vertalingen (en het toevoegen daarvan). Zoals gezegd biedt het systeem stimuli zowel auditief als visueel aan; hetgeen het geval was is weergegeven in de kolom Presentatie wijze (Pres. method). De hiervoor genoemde kolommen zijn direct afgeleid uit de database, de kolommen Absolute frequentie (Abs. frequency) en Relatieve frequentie (Rel. frequency) zijn indirect afgeleid (namelijk berekend aan de hand van data uit de database). De kolom Absolute frequentie (Abs. frequency) bevat, simpelweg, het aantal keer dat de betreffende afwijkende vertaling voorkwam in de database (equivalent aan het aantal keer dat een deelnemer de betreffende afwijkende vertaling heeft ingevoerd). Deze frequentie omvat alleen die afwijkende vertalingen die gemaakt zijn in de situatie dat de testtaal de gekozen testtaal was, de deelnemertaal de gekozen deelnemertaal en de stimulus was aangeboden op de in dezelfde rij in de resultatenset weergegeven wijze. De kolom Relatieve frequentie (Rel. frequency) bevat eveneens het aantal keer dat de betreffende afwijkende vertaling voorkwam, maar in verhouding tot het totale aantal afwijkende vertalingen voor de stimulus (overeenkomend de gekozen testtaal en deelnemertaal). Deze verhouding is weergegeven als percentage.
20
De kolom Voorspelde categorie (Pred. Category) bevat het feitelijke resultaat van het categorisatiesysteem; het is de categorie die het systeem heeft toegekend aan de afwijkende vertaling (i.e. de categorie die het systeem verwacht bij de afwijkende vertaling). Zoals gezegd ondersteunt de in dit werk besproken constructie alleen de categorieën Typefout (Typing error), Spelfout (Spelling error), Overige fout (Miscellaneous error) en Onbekende fout (Unknown error). Zoals eveneens gezegd, komen details aan de orde bij de bespreking van functions.inc.php. De kolom Op woordenlijst (At word list) bevat kortweg het woord “yes” als de ingevoerde vertaling (weergegeven onder Vertaling / Translation) op een woordenlijst werd gevonden en het woord “no” als dit niet het geval was10. De kolom Status (State) bevat initieel de waarde “Untreated”. Als de gebruiker een actie heeft uitgevoerd op de betreffende afwijkende vertaling (zie ook hieronder), dan wordt afhankelijk van de gekozen actie “Approved” of “Disapproved” weergegeven. Na het uitvoeren van de actie om acties ongedaan te maken (Undo action) verschijnt weer de waarde “Untreated”11. De acties Het effect van de actie Approve (mark as correct + recalculate scores + add to alternative translations) is — vanzelfsprekend — het markeren van de geselecteerde afwijkende vertaling(en) als correct, het herberekenen van de scores voor de betrokken deelnemer(s) en het toevoegen van de afwijkende vertaling(en) aan de lijst met correcte vertalingen (voor de betreffende stimulus of stimuli). •
•
Een vertaling als correct markeren komt neer op het opslaan van de waarde “Approve” voor de betreffende afwijkende vertaling (in combinatie met de testtaal, deelnemertaal, een integer die dient als identificatie van het betreffende onvertaalde woord, de presentatie wijze en de afwijkende vertaling zelf) in een speciale tabel in de database. Dit heeft tot gevolg dat deze afwijkende vertaling in het vervolg een groene kleur krijgt in de interface (dit heeft alleen een optische functie). Het herberekenen van de scores voor een deelnemer houdt in dat enerzijds de vertaling van de deelnemer in de database als correct wordt gekenmerkt (i.e. een 1 in plaats van een 0) en dat anderzijds zijn of haar scores (voor het luisteren óf het lezen en daarnaast de totaal score) worden opgehoogd met 1 punt. Hiertoe worden de scores per vertaling (0 of 1) opnieuw opgeteld voor het leesdeel en voor het luisterdeel en beide keren gedeeld door 96 (het totale aantal vertalingen per deel) en vervolgens bij elkaar genomen en gedeeld door 192 (2 * 96)12. De wijzigingen hebben invloed op de onderzoeksresultaten, zoals bijvoorbeeld weergegeven op de pagina Research results (bereikbaar via de gelijknamige knop in het “client” gedeelte van het LRS).
10 Voor details, zie het werk van Anne van de Wetering. 11 En, inderdaad, werd bij enkele afwijkende vertalingen de waarde “Broken (please re-approve)” weergegeven , tezamen met een oranje kleur, nadat de complicaties aan het systeem waren hersteld. 12 Hiervoor is de bestaande programmeercode gebruikt, echter werkte deze voor een te grote groep deelnemers en is aldus aangepast.
21
•
Een vertaling toevoegen aan de lijst met correcte vertalingen komt neer op het toevoegen van de vertaling in een speciale tabel in de database (in combinatie met een bepaalde interne identificatie – en overigens niet met gegevens als de testtaal of de presentatiewijze, waardoor de toevoeging voor een grotere groep zou kunnen gelden dan verwacht, wat echter een inherente eigenschap is van het oorspronkelijke systeem). Wanneer een deelnemer in een volgende testronde de toegevoegde vertaling invoert, wordt deze door het systeem als correct beschouwt. In de gebruikersinterface worden de alternatieve vertalingen ook weergegeven op de pagina Translations, bereikbaar via de gelijknamige knop.
Het effect van de actie Disapprove is analoog het opslaan van de waarde “Disapprove” in de speciale tabel en het vervolgens weergeven van de afwijkende vertaling in een rode kleur. Als op een afwijkende vertaling eerder de actie Approve was uitgevoerd, wordt deze actie eerst ongedaan gemaakt (inclusief het terugdraaien van herberekende scores). In feite blijven andere tabellen in de database onaangetast; maar dat is ook precies wat een gebruiker wenst te doen bij het uitvoeren van deze actie (de afwijkende vertaling is immers al fout gerekend, er moet dan dus niets meer gebeuren). De actie Undo action zorgt voor niets meer dan het terugdraaien van alle op de geselecteerde afwijkende vertaling(en) uitgevoerde acties. Dit is inclusief het eventueel terugdraaien van herberekende scores. Undo action herstelt altijd de oorspronkelijke situatie, ongeacht of er één of meer acties op de afwijkende vertaling(en) zijn uitgevoerd. Undo action keert dus niet terug naar de situatie die ontstond na de vorige actie(s), maar naar de initiële situatie, voordat alle acties waren uitgevoerd op de afwijkende vertaling(en). De query Om de set afwijkende vertalingen te selecteren gebruikt het script een MySQL-query (Codefragment 4). Deze query is voortgekomen uit de ontwikkelingsfase en is een uitgebreide vorm van de query die in het bij die fase behorende hoofdstuk is behandeld (Codefragment 3). SELECT SQL_CALC_FOUND_ROWS ta.t_id "Deelnemer", t1.tr_value "Stimulus", IF(IF(w.w_block = wb1.tv_value, 1, IF(w.w_block = wb2.tv_value, 2, "Fout")) = wbs.tv_value, "Auditief", "Visueel") "Presentatie wijze", t2.tr_value "Verwachting", ta.ta_value "Vertaling", COUNT(*) "Absolute frequentie", CONCAT(ROUND(COUNT(*) / cc.correct_count * 100, 1), "%") "Relatieve frequentie", state "Status", ta.w_id "Woord" FROM (gr_testanswer ta, (SELECT t_id FROM gr_testvariable WHERE tv_name = "to_language" AND tv_value = "
" ORDER BY t_id) tl, (SELECT t_id FROM gr_testvariable WHERE tv_name = "from_language" AND tv_value = "" ORDER BY t_id) pl, (SELECT t_id FROM gr_testvariable WHERE tv_name = "u_status" AND (tv_value = "sysvalid" OR tv_value = "manvalid") ORDER BY t_id) us, gr_translation t1, gr_translation t2, (SELECT w_id, COUNT(*) correct_count FROM gr_testanswer WHERE ta_correct = 1 GROUP BY w_id ORDER BY w_id) cc, gr_word w, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "wordblock1") wb1, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "wordblock2") wb2, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "wordblock_spoken") wbs) LEFT OUTER JOIN gr_deviating_translations dt ON (dt.test_language = "" AND dt.participant_language = "" AND ta.w_id = dt.w_id AND
22
IF(IF(w.w_block = wb1.tv_value, 1, IF(w.w_block = wb2.tv_value, 2, "Error")) = wbs.tv_value, 1, 0) = dt.is_auditory AND ta.ta_value = dt.translation) WHERE ta.ta_value != "" AND (ta.ta_correct = 0 OR state IS NOT NULL) AND ta.t_id = tl.t_id AND ta.t_id = pl.t_id AND ta.t_id = us.t_id AND ta.t_id = wb1.t_id AND ta.t_id = wb2.t_id AND ta.t_id = wbs.t_id AND ta.w_id = t1.w_id AND ta.w_id = t2.w_id AND ta.w_id = cc.w_id AND ta.w_id = w.w_id AND t1.tr_language = "" AND t2.tr_language = "" GROUP BY t1.tr_value, IF(IF(w.w_block = wb1.tv_value, 1, IF(w.w_block = wb2.tv_value, 2, "Error")) = wbs.tv_value, "Auditief", "Visueel"), t2.tr_value, ta.ta_value ORDER BY t1.tr_value, IF(IF(w.w_block = wb1.tv_value, 1, IF(w.w_block = wb2.tv_value, 2, "Error")) = wbs.tv_value, "Auditief", "Visueel"), COUNT(*) DESC LIMIT <Eerste record>, ;
Codefragment 4. MySQL-query om afwijkende vertalingen te selecteren
In rood zijn de variabele delen van de query aangegeven. In een situatie waarbij de query manueel wordt uitgevoerd, zouden deze vervangen kunnen worden door corresponderende waarden (e.g. “de” en “nl”). In een situatie waarbij de query automatisch wordt uitgevoerd, zouden deze vervangen kunnen worden door corresponderende variabelen (e.g. “testLanguage” en “participantLanguage”). Het al dan niet kiezen van de gebruiker voor Only valid heeft invloed op deze query, een tweetal clausulen zal dan al dan niet worden opgenomen (de query in zijn huidige vorm gaat er van uit dat Only valid aan staat en selecteert derhalve alleen resultaten van valide deelnemers). Only untreated en Show distance hebben geen invloed op de query, het al dan niet ingeschakeld staan van deze opties wordt later in de code afgevangen. functions.inc.php Dit script heeft een belangrijke ondersteunde rol. Zoals de bestandsnaam suggereert zijn in het script een aantal functies gedefinieerd, die vanuit externe scripts (kunnen) worden aangeroepen. De oorspronkelijk in het script gedefinieerde functies dienen voor het uitvoeren van handelingen die gerelateerd zijn aan het toevoegen van alternatieve correcte vertalingen (add_possibility) en het aanpassen van scores voor betrokken deelnemers na het toevoegen van een dergelijke vertaling (mark_correct en recalc_score). 23
Deze functies zijn gebruikt bij het uitvoeren van de acties (welke eerder zijn besproken). Hieraan zijn functies toegevoegd voor het bepalen van de afstand tussen een verwachting en een vertaling (determineDistance), voor het (proberen te) bepalen van de categorie van een vertaling (determineCategory) en voor het ophalen, aanpassen of verwijderen van de status van een afwijkende vertaling (getState, setState en clearState). Verder is een aangepaste vorm van de functie om scores te herberekenen toegevoegd (recalculateScores), vanwege complicaties met de oorspronkelijke functie. De onderdelen die deel uitmaken van het automatische categorisatiesysteem hebben geen exclusieve toegang tot het script; er zijn andere onderdelen van het LRS die gebruik maken van de functies (de oorspronkelijke code in het script was logischerwijs ook bedoeld om gebruikt te worden vanuit deze onderdelen). Het script heeft dan ook een ondersteunde rol ten opzichte van deze onderdelen. Het bepalen van de afstand De afstand tussen verwachting en vertaling, die in dit script wordt berekend en eventueel wordt weergegeven in de kolom Afstand (Distance) in de resultatenset, is niets meer dan de afstand die bepaald wordt door het Levenshtein-algoritme[2]. Dit houdt in dat de afstand niets meer is dan het minimale aantal operaties dat benodigd is om de verwachting om te zetten in de vertaling. Het bepalen van de categorie De categorie, eveneens in dit script bepaald en uiteindelijk in de resultatenset weergegeven, is de belangrijkste informatie die het in dit werk besproken systeem levert. De functie die de categorie bepaalt levert dan ook de belangrijkste functionaliteit. De theorie achter het bepalen van deze categorie is eerder behandeld; de praktijk is het tot nu toe besproken programmeerwerk en dan met name deze functie. Zoals eerder besloten zal de bespreking hier beperkt blijven tot de grote lijnen. Dit komt neer op de volgende vier stappen: 1. Bepaal of het een Typefout (Typing error) betreft; de functie in zijn huidige vorm ondersteunt een insertie, substitutie, deletie, transpositie, een combinatie van twee van zulke operaties of een combinatie van een insertie of substitutie en een Onbekende fout (i.e. een grote afwijking welke niet kan worden verklaart). De functie kan een onderscheid aangeven tussen alfabetische tekens en nietalfabetische tekens. Dit is nuttig, omdat een insertie van of een substitutie door niet-alfabetische tekens waarschijnlijker een typefout is dan een insertie van of een substitutie door alfabetische tekens (i.e. “vier\” is zeer waarschijnlijk een typefout, bij “vierr” is het onduidelijker en bij “viert” is het niet meer duidelijk). 2. Bepaal of het een Spelfout (Spelling error) betreft; de functie in zijn huidige vorm ondersteunt alleen een kleine spelfout voor het Nederlands (substitutie van karakter “c” door “k”), echter is het relatief eenvoudig ondersteuning voor meer spelfouten of voor andere talen te integreren. 3. Bepaal of het een Overige fout (Miscellaneous error) betreft; de functie in zijn huidige vormt ondersteunt een substitutie van een kleine letter (i.e. “a”) door een grote letter (“A”) en vice versa (i.e. “A” door “a”) en een deletie van een 24
liggend streepje (“-”). De reden om deze als Overige fout te categoriseren is dat, als aan afwijkende vertalingen een dergelijke substitutie of deletie ten grondslag ligt, er hoogstwaarschijnlijk geen sprake is van een echte fout (in het nadenken en/of invoeren door de deelnemer). 4. Stel anders vast dat het een Onbekende fout (Unknown error) betreft. Het voert te ver de exacte werking van de code te bespreken (zoals ook eerder besloten). Zie eventueel de code zelf of de daaraan toegevoegde commentaarregels. participants.php Een kort script dat dient ter ondersteuning van deviating_translations.php. Het script wordt aangeroepen nadat de gebruiker een hyperlink in de kolom Deelnemer (Participant) heeft aangeklikt; het script zorgt voor de weergave van de lijst van identificaties (integers) van relevante deelnemers (in het “popup”-venster) en de koppeling via opnieuw hyperlinks naar de specifieke resultatensets van de betrokken deelnemers. Om de lijst met identificaties te vinden gebruikt het script een MySQLquery (Codefragment 5). SELECT ta.t_id "Deelnemer" FROM gr_testanswer ta, (SELECT t_id FROM gr_testvariable WHERE tv_name = "to_language" AND tv_value = "" ORDER BY t_id) tl, (SELECT t_id FROM gr_testvariable WHERE tv_name = "from_language" AND tv_value = "" ORDER BY t_id) pl, (SELECT t_id FROM gr_testvariable WHERE tv_name = "u_status" AND (tv_value = "sysvalid" OR tv_value = "manvalid") ORDER BY t_id) us, gr_word w, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "wordblock1") wb1, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "wordblock2") wb2, (SELECT t_id, tv_value FROM gr_testvariable WHERE tv_name = "wordblock_spoken") wbs WHERE ta.t_id = tl.t_id AND ta.t_id = pl.t_id AND ta.t_id = us.t_id AND ta.t_id = wb1.t_id AND ta.t_id = wb2.t_id AND ta.t_id = wbs.t_id AND ta.ta_value = "" AND ta.w_id = "" AND w.w_id = "" AND ((w.w_block = wb1.tv_value AND wbs.tv_value = "<1 of 2>") OR (w.w_block = wb2.tv_value AND wbs.tv_value = "<1 of 2>")) ORDER BY ta.t_id
Codefragment 5. MySQL-query om de identificaties van een specifieke groep deelnemers te selecteren
Hierbij zijn ook de variabele delen weergegeven in rood.
25
dev_trans.js Eveneens een kort script met een beperkte ondersteunende rol (“client-side”). Het script bevat de definities van functies die dienen voor het uitvoeren van een beperkt aantal interne handelingen, met een vooral technische noodzaak (i.e. het afvangen van door de gebruiker uitgevoerde muisklikken en de weergave van het eerder genoemde “popup”-venster). dev_trans.css De enige stylesheet die is gebruikt voor de weergave van de interface. Een stylesheet definieert de manier waarop de browser van een gebruiker bepaalde grafische onderdelen moet presenteren. In het geval van deze gebruikersinterface omvat dit de weergave van de tabel, de drop-down menu's, de knoppen en de tekst daarin, daarop en daaromheen. De stylesheet bepaalt voor deze onderdelen de waarden voor eigenschappen zoals lettertype, kleur, grootte en positie. Ook de kleuren die dienen om in de tabel een bepaalde status aan te geven (rood of groen) zijn in de stylesheet gedefinieerd. De definitieve versie Al eerder werd verwezen naar een URL met daarachter een werkend prototype van het systeem. Via dezelfde URL is nu de definitieve versie van het systeem bereikbaar. URL: http://www.let.rug.nl/lrs/admincp-germanic/deviatingtranslations/. Zoals gewoonlijk dient men eerst in te loggen via: http://www.let.rug.nl/lrs/admincp/. Als alternatief kan men de knop Deviating translations in de menubalk aanklikken. Merk op dat de functionaliteit die beschikbaar is afhangt van de gebruikersaccount waarmee is ingelogd en de privileges die voor een dergelijk account gelden (i.e. met de account van een administrator is de volledige functionaliteit beschikbaar, maar met de account van een beperkte administrator is het niet mogelijk bewerkingen op de database uit te voeren en worden eveneens e-mail adressen niet weergegeven).
26
Referenties 1. van Bezooijen, R.A.M.G. en Gooskens, C.S. (2007): Onderzoek naar het begrip van geschreven en gesproken woorden in nauw verwante talen. Online beschikbaar via URL: http://www.rug.nl/staff/s.kurschner/2sem2008/cp/Opzet_experiment.pdf
2. Levenshtein, V. I. (1966): Binary Codes Capable of Correcting Deletions, Insertions and Reversals. Soviet Physics Doklady 10, 707–710. 3. Luce, P.A. en Pisoni, D.B. (1998): Recognizing Spoken Words: the Neighborhood Activation Model. Ear & Hearing 19(1), 1-36. 4. van de Wetering, A.M. (2008): Evaluatie van de vertalingen in het LRS: automatische categorisatie van vertalingsfouten. Bachelorscriptie, Rijksuniversiteit Groningen.
27