From 2b24d40828aab7011f569badaff005bc94482e41 Mon Sep 17 00:00:00 2001 From: NotXia <35894453+NotXia@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:54:37 +0200 Subject: [PATCH] Add NLP N-gram models --- .../img/noisy_channel1.png | Bin 0 -> 24589 bytes .../img/noisy_channel2.png | Bin 0 -> 39093 bytes src/year2/natural-language-processing/nlp.tex | 1 + .../sections/_language_models.tex | 249 ++++++++++++++++++ 4 files changed, 250 insertions(+) create mode 100644 src/year2/natural-language-processing/img/noisy_channel1.png create mode 100644 src/year2/natural-language-processing/img/noisy_channel2.png create mode 100644 src/year2/natural-language-processing/sections/_language_models.tex diff --git a/src/year2/natural-language-processing/img/noisy_channel1.png b/src/year2/natural-language-processing/img/noisy_channel1.png new file mode 100644 index 0000000000000000000000000000000000000000..989e7e143ec2cd1f98dd308a013a7c152e3b137c GIT binary patch literal 24589 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 KXsxDG^#1|(_mCR^ literal 0 HcmV?d00001 diff --git a/src/year2/natural-language-processing/img/noisy_channel2.png b/src/year2/natural-language-processing/img/noisy_channel2.png new file mode 100644 index 0000000000000000000000000000000000000000..09d11d0c1dd01f1c5a3d2803a31444de5ac9cf07 GIT binary patch literal 39093 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 literal 0 HcmV?d00001 diff --git a/src/year2/natural-language-processing/nlp.tex b/src/year2/natural-language-processing/nlp.tex index 6fcf350..a075239 100644 --- a/src/year2/natural-language-processing/nlp.tex +++ b/src/year2/natural-language-processing/nlp.tex @@ -9,5 +9,6 @@ \makenotesfront \input{./sections/_basic_text.tex} + \input{./sections/_language_models.tex} \end{document} \ No newline at end of file diff --git a/src/year2/natural-language-processing/sections/_language_models.tex b/src/year2/natural-language-processing/sections/_language_models.tex new file mode 100644 index 0000000..431d23a --- /dev/null +++ b/src/year2/natural-language-processing/sections/_language_models.tex @@ -0,0 +1,249 @@ +\chapter{Language models} + + +\section{Spelling correction} + +\begin{description} + \item[Spelling correction] \marginnote{Spelling correction} + Spelling errors can be of two types: + \begin{description} + \item[Non-word spelling] + Typos that result in non-existing words. Possible candidates can be determined though a dictionary lookup. + + \item[Real-word spelling] + Can be: + \begin{description} + \item[Typographical error] Typos that result in existing words. + \item[Cognitive error] Due to words similarity (e.g., \texttt{piece} vs \texttt{peace}). + \end{description} + \end{description} +\end{description} + +% \textbf{Rank a list of candidates based on a distance metric (e.g., minimum edit distance). Also consider word frequency and likelihood in the context.} + + +\begin{description} + \item[Noisy channel model] \marginnote{Noisy channel model} + Assumes that the observable input is a distorted form of the original word. A decoder tests word hypotheses and selects the best match. + + \begin{minipage}{0.7\linewidth} + More formally, we want a model of the channel that, similarly to Bayesian inference, determines the likelihood that a word $w \in V$ is the original word for a noisy one $x$. From there, we can estimate the correct word $\hat{w}$: + \[ \hat{w} = \arg\max_{w \in V} \prob{w | x} \] + By applying + \begin{enumerate*}[label=(\roman*)] + \item Bayes' rule, + \item the fact that $\hat{w}$ is independent of $\prob{x}$, and + \item that a subset $C \subseteq V$ of the vocabulary can be used, + \end{enumerate*} + the estimate becomes: + \[ \hat{w} = \arg\max_{w \in C} \underbrace{\prob{x|w}}_{\text{channel model}} \underbrace{\prob{w}}_{\text{prior}} \] + + Moreover, it is reasonable to include a context $c$ when computing the prior: + \[ \hat{w} = \arg\max_{w \in C} \underbrace{\prob{x|w}}_{\text{channel model}} \underbrace{\prob{w|c}}_{\text{ language model}} \] + \end{minipage} + \hfill + \begin{minipage}{0.27\linewidth} + \begin{figure}[H] + \centering + \includegraphics[width=\linewidth]{./img/noisy_channel1.png} + \end{figure} + \vspace{2.5em} + \begin{figure}[H] + \centering + \includegraphics[width=\linewidth]{./img/noisy_channel2.png} + \end{figure} + \end{minipage} + + \item[Noisy channel spelling method] + Spelling correction in a noisy channel model can be done as follows: + \begin{enumerate} + \item Find candidate words with similar spelling to the input based on a distance metric (e.g., Damerau-Levenshtein which is the Levenshtein distance with the addition of adjacent transpositions). + \item Score each candidate based on the language and channel model: + \begin{itemize} + \item Use typing features of the user. + \item Use local context. + \item Use a confusion matrix with common mistakes. + \end{itemize} + \end{enumerate} +\end{description} + +\begin{example} + Consider the sentence: + \begin{center} + \parbox{0.65\linewidth}{ + \textit{\textnormal{[...]} was called a ``stellar and versatile \texttt{acress} whose combination of sass and glamour has defined her \textnormal{[...]}''} + } + \end{center} + By using the Corpus of Contemporary English (COCA), we can determine the following words as candidates: + \[ + \texttt{actress} \cdot \texttt{cress} \cdot \texttt{caress} \cdot \texttt{access} \cdot \texttt{across} \cdot \texttt{acres} + \] + + \begin{description} + \item[Language model] By considering a language model without context, the priors are computed as $\prob{w} = \frac{\texttt{count}(w)}{\vert \texttt{COCA} \vert}$ (where $\vert \texttt{COCA} \vert = \num{404253213}$): + \begin{table}[H] + \centering + \footnotesize + \begin{tabular}{ccl} + \toprule + $w$ & $\texttt{count}(w)$ & $\prob{w}$ \\ + \midrule + \texttt{actress} & \num{9321} & $0.0000231$ \\ + \texttt{cress} & \num{220} & $0.000000544$ \\ + \texttt{caress} & \num{686} & $0.00000170$ \\ + \texttt{access} & \num{37038} & $0.0000916$ \\ + \texttt{across} & \num{120844} & $0.000299$ \\ + \texttt{acres} & \num{12874} & $0.0000318$ \\ + \bottomrule + \end{tabular} + \end{table} + + \item[Channel model] + By using a confusion matrix of common typos, the channel model is: + \begin{table}[H] + \centering + \footnotesize + \begin{tabular}{ccl} + \toprule + $w$ & $x | w$ & $\prob{x | w}$ \\ + \midrule + \texttt{actress} & $\texttt{c}|\texttt{ct}$ & $0.000117$ \\ + \texttt{cress} & $\texttt{a}|\texttt{\#}$ & $0.00000144$ \\ + \texttt{caress} & $\texttt{ac}|\texttt{ca}$ & $0.00000164$ \\ + \texttt{access} & $\texttt{r}|\texttt{c}$ & $0.000000209$ \\ + \texttt{across} & $\texttt{e}|\texttt{o}$ & $0.0000093$ \\ + \texttt{acres} & $\texttt{es}|\texttt{e}$ & $0.0000321$ \\ + \texttt{acres} & $\texttt{ss}|\texttt{s}$ & $0.0000342$ \\ + \bottomrule + \end{tabular} + \end{table} + \end{description} + + The ranking is the obtained as: + \begin{table}[H] + \centering + \footnotesize + \begin{tabular}{cl} + \toprule + $w$ & $\prob{x | w} \prob{w}$ \\ + \midrule + \texttt{actress} & $2.7 \cdot 10^{9}$ \\ + \texttt{cress} & $0.00078 \cdot 10^{9}$ \\ + \texttt{caress} & $0.0028 \cdot 10^{9}$ \\ + \texttt{access} & $0.019 \cdot 10^{9}$ \\ + \texttt{across} & $2.8 \cdot 10^{9}$ \\ + \texttt{acres} & $1.02 \cdot 10^{9}$ \\ + \texttt{acres} & $1.09 \cdot 10^{9}$ \\ + \bottomrule + \end{tabular} + \end{table} + + Therefore, the most likely correction of \texttt{acress} for this model is \texttt{across}. + + If the previous word is considered in the context, the relevant tokens of the new language model are: + \begin{table}[H] + \centering + \footnotesize + \begin{tabular}{ccl} + \toprule + $w_{i-1}$ & $w_i$ & $\prob{w_i | w_{i-1}}$ \\ + \midrule + \texttt{versatile} & \texttt{actress} & $0.000021$ \\ + \texttt{versatile} & \texttt{across} & $0.000021$ \\ + \texttt{actress} & \texttt{whose} & $0.001$ \\ + \texttt{across} & \texttt{whose} & $0.000006$ \\ + \bottomrule + \end{tabular} + \end{table} + This allows to measure the likelihood of a sentence as: + \[ + \begin{split} + \prob{\texttt{versatile \underline{actress} whose}} &= \prob{\texttt{actress} | \texttt{versatile}} \prob{\texttt{whose} | \texttt{actress}} = 210 \cdot 10^{-10} \\ + \prob{\texttt{versatile \underline{across} whose}} &= \prob{\texttt{across} | \texttt{versatile}} \prob{\texttt{whose} | \texttt{across}} = 1 \cdot 10^{-10} + \end{split} + \] + Finally, we have that: + \[ + \begin{split} + \prob{\texttt{versatile \underline{actress} whose} | \texttt{versatile acress whose}} &= 2.7 \cdot 210 \cdot 10^{-19} \\ + \prob{\texttt{versatile \underline{across} whose} | \texttt{versatile acress whose}} &= 2.8 \cdot 10^{-19} \\ + \end{split} + \] + So \texttt{actress} is the most likely correction for \texttt{acress} in this model. +\end{example} + + +\begin{remark} + In practice, log-probabilities are used to avoid underflows and to make computation faster (i.e., sums instead of products). +\end{remark} + + + +\section{Language models} + +\begin{description} + \item[(Probabilistic) language model] \marginnote{Language model} + Model to determine the probability of a word $w$ in a given context $c$: + \[ \prob{w | c} \] + Usually, it is based on counting statistics and uses as context the sequence of previous tokens: + \[ \prob{w_i | w_1, \dots, w_{i-1}} \] + This is equivalent to computing the probability of the whole sentence, which expanded using the chain rule becomes: + \[ + \begin{split} + \prob{w_1, \dots, w_{i-1} w_i} &= \prob{w_1} \prob{w_2 | w_1} \prob{w_3 | w_{1..2}} \dots \prob{w_n | w_{1..n-1}} \\ + &= \prod_{i=1}^{n} \prob{w_i | w_{1..i-1}} + \end{split} + \] + + \begin{remark} + Simply counting the number of occurrences of a sentence as $\prob{w_i | w_{1..i-1}} = w_{1..i} / w_{1..i-1}$ is not ideal as there are too many possible sentences. + \end{remark} + + \item[Markov assumption] \marginnote{Markov assumption in language models} + Limit the length of the context to a window of $k$ previous tokens: + \[ \prob{w_i | w_{1..i-1}} \approx \prob{w_i | w_{i-k..i-1}} \] + \[ \prob{w_{1..n}} \approx \prod_{i=1}^{n} \prob{w_i | w_{i-k..i-1}} \] + + \begin{description} + \item[Unigram model] + Model without context ($k=0$): + \[ \prob{w_{1..n}} \approx \prod_i \prob{w_i} \] + + \item[Bigram model] + Model with a single token context ($k=1$): + \[ \prob{w_{1..n}} \approx \prod_i \prob{w_i | w_{i-1}} \] + + \item[N-gram model] \marginnote{N-gram model} + Model with a context of $k=N-1$ tokens: + \[ \prob{w_{1..n}} \approx \prod_i \prob{w_i | w_{i-N+1..i-1}} \] + + \begin{remark} + N-gram models cannot capture long-range dependencies. + \end{remark} + + \begin{description} + \item[Estimating N-gram probabilities] + Consider the bigram case, the probability that a token $w_i$ follows $w_{i-1}$ can be determined by counting: + \[ \prob{w_i | w_{i-1}} = \frac{\texttt{count}(w_{i-1} w_i)}{\texttt{count}(w_{i-1})} \] + \end{description} + + \begin{remark} + N-gram models cannot handle unknown tokens. + \end{remark} + + \begin{remark} + N-gram models capture knowledge about: + \begin{itemize} + \item Grammar and syntax. + \item Some information about the dataset (e.g., domain, genre of corpus, cultural aspects, \dots). + \end{itemize} + \end{remark} + \end{description} + + \item[Generation by sampling] \marginnote{Generation by sampling} + Randomly sample tokens from the distribution of a language model. + + \begin{remark} + In N-gram models ($N \geq 2$), the distribution changes depending on the previously sampled tokens. + \end{remark} +\end{description} \ No newline at end of file