Python-koodia koodaustaidottomalle – keskusteluja tekoälyn kanssa

08.12.2023

Kuva: Bing Image Creator GPT-4

Olen viimeisen puolen vuoden aikana käynyt aluksi varovaisia, sittemmin jo vähän rennompia keskusteluja tekoälyn kanssa siitä, miten tietojen käsittelyyn liittyviä töitä voisi helpottaa. Tässä artikkelissa kerron kahdesta keskustelusta, joiden tuloksena tuotimme tekoälyn kanssa koodinpätkiä helpottamaan arkisia töitä.

Olen aiemmin rakentanut verkostoanalyysejä ja visualisointeja korkeakoulumme julkaisujen aiheiden ja tekijöiden pohjalta kokeilumielessä. Ne ovat olleet kiinnostavia, mutta työläitä toteuttaa. Lisäksi Theseuksen metadatan käsittely tietokannan metadatan yhdenmukaistamiseksi on työlästä puuhaa. Testasin, olisiko mahdollista hoitaa näitä tehtäviä teköälyn avulla.

Case 1: Asiasanojen ja tekijätietojen käsittely Justuksen raportilta VOSviewerin verkostoanalyysiin

Eniten työtä verkostoanalyysiohjelmien käytössä on aiheuttanut aineiston käsittely sellaiseen muotoon, että ohjelma osaa käyttää dataa. Tässä esimerkki siitä, kuinka Justuksen julkaisutietoa voi käsitellä niin, että verkostoanalyysiohjelma VOSviewer pystyy tuottaa verkostoanalyysejä aiheiden ja tekijöiden mukaan.

Justuksen raportilla yhtä julkaisua kuvaavat asiasanat ovat samalla rivillä, yhdessä kentässä, pilkulla erotettuna:

”kissa,koira,maito,luu”.

Tämän tiedon käsittelemiseksi verkostoksi VOSviewer tarvitsee kaksi tiedostoa, map-tiedoston (eli kartta-tiedoston) ja network-tiedoston (eli verkostiedoston). Vaihtoehtoisesti käy myös yksi JSON-tiedosto.

Map-tiedosto sisältäisi tiedon verkostossa olevista pisteistä ja niiden ominaisuuksista. Alla weight kertoo sen, kuinka monta kertaa tämä kyseinen id aineistossa esiintyy, ja label-kolumnilla voisimme nimetä id:n.

id

label weight

kissa

kissa

1

koira

koira

1

maito

maito

1
luu luu 1

Network-tiedosto sisältäisi tiedon näiden pisteiden välisistä yhteyksistä. Yhteys on tässä tapauksessa niiden yhteisesiintyminen julkaisun asiasanakentässä Justuksessa. Yllä olevat id:t verkostomuodossa:

kissa koira
kissa maito
kissa luu
koira maito
koira luu
luu maito

Näiden tietojen avulla VOSviewer osaisi visualisoida verkoston, jossa kissa, koira, maito ja luu liittyvät kaikki toisiinsa samalla tapaa.

Kun julkaisuja rupeaa olemaan satoja ja tuhansia, ja käsiteltäviä asiasanoja useita tuhansia, map ja network tiedostojen tekeminen rupeaa olemaan työlästä ja vaatii jonkinlaista automaatiota.

Tämä oli ensimmäinen kokeiluni ChatGPT:llä ja olin epävarma, miten osaisin asian sille selittää, miten se sen ymmärtäisi ja mitä se ylipäätään pystyisi asialle tekemään. Niinpä aloitin helposta ja kokeilin ymmärtääkö se hakemani logiikan. Jostain syystä käytin englantia:

Kirjastolainen: “The data is structured so that in each column (a,b,c,d) there is a word (cat, dog, horse). So the data is "cat, horse, dog" and it represent a network. The data "cat, horse, dog" means that cat is connected to horse and dog, horse is connected to dog. I would need the data structured from "cat, horse, dog" to "cat,horse", "cat,dog", "horse,dog". Original data is transformed from one row with multiple colums to multiple rows with two columns.”

ChatGPT: “Understood! It seems like you would like to transform your original data, where each row represents a network connection between entities, into a new format where each connection is represented as a separate row with two columns. Here's an example of how you can achieve this transformation using Python:”

Epämääräisestä selityksestäni ChatGPT bongasi jutun juonen ja tarjosi heti koodia homman tekemiseen.

Tästä keskustelu eteni yrityksen ja erehdyksen kautta.

