W jednym z poprzednich tematów próbowałem tłumaczyć pojęcia związane z elektroniką za pomocą Arkuszy Google. Szybko jednak zauważyłem, że tamtejsza funkcja GoogleTranslate nie bierze pod uwagę kontekstu i tłumaczy słowa nie tak jak byśmy tego oczekiwali. Tutaj sprawdzę, czy popularne ostatnio modele AI poradzą sobie z tym lepiej.
Ten temat jest poniekąd kontynuacją wątku o tłumaczeniu firmware:
Automatyczne tłumaczenia tekstów w arkuszach Google Sheets (Excel online). Tłumaczymy firmware.
Tam pojawił się problem który dobrze obrazuje poniższy obrazek:
"Current" jako "aktualny"? No, zasadniczo tak, ale nie w tym kontekście! Chodziło nam o prąd. Zatem, czy można te automatyczne tłumaczenie zrealizować jakoś lepiej?
Struktura promptu
W wątku pojawił się pomysł, że można by użyć jednego z ostatnio popularnych LLM (wielkich modeli językowych), zwanych też potocznie jako "AI". W sugestii była mowa o tym, by napisać w prompcie wprost, że chodzi o elektronikę, ale ja zdecydowałem się na bardziej uniwersalne rozwiązanie. Na rozwiązanie składa się prompt z instrukcją by przetłumaczyć dane z CSV (comma separated values, wartości oddzielone przecinkiem) przy zachowaniu ich kontekstu. Poniżej umieszczam same dane do tłumaczenia w formacie takim, jaki można wyeksportować chociażby z arkusza:
Please complete the CSV translations, make sure to use the correct translation for their context.
en,pl
Relay,
Button,
Voltage,
Power,
Current,
Options,
Yes,
No
Pora na testy!
ChatGPT i GPT-4o
Modele od OpenAI oczywiście poradziły sobie śpiewająco:
To samo, ale po dopisanie kilku słów więcej do promptu (wszystko poprawnie przetłumaczone):
Testowałem zarówno GPT-4o (wersję ograniczoną ilością zapytań) oraz podstawowy ChatGPT.
Jest zdecydowanie lepiej od Google. A OpenAI oferuje płatne AI, więc można by na bazie tego zrobić translator CSV, ale są też na to darmowe sposoby...
A jak poradzą sobie darmowe modele do uruchomienia lokalnie?
W jednym z poprzednich tematów pokazywałem jak można uruchomić różne LLM na własnym komputerze:
ChatGPT lokalnie? Asystenci AI/LLM do uruchomienia na Twoim komputerze - pobranie i instalacja
Tutaj właśnie kilka takich modeli wypróbuję do opisanego wyżej zadania. Oto ich odpowiedzi, posortowane wedle ich wymogu pamięci.
deepseek-coder:latest (0.7GB) napisał:
Sure, I'm going to assume that you are looking at a project where these terms can be translated into multiple languages (English and Polish in this case). Here is the translation for your data. Note how each term has been contextually defined with its English equivalent using "as shown below":en,pl,"Relay","Button",Voltage,,Options: Yes/No" as given above - you should know that if there's no option in a language it won’t be displayed. If yes then just use ",Yes/" / No". For example Voltage would translate to "Power and voltage is shown below (if available).
Please replace the values with your actual data, this CSV format can usually also handle multi-language translations if you have a large number of terms or phrases. The only downside could be longer lines for some languages than others due to word wrap rules in many editors and viewers (like MS Word). If there's no context defined that each term is used with, then the translation may not make sense as it would need additional information about how these translations are intended or what they represent.
Powyższa odpowiedź to totalna herezja, czy jak się to mówi, "halucynacja" modelu językowego.
codellama:latest (3.6GB) napisał:
en,pl
Relay,przekaźnik
Button,przycisk
Voltage,napięcie
Power,moc
Current,prąd
Options,opcje
Yes,tak
No,nie
Powyższa odpowiedź jest wręcz idealna i trzyma kontekst. Czy jakiś model ją pobije?
yarn-mistral:latest (3.8GB) napisał:
,
None,
Off,
On,
Default,
0,
1,
2,
3,
4,
5,
6,
7,
(itd)
Powyższa odpowiedź to raczej próba kontynuacji pliku CSV. W miejscu (itd) model językowy dalej odliczał, aż do 140... Najwyraźniej prompt nie został "zrozumiany".
openchat:latest (3.8GB) napisał:
en,pl
Relay,Relaizy
Button,Przycisk
Voltage,Napięcie
Power,Moc
Current,Prąd
Options,Opcje
Yes,Tak
No,Nie
Wszystko ok za wyjątkiem tego "Relaizy", co to za halucynacja?
qwen2:7b (4.1GB) napisał:
en,pl
Relay,"Kotwica",
Button,"Klawisz",
Voltage,"Napięcie",
Power,"Moc",
Current,"Prąd",
Options,"Opcje",
Yes,"Tak",
No,"Nie"
Tu chyba słabiej, jeszcze ten "Klawisz" może bym zrozumiał, ale "Kotwica"?
llama3:8b (4.3GB) napisał:
Here are the completed CSV translations:
en,pl
Relay,Rozwij
Button,Wybór
Voltage,Napóź
Power,Moc
Current,Prąd
Options,Opcje
Yes,Tak
No,Nie
Słabo, dużo "słowotwórstwa".
llava:latest (4.4GB) napisał:
Here are the translations for the given words in Polish:
Relay, relaj
Button, przycisk
Voltage, napięcie
Power, moc
Current, prąd
Options, opcje
Yes, tak
No, nie
Nieźle, ale znów ten "relaj", skąd to?
everythinglm:latest (6.9GB) napisał:
English: Relay, Button, Voltage, Power, Current, Options
Polish: Relaż, Przełącznik, Napięcie, Moc, Prąd, Opcje
EnchantedCSV's answer: Relay, Button, Voltage, Power, Current, Options
Przecież tam było "Button", a nie "Switch". I znów dziwna próba spolszczenia "Relay".
llama2:13b (6.9GB) napisał:
Sure! Here are the translations for the given terms in English and Polish:
en,pl
Relay,
Przełożnik,
Voltage,
Moc,
Prąd,
Opcje,
Tak,
Nie
Ten model językowy, choć pamięciowo największy, z jakiegoś dziwnego powodu w ogóle pomieszał strukturę CSV. Dodatkowo czym jest "przełożnik"?
Na koniec jeszcze potestowałem więcej codellama:latest. Dałem mu te same zadanie, ale z "Switch" zamiast "Button":
codellama:latest (3.6GB) napisał:
en,pl
Relay,Przekaźnik
Switch,Przełącznik
Voltage,Napięcie
Power,Moc
Current,Prąd
Options,Opcje
Yes,Tak
No,Nie
Też nieźle! Jednakże po kilku próbach zobaczyłem, że codellama:latest i tak potrafi się na podobnym zadaniu pogubić:
Próbowałem nieco temu zaradzić. LLMy mają różne parametry opisujące sposób generowania tekstu, jednym z nich jest "temperatura". Określa ona tak jakby "poziom twórczości" modelu. Nieco ją zmniejszyłem z domyślnej wartości:
Niestety pomogło to tylko w niektórych przypadkach:
Podsumowanie
ChatGPT/GPT-4o całkowicie przebija Google Translate w przypadku tego konkretnego typu tłumaczeń a nawet radzi sobie z zachowaniem formatu CSV odpowiedzi. Można by to wykorzystać i nawet po prostu zrobić sobie narzędzie-tłumacza CSV w oparciu o API od OpenAI.
Testowane przeze mnie darmowe, lokalne LLM z kolei mają z tym wciąż pewne trudności. Nie dość, że ich znajomość naszego języka jest słaba, to do tego mają tendencję do gubienia się i do częstych "halucynacji".
Dodatkowo też zauważyłem, że GPT daje konsystentnie poprawne odpowiedzi, a modele lokalne czasem odpowiadają źle. W małym stopniu da się je dostroić, chociażby poprzez ustawienie "temperatury" (to jest parametr określający "twórczość" modelu), ale i tak nie uzyskałem w pełni zadowalających rezultatów.
Możliwe, że muszę poszukać jakiegoś lepszego lokalnego modelu, specjalnie przeznaczonego do tłumaczeń. Oczywiście też ważne, by wspierał różne języki, a nie tylko nasz...
A co Wy o tym sądzicie? Czy też macie wrażenie, że mimo wszystko takie tłumaczenie przez LLM to w pewien sposób krok na przód?
PS: Warto byłoby te testy też powtórzyć dla innych języków, to byłoby nawet ciekawsze niż przekładanie z angielskiego na polski, ale... wtedy by się przydał ktoś kto te języki zna do weryfikacji, a ja ten temat raczej traktuję jako samą prezentację pomysłu a nie jako praktyczny test.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.