2022-02-12 15:54:02 +01:00
|
|
|
|
|
|
|
|
|
* Język — różne perspektywy
|
|
|
|
|
** Słowo wstępne
|
|
|
|
|
|
|
|
|
|
W matematyce istnieją dwa spojrzenia na rzeczywistość: ciągłe i dyskretne.
|
|
|
|
|
|
|
|
|
|
Otaczająca nas rzeczywistość fizyczna jest z natury ciągła
|
|
|
|
|
(przynajmniej jeśli nie operujemy w mikroskali), lecz język
|
|
|
|
|
jest dyskretnym wyłomem w ciągłej rzeczywistości.
|
|
|
|
|
|
|
|
|
|
** Lingwistyka matematyczna
|
|
|
|
|
|
|
|
|
|
Przypomnijmy sobie definicję języka przyjętą w lingwistyce
|
2022-02-26 20:34:34 +01:00
|
|
|
|
matematycznej, w kontekście, na przykład, teorii automatów.
|
2022-02-12 15:54:02 +01:00
|
|
|
|
|
|
|
|
|
**Alfabetem** nazywamy skończony zbiór symboli.
|
|
|
|
|
|
2022-02-26 20:34:34 +01:00
|
|
|
|
**Łańcuchem** (**napisem**) nad alfabetem $\Sigma$ nazywamy dowolny, skończony,
|
2022-02-18 17:24:17 +01:00
|
|
|
|
ciąg złożony z symboli z $\Sigma$.
|
2022-02-12 15:54:02 +01:00
|
|
|
|
|
|
|
|
|
**Językiem** nazywamy dowolny, skończony bądź nieskończony, zbiór łańcuchów.
|
|
|
|
|
|
|
|
|
|
W tym formalnym ujęciu językami są na przykład następujące zbiory:
|
|
|
|
|
|
2022-02-16 20:07:58 +01:00
|
|
|
|
- $\{\mathit{poniedziałek},\mathit{wtorek},\mathit{środa},\mathit{czwartek},\mathit{piątek},\mathit{sobota},\mathit{niedziela}\}$
|
|
|
|
|
- $\{\mathit{ab},\mathit{abb},\mathit{abbb},\mathit{abbbb},\ldots\}$
|
2022-02-12 15:54:02 +01:00
|
|
|
|
|
2022-02-16 20:07:58 +01:00
|
|
|
|
To podejście, z jednej strony oczywiście nie do końca się pokrywa się z potocznym
|
2022-02-12 15:54:02 +01:00
|
|
|
|
rozumieniem słowa /język/, z drugiej kojarzy nam się z takimi
|
|
|
|
|
narzędziami informatyki jak wyrażenia regularne, automaty skończenie
|
|
|
|
|
stanowe czy gramatyki języków programowania.
|
|
|
|
|
|
2022-03-05 13:30:11 +01:00
|
|
|
|
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
2022-02-12 15:54:02 +01:00
|
|
|
|
import regex as re
|
|
|
|
|
rx = re.compile(r'ab+')
|
|
|
|
|
|
|
|
|
|
rx.search('żabbba').group(0)
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
#+RESULTS:
|
|
|
|
|
:results:
|
|
|
|
|
abbb
|
|
|
|
|
:end:
|
|
|
|
|
|
2022-03-05 13:30:11 +01:00
|
|
|
|
#+BEGIN_SRC python :session mysession :exports both :results raw drawer
|
2022-02-12 15:54:02 +01:00
|
|
|
|
import rstr
|
|
|
|
|
|
|
|
|
|
rstr.xeger(r'ab+')
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
#+RESULTS:
|
|
|
|
|
:results:
|
|
|
|
|
abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|
|
|
|
:end:
|
2022-02-16 18:26:16 +01:00
|
|
|
|
|
|
|
|
|
** Ujęcie probabilistyczne
|
|
|
|
|
|
|
|
|
|
Na tym wykładzie przyjmiemy inną perspektywą, częściowo ciągłą, opartą
|
|
|
|
|
na probabilistyce. Język będziemy definiować poprzez **rozkład
|
|
|
|
|
prawdopodobieństwa**: sensownym wypowiedziom czy tekstom będziemy
|
|
|
|
|
przypisywać stosunkowe wysokie prawdopodobieństwo, „ułomnym” tekstom — niższe (być może zerowe).
|
|
|
|
|
|
|
|
|
|
Na ogół nie mamy jednak do czynienia z językiem jako takim tylko z
|
|
|
|
|
jego przybliżeniami, **modelami** (model może być lepszy lub gorszy,
|
|
|
|
|
ale przynajmniej powinien być użyteczny…). Formalnie $M$ nazywamy
|
2022-02-18 17:24:17 +01:00
|
|
|
|
modelem języka (nad skończonym alfabetem $\Sigma$), jeśli określa dyskretny rozkład prawdopodobieństwa $P_M$:
|
2022-02-16 18:26:16 +01:00
|
|
|
|
|
|
|
|
|
$$P_M \colon \Sigma^{*} \rightarrow [0,1].$$
|
|
|
|
|
|
|
|
|
|
Rzecz jasna, skoro mamy do czynienia z rozkładem prawdopodobieństwa, to:
|
|
|
|
|
|
2022-02-18 17:24:17 +01:00
|
|
|
|
$$\sum_{\alpha \in \Sigma^{*}} P_M(\alpha) = 1.$$
|
2022-02-16 18:26:16 +01:00
|
|
|
|
|
|
|
|
|
Jeśli $M$ ma być modelem języka polskiego, oczekiwalibyśmy, że dla
|
|
|
|
|
napisów:
|
|
|
|
|
|
|
|
|
|
- $z_1$ — /W tym stanie rzeczy pan Ignacy coraz częściej myślał o Wokulskim./
|
|
|
|
|
- $z_2$ — /Po wypełniony zbiornik pełny i należne kwotę, usłyszała w attendant/
|
|
|
|
|
- $z_3$ — /xxxxyźźźźźit backspace hoooooooooop x y z/
|
|
|
|
|
|
|
|
|
|
zachodzić będzie:
|
|
|
|
|
|
|
|
|
|
\[ P_M(z_1) > P_M(z_2) > P_M(z_3). \]
|
|
|
|
|
|
2022-02-18 17:24:17 +01:00
|
|
|
|
**Pytanie** Jakiej konkretnie wartości prawdopodobieństwa
|
2022-02-26 20:34:34 +01:00
|
|
|
|
spodziewalibyśmy się dla zdania /Dzisiaj rano kupiłem w piekarni sześć bułek/
|
|
|
|
|
dla sensownego modelu języka polskiego?
|
2022-02-16 20:07:58 +01:00
|
|
|
|
|
2022-02-16 18:26:16 +01:00
|
|
|
|
Moglibyśmy sprowadzić tę definicję języka do tej „dyskretnej”, tzn.
|
|
|
|
|
moglibyśmy przyjąć, że łańcuch $\alpha$ należy do języka wyznaczonego
|
|
|
|
|
przez model $M$, jeśli $P_M(\alpha) > 0$.
|
|
|
|
|
|
2022-02-18 17:24:17 +01:00
|
|
|
|
**Pytanie** Czy moglibyśmy w ten sposób opisać język nieskończony? Czy może istnieć
|
2022-02-16 18:26:16 +01:00
|
|
|
|
dyskretny rozkład prawdopodobieństwa dla nieskończonego zbioru?
|
|
|
|
|
|
|
|
|
|
** Co jest symbolem?
|
|
|
|
|
|
|
|
|
|
Model języka daje rozkład prawdopodobieństwa nad zbiorem łańcuchów
|
|
|
|
|
opartym na skończonym alfabecie, tj. zbiorze symboli. W praktyce
|
|
|
|
|
alfabet nie musi być zgodny z potocznym czy językoznawczym rozumieniem
|
|
|
|
|
tego słowa. To znaczy alfabet może być zbiorem znaków (liter), ale
|
|
|
|
|
modelować język możemy też przyjmując inny typ symboli: sylaby,
|
|
|
|
|
morfemy (cząstki wyrazów) czy po prostu całe wyrazy.
|
|
|
|
|
|
|
|
|
|
Powinniśmy przy tym pamiętać, że, koniec końców, w pamięci komputera
|
|
|
|
|
wszelkiego rodzaju łańcuchy są zapisywane jako ciągi zer i jedynek — bitów.
|
|
|
|
|
Omówmy pokrótce techniczną stronę modelowania języka.
|
|
|
|
|
|
|
|
|
|
* Kodowanie znaków
|
|
|
|
|
|
|
|
|
|
** Cóż może być prostszego od pliku tekstowego?
|
|
|
|
|
|
|
|
|
|
#+BEGIN_EXAMPLE
|
|
|
|
|
Ala ma kota.
|
|
|
|
|
#+END_EXAMPLE
|
|
|
|
|
|
|
|
|
|
Komputer nic nie wie o literach.
|
|
|
|
|
|
|
|
|
|
… w rzeczywistości operuje tylko na liczbach …
|
|
|
|
|
|
|
|
|
|
… czy raczej na zerach i jedynkach …
|
|
|
|
|
|
|
|
|
|
… a tak naprawdę na ciągłym sygnale elektrycznym …
|
|
|
|
|
|
2022-02-16 20:07:58 +01:00
|
|
|
|
[[./01_Jezyk/digitalsignal.jpg]]
|
2022-02-16 18:26:16 +01:00
|
|
|
|
|
|
|
|
|
… zera i jedynki są w naszej głowie …
|
|
|
|
|
|
|
|
|
|
… co jest dziwne, /naprawdę/ dziwne …
|
|
|
|
|
|
|
|
|
|
… ale nikt normalny się tym nie przejmuje.
|
|
|
|
|
|
|
|
|
|
** Jak zakodować literę?
|
|
|
|
|
|
|
|
|
|
Zakodowanie pikseli składających się na kształtu (**glyfu**) litery A
|
|
|
|
|
/oczywiście/ nie jest dobrym pomysłem.
|
|
|
|
|
|
2022-02-16 20:07:58 +01:00
|
|
|
|
[[./01_Jezyk/raster.png]]
|
2022-02-16 18:26:16 +01:00
|
|
|
|
|
|
|
|
|
Nie, potrzebujemy /arbitralnego/ kodowania dla wszystkich możliwych
|
|
|
|
|
kształtów litery A (/w naszych głowach/): A, $\mathcal{A}$,
|
|
|
|
|
$\mathbb{A}$, $\mathfrak{A}$ powinny otrzymać ten sam kod, powiedzmy 65
|
|
|
|
|
(binarnie: 1000001).
|
|
|
|
|
|
|
|
|
|
** ASCII
|
|
|
|
|
|
|
|
|
|
ASCII to 7-bitowy (**nie** 8-bitowy!) system kodowania znaków.
|
|
|
|
|
|
2022-03-05 13:30:11 +01:00
|
|
|
|
#+BEGIN_SRC python :session mysession :exports both :results output drawer
|
2022-02-16 18:26:16 +01:00
|
|
|
|
for code in range(0, 128):
|
|
|
|
|
print(f'{code}: {chr(code)}')
|
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
|
|
#+RESULTS:
|
|
|
|
|
:results:
|
|
|
|
|
0: |