Koodia piti säätää siten, ettei se ottanut huomioon tyhjiä sarakkeita ja että se tunnisti Justuksen raportilta oikeat kolumnit. Lisäksi map-filen tekemisessä meni tovi, että koodi laski yksittäisten sanojen painoarvon aineistossa oikein. Aluksi yritin saada ChatGPT:n tekemään puolestani valmiit tiedostot, mutta se huomautti rajoituksistaan esimerkiksi vastaustensa pituuden suhteen ja suositteli mieluummin käyttämään ohjelmointia ja tarjoamiaan koodinpätkiä. Eikä koko aineiston antaminen tekoälylle olisikaan ollut kovin hyvä ajatus.

Muutamien testailukierrosten ja ajatusten vaihdon jälkeen meillä oli yhteisymmärrys, ja ChatGPT teki koodia, jolla Justuksen raportteja pystyi käsittelemään verkostoanalyysiohjelmien ymmärtämään muotoon.

Pientä käsityötä tiedoston valmiiksi saattaminen vaatii, ja esimerkiksi erikielisten (eng / suomi) asiasanojen esiintyminen aineistossa vaatii siivousta. Tähänkin koitin ChatGPT:n avulla tehdä koodia, joka tunnistaa aineistosta erikieliset sanat ja poimii ne erikseen tiedostosta.

Aineiston käsittelyn automatisointi mahdollistaa erilaisten visualisointien tekemisen julkaisuaineistosta jo kohtuullisella vaivalla. Esimerkiksi Haaga-Helian sisäisille tutkimuspäiville tuotimme oheisia visualisointeja posteriin:

 

Kuva 2. Visualisointi artikkeleiden asiasanoista, katsottavissa myös täältä: https://tinyurl.com/25hmmq8m

 

Kuva 3. Visualisointi tekijöistä, katsottavissa myös osoittesta: https://tinyurl.com/2a3uydan

Case 2: Theseuksen kielikoodikenttien massaeditointi ja importointi

Theseuksessa opinnäytettä tai julkaisua tallennettaessa julkaisun kieli tallentuu metadataan dc.language.iso -kenttään. Julkaisuarkistojen metadatasuosituksen käyttöönoton ja Theseuksen metadata- ja syöttölomakeuudistuksen jälkeen julkaisun kielen merkitsemiseen ryhdyttiin käyttämään 3-merkkisiä ISO 639-2 tai ISO 639-3 standardia (fin, eng, swe jne.). Aiemmin käytössä oli ollut 2-merkkinen ISO 639-1 standardi (fi, en, sv jne.).  Metadatauudistuksessa Theseukseen jäi kielikoodeja molemmissa muodoissaan, ja tämä pitäisi sitten muistaa ottaa huomioon esimerkiksi tuohon kielikenttään kohdistettujen hakujen muotoiluissa.

Nyt loppusyksystä otin työn alle noin 160 000 kahdella merkillä kielikoodatun tietueen massaeditoinnin 3-merkkiseen muotoon ja importoinnin takaisin Theseukseen.

Varsinainen tietojen muokkaus sujui taulukkolaskentaohjelmalla kevyesti filtteröimällä ja korvaamalla, mutta Theseukseen käyttöliittymän kautta muutoksia tehdessä enimmäismäärä rivejä muutostiedostoissa on 1000 riviä. Muutosten ajamiseksi tietokantaan täytyisi siis copy-pasteta muutetuista tiedostoista aina 1000 riviä kerrallaan erilliseen tiedostoon, tallentaa se, viedä Theseukseen, ja taas copy-pasteta uudet 1000 riviä uuteen tiedostoon jne.. Tämä pitäisi tehdä vähintään 160 kertaa, käytännössä reilusti yli 200 kertaa.

No, ei se marraskuuta paljon pahentaisi.

Kysyin kuitenkin ChatGPT:ltä vinkkiä tähän tiedostojen pilkkomiseen, tällä kertaa suomeksi:

Kirjastolainen: ”Hei! Kuules, minulla on monta excel-tiedostoa, jotka pitäisi syöttää erääseen arkistoon. Arkisto voi kuitenkin ottaa vastaan tiedostoja, joissa on enintään 1000 riviä. Eli minun pitäisi pilkkoa kaikki excelit maksimissaan 1000 rivin osiin. Olisiko sinulla antaa vinkkejä, kuinka tämä sujuisi parhaiten”

ChatGPT antoi tavallisia excelin käytön ohjeita, mutta lopuksi mainitsi myös muita vaihtoehtoja.

