Nýtt! Prófaðu Málstað, vettvang fyrir allar helstu vörur Miðeindar.
Tækniteymi
15.1.2025
Hefur þú einhvern tímann beðið óþreyjufull/ur eftir því að tölvan lesi yfir textann þinn? Þegar við hjá Miðeind þróuðum málrýniforritið Málfríði stóðum við frammi fyrir áskorun: Hvernig gætum við lesið yfir texta bæði nákvæmar og hraðar?
Hefðbundin yfirlestrarforrit virka oftast þannig að þau fletta upp orðum í orðabók. Þau athuga hvort orðið sé til, hvort það sé í réttu falli, og leita að algengum villum. Þetta er tiltölulega fljótlegt ferli en tekur takmarkað tillit til samhengis og grípur því ekki ýmsar málfræðivillur.
Málfríður er öðruvísi. Hún notar svokallað tauganet sem byrjar á því að lesa allan textann og skrifar svo út yfirfarna útgáfu hans. Rétt eins og þú, þá skrifar Málfríður einn staf í einu og fyrir sérhvern staf sem Málfríður býr til eru framkvæmdar milljónir reikniaðgerða. Því tekur yfirlestur með Málfríði almennt séð lengri tíma en hefðbundnari aðferðir.
Það er hægt að líkja þessu ferli við að byggja turn úr kubbum. Til að byggja slíkan turn byrjar maður neðst (fyrsti stafurinn) og vinnur sig upp einn kubb í einu. Til þess að gera samlíkinguna aðeins betri þá er gefið að kubbaturninn eigi að hafa eitthvað mynstur rétt eins og textinn sem við skrifum. Sem dæmi um mynstur í kubbaturni getur það verið litaröð; fyrst á til dæmis að vera rauður kubbur, svo grænn, svo blár og svo framvegis. Verkefni Málfríðar er því að skoða kubbaturninn sem hún fær (lesa textann), finna mynstrið sem hann á að hafa og útbúa yfirfarinn kubbaturn, einn kubb í einu.
Málfríður var þjálfuð á mörgum milljörðum kubbaturna (textabúta) og hefur lært að búa til kubbaturna sem fylgja mynstrum sem hún hefur séð og lagt á minnið. En það tekur Málfríði langan tíma að útbúa sérhvern staf/kubb sem hún lætur frá sér. Þegar við tímamældum upphaflegu Málfríði tók hver stafur/kubbur um 50 millisekúndur (0,05 sekúndur). Það hljómar kannski ekki mikið, en ein stutt setning á borð við „Samkvæmt móðurinn var hún heimavinnandi“ gat tekið heilar 5 sekúndur og ritgerð gæti tekið margar klukkustundir í yfirlestri!
Þess vegna var mikilvægt að finna leiðir til að flýta fyrir þessari vinnslu.
Við fundum leið til að flýta fyrir vinnslu Málfríðar með því að grípa inn í ofangreint ferli.
Við höldum áfram með samlíkinguna við kubbaturninn, en í stað þess að byggja turninn einn kubb í einu þá leggjum við fyrir Málfríði spurningu: „Að gefnum fyrri kubbum, finnst þér líklegt að næsti kubbur í turninn sé þessi?“ Ef já, þá er sá kubbur réttur, ef nei, þá er hann rangur og við leiðréttum hann með því að setja réttan kubb í staðinn.
Af hverju er þetta betra en að leggja sérhvern kubb fyrir sig? Það er vegna þess að við getum spurt þessarar spurningar um alla kubbana í einu samtímis.
Lýsum þessu aðeins betur með dæmi. Gerum ráð fyrir því að við viljum byggja kubbaturn sem hefur fyrst rauðan kubb, svo grænan, svo bláan og svo aftur rauðan kubb, grænan og bláan. En það sem við kubbuðum var rauður, grænn, blár, blár, rauður, grænn og blár. Það er, við gerðum mistök og settum tvo bláa í röð. Við viljum að Málfríður leiðrétti það sem við gerðum rangt.
Fyrst leggur hún rauðan kubb
Að gefnum rauðum kubb, þá leggur hún grænan kubb
Að gefnum rauðum og grænum kubb, þá leggur hún bláan kubb
Að gefnum rauðum, grænum og bláum kubb, þá leggur hún rauðan kubb (breyting)
Að gefnum rauðum, grænum, bláum og rauðum kubb, þá leggur hún grænan kubb
Að gefnum rauðum, grænum, bláum, rauðum og grænum kubb, þá leggur hún bláan kubb
Þá erum við komin með allan kubbaturninn með breytingum Málfríðar.
1. Við spyrjum Málfríði nokkurra spurninga samtímis:
1a. „Er næsti kubbur rauður?“ → já
1b. „Að gefnum rauðum kubb, er næsti kubbur grænn?“ → já
1c. „Að gefnum rauðum og grænum kubb, er næsti kubbur blár?“ → já
1d. „Að gefnum rauðum, grænum og bláum kubb, er næsti kubbur blár?“ → nei, frekar rauður
1e. „Að gefnum rauðum, grænum, bláum og bláum kubb, er næsti kubbur rauður?“ → ómarktækt
1... → ómarktækt: svör sem koma á eftir fyrsta nei-inu eru ekki skoðuð frekar, því þau gera ráð fyrir rangri röð kubba.
2. Við framkvæmum leiðréttingu á bláa kubbnum, uppfærum spurningarnar og höldum áfram:
2a. „Að gefnum rauðum, grænum, bláum og rauðum kubb, er næsti kubbur grænn?“ → já
2b. „Að gefnum rauðum, grænum, bláum, rauðum og grænum kubb, er næsti kubbur blár?“ → já
Þá erum við komin með allan kubbaturninn með breytingu Málfríðar í tveimur skrefum í stað sex. Þessi aðferð tók því ~3 sinnum styttri tíma en fyrri aðferð.
Með þessari aðferð spyrjum við Málfríði hvort upphaflegi turninn sé réttur, og enn fremur upp að hvaða stað hann sé þá réttur.
Ef við lítum aftur til textans, þá erum við að spyrja Málfríði hvort textinn sem kom inn sé eins og hún bjóst við. Að gefnum fyrri stöfum, er næsti stafur sá sem þú býst við? Yfirleitt er svarið „já“, því langstærstur hluti texta sem fólk skrifar er samkvæmt venju og bara nokkrir stafir sem þarf að breyta. Við nýtum okkur það til þess að hraða Málfríði.
Þar sem Málfríður er ósammála textanum, þá breytir hún honum á þeim stöðum, en heldur annars áfram og eyðir ekki tíma í að útbúa texta sem er óbreyttur frá inntakinu.
Hvað gerist þá ef textinn er fullur af villum? Þá munum við oftar þurfa að uppfæra spurningarnar sem við spurðum í upphafi og ferlið mun taka lengri tíma. Í versta falli þá tekur ferlið sama tíma og að útbúa textann staf fyrir staf (plús smá auka). Það er hins vegar eðlilegt því ef textinn sem kemur inn er mjög ólíkur því sem Málfríður býst við, þá þarf hvort eð er að endurskrifa hann að mestu leyti.
Við hjá Miðeind erum mjög ánægð með þessa aðferð við leiðréttingu texta.
Hún er hraðari en að útbúa texta staf fyrir staf.
Hún skilar nákvæmlega sömu niðurstöðu og að útbúa texta staf fyrir staf.
Hún samrýmist hugmyndum okkar um hvernig eigi að lesa yfir texta, þar sem eingöngu það sem stingur í stúf er leiðrétt.
Fyrir áhugasöm þá er þessi hugmynd unnin upp úr aðferð sem heitir á ensku Speculative Decoding og var sett fram í vísindagrein: https://arxiv.org/abs/2211.17192. Munurinn á því sem er lýst í greininni og því sem við gerum er að í stað þess að nota lítið (hratt) líkan til þess að útbúa ágiskanir, þá notum við einfaldlega inntakið sem grunn ágiskana.
Í upprunalegu greininni er hugmyndin að nota tvö líkön:
Stórt, nákvæmt líkan sem gefur bestu mögulegu niðurstöður
Lítið, hraðvirkt líkan sem gefur ágætis ágiskanir
Litla líkanið er notað til að giska á hvað stóra líkanið myndi segja. Þetta er svipað og að hafa nema sem reynir að giska á hvað kennarinn myndi segja, og kennarinn fer svo yfir ágiskunina.
Í okkar aðferð förum við aðra leið:
Við notum bara eitt líkan (Málfríði)
Í stað þess að nota annað líkan til að giska, þá notum við textann sem notandinn skrifaði sem ágiskun. Það virkar vel vegna þess að í langflestum tilvikum er texti notandans réttur — og því góð ágiskun.
1) Í raun spáir Málfríður bætum í UTF-8 stafakóðun. Stafir sem eru í ASCII-stafamenginu taka eitt bæti, en séríslenskir stafir eru oft tvö bæti.
2) Málfríðarlíkanið telur nokkur hundruð milljónir stika og líkanið er keyrt á skjákorti (GPU) sem getur framkvæmt mjög margar reikniaðgerðir samtímis.