# Suavizado de n-gramas

Un problema bastante frecuente en procesamiento del lenguaje natural es el cálculo de la verosimilitud (probabilidad) de una secuencia de palabras, por ejemplo para puntuar diversas hipótesis alternativas y seleccionar la más probable.
Supongamos que un sistema de reconocimiento de voz identifica una frase y sugiere, debido a su parecido fonético, dos posibles textos alternativos:
* Texto A: "sax and violins on TV"
* Texto B: "sex and violence on TV"
A primera vista parece que el texto B es más probable que el A, sin embargo, un sistema automático carece de tal sentido común y deberá basarse en un modelo de lenguaje determinado para evaluar cuál de las dos secuencias de palabras tiene mayor puntuación. Para el cálculo de la probabilidad de la observación (la frase en cuestión) se emplea habitualmente un modelo de k-gramas y es bastante frecuente que determinados k-gramas tengan probabilidad 0, es decir, que no aparecen en el texto.
Con las técnicas de suavizado intentamos evitar las probabilidades cero producidas por k-gramas no vistos.
Son varios los algoritmos de suavizado que se conocen. A continuación se describen algunos de los más utilizados.

## Aproximación o descuento de Laplace

El descuento de Laplace asume que todos los k-gramas se han visto al menos una vez. Por tanto, para evitar probabilidades cero para trigramas no vistos el cálculo quedaría así:
${\hat {p}}(v|v_{1},v_{2})={\frac {1+n(v_{1}v_{2}v)}{\displaystyle \sum _{v'\in V}{1+n(v_{1}v_{2}v')}}}$
El problema fundamental de esta solución es que da demasiado porcentaje de la masa total de probabilidad a los k-gramas no vistos.

## Algoritmos de interpolación lineal
### Deleted interpolation

En general:
$p(w|h)=\lambda {\frac {N(hw)}{\displaystyle \sum _{w'}{hw'}}}+(1-\lambda )\beta (w|{\hat {h}})$
* $h$ es la historia detallada ($w_{1}w_{2}w$)
* $\beta$ es la probabilidad más robusta
* ${\hat {h}}$ es la historia simplificada ($w_{2}w$)
Para el caso concreto de trigramas:
$p(v|v_{1}v_{2})=\lambda _{3}(v_{1},v_{2}){\frac {n(v_{1}v_{2}v)}{\displaystyle \sum _{V'}{n(v_{1}v_{2}v')}}}+(1-\lambda _{3}(v_{1},v_{2})){\hat {p}}(v|v_{2})$
${\hat {p}}(v|v_{2})=\lambda _{2}(v_{2}){\frac {n(v_{2}v)}{\displaystyle \sum _{V'}{n(v_{2}v')}}}+(1-\lambda _{2}(v_{2})){\hat {p}}(v)$
${\hat {p}}(v)=\lambda _{1}{\frac {n(v)}{N}}+(1-\lambda ){\frac {1}{|V|}}$
$|V|$ es el tamaño del vocabulario.

### Interpolación aproximada

${\hat {p}}(v|v_{1}v_{2})={\frac {N(v_{1}v_{2})^{\frac {1}{2}}}{1+N(v_{1}v_{2})^{\frac {1}{2}}}}{\frac {N(v_{1}v_{2}v)}{\displaystyle \sum _{V'}{N(v_{1}v_{2}v')}}}+\left(1-{\frac {N(v_{1}v_{2})^{\frac {1}{2}}}{1+N(v_{1}v_{2})^{\frac {1}{2}}}}\right){\hat {p}}(v_{1}v_{2})$
${\hat {p}}(v|v_{2})={\frac {N(v_{2})^{\frac {1}{2}}}{1+N(v_{2})^{\frac {1}{2}}}}{\frac {N(v_{2}v)}{\displaystyle \sum _{V'}{N(v_{2}v')}}}+\left(1-{\frac {N(v_{2})^{\frac {1}{2}}}{1+N(v_{2})^{\frac {1}{2}}}}\right){\hat {p}}(v)$

## Técnicas de back-off

Si $N(hw)>0$
$p(w|h)=\lambda {\frac {N(hw)}{\displaystyle \sum _{w'}{N(hw')}}}$
Si $N(hw)=0$
$(1-\lambda ){\frac {\beta (w|{\hat {h}})}{\displaystyle \sum _{w':N(hw')=0}{\beta (w'|{\hat {h}})}}}$
La diferencia fundamental entre los modelos de backoff y de interpolación es que en el caso de probabilidades no nulas, los modelos de interpolación usan información de k-gramas de orden inferior mientras que mediante técnicas de backoff no ocurre así.

## Otras técnicas de suavizado

* Add-delta (Lidstone’s & Jeffreys-Perks’ Laws)
* Descuento de Good-Turing
* Descuento de Witten-Bell