ChatGPT: ”Jos sinulla on paljon tiedostoja ja haluat automatisoida prosessin, voit käyttää Excelin makroja tai ohjelmointikieltä, kuten Pythonia, tähän tarkoitukseen. Esimerkiksi Pythonissa voit käyttää pandas-kirjastoa tiedon käsittelyyn ja jakamiseen eri tiedostoihin”.

Tietenkin meitä kiinnostaa tämä automatisointi.

Kirjastolainen: ”Olisin kyllä kiinnostunut automatisoimaan prosessin. Millaisella python-koodilla automatisointi voisi onnistua?”

ChatGPT:” Tässä on yksinkertainen Python-esimerkki, joka auttaa sinua jakamaan Excel-tiedostoja pienempiin osiin, jos haluat automatisoida prosessin.”

ChatGPT:n esimerkki toimi hyvin, mutta muutamaa pikkuviilausta vielä koodin kaipasin:

Kirjastolainen: Kiitos paljon! Mietin myös olisiko mahdollista automatisoida prosessi niin, että koodi tekisi tämän toimenpiteen kaikille tietyssä kansiossa oleville tiedostoille? Saisiko samaan koodiin myös määriteltyä pilkottujen tiedostojen nimen siten, että nimestä näkisi minkä alkuperäisen tiedoston osa se on ja monesko osa se on? Ja olisi hyvä, että luodut tiedostot tallennetaan samaan paikkaan mistä alkuperäiset tiedostot haetaan.

ChatGPT: ”Kyllä, voit muokata koodia siten, että pilkotut tiedostot nimetään niiden alkuperäisen tiedoston perusteella, ja tiedoston nimi sisältää tiedon siitä, mikä osa ja monesko osa se on. Tässä on päivitetty koodi, joka tekee sen.”

Lyhyen keskustelun jälkeen, jonka alkaessa en oikeastaan tarkasti edes tiennyt mitä lähdin hakemaan, minulla oli puolen sivun verran valmista koodia, joka muutamassa sekunnissa pilkkoi koko massamuokatun aineiston 1000 rivin tietyllä tapaa nimetyiksi ja tiettyyn kansioon tallennetuiksi tiedostoiksi. Niitä tuli noin 220 tiedostoa, joita tässä syksyn mittaa importoidaan Theseukseen. Omaksi osaamiseksi tässä kohtaa riitti se, että sai koodin kopioitua ohjelmointiympäristöön ja painettua playta.

Keskustelujen jälkeen

Tekisi mieli kutsua yllä kuvattua tapaani käyttää ChatGPT:tä tiskikoneen käytöksi.

Kuten tiskikone, se auttoi minua automatisoimaan yksinkertaisia, mutta aikaa vieviä tehtäviä tarjoamalla siihen Python-koodia.

No, jos kielikuvan kanssa ollaan tarkkoja, niin ehkä ohjelmointikieli oli se varsinainen tiskikone, mutta sen käyttöönotto ei olisi sujunut ilman tekoälyä. ChatGPT myös auttoi esiin tulleissa ongelmissa kuten ohjelmointiympäristön asentamisessa, python-kirjastojen lataamisessa ja erilaisten, esimerkiksi koneella olleista vanhoista python-versioista johtuneiden error-viestin ratkaisemisessa.

Tiskikone kielikuvana ehkä osuvasti kuvastaa myös viime vuoden aikaista muutosta, jossa tekoälysovellusten käyttö on demokratisoitunut, niiden käyttö kotikoneilla on helppoa, ja rahalla saa laadukkaampia malleja.

Näiden kokeilujen lopputulema oli ihan hyvä, mutta aivan alkeissakin oli ummikolle paljon opittavaa. On helppo arvostaa sitä, että käsillä on työkalu, jolta voi kysyä tyhmiä kysymyksiä loputtomiin.

ChatGPT:tä tiskikoneeksi kutsuminen on tietenkin sen tiedonkäsittelypotentiaalin järkyttävän suuri aliarviointi. Jos se loukkaantuisi tiskikoneeksi kutsumisesta, tekisi se sen aivan syystä. En aio edes kiusallani kokeilla, sillä testaillessa syntyi vaikutelma, että se vastaa kohteliaaseen ja ystävälliseen sävyyn itsekin kohteliaasti ja jotenkin avuliaammin. Lisäksi, en ole varma sen huumorintajusta.

Kirjoittajat

Antti Nyqvist

tietoasiantuntija

Haaga-Helia

Kirjoittajan muut artikkelit

Kommentit

Jätä kommentti