Ein **bimaskin** er ein type endeleg tilstandseining, altså ein matematisk modell for utrekning som nyttar konseptet om ein abstrakt maskin med ei endeleg mengd tilstandar. Bimaskinar er samansette av to endelege tilstandsakseptorar, i tillegg til ein funksjon frå tilstandar i dei to maskinane til symbolar i ut-alfabetet. Fordelane med bimaskinar er at dei er deterministiske og at alle utvetydige endelege tilstandsoverførarar (òg kalla FST-ar, eller transduserar) kan konverterast til bimaskinar. Det går i tillegg an å bruka raskare akseptor-algoritmar i staden for overførar-algoritmar.

Bimaskinar blei først introdusert av Schützenberger (1961).

Definisjon
----------

La inn-alfabetet vera {\displaystyle A\_{I}} og ut-alfabetet {\displaystyle A\_{U}}. 

{\displaystyle Q\_{v}} og {\displaystyle Q\_{h}} er to endelege mengder med tilstandar, kor starttilstandane er {\displaystyle q0\_{v}\in Q\_{v}} og {\displaystyle q0\_{h}\in Q\_{h}}, og overføringsfunksjonane er {\displaystyle \delta \_{v}:Q\_{v}\times A\_{I}\rightarrow Q\_{v}} og {\displaystyle \delta \_{h}:Q\_{h}\times A\_{I}\rightarrow Q\_{h}}. Overføringsfunksjonane kan generaliserast til lengre strengar på same måte som for automatar generelt: {\displaystyle \delta (q,\epsilon )=\epsilon ,\delta (q,wa)=\delta (\delta (q,w),a)}.

Då er {\displaystyle Q\_{v},q0\_{v},\delta \_{v}} ein deterministisk endeleg tilstandsmaskin (DFSA) frå venstre til høgre (utan aksepterande tilstandar), og {\displaystyle Q\_{h},q0\_{h},\delta \_{h}} er ein deterministisk endeleg tilstandsmaskin (DFSA) frå høgre til venstre (utan aksepterande tilstandar).

Så definerer me ein ut-funksjon {\displaystyle \gamma :Q\_{v}\times A\_{I}\times Q\_{h}\rightarrow A\_{U}}. Denne går altså frå tilstandane i dei to DFSA-ane, og inn-alfabetet, til ut-alfabetet. Gitt ein inn-streng {\displaystyle a\_{1}a\_{2}...a\_{n}}, så vil ut-strengen for {\displaystyle a\_{i}} vera 

{\displaystyle \gamma (\delta \_{v}(q0\_{v},a\_{1}a\_{2}...a\_{i-1}),a\_{i},\delta \_{h}(q0\_{h},a\_{n},a\_{n-1}...a\_{i+1}))}
Ut-strengen for heile {\displaystyle a\_{1}a\_{2}...a\_{n}} er konkateneringa av ut-strengane for {\displaystyle a\_{1},a\_{2},...a\_{n}}.

Bruksområde
-----------

Bimaskinar er nyttige verktøy i språkteknologi. Til dømes når ein skriv maskinlesbare ordbøker for morfologisk analyse, er det vanleg å spesifisera lingvistiske operasjonar (som lydendringar) i reglar som har ein «handlingsdel» (eller omskrivingsdel) og ein kontekstdel. Handlingsdelen og kontekstdelen er skilt med skråstrek, og «sentrum» av konteksten er markert med understrek «\_». Kontekstdelen seier når regelen kan aktiverast, og handlingsdelen vil typisk omskriva symbolet som står i sentrum av konteksten. 

Eit døme for norsk kan vera regelen {\displaystyle d\rightarrow \epsilon /d~\\_{}~t~\#{}} som seier «skriv om d til den tomme strengen viss det står ein d føre, og ein t følgt av ord-slutt etter». Så viss me tidlegare har lagt på inkjekjønnsendinga «-t» til ordet «nøydd», vil denne regelen skriva om «\*nøyddt» til «nøydt». Konstekstar er regulære uttrykk og kan ofte vera meir kompliserte; t.d. viss me vil modellera r-bortfall i Grenlandsmålet kan me laga regelen {\displaystyle r\rightarrow \epsilon /\\_{}~\#{}~[bfghjkmrv]} som fjernar r i slutten av ord som byrjar på ikkje-koronale konsonantar.

Dei to delane i konteksten samsvarer med venstre og høgre DFSA til bimaskinen, som då kan lesa seg inn mot sentrum av konteksten frå kvar ende. Me kan konvertera ein slik regel til ein bimaskin ved å laga ein minimert DFSA som aksepterer venstrekonteksten, og ein annan minimert DFSA som aksepterer den *reverserte* høgrekonteksten. Viss inn-symbolet i sentrum av kontekst er a, og me analyserer venstre DFSA på venstrekonteksten og ender opp i tilstanden {\displaystyle q\_{v}}, og høgre DFSA på høgrekonteksten og ender opp i tilstanden {\displaystyle q\_{h}}, så vil {\displaystyle \gamma (q\_{v},a,q\_{h})} gi ut-symbolet til handlingsdelen.

Sjå òg
------

* Automatteori

Referansar
----------

1. ↑  Skut, W. (2004). Preference-Driven Bimachine Compilation An Application to TTS Text Normalisation[*daud lenkje*]. CLIN 2004.
2. ↑  Wojciech Skut, Stefan Ulrich, Kathrine Hammervold: A Generic Finite State Compiler for Tagging Rules[*daud lenkje*]. Machine Translation 18(3): 239-250 (2003)
3. ↑  Schützenberger, M. P. (1961). A remark on finite transducers. Information and Control, 4(2), 185-196.
4. ↑  Roche, E. & Schabes, Y. (Eds.). (1997). Finite-state language processing. MIT press. (s.419–)