Commit 5f08fd52 by 单韦乔

合并分支 'shanweiqiao' 到 'caorunzhe'

第二章斜体

查看合并请求 !74
parents 017de444 797245e1
......@@ -29,12 +29,12 @@
\node[anchor=south,unit,text=red] (w3) at ([yshift=0.5em]n34.north){$w_3$};
\draw[->,ublue,very thick] (n11.east) -- (n21.west);
\draw[->,ublue,very thick] (n11.east) -- (n22.west);
% \draw[->,ublue,very thick,dashed] (n11.east) -- (n22.west);
\draw[->,ublue,very thick] (n11.east) -- (n23.west);
\draw[->,ublue,very thick] (pt22.south) -- (n34.west);
\draw[->,ublue,very thick] (pt22.south) -- (n35.west);
\draw[->,ublue,very thick] (pt22.south) -- (n36.west);
% \draw[->,ublue,very thick,dashed] (pt22.south) -- (n36.west);
% \draw[->,red,ultra thick,opacity=0.7,line width=2pt]([xshift=-1em]n11.west) -- (n11.east) -- (n22.west) -- (pt22.south) -- (n36.west) -- ([xshift=1em]pt36.south);
\draw[->,red,ultra thick,opacity=0.7,line width=2pt]([xshift=-1em]n11.west) -- (n11.west);
......
......@@ -11,16 +11,16 @@
\begin{tikzpicture}
\node [anchor=west] (label1) at (0,0) {总词数:$6 + 8 + 5 = 20$};
\node [anchor=north west] (p1) at (label1.south west) {$P(\textrm{})=1/20=0.05$};
\node [anchor=north west] (p2) at (p1.south west) {$P(\textrm{})=3/20=0.15$};
\node [anchor=north west] (p3) at (p2.south west) {$P(\textrm{确实})=1/20=0.05$};
\node [anchor=north west] (p1) at (label1.south west) {$\funp{P}(\textrm{})=1/20=0.05$};
\node [anchor=north west] (p2) at (p1.south west) {$\funp{P}(\textrm{})=3/20=0.15$};
\node [anchor=north west] (p3) at (p2.south west) {$\funp{P}(\textrm{确实})=1/20=0.05$};
\node [anchor=north west] (label11) at ([xshift=18.0em,yshift=1.63em]label1.south west) {更多数据-总词数:100K $\sim$ 1M};
\node [anchor=north west] (p12) at (label11.south west) {$P(\textrm{})=0.000010$};
\node [anchor=north west] (p22) at (p12.south west) {$P(\textrm{})=0.001812$};
\node [anchor=north west] (p32) at (p22.south west) {$P(\textrm{确实})=0.000001$};
\node [anchor=north west] (p12) at (label11.south west) {$\funp{P}(\textrm{})=0.000010$};
\node [anchor=north west] (p22) at (p12.south west) {$\funp{P}(\textrm{})=0.001812$};
\node [anchor=north west] (p32) at (p22.south west) {$\funp{P}(\textrm{确实})=0.000001$};
......
......@@ -3,8 +3,8 @@
\begin{axis}[
width=12cm,
height=4cm,
xlabel={{$P(x)$}},
ylabel={{$I(x)$}},
xlabel={{$\funp{P}(x)$}},
ylabel={{$\funp{I}(x)$}},
ylabel style={yshift=-1.5em,font=\footnotesize},
xlabel style={yshift=0.3em,font=\footnotesize},
xtick={0,0.2,...,1.0},
......@@ -23,7 +23,7 @@ xticklabel style={font=\small}, %坐标轴字体大小
yticklabel style={font=\small}
]
\addplot[draw=ublue,samples=100,thick] {-log2(x)};
\legend{\footnotesize{$I(x) = -\log P(x)$}}
\legend{\footnotesize{$\funp{I}(x) = -\log \funp{P}(x)$}}
\end{axis}
\end{tikzpicture}
......
......@@ -13,7 +13,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {1};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{1}) = 5/30$};
\node [anchor=west] at (33em,0) {$\funp{P}(\text{1}) = 5/30$};
\end{scope}
\begin{scope}[yshift=-2.5em]
......@@ -22,7 +22,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{red} 2}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{2}) = 4/30$};
\node [anchor=west] at (33em,0) {$\funp{P}(\text{2}) = 4/30$};
\end{scope}
\begin{scope}[yshift=-5.0em]
......@@ -31,7 +31,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{ublue} 3}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{3}) = 6/30$};
\node [anchor=west] at (33em,0) {$\funp{P}(\text{3}) = 6/30$};
\end{scope}
\begin{scope}[yshift=-7.5em]
......@@ -40,7 +40,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{ugreen} 4}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{4}) = 12/30$};
\node [anchor=west] at (33em,0) {$\funp{P}(\text{4}) = 12/30$};
\end{scope}
\begin{scope}[yshift=-10.0em]
......@@ -49,7 +49,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{purple} 5}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{5}) = 2/30$};
\node [anchor=west] at (33em,0) {$\funp{P}(\text{5}) = 2/30$};
\end{scope}
\begin{scope}[yshift=-12.5em]
......@@ -58,7 +58,7 @@
\node [draw,thick,minimum size=10pt] at (\i,0) {{\color{orange} 6}};
}
}
\node [anchor=west] at (33em,0) {$\textrm{P}(\text{6}) = 1/30$};
\node [anchor=west] at (33em,0) {$\funp{P}(\text{6}) = 1/30$};
\end{scope}
\end{tikzpicture}
......
......@@ -41,7 +41,7 @@
\subsection{随机变量和概率}
\parinterval 在自然界中,很多{\small\bfnew{事件}}\index{事件}(Event)\index{Event}是否会发生是不确定的。例如,明天会下雨、掷一枚硬币是正面朝上、扔一个骰子的点数是5$\cdots\cdots$这类事件可能会发生也可能不会发生。通过大量的重复试验,能发现其具有某种规律性的事件叫做{\small\sffamily\bfseries{随机事件}}\index{随机事件}
\parinterval {\small\sffamily\bfseries{随机变量}}\index{随机变量}(Random Variable)\index{Random Variable}是对随机事件发生可能状态的描述,是随机事件的数量表征。设$\Omega = \{ \omega \}$为一个随机试验的样本空间,$X=X(\omega)$就是定义在样本空间$\Omega$上的单值实数函数,即$X=X(\omega)$为随机变量,记为$X$。随机变量是一种能随机选取数值的变量,常用大写的英字母或希腊字母表示,其取值通常用小写字母来表示。例如,用$A$ 表示一个随机变量,用$a$表示变量$A$的一个取值。根据随机变量可以选取的值的某些性质,可以将其划分为离散变量和连续变量。
\parinterval {\small\sffamily\bfseries{随机变量}}\index{随机变量}(Random Variable)\index{Random Variable}是对随机事件发生可能状态的描述,是随机事件的数量表征。设$\Omega = \{ \omega \}$为一个随机试验的样本空间,$X=X(\omega)$就是定义在样本空间$\Omega$上的单值实数函数,即$X=X(\omega)$为随机变量,记为$X$。随机变量是一种能随机选取数值的变量,常用大写的英字母或希腊字母表示,其取值通常用小写字母来表示。例如,用$A$ 表示一个随机变量,用$a$表示变量$A$的一个取值。根据随机变量可以选取的值的某些性质,可以将其划分为离散变量和连续变量。
\parinterval 离散变量是在其取值区间内可以被一一列举、总数有限并且可计算的数值变量。例如,用随机变量$X$代表某次投骰子出现的点数,点数只可能取1$\sim$6这6个整数,$X$就是一个离散变量。
......@@ -49,7 +49,7 @@
\parinterval {\small\bfnew{概率}}\index{概率}(Probability)\index{Probability}是度量随机事件呈现其每个可能状态的可能性的数值,本质上它是一个测度函数\upcite{mao-prob-book-2011}\upcite{kolmogorov2018foundations}。概率的大小表征了随机事件在一次试验中发生的可能性大小。用$\funp{P}(\cdot )$表示一个随机事件的可能性,即事件发生的概率。比如$\funp{P}(\textrm{太阳从东方升起})$表示“太阳从东方升起”的可能性,同理,$\funp{P}(A=B)$ 表示的就是“$A=B$”这件事的可能性。
\parinterval 在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行{\small\sffamily\bfseries{估计}}\index{估计},得到的结果是概率的{\small\sffamily\bfseries{估计值}}\index{估计值}(Estimate)\index{Estimate}。在概率论中,一个很简单的方法是利用相对频度作为概率的估计值。如果$\{x_1,x_2,\dots,x_n \}$是一个试验的样本空间,在相同情况下重复试验$N$次,观察到样本$x_i (1\leq{i}\leq{n})$的次数为$n (x_i )$,那么$x_i$在这$N$次试验中的相对频率是$\frac{n(x_i )}{N}$。当$N$越来越大时,相对概率也就越来越接近真实概率$P(x_i)$,即$\lim_{N \to \infty}\frac{n(x_i )}{N}=P(x_i)$。 实际上,很多概率模型都等同于相对频度估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频度估计实现。
\parinterval 在实际问题中,往往需要得到随机变量的概率值。但是,真实的概率值可能是无法准确知道的,这时就需要对概率进行{\small\sffamily\bfseries{估计}}\index{估计},得到的结果是概率的{\small\sffamily\bfseries{估计值}}\index{估计值}(Estimate)\index{Estimate}。在概率论中,一个很简单的方法是利用相对频度作为概率的估计值。如果$\{x_1,x_2,\dots,x_n \}$是一个试验的样本空间,在相同情况下重复试验$N$次,观察到样本$x_i (1\leq{i}\leq{n})$的次数为$n (x_i )$,那么$x_i$在这$N$次试验中的相对频率是$\frac{n(x_i )}{N}$。当$N$越来越大时,相对概率也就越来越接近真实概率$\funp{P}(x_i)$,即$\lim_{N \to \infty}\frac{n(x_i )}{N}=\funp{P}(x_i)$。 实际上,很多概率模型都等同于相对频度估计,比如,对于一个服从多项式分布的变量的极大似然估计就可以用相对频度估计实现。
%--------------------------------------------------------------------
\begin{table}[htp]
......@@ -58,17 +58,17 @@
\begin{tabular}{c|c c c c c c}
\rule{0pt}{15pt} $A$ & $a_1=1$ & $a_2=2$ & $a_3=3$ & $a_4=4$ & $a_5=5$ & $a_6=6$\\
\hline
\rule{0pt}{15pt} $P_i$ & $P_1=\frac{4}{25}$ & $P_2=\frac{3}{25}$ & $P_3=\frac{4}{25}$ & $P_4=\frac{6}{25}$ & $P_5=\frac{3}{25}$ & $P_6=\frac{1}{25}$ \\
\rule{0pt}{15pt} $\funp{P}_i$ & $\funp{P}_1=\frac{4}{25}$ & $\funp{P}_2=\frac{3}{25}$ & $\funp{P}_3=\frac{4}{25}$ & $\funp{P}_4=\frac{6}{25}$ & $\funp{P}_5=\frac{3}{25}$ & $\funp{P}_6=\frac{1}{25}$ \\
\end{tabular}
\label{tab:2-1}
\end{table}
%--------------------------------------------------------------------
\parinterval 概率函数是用函数形式给出离散变量每个取值发生的概率,其实就是将变量的概率分布转化为数学表达形式。如果把$A$看做一个离散变量,$a$看做变量$A$的一个取值,那么$P(A)$被称作变量$A$的概率函数,$P(A=a)$被称作$A = a$的概率值,简记为$P(a)$。例如,在相同条件下掷一个骰子50次,用$A$表示投骰子出现的点数这个离散变量,$a_i$表示点数的取值,$P_i$表示$A=a_i$的概率值。表\ref{tab:2-1}$A$的概率分布,给出了$A$的所有取值及其概率。
\parinterval 概率函数是用函数形式给出离散变量每个取值发生的概率,其实就是将变量的概率分布转化为数学表达形式。如果把$A$看做一个离散变量,$a$看做变量$A$的一个取值,那么$\funp{P}(A)$被称作变量$A$的概率函数,$\funp{P}(A=a)$被称作$A = a$的概率值,简记为$\funp{P}(a)$。例如,在相同条件下掷一个骰子50次,用$A$表示投骰子出现的点数这个离散变量,$a_i$表示点数的取值,$\funp{P}_i$表示$A=a_i$的概率值。表\ref{tab:2-1}$A$的概率分布,给出了$A$的所有取值及其概率。
\parinterval 除此之外,概率函数$P(\cdot)$还具有非负性、归一性等特点。非负性是指,所有的概率函数$P(\cdot)$都必须是大于等于0的数值,概率函数中不可能出现负数,即$\forall{x},P{(x)}\geq{0}$。归一性,又称规范性,简单的说就是所有可能发生的事件的概率总和为1,即$\sum_{x}P{(x)}={1}$
\parinterval 除此之外,概率函数$\funp{P}(\cdot)$还具有非负性、归一性等特点。非负性是指,所有的概率函数$\funp{P}(\cdot)$都必须是大于等于0的数值,概率函数中不可能出现负数,即$\forall{x},\funp{P}{(x)}\geq{0}$。归一性,又称规范性,简单的说就是所有可能发生的事件的概率总和为1,即$\sum_{x}\funp{P}{(x)}={1}$
\parinterval 对于离散变量$A$$P(A=a)$是个确定的值,可以表示事件$A=a$的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用{\small\sffamily\bfseries{概率分布函数}}\index{概率分布函数}$F(x)${\small\sffamily\bfseries{概率密度函数}}\index{概率密度函数}$f(x)$来统一描述随机变量取值的分布情况(如图\ref{fig:2-1})。概率分布函数$F(x)$表示取值小于等于某个值的概率,是概率的累加(或积分)形式。假设$A$是一个随机变量,$a$是任意实数,将函数$F(a)=P\{A\leq a\}$$-\infty<a<\infty $定义为$A$的分布函数。通过分布函数,可以清晰地表示任何随机变量的概率。
\parinterval 对于离散变量$A$$\funp{P}(A=a)$是个确定的值,可以表示事件$A=a$的可能性大小;而对于连续变量,求在某个定点处的概率是无意义的,只能求其落在某个取值区间内的概率。因此,用{\small\sffamily\bfseries{概率分布函数}}\index{概率分布函数}$F(x)${\small\sffamily\bfseries{概率密度函数}}\index{概率密度函数}$f(x)$来统一描述随机变量取值的分布情况(如图\ref{fig:2-1})。概率分布函数$F(x)$表示取值小于等于某个值的概率,是概率的累加(或积分)形式。假设$A$是一个随机变量,$a$是任意实数,将函数$F(a)=\funp{P}\{A\leq a\}$$-\infty<a<\infty $定义为$A$的分布函数。通过分布函数,可以清晰地表示任何随机变量的概率。
%----------------------------------------------
\begin{figure}[htp]
......@@ -90,25 +90,25 @@ F(x)=\int_{-\infty}^x f(x)\textrm{d}x
%----------------------------------------------------------------------------------------
\subsection{联合概率、条件概率和边缘概率}
\parinterval {\small\sffamily\bfseries{联合概率}}\index{联合概率}(Joint Probability)\index{Joint Probability}是指多个事件共同发生,每个随机变量满足各自条件的概率,表示为$P(AB)$$P(A\cap{B})${\small\sffamily\bfseries{条件概率}}\index{条件概率}(Conditional Probability)\index{Conditional Probability}是指$A$$B$为任意的两个事件,在事件$A$已出现的前提下,事件$B$出现的概率,使用$P(B \mid A)$表示。
\parinterval {\small\sffamily\bfseries{联合概率}}\index{联合概率}(Joint Probability)\index{Joint Probability}是指多个事件共同发生,每个随机变量满足各自条件的概率,表示为$\funp{P}(AB)$$\funp{P}(A\cap{B})${\small\sffamily\bfseries{条件概率}}\index{条件概率}(Conditional Probability)\index{Conditional Probability}是指$A$$B$为任意的两个事件,在事件$A$已出现的前提下,事件$B$出现的概率,使用$\funp{P}(B \mid A)$表示。
\parinterval 贝叶斯法则(见\ref{sec:2.2.3}小节)是条件概率计算时的重要依据,条件概率可以表示为
\begin{eqnarray}
P{(B|A)} & = & \frac{P(A\cap{B})}{P(A)} \nonumber \\
& = & \frac{P(A)P(B|A)}{P(A)} \nonumber \\
& = & \frac{P(B)P(A|B)}{P(A)}
\funp{P}{(B|A)} & = & \frac{\funp{P}(A\cap{B})}{\funp{P}(A)} \nonumber \\
& = & \frac{\funp{P}(A)\funp{P}(B|A)}{\funp{P}(A)} \nonumber \\
& = & \frac{\funp{P}(B)\funp{P}(A|B)}{\funp{P}(A)}
\label{eq:2-2}
\end{eqnarray}
\parinterval {\small\sffamily\bfseries{边缘概率}}\index{边缘概率}(Marginal Probability)\index{Marginal Probability}是和联合概率对应的,它指的是$P(X=a)$$P(Y=b)$,即仅与单个随机变量有关的概率。对于离散随机变量$X$$Y$,如果知道$P(X,Y)$,则边缘概率$P(X)$可以通过求和的方式得到。对于$\forall x \in X $,有
\parinterval {\small\sffamily\bfseries{边缘概率}}\index{边缘概率}(Marginal Probability)\index{Marginal Probability}是和联合概率对应的,它指的是$\funp{P}(X=a)$$\funp{P}(Y=b)$,即仅与单个随机变量有关的概率。对于离散随机变量$X$$Y$,如果知道$\funp{P}(X,Y)$,则边缘概率$\funp{P}(X)$可以通过求和的方式得到。对于$\forall x \in X $,有
\begin{eqnarray}
P(X=x)=\sum_{y} P(X=x,Y=y)
\funp{P}(X=x)=\sum_{y} \funp{P}(X=x,Y=y)
\label{eq:2-3}
\end{eqnarray}
\parinterval 对于连续变量,边缘概率$P(X)$需要通过积分得到,如下式所示
\begin{eqnarray}
P(X=x)=\int P(x,y)\textrm{d}y
\funp{P}(X=x)=\int \funp{P}(x,y)\textrm{d}y
\label{eq:2-4}
\end{eqnarray}
......@@ -120,7 +120,7 @@ P(X=x)=\int P(x,y)\textrm{d}y
\vspace{0.5em}
\item 联合概率:矩形$C$的面积;
\vspace{0.5em}
\item 条件概率:联合概率/对应的边缘概率,如:$P(A \mid B)$=矩形$C$的面积/矩形B的面积。
\item 条件概率:联合概率/对应的边缘概率,如:$\funp{P}(A \mid B)$=矩形$C$的面积/矩形B的面积。
\vspace{0.5em}
\end{itemize}
......@@ -139,33 +139,33 @@ P(X=x)=\int P(x,y)\textrm{d}y
\subsection{链式法则}
\parinterval 条件概率公式$P(A \mid B)=P(AB)/P(B)$反映了事件$B$发生的条件下事件$A$发生的概率。如果将其推广到三个事件$A$$B$$C$,为了计算$P(A,B,C)$,可以运用两次$P(A \mid B)=P(AB)/P(B)$,计算过程如下:
\parinterval 条件概率公式$\funp{P}(A \mid B)=\funp{P}(AB)/\funp{P}(B)$反映了事件$B$发生的条件下事件$A$发生的概率。如果将其推广到三个事件$A$$B$$C$,为了计算$\funp{P}(A,B,C)$,可以运用两次$\funp{P}(A \mid B)=\funp{P}(AB)/\funp{P}(B)$,计算过程如下:
\begin{eqnarray}
P(A,B,C) & = & P(A \mid B ,C)P(B,C) \nonumber \\
& = & P(A \mid B,C)P(B \mid C)P(C)
\funp{P}(A,B,C) & = & \funp{P}(A \mid B ,C)\funp{P}(B,C) \nonumber \\
& = & \funp{P}(A \mid B,C)\funp{P}(B \mid C)\funp{P}(C)
\label{eq:2-5}
\end{eqnarray}
\parinterval 推广到$n$个事件,可以得到了链式法则的公式
\begin{eqnarray}
P(x_1,x_2, \ldots ,x_n)=P(x_1) \prod_{i=2}^n P(x_i \mid x_1,x_2, \ldots ,x_{i-1})
\funp{P}(x_1,x_2, \ldots ,x_n)=\funp{P}(x_1) \prod_{i=2}^n \funp{P}(x_i \mid x_1,x_2, \ldots ,x_{i-1})
\label{eq:2-6}
\end{eqnarray}
\parinterval 下面的例子有助于更好的理解链式法则,如图\ref{fig:2-3}所示,$A$$B$$C$$D$$E$分别代表五个事件,其中,$A$只和$B$有关,$C$只和$B$$D$有关,$E$只和$C$有关,$B$$D$不依赖其他任何事件。则$P(A,B,C,D,E)$的表达式如下式:
\begin{eqnarray}
& & P(A,B,C,D,E) \nonumber \\
&=&P(E \mid A,B,C,D) \cdot P(A,B,C,D) \nonumber \\
&=&P(E \mid A,B,C,D) \cdot P(D \mid A,B,C) \cdot P(A,B,C) \nonumber \\
&=&P(E \mid A,B,C,D) \cdot P(D \mid A,B,C) \cdot P(C \mid A,B) \cdot P(A,B) \nonumber \\
&=&P(E \mid A,B,C,D) \cdot P(D \mid A,B,C) \cdot P(C \mid A,B) \cdot P(B \mid A) \cdot P(A)
& & \funp{P}(A,B,C,D,E) \nonumber \\
&=&\funp{P}(E \mid A,B,C,D) \cdot \funp{P}(A,B,C,D) \nonumber \\
&=&\funp{P}(E \mid A,B,C,D) \cdot \funp{P}(D \mid A,B,C) \cdot \funp{P}(A,B,C) \nonumber \\
&=&\funp{P}(E \mid A,B,C,D) \cdot \funp{P}(D \mid A,B,C) \cdot \funp{P}(C \mid A,B) \cdot \funp{P}(A,B) \nonumber \\
&=&\funp{P}(E \mid A,B,C,D) \cdot \funp{P}(D \mid A,B,C) \cdot \funp{P}(C \mid A,B) \cdot \funp{P}(B \mid A) \cdot \funp{P}(A)
\label{eq:2-7}
\end{eqnarray}
\parinterval 根据图\ref {fig:2-3} 易知$E$只和$C$有关,所以$P(E \mid A,B,C,D)=P(E \mid C)$$D$不依赖于其他事件,所以$P(D \mid A,B,C)=P(D)$$C$只和$B$$D$有关,所以$P(C \mid A,B)=P(C \mid B)$$B$不依赖于其他事件,所以$P(B \mid A)=P(B)$。最终化简可得:
\parinterval 根据图\ref {fig:2-3} 易知$E$只和$C$有关,所以$\funp{P}(E \mid A,B,C,D)=\funp{P}(E \mid C)$$D$不依赖于其他事件,所以$\funp{P}(D \mid A,B,C)=\funp{P}(D)$$C$只和$B$$D$有关,所以$\funp{P}(C \mid A,B)=\funp{P}(C \mid B)$$B$不依赖于其他事件,所以$\funp{P}(B \mid A)=\funp{P}(B)$。最终化简可得:
\begin{eqnarray}
P(A,B,C,D,E)=P(E \mid C) \cdot P(D) \cdot P(C \mid B) \cdot P(B)\cdot P(A \mid B)
\funp{P}(A,B,C,D,E)=\funp{P}(E \mid C) \cdot \funp{P}(D) \cdot \funp{P}(C \mid B) \cdot \funp{P}(B)\cdot \funp{P}(A \mid B)
\label{eq:2-8}
\end{eqnarray}
......@@ -188,7 +188,7 @@ P(A,B,C,D,E)=P(E \mid C) \cdot P(D) \cdot P(C \mid B) \cdot P(B)\cdot P(A \mid B
\parinterval 首先介绍一下全概率公式:{\small\bfnew{全概率公式}}\index{全概率公式}(Law Of Total Probability)\index{Law Of Total Probability}是概率论中重要的公式,它可以将一个复杂事件发生的概率分解成不同情况的小事件发生概率的和。这里先介绍一个概念——划分。集合$S$的一个划分事件为$\{B_1, \ldots ,B_n\}$是指它们满足$\bigcup_{i=1}^n B_i=S \textrm{}B_iB_j=\varnothing , i,j=1, \ldots ,n,i\neq j$。此时事件$A$的全概率公式可以被描述为:
\begin{eqnarray}
P(A)=\sum_{k=1}^n P(A \mid B_k)P(B_k)
\funp{P}(A)=\sum_{k=1}^n \funp{P}(A \mid B_k)\funp{P}(B_k)
\label{eq:2-9}
\end{eqnarray}
......@@ -206,25 +206,25 @@ P(A)=\sum_{k=1}^n P(A \mid B_k)P(B_k)
\vspace{0.5em}
\end{itemize}
\parinterval 显然,$S_a$$S_b$$S_c$$S$的划分。如果三条路不拥堵的概率分别为$P({S_{a}^{'}})$=0.2, $P({S_{b}^{'}})$=0.4,$P({S_{c}^{'}})$=0.7,那么事件$L$:小张上班没有遇到拥堵情况的概率就是:
\parinterval 显然,$S_a$$S_b$$S_c$$S$的划分。如果三条路不拥堵的概率分别为$\funp{P}({S_{a}^{'}})$=0.2, $\funp{P}({S_{b}^{'}})$=0.4,$\funp{P}({S_{c}^{'}})$=0.7,那么事件$L$:小张上班没有遇到拥堵情况的概率就是:
\begin{eqnarray}
{P(L)} &=& {P( L| S_a )P(S_a )+P( L| S_b )P(S_b )+P( L| S_c )P(S_c )}\nonumber \\
& = &{P({S_{a}^{'}})P(S_a)+P({S_{b}^{'}})P(S_b)+P({S_{c}^{'}})P(S_c) }\nonumber \\
{\funp{P}(L)} &=& {\funp{P}( L| S_a )\funp{P}(S_a )+\funp{P}( L| S_b )\funp{P}(S_b )+\funp{P}( L| S_c )\funp{P}(S_c )}\nonumber \\
& = &{\funp{P}({S_{a}^{'}})\funp{P}(S_a)+\funp{P}({S_{b}^{'}})\funp{P}(S_b)+\funp{P}({S_{c}^{'}})\funp{P}(S_c) }\nonumber \\
& = &{0.36}
\label{eq:2-10}
\end{eqnarray}
\parinterval {\small\sffamily\bfseries{贝叶斯法则}}\index{贝叶斯法则}(Bayes' Rule)\index{Bayes' Rule}是概率论中的一个经典公式,通常用于已知$P(A \mid B)$$P(B \mid A)$。可以表述为:设$\{B_1, \ldots ,B_n\}$$S$的一个划分,$A$为事件,则对于$i=1, \ldots ,n$,有如下公式
\parinterval {\small\sffamily\bfseries{贝叶斯法则}}\index{贝叶斯法则}(Bayes' Rule)\index{Bayes' Rule}是概率论中的一个经典公式,通常用于已知$\funp{P}(A \mid B)$$\funp{P}(B \mid A)$。可以表述为:设$\{B_1, \ldots ,B_n\}$$S$的一个划分,$A$为事件,则对于$i=1, \ldots ,n$,有如下公式
\begin{eqnarray}
P(B_i \mid A) & = & \frac {P(A B_i)} { P(A) } \nonumber \\
& = & \frac {P(A \mid B_i)P(B_i) } { \sum_{k=1}^nP(A \mid B_k)P(B_k) }
\funp{P}(B_i \mid A) & = & \frac {\funp{P}(A B_i)} { \funp{P}(A) } \nonumber \\
& = & \frac {\funp{P}(A \mid B_i)\funp{P}(B_i) } { \sum_{k=1}^n\funp{P}(A \mid B_k)\funp{P}(B_k) }
\label{eq:2-11}
\end{eqnarray}
\noindent 其中,等式右端的分母部分使用了全概率公式。由上式,也可以得到贝叶斯公式的另外两种写法:
\begin{eqnarray}
P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
& = & \frac { P(A \mid B)P(B) } {P(A \mid B)P(B)+P(A \mid \bar{B}) P(\bar{B})}
\funp{P}(B \mid A) & = & \frac { \funp{P}(A \mid B)\funp{P}(B) } {\funp{P}(A)} \nonumber \\
& = & \frac { \funp{P}(A \mid B)\funp{P}(B) } {\funp{P}(A \mid B)\funp{P}(B)+\funp{P}(A \mid \bar{B}) \funp{P}(\bar{B})}
\label{eq:2-12}
\end{eqnarray}
......@@ -253,31 +253,31 @@ P(B \mid A) & = & \frac { P(A \mid B)P(B) } {P(A)} \nonumber \\
\label{eg:2-1}
\end{example}
\parinterval 在这两句话中,“太阳从东方升起”是一件确定性事件(在地球上),几乎不需要查阅更多信息就可以确认,因此这件事的信息熵相对较低;而“明天天气多云”这件事,需要关注天气预报,才能大概率确定这件事,它的不确定性很高,因而它的信息熵也就相对较高。因此,信息熵也是对事件不确定性的度量。进一步,定义{\small\bfnew{自信息}}\index{自信息}(Self-Information)\index{Self-Information}为一个事件$X$的自信息的表达式为:
\parinterval 在这两句话中,“太阳从东方升起”是一件确定性事件(在地球上),几乎不需要查阅更多信息就可以确认,因此这件事的信息熵相对较低;而“明天天气多云”这件事,需要关注天气预报,才能大概率确定这件事,它的不确定性很高,因而它的信息熵也就相对较高。因此,信息熵也是对事件不确定性的度量。进一步,定义{\small\bfnew{自信息}}\index{自信息}(Self-information)\index{Self-information}为一个事件$X$的自信息的表达式为:
\begin{eqnarray}
I(x)=-\log P(x)
\funp{I}(x)=-\log \funp{P}(x)
\label{eq:2-13}
\end{eqnarray}
\noindent 其中,$x$$X$的一个取值,$P(x)$表示$x$发生的概率。自信息用来衡量单一事件发生时所包含的信息多少,当底数为e时,单位为nats,其中1nats是通过观察概率为$\frac{1}{\textrm{e}}$的事件而获得的信息量;当底数为2时,单位为bits或shannons。$I(x)$$P(x)$的函数关系如图\ref{fig:2-4} 所示。
\noindent 其中,$x$$X$的一个取值,$\funp{P}(x)$表示$x$发生的概率。自信息用来衡量单一事件发生时所包含的信息多少,当底数为e时,单位为nats,其中1nats是通过观察概率为$\frac{1}{\textrm{e}}$的事件而获得的信息量;当底数为2时,单位为bits或shannons。$\funp{I}(x)$$\funp{P}(x)$的函数关系如图\ref{fig:2-4} 所示。
%----------------------------------------------
\begin{figure}[htp]
\centering
\input{./Chapter2/Figures/figure-self-information-function}
\caption{自信息函数$I(x)$关于$P(x)$的曲线}
\caption{自信息函数$\funp{I}(x)$关于$\funp{P}(x)$的曲线}
\label{fig:2-4}
\end{figure}
%-------------------------------------------
\parinterval 自信息处理的是变量单一取值的情况。若量化整个概率分布中的不确定性或信息量,可以用信息熵,记为$H(x)$。其公式如下:
\parinterval 自信息处理的是变量单一取值的情况。若量化整个概率分布中的不确定性或信息量,可以用信息熵,记为$\funp{H}(x)$。其公式如下:
\begin{eqnarray}
H(x) & = & \sum_{x \in \textrm{X}}[ P(x) I(x)] \nonumber \\
& = & - \sum_{x \in \textrm{X} } [P(x)\log(P(x)) ]
\funp{H}(x) & = & \sum_{x \in \textrm{X}}[ \funp{P}(x) \funp{I}(x)] \nonumber \\
& = & - \sum_{x \in \textrm{X} } [\funp{P}(x)\log(\funp{P}(x)) ]
\label{eq:2-14}
\end{eqnarray}
\parinterval 一个分布的信息熵也就是从该分布中得到的一个事件的期望信息量。比如,$a$$b$$c$$d$四支球队,四支队伍夺冠的概率分别是$P_1$$P_2$$P_3$$P_4$,某个人对比赛不感兴趣但是又想知道哪只球队夺冠,通过使用二分法2次就确定哪支球队夺冠了。但假设这四只球队中$c$的实力可以碾压其他球队,那么猜1次就可以确定。所以对于前面这种情况,哪只球队夺冠的信息量较高,信息熵也相对较高;对于后面这种情况,因为结果是容易猜到的,信息量和信息熵也就相对较低。因此可以得知:分布越尖锐熵越低;分布越均匀熵越高。
\parinterval 一个分布的信息熵也就是从该分布中得到的一个事件的期望信息量。比如,$a$$b$$c$$d$四支球队,四支队伍夺冠的概率分别是$\funp{P}_1$$\funp{P}_2$$\funp{P}_3$$\funp{P}_4$,某个人对比赛不感兴趣但是又想知道哪只球队夺冠,通过使用二分法2次就确定哪支球队夺冠了。但假设这四只球队中$c$的实力可以碾压其他球队,那么猜1次就可以确定。所以对于前面这种情况,哪只球队夺冠的信息量较高,信息熵也相对较高;对于后面这种情况,因为结果是容易猜到的,信息量和信息熵也就相对较低。因此可以得知:分布越尖锐熵越低;分布越均匀熵越高。
%----------------------------------------------------------------------------------------
% NEW SUBSUB-SECTION
......@@ -285,20 +285,20 @@ H(x) & = & \sum_{x \in \textrm{X}}[ P(x) I(x)] \nonumber \\
\subsubsection{2.KL距离}
\parinterval 如果同一个随机变量$X$上有两个概率分布$P(x)$$Q(x)$,那么可以使用KL距离(“Kullback-Leibler”散度)来衡量这两个分布的不同,这种度量就是{\small\bfnew{相对熵}}\index{相对熵}(Relative Entropy)\index{Relative Entropy}。其公式如下:
\parinterval 如果同一个随机变量$X$上有两个概率分布$P(x)$$Q(x)$,那么可以使用KL距离(“Kullback-leibler”散度)来衡量这两个分布的不同,这种度量就是{\small\bfnew{相对熵}}\index{相对熵}(Relative Entropy)\index{Relative Entropy}。其公式如下:
\begin{eqnarray}
D_{\textrm{KL}}(P\parallel Q) & = & \sum_{x \in \textrm{X}} [ P(x)\log \frac{P(x) }{ Q(x) } ] \nonumber \\
& = & \sum_{x \in \textrm{X} }[ P(x)(\log P(x)-\log Q(x))]
\funp{D}_{\textrm{KL}}(\funp{P}\parallel \funp{Q}) & = & \sum_{x \in \textrm{X}} [ \funp{P}(x)\log \frac{\funp{P}(x) }{ \funp{Q}(x) } ] \nonumber \\
& = & \sum_{x \in \textrm{X} }[ \funp{P}(x)(\log \funp{P}(x)-\log \funp{Q}(x))]
\label{eq:2-15}
\end{eqnarray}
\parinterval 相对熵的意义在于:在一个事件空间里,概率分布$P(x)$对应的每个事件的可能性。若用概率分布$Q(x)$编码$P(x)$,平均每个事件的信息量增加了多少。它衡量的是同一个事件空间里两个概率分布的差异。KL距离有两条重要的性质:
\parinterval 相对熵的意义在于:在一个事件空间里,概率分布$\funp{P}(x)$对应的每个事件的可能性。若用概率分布$\funp{Q}(x)$编码$\funp{P}(x)$,平均每个事件的信息量增加了多少。它衡量的是同一个事件空间里两个概率分布的差异。KL距离有两条重要的性质:
\begin{itemize}
\vspace{0.5em}
\item 非负性,即$D_{\textrm{KL}} (P \parallel Q) \ge 0$,等号成立条件是$P$$Q$相等。
\item 非负性,即$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q}) \ge 0$,等号成立条件是$\funp{P}$$\funp{Q}$相等。
\vspace{0.5em}
\item 不对称性,即$D_{\textrm{KL}} (P \parallel Q) \neq D_{\textrm{KL}} (Q \parallel P)$,所以$\textrm{KL}$距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用$D_{\textrm{KL}} (P \parallel Q)+D_{\textrm{KL}} (Q \parallel P)$作为度量两个分布差异性的函数。
\item 不对称性,即$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q}) \neq \funp{D}_{\textrm{KL}} (\funp{Q} \parallel \funp{P})$,所以$\textrm{KL}$距离并不是常用的欧式空间中的距离。为了消除这种不确定性,有时也会使用$\funp{D}_{\textrm{KL}} (\funp{P} \parallel \funp{Q})+\funp{D}_{\textrm{KL}} (\funp{Q} \parallel \funp{P})$作为度量两个分布差异性的函数。
\vspace{0.5em}
\end{itemize}
......@@ -308,13 +308,13 @@ D_{\textrm{KL}}(P\parallel Q) & = & \sum_{x \in \textrm{X}} [ P(x)\log \frac{P(x
\subsubsection{3.交叉熵}
\parinterval {\small\bfnew{交叉熵}}\index{交叉熵}(Cross-Entropy)\index{Cross-Entropy}是一个与KL距离密切相关的概念,它的公式是:
\parinterval {\small\bfnew{交叉熵}}\index{交叉熵}(Cross-entropy)\index{Cross-entropy}是一个与KL距离密切相关的概念,它的公式是:
\begin{eqnarray}
H(P,Q)=-\sum_{x \in \textrm{X}} [P(x) \log Q(x) ]
\funp{H}(\funp{P},\funp{Q})=-\sum_{x \in \textrm{X}} [\funp{P}(x) \log \funp{Q}(x) ]
\label{eq:2-16}
\end{eqnarray}
\parinterval 结合相对熵公式可知,交叉熵是KL距离公式中的右半部分。因此,当概率分布$P(x)$固定时,求关于$Q$的交叉熵的最小值等价于求KL距离的最小值。从实践的角度来说,交叉熵与KL距离的目的相同:都是用来描述两个分布的差异,由于交叉熵计算上更加直观方便,因此在机器翻译中被广泛应用。
\parinterval 结合相对熵公式可知,交叉熵是KL距离公式中的右半部分。因此,当概率分布$\funp{P}(x)$固定时,求关于$\funp{Q}$的交叉熵的最小值等价于求KL距离的最小值。从实践的角度来说,交叉熵与KL距离的目的相同:都是用来描述两个分布的差异,由于交叉熵计算上更加直观方便,因此在机器翻译中被广泛应用。
%----------------------------------------------------------------------------------------
% NEW SECTION
......@@ -338,29 +338,29 @@ H(P,Q)=-\sum_{x \in \textrm{X}} [P(x) \log Q(x) ]
\parinterval 此时玩家的胜利似乎只能来源于运气。不过,请注意,这里的假设“随便选一个数字”本身就是一个概率模型,它对骰子的六个面的出现做了均匀分布假设。
\begin{eqnarray}
P(\text{1})=P(\text{2})= \ldots =P(\text{5})=P(\text{6})=1/6
\funp{P}(\text{1})=\funp{P}(\text{2})= \ldots =\funp{P}(\text{5})=\funp{P}(\text{6})=1/6
\label{eq:2-17}
\end{eqnarray}
\vspace{-0.5em}
\parinterval 但是这个游戏没有人规定骰子是均匀的(有些被坑了的感觉)。如果骰子的六个面不均匀呢?这里可以用一种更加“聪明”的方式定义一种新的模型,即定义骰子的每一个面都以一定的概率出现,而不是相同的概率。描述如下:
\begin{eqnarray}
P(\text{1}) &=&\theta_1 \nonumber \\
P(\text{2}) &=&\theta_2 \nonumber \\
P(\text{3}) &=&\theta_3 \nonumber \\
P(\text{4}) &=&\theta_4 \nonumber \\
P(\text{5}) &=&\theta_5 \nonumber \\
P(\text{6}) &=&1-\sum_{1 \leq i \leq 5}\theta_i \qquad \lhd \textrm {归一性}
\funp{P}(\text{1}) &=&\theta_1 \nonumber \\
\funp{P}(\text{2}) &=&\theta_2 \nonumber \\
\funp{P}(\text{3}) &=&\theta_3 \nonumber \\
\funp{P}(\text{4}) &=&\theta_4 \nonumber \\
\funp{P}(\text{5}) &=&\theta_5 \nonumber \\
\funp{P}(\text{6}) &=&1-\sum_{1 \leq i \leq 5}\theta_i \qquad \lhd \textrm {归一性}
\label{eq:2-18}
\end{eqnarray}
\noindent 这里,$\theta_1 \sim \theta_5$可以被看作是模型的参数,因此这个模型的自由度是5。对于这样的模型,参数确定了,模型也就确定了。但是,新的问题来了,在定义骰子每个面的概率后,如何求出具体的概率值呢?一种常用的方法是,从大量实例中学习模型参数,这个方法也是常说的{\small\bfnew{参数估计}}\index{参数估计}(Parameter Estimation)\index{Parameter Estimation}。可以将这个不均匀的骰子先实验性地掷很多次,这可以被看作是独立同分布的若干次采样,比如$X$ 次,发现1出现$X_1$ 次,2出现$X_2$ 次,以此类推,得到了各个面出现的次数。假设掷骰子中每个面出现的概率符合多项式分布,通过简单的概率论知识可以知道每个面出现概率的极大似然估计为:
\begin{eqnarray}
P(i)=\frac {X_i}{X}
\funp{P}(i)=\frac {X_i}{X}
\label{eq:2-19}
\end{eqnarray}
\parinterval$X$足够大的时,$\frac{X_i}{X}$可以无限逼近$P(i)$的真实值,因此可以通过大量的实验推算出掷骰子各个面的概率的准确估计值。回归到原始的问题,如果在正式开始游戏前,预先掷骰子30次,得到如图\ref{fig:2-6}的结果。
\parinterval$X$足够大的时,$\frac{X_i}{X}$可以无限逼近$\funp{P}(i)$的真实值,因此可以通过大量的实验推算出掷骰子各个面的概率的准确估计值。回归到原始的问题,如果在正式开始游戏前,预先掷骰子30次,得到如图\ref{fig:2-6}的结果。
%----------------------------------------------
\begin{figure}[htp]
......@@ -382,7 +382,7 @@ P(i)=\frac {X_i}{X}
\end{figure}
%-------------------------------------------
\parinterval 世界上的事物并不是平等出现的,上面这个掷骰子游戏也是如此。在“公平”的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的“不公平”实际上这是客观事物中蕴含的一种{\small\sffamily\bfseries{偏置}}\index{偏置}(Bias)\index{Bias},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,当翻译一个英单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\parinterval 世界上的事物并不是平等出现的,上面这个掷骰子游戏也是如此。在“公平”的世界中,没有任何一个模型可以学到有价值的事情。从机器学习的角度来看,所谓的“不公平”实际上这是客观事物中蕴含的一种{\small\sffamily\bfseries{偏置}}\index{偏置}(Bias)\index{Bias},也就是很多事情天然就有对某些情况有倾向。而图像处理、自然语言处理等问题中绝大多数都存在着偏置。比如,当翻译一个英单词的时候,它最可能的翻译结果往往就是那几个词。设计统计模型的目的正是要学习这种偏置,之后利用这种偏置对新的问题做出足够好的决策。
\parinterval 在处理语言问题时,为了评价哪些词更容易在一个句子中出现,或者哪些句子在某些语境下更合理,常常也会使用统计方法对词或句子出现的可能性建模。与掷骰子游戏类似,词出现的概率可以这样理解:每个单词的出现就好比掷一个巨大的骰子,与前面的例子中有所不同的是:
......@@ -440,7 +440,7 @@ P(i)=\frac {X_i}{X}
\parinterval 通过这个学习过程,就可以得到每个词出现的概率,成功使用统计方法对“单词的频率”这个问题进行建模。
\parinterval 那么又该如何计算一个句子的概率呢?在自然语言处理领域中,句子可以被看作是由单词组成的序列,因而句子的概率可以被建模为若干单词的联合概率,即$P(w_1 w_2 w_3 \ldots w_m)$
\parinterval 那么又该如何计算一个句子的概率呢?在自然语言处理领域中,句子可以被看作是由单词组成的序列,因而句子的概率可以被建模为若干单词的联合概率,即$\funp{P}(w_1 w_2 w_3 \ldots w_m)$
\parinterval 其中,$w$表示句子中的一个单词。此时仍可以使用掷骰子的方式,将骰子的每个面看作一个句子,然后用统计词汇概率的方式统计句子的概率。但是这里有一个问题,一个句子在指定文本中出现的次数一定比词汇在文本出现的次数低得多,此时通过统计的方式求句子的频率会由于样本数太少,导致无法准确的求出句子的概率,因此对句子的统计建模仍需要更好的方式。
......@@ -451,7 +451,7 @@ P(i)=\frac {X_i}{X}
\sectionnewpage
\section{$n$-gram语言模型}
\parinterval 在骰子游戏中,可以通过一种统计的方式,估计出在文本中词和句子出现的概率。但是在计算句子概率时往往会因为句子的样本过少而无法正确估计出句子出现的频率,为了能够准确地衡量句子出现的频率,本章引入了计算整个单词序列概率$P(w_1 w_2 w_3 \ldots w_m)$的方法---统计语言模型的概念。并且本章进一步介绍更加通用的$n$-gram语言模型,它在机器翻译及其他自然语言处理任务中有更加广泛的应用。
\parinterval 在骰子游戏中,可以通过一种统计的方式,估计出在文本中词和句子出现的概率。但是在计算句子概率时往往会因为句子的样本过少而无法正确估计出句子出现的频率,为了能够准确地衡量句子出现的频率,本章引入了计算整个单词序列概率$\funp{P}(w_1 w_2 w_3 \ldots w_m)$的方法---统计语言模型的概念。并且本章进一步介绍更加通用的$n$-gram语言模型,它在机器翻译及其他自然语言处理任务中有更加广泛的应用。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -459,27 +459,27 @@ P(i)=\frac {X_i}{X}
\subsection{建模}
\parinterval {\small\sffamily\bfseries{语言模型}}\index{语言模型}(Language Model)\index{Language Model}的目的是描述文字序列出现的规律。这个对问题建模的过程被称作{\small\sffamily\bfseries{语言建模}}\index{语言建模}(Language Modeling)\index{Language Modeling}。如果使用统计建模的方式,语言模型可以被定义为计算$P(w_1 w_2 \ldots w_m)$的问题,也就是计算整个词序列$w_1 w_2 \ldots w_m$出现的可能性大小。具体定义如下,
\parinterval {\small\sffamily\bfseries{语言模型}}\index{语言模型}(Language Model)\index{Language Model}的目的是描述文字序列出现的规律。这个对问题建模的过程被称作{\small\sffamily\bfseries{语言建模}}\index{语言建模}(Language Modeling)\index{Language Modeling}。如果使用统计建模的方式,语言模型可以被定义为计算$\funp{P}(w_1 w_2 \ldots w_m)$的问题,也就是计算整个词序列$w_1 w_2 \ldots w_m$出现的可能性大小。具体定义如下,
%----------------------------------------------
% 定义3.1
\vspace{0.5em}
\begin{definition}[]
词汇表V上的语言模型是一个函数$P(w_1 w_2 \ldots w_m)$,它表示$V^+$上的一个概率分布。其中,对于任何词串$w_1 w_2 \ldots w_m\in{V^+}$,有$P(w_1 w_2 \ldots w_m)\geq{0}$。而且对于所有的词串,函数满足归一化条件$\sum{_{w_1 w_2 \ldots w_m\in{V^+}}P(w_1 w_2 \ldots w_m)}=1$
词汇表V上的语言模型是一个函数$\funp{P}(w_1 w_2 \ldots w_m)$,它表示$V^+$上的一个概率分布。其中,对于任何词串$w_1 w_2 \ldots w_m\in{V^+}$,有$\funp{P}(w_1 w_2 \ldots w_m)\geq{0}$。而且对于所有的词串,函数满足归一化条件$\sum{_{w_1 w_2 \ldots w_m\in{V^+}}\funp{P}(w_1 w_2 \ldots w_m)}=1$
\end{definition}
%-------------------------------------------
\parinterval 直接求$P(w_1 w_2 \ldots w_m)$并不简单,因为如果把整个词串$w_1 w_2 \ldots w_m$作为一个变量,模型的参数量会非常大。$w_1 w_2 \ldots w_m$$|V|^m$种可能性,这里$|V|$表示词汇表大小。显然,当$m$ 增大时,模型的复杂度会急剧增加,甚至都无法进行存储和计算。既然把$w_1 w_2 \ldots w_m$作为一个变量不好处理,就可以考虑对这个序列的生成过程进行分解。使用链式法则,很容易得到
\parinterval 直接求$\funp{P}(w_1 w_2 \ldots w_m)$并不简单,因为如果把整个词串$w_1 w_2 \ldots w_m$作为一个变量,模型的参数量会非常大。$w_1 w_2 \ldots w_m$$|V|^m$种可能性,这里$|V|$表示词汇表大小。显然,当$m$ 增大时,模型的复杂度会急剧增加,甚至都无法进行存储和计算。既然把$w_1 w_2 \ldots w_m$作为一个变量不好处理,就可以考虑对这个序列的生成过程进行分解。使用链式法则,很容易得到
\begin{eqnarray}
P(w_1 w_2 \ldots w_m)=P(w_1)P(w_2|w_1)P(w_3|w_1 w_2) \ldots P(w_m|w_1 w_2 \ldots w_{m-1})
\funp{P}(w_1 w_2 \ldots w_m)=\funp{P}(w_1)\funp{P}(w_2|w_1)\funp{P}(w_3|w_1 w_2) \ldots \funp{P}(w_m|w_1 w_2 \ldots w_{m-1})
\label{eq:2-20}
\end{eqnarray}
这样,$w_1 w_2 \ldots w_m$的生成可以被看作是逐个生成每个单词的过程,即首先生成$w_1$,然后根据$w_1$再生成$w_2$,然后根据$w_1 w_2$再生成$w_3$,以此类推,直到根据所有前$m-1$个词生成序列的最后一个单词$w_m$。这个模型把联合概率$P(w_1 w_2 \ldots w_m)$分解为多个条件概率的乘积,虽然对生成序列的过程进行了分解,但是模型的复杂度和以前是一样的,比如,$P(w_m|w_1 w_2 \ldots w_{m-1})$ 仍然不好计算。
这样,$w_1 w_2 \ldots w_m$的生成可以被看作是逐个生成每个单词的过程,即首先生成$w_1$,然后根据$w_1$再生成$w_2$,然后根据$w_1 w_2$再生成$w_3$,以此类推,直到根据所有前$m-1$个词生成序列的最后一个单词$w_m$。这个模型把联合概率$\funp{P}(w_1 w_2 \ldots w_m)$分解为多个条件概率的乘积,虽然对生成序列的过程进行了分解,但是模型的复杂度和以前是一样的,比如,$\funp{P}(w_m|w_1 w_2 \ldots w_{m-1})$ 仍然不好计算。
\parinterval 换一个角度看,$P(w_m|w_1 w_2 \ldots w_{m-1})$体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为“历史”,并参考这个“历史”生成当前单词。但是这个“历史”的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种简单的想法是使用定长历史,比如,每次只考虑前面$n-1$个历史单词来生成当前单词,这就是$n$-gram语言模型。这个模型的数学描述如下:
\parinterval 换一个角度看,$\funp{P}(w_m|w_1 w_2 \ldots w_{m-1})$体现了一种基于“历史”的单词生成模型,也就是把前面生成的所有单词作为“历史”,并参考这个“历史”生成当前单词。但是这个“历史”的长度和整个序列长度是相关的,也是一种长度变化的历史序列。为了化简问题,一种简单的想法是使用定长历史,比如,每次只考虑前面$n-1$个历史单词来生成当前单词,这就是$n$-gram语言模型。这个模型的数学描述如下:
\begin{eqnarray}
P(w_m|w_1 w_2 \ldots w_{m-1}) \approx P(w_m|w_{m-n+1} \ldots w_{m-1})
\funp{P}(w_m|w_1 w_2 \ldots w_{m-1}) \approx \funp{P}(w_m|w_{m-n+1} \ldots w_{m-1})
\label{eq:2-21}
\end{eqnarray}
......@@ -492,13 +492,13 @@ P(w_m|w_1 w_2 \ldots w_{m-1}) \approx P(w_m|w_{m-n+1} \ldots w_{m-1})
\begin{tabular}{l|l|l l|l}
链式法则 & 1-gram & 2-gram & $ \ldots $ & $n$-gram\\
\hline
\rule{0pt}{10pt} $P(w_1 w_2 \ldots w_m)$ = & $P(w_1 w_2 \ldots w_m)$ = & $P(w_1 w_2 \ldots w_m)$ = & $ \ldots $ & $P(w_1 w_2 \ldots w_m)$ = \\
\rule{0pt}{10pt} $P(w_1)\times$ & $P(w_1)\times$ & $P(w_1)\times$ & $ \ldots $ & $P(w_1)\times$ \\
\rule{0pt}{10pt} $P(w_2|w_1)\times$ & $P(w_2)\times$ & $P(w_2|w_1)\times$ & $ \ldots $ & $P(w_2|w_1)\times$\\
\rule{0pt}{10pt} $P(w_3|w_1 w_2)\times$ & $P(w_3)\times$ & $P(w_3|w_2)\times$ & $ \ldots $ & $P(w_3|w_1 w_2)\times$ \\
\rule{0pt}{10pt} $P(w_4|w_1 w_2 w_3)\times$ & $P(w_4)\times$ & $P(w_4|w_3)\times$ & $ \ldots $ & $P(w_4|w_1 w_2 w_3)\times$ \\
\rule{0pt}{10pt} $\funp{P}(w_1 w_2 \ldots w_m)$ = & $\funp{P}(w_1 w_2 \ldots w_m)$ = & $\funp{P}(w_1 w_2 \ldots w_m)$ = & $ \ldots $ & $\funp{P}(w_1 w_2 \ldots w_m)$ = \\
\rule{0pt}{10pt} $\funp{P}(w_1)\times$ & $\funp{P}(w_1)\times$ & $\funp{P}(w_1)\times$ & $ \ldots $ & $\funp{P}(w_1)\times$ \\
\rule{0pt}{10pt} $\funp{P}(w_2|w_1)\times$ & $\funp{P}(w_2)\times$ & $\funp{P}(w_2|w_1)\times$ & $ \ldots $ & $\funp{P}(w_2|w_1)\times$\\
\rule{0pt}{10pt} $\funp{P}(w_3|w_1 w_2)\times$ & $\funp{P}(w_3)\times$ & $\funp{P}(w_3|w_2)\times$ & $ \ldots $ & $\funp{P}(w_3|w_1 w_2)\times$ \\
\rule{0pt}{10pt} $\funp{P}(w_4|w_1 w_2 w_3)\times$ & $\funp{P}(w_4)\times$ & $\funp{P}(w_4|w_3)\times$ & $ \ldots $ & $\funp{P}(w_4|w_1 w_2 w_3)\times$ \\
\rule{0pt}{10pt} $ \ldots $ & $ \ldots $ & $ \ldots $ & $ \ldots $ & $ \ldots $ \\
\rule{0pt}{10pt} $P(w_m|w_1 \ldots w_{m-1})$ & $P(w_m)$ & $P(w_m|w_{m-1})$ & $ \ldots $ & $P(w_m|w_{m-n+1} \ldots w_{m-1})$
\rule{0pt}{10pt} $\funp{P}(w_m|w_1 \ldots w_{m-1})$ & $\funp{P}(w_m)$ & $\funp{P}(w_m|w_{m-1})$ & $ \ldots $ & $\funp{P}(w_m|w_{m-n+1} \ldots w_{m-1})$
\end{tabular}
}
\end{center}
......@@ -509,13 +509,13 @@ P(w_m|w_1 w_2 \ldots w_{m-1}) \approx P(w_m|w_{m-n+1} \ldots w_{m-1})
\parinterval $n$-gram的优点在于,它所使用的历史信息是有限的,即$n-1$个单词。这种性质也反映了经典的马尔可夫链的思想\upcite{liuke-markov-2004}\upcite{resnick1992adventures},有时也被称作马尔可夫假设或者马尔可夫属性。因此$n$-gram也可以被看作是变长序列上的一种马尔可夫模型,比如,2-gram语言模型对应着1阶马尔可夫模型,3-gram语言模型对应着2阶马尔可夫模型,以此类推。
\parinterval 那么,如何计算$P(w_m|w_{m-n+1} \ldots w_{m-1})$呢?有很多种选择,比如:
\parinterval 那么,如何计算$\funp{P}(w_m|w_{m-n+1} \ldots w_{m-1})$呢?有很多种选择,比如:
\begin{itemize}
\vspace{0.5em}
\item {\small\bfnew{极大似然估计}}\index{极大似然估计}。直接利用词序列在训练数据中出现的频度计算出$P(w_m|w_{m-n+1}$\\$ \ldots w_{m-1})$
\item {\small\bfnew{极大似然估计}}\index{极大似然估计}。直接利用词序列在训练数据中出现的频度计算出$\funp{P}(w_m|w_{m-n+1}$\\$ \ldots w_{m-1})$
\begin{eqnarray}
P(w_m|w_{m-n+1} \ldots w_{m-1})=\frac{\textrm{count}(w_{m-n+1} \ldots w_m)}{\textrm{count}(w_{m-n+1} \ldots w_{m-1})}
\funp{P}(w_m|w_{m-n+1} \ldots w_{m-1})=\frac{\textrm{count}(w_{m-n+1} \ldots w_m)}{\textrm{count}(w_{m-n+1} \ldots w_{m-1})}
\label{eq:2-22}
\vspace{0.5em}
\end{eqnarray}
......@@ -523,17 +523,17 @@ P(w_m|w_{m-n+1} \ldots w_{m-1})=\frac{\textrm{count}(w_{m-n+1} \ldots w_m)}{\tex
其中,$\textrm{count}(\cdot)$是在训练数据中统计频次的函数。
\vspace{0.5em}
\item {\small\bfnew{人工神经网络方法}}\index{人工神经网络方法}。构建一个人工神经网络估计$P(w_m|w_{m-n+1} \ldots w_{m-1})$的值,比如,可以构建一个前馈神经网络来对$n$-gram进行建模。
\item {\small\bfnew{人工神经网络方法}}\index{人工神经网络方法}。构建一个人工神经网络估计$\funp{P}(w_m|w_{m-n+1} \ldots w_{m-1})$的值,比如,可以构建一个前馈神经网络来对$n$-gram进行建模。
\end{itemize}
\vspace{0.5em}
\parinterval 极大似然估计方法和掷骰子游戏中介绍的统计词汇概率的方法是一致的,它的核心是使用$n$-gram出现的频度进行参数估计。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入$(w_{m-n+1} \ldots w_{m-1})$和输出$P(w_m|w_{m-n+1} \ldots w_{m-1})$进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于$n$-gram的方法,或者说它并没有显性记录$n$-gram的生成概率,也不依赖$n$-gram的频度进行参数估计。为了保证内容的连贯性,本章将仍以传统$n$-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在{\chapternine}{\chapterten}进行详细介绍。
\parinterval 极大似然估计方法和掷骰子游戏中介绍的统计词汇概率的方法是一致的,它的核心是使用$n$-gram出现的频度进行参数估计。基于人工神经网络的方法在近些年也非常受关注,它直接利用多层神经网络对问题的输入$(w_{m-n+1} \ldots w_{m-1})$和输出$\funp{P}(w_m|w_{m-n+1} \ldots w_{m-1})$进行建模,而模型的参数通过网络中神经元之间连接的权重进行体现。严格意义上了来说,基于人工神经网络的方法并不算基于$n$-gram的方法,或者说它并没有显性记录$n$-gram的生成概率,也不依赖$n$-gram的频度进行参数估计。为了保证内容的连贯性,本章将仍以传统$n$-gram语言模型为基础进行讨论,基于人工神经网络的方法将会在{\chapternine}{\chapterten}进行详细介绍。
\parinterval $n$-gram语言模型的使用非常简单。可以直接用它来对词序列出现的概率进行计算。比如,可以使用一个2-gram语言模型计算一个句子出现的概率:
\begin{eqnarray}
& &P_{2-\textrm{gram}}{(\textrm{确实现在数据很多})} \nonumber \\
&= & P(\textrm{确实}) \times P(\textrm{现在}|\textrm{确实})\times P(\textrm{数据}|\textrm{现在}) \times \nonumber \\
& & P(\textrm{}|\textrm{数据})\times P(\textrm{}|\textrm{})
& &\funp{P}_{2-\textrm{gram}}{(\textrm{确实现在数据很多})} \nonumber \\
&= & \funp{P}(\textrm{确实}) \times \funp{P}(\textrm{现在}|\textrm{确实})\times \funp{P}(\textrm{数据}|\textrm{现在}) \times \nonumber \\
& & \funp{P}(\textrm{}|\textrm{数据})\times \funp{P}(\textrm{}|\textrm{})
\label{eq:2-23}
\end{eqnarray}
......@@ -547,13 +547,13 @@ P(w_m|w_{m-n+1} \ldots w_{m-1})=\frac{\textrm{count}(w_{m-n+1} \ldots w_m)}{\tex
\parinterval 在式\ref{eq:2-23}所示的例子中,如果语料中从没有“确实”和“现在”两个词连续出现的情况,那么使用2-gram计算句子“确实现在数据很多”的概率时,会出现如下情况
\begin{eqnarray}
P(\textrm{现在}|\textrm{确实}) & = & \frac{\textrm{count}(\textrm{确实}\ \textrm{现在})}{\textrm{count}(\textrm{确实})} \nonumber \\
\funp{P}(\textrm{现在}|\textrm{确实}) & = & \frac{\textrm{count}(\textrm{确实}\ \textrm{现在})}{\textrm{count}(\textrm{确实})} \nonumber \\
& = & \frac{0}{\textrm{count}(\textrm{确实})} \nonumber \\
& = & 0
\label{eq:2-24}
\end{eqnarray}
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个句子出现的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为{\small\sffamily\bfseries{未登录词}}\index{未登录词}(Out-Of-Vocabulary Word,OOV Word)\index{Out-Of-Vocabulary Word,OOV Word},比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0 概率。图\ref{fig:2-11}展示了一个真实语料库中词语出现频度的分布,可以看到绝大多数词都是低频词。
\parinterval 显然,这个结果是不能接受的。因为即使语料中没有 “确实”和“现在”两个词连续出现,这种搭配也是客观存在的。这时简单的用极大似然估计得到概率却是0,导致整个句子出现的概率为0。 更常见的问题是那些根本没有出现在词表中的词,称为{\small\sffamily\bfseries{未登录词}}\index{未登录词}(Out-of-Vocabulary Word,OOV Word)\index{Out-of-Vocabulary Word,OOV Word},比如一些生僻词,可能模型训练阶段从来没有看到过,这时模型仍然会给出0 概率。图\ref{fig:2-11}展示了一个真实语料库中词语出现频度的分布,可以看到绝大多数词都是低频词。
%----------------------------------------------
\begin{figure}[htp]
......@@ -574,19 +574,19 @@ P(\textrm{现在}|\textrm{确实}) & = & \frac{\textrm{count}(\textrm{确实}\
\subsubsection{1.加法平滑方法}
\parinterval {\small\bfnew{加法平滑}}\index{加法平滑}(Additive Smoothing)\index{Additive Smoothing}是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料$C$ (从未出现“确实\ 现在”二元语法),评估一个句子$S$ =“确实现在物价很高”的概率。当计算“确实\ 现在”的概率时,$P(S) = 0$。显然这个结果是不合理的。
\parinterval {\small\bfnew{加法平滑}}\index{加法平滑}(Additive Smoothing)\index{Additive Smoothing}是一种简单的平滑技术。本小节首先介绍这一方法,希望通过它了解平滑算法的思想。通常情况下,系统研发者会利用采集到的语料库来模拟真实的全部语料库。当然,没有一个语料库能覆盖所有的语言现象。常见的一个问题是,使用的语料无法涵盖所有的词汇。因此,直接依据这样语料所获得的统计信息来获取语言模型就会产生偏差。假设依据某语料$C$ (从未出现“确实\ 现在”二元语法),评估一个句子$S$ =“确实现在物价很高”的概率。当计算“确实\ 现在”的概率时,$\funp{P}(S) = 0$。显然这个结果是不合理的。
\parinterval 加法平滑方法假设每个$n$-gram出现的次数比实际统计次数多$\theta$次,$0 \le \theta\le 1$。这样,计算概率的时候分子部分不会为0。重新计算$P(\textrm{现在}|\textrm{确实})$,可以得到:
\parinterval 加法平滑方法假设每个$n$-gram出现的次数比实际统计次数多$\theta$次,$0 \le \theta\le 1$。这样,计算概率的时候分子部分不会为0。重新计算$\funp{P}(\textrm{现在}|\textrm{确实})$,可以得到:
\begin{eqnarray}
P(\textrm{现在}|\textrm{确实}) & = & \frac{\theta + \textrm{count}(\textrm{确实\ 现在})}{\sum_{w}^{|V|}(\theta + \textrm{count}(\textrm{确实\ }w))} \nonumber \\
\funp{P}(\textrm{现在}|\textrm{确实}) & = & \frac{\theta + \textrm{count}(\textrm{确实\ 现在})}{\sum_{w}^{|V|}(\theta + \textrm{count}(\textrm{确实\ }w))} \nonumber \\
& = & \frac{\theta + \textrm{count}(\textrm{确实\ 现在})}{\theta{|V|} + \textrm{count}(\textrm{确实})}
\label{eq:2-25}
\end{eqnarray}
\noindent 其中,$V$表示所有词汇的词表,$|V|$为词表中单词的个数,$w$为词典中的一个词。有时候,加法平滑方法会将$\theta$取1,这时称之为加一平滑或是拉普拉斯平滑。这种方法比较容易理解,也比较简单,因此也往往被用于对系统的快速原型中。
\parinterval 举一个例子。假设在一个英文档中随机采样一些单词(词表大小$|V|=20$),各个单词出现的次数为:“look”: 4,“people”: 3,“am”: 2,“what”: 1,“want”: 1,“do”: 1。图\ref{fig:2-12} 给出了在平滑之前和平滑之后的概率分布。
\parinterval 举一个例子。假设在一个英文档中随机采样一些单词(词表大小$|V|=20$),各个单词出现的次数为:“look”: 4,“people”: 3,“am”: 2,“what”: 1,“want”: 1,“do”: 1。图\ref{fig:2-12} 给出了在平滑之前和平滑之后的概率分布。
%----------------------------------------------
\begin{figure}[htp]
......@@ -620,7 +620,7 @@ r^* = (r + 1)\frac{n_{r + 1}}{n_r}
\parinterval 基于这个公式,就可以估计所有0次$n$-gram的频次$n_0 r^*=(r+1)n_1=n_1$。要把这个重新估计的统计数转化为概率,需要进行归一化处理:对于每个统计数为$r$的事件,其概率为
\begin{eqnarray}
P_r=\frac{r^*}{N}
\funp{P}_r=\frac{r^*}{N}
\label{eq:2-28}
\end{eqnarray}
......@@ -634,7 +634,7 @@ N & = & \sum_{r=0}^{\infty}{r^{*}n_r} \nonumber \\
也就是说,$N$仍然为这个整个样本分布最初的计数。样本中所有事件的概率之和为:
\begin{eqnarray}
P(r>0) & = & \sum_{r>0}{P_r} \nonumber \\
\funp{P}(r>0) & = & \sum_{r>0}{\funp{P}_r} \nonumber \\
& = & 1 - \frac{n_1}{N} \nonumber \\
& < & 1
\label{eq:2-30}
......@@ -650,7 +650,7 @@ P(r>0) & = & \sum_{r>0}{P_r} \nonumber \\
\caption{单词出现频次及古德-图灵平滑结果}
{
\begin{tabular}{l|lll}
\rule{0pt}{10pt} $r$ & $n_r$ & $r^*$ & $P_r$\\ \hline
\rule{0pt}{10pt} $r$ & $n_r$ & $r^*$ & $\funp{P}_r$\\ \hline
\rule{0pt}{10pt} 0 & 14 & 0.21 & 0.018 \\
\rule{0pt}{10pt} 1 & 3 & 0.67 & 0.056 \\
\rule{0pt}{10pt} 2 & 1 & 3 & 0.25 \\
......@@ -676,7 +676,7 @@ P(r>0) & = & \sum_{r>0}{P_r} \nonumber \\
\parinterval 首先介绍一下Absolute Discounting平滑算法,公式如下所示:
\begin{eqnarray}
P_{\textrm{AbsDiscount}}(w_i | w_{i-1}) = \frac{c(w_{i-1},w_i )-d}{c(w_{i-1})} + \lambda(w_{i-1})P(w)
\funp{P}_{\textrm{AbsDiscount}}(w_i | w_{i-1}) = \frac{c(w_{i-1},w_i )-d}{c(w_{i-1})} + \lambda(w_{i-1})\funp{P}(w)
\label{eq:2-31}
\end{eqnarray}
......@@ -692,29 +692,29 @@ I cannot see without my reading \underline{\ \ \ \ \ \ \ \ }
\noindent 直觉上应该会猜测这个地方的词应该是“glasses”,但是在训练语料库中“Francisco”出现的频率非常高。如果在预测时仍然使用的是标准的1-gram模型,那么系统会高概率选择“Francisco”填入下划线出,这个结果明显是不合理的。当使用的是混合的插值模型时,如果“reading Francisco”这种二元语法并没有出现在语料中,就会导致1-gram对结果的影响变大,使得仍然会做出与标准1-gram模型相同的结果,犯下相同的错误。
\parinterval 观察语料中的2-gram发现,“Francisco”的前一个词仅可能是“San”,不会出现“reading”。这个分析证实了,考虑前一个词的影响是有帮助的,比如仅在前一个词是“San”时,才给“Francisco”赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$P_{\textrm{continuation}}$,简写为$P_{\textrm{cont}}$。这个模型可以通过考虑前一个词的影响评估当前词作为第二个词出现的可能性。
\parinterval 观察语料中的2-gram发现,“Francisco”的前一个词仅可能是“San”,不会出现“reading”。这个分析证实了,考虑前一个词的影响是有帮助的,比如仅在前一个词是“San”时,才给“Francisco”赋予一个较高的概率值。基于这种想法,改进原有的1-gram模型,创造一个新的1-gram模型$\funp{P}_{\textrm{continuation}}$,简写为$\funp{P}_{\textrm{cont}}$。这个模型可以通过考虑前一个词的影响评估当前词作为第二个词出现的可能性。
\parinterval 为了评估$P_{\textrm{cont}}$,统计使用当前词作为第二个词所出现二元语法的种类,二元语法种类越多,这个词作为第二个词出现的可能性越高,呈正比:
\parinterval 为了评估$\funp{P}_{\textrm{cont}}$,统计使用当前词作为第二个词所出现二元语法的种类,二元语法种类越多,这个词作为第二个词出现的可能性越高,呈正比:
\begin{eqnarray}
P_{\textrm{cont}}(w_i) \varpropto |w_{i-1}: c(w_{i-1} w_i )>0|
\funp{P}_{\textrm{cont}}(w_i) \varpropto |w_{i-1}: c(w_{i-1} w_i )>0|
\label{eq:2-32}
\end{eqnarray}
通过全部的二元语法的种类做归一化可得到评估的公式
\begin{eqnarray}
P_{\textrm{cont}}(w_i) = \frac{|\{ w_{i-1}:c(w_{i-1} w_i )>0 \}|}{|\{ (w_{j-1}, w_j):c(w_{j-1}w_j )>0 \}|}
\funp{P}_{\textrm{cont}}(w_i) = \frac{|\{ w_{i-1}:c(w_{i-1} w_i )>0 \}|}{|\{ (w_{j-1}, w_j):c(w_{j-1}w_j )>0 \}|}
\label{eq:2-33}
\end{eqnarray}
\parinterval 基于分母的变化还有另一种形式
\begin{eqnarray}
P_{\textrm{cont}}(w_i) = \frac{|\{ w_{i-1}:c(w_{i-1} w_i )>0 \}|}{\sum_{w^{\prime}}|\{ w_{i-1}^{\prime}:c(w_{i-1}^{\prime} w_i^{\prime} )>0 \}|}
\funp{P}_{\textrm{cont}}(w_i) = \frac{|\{ w_{i-1}:c(w_{i-1} w_i )>0 \}|}{\sum_{w^{\prime}}|\{ w_{i-1}^{\prime}:c(w_{i-1}^{\prime} w_i^{\prime} )>0 \}|}
\label{eq:2-34}
\end{eqnarray}
结合基础的absolute discounting计算公式,从而得到了Kneser-Ney平滑方法的公式
\begin{eqnarray}
P_{\textrm{KN}}(w_i|w_{i-1}) = \frac{\max(c(w_{i-1},w_i )-d,0)}{c(w_{i-1})}+ \lambda(w_{i-1})P_{\textrm{cont}}(w_i)
\funp{P}_{\textrm{KN}}(w_i|w_{i-1}) = \frac{\max(c(w_{i-1},w_i )-d,0)}{c(w_{i-1})}+ \lambda(w_{i-1})\funp{P}_{\textrm{cont}}(w_i)
\label{eq:2-35}
\end{eqnarray}
......@@ -724,12 +724,12 @@ P_{\textrm{KN}}(w_i|w_{i-1}) = \frac{\max(c(w_{i-1},w_i )-d,0)}{c(w_{i-1})}+ \la
\label{eq:2-36}
\end{eqnarray}
\noindent 这里$\max(\cdot)$保证了分子部分为不小0的数,原始1-gram更新成$P_{\textrm{cont}}$概率分布,$\lambda$是正则化项。
\noindent 这里$\max(\cdot)$保证了分子部分为不小0的数,原始1-gram更新成$\funp{P}_{\textrm{cont}}$概率分布,$\lambda$是正则化项。
\parinterval 为了更具普适性,不仅局限为2-gram和1-gram的插值模型,利用递归的方式可以得到更通用的Kneser-Ney平滑公式
\begin{eqnarray}
P_{\textrm{KN}}(w_i|w_{i-n+1} \ldots w_{i-1}) & = & \frac{\max(c_{\textrm{KN}}(w_{i-n+1} \ldots w_{i-1})-d,0)}{c_{\textrm{KN}}(w_{i-n+1} \ldots w_{i-1})} + \nonumber \\
& & \lambda(w_{i-n+1} \ldots w_{i-1})P_{\textrm{KN}}(w_i|w_{i-n+2} \ldots w_{i-1})
\funp{P}_{\textrm{KN}}(w_i|w_{i-n+1} \ldots w_{i-1}) & = & \frac{\max(c_{\textrm{KN}}(w_{i-n+1} \ldots w_{i-1})-d,0)}{c_{\textrm{KN}}(w_{i-n+1} \ldots w_{i-1})} + \nonumber \\
& & \lambda(w_{i-n+1} \ldots w_{i-1})\funp{P}_{\textrm{KN}}(w_i|w_{i-n+2} \ldots w_{i-1})
\label{eq:2-37}
\end{eqnarray}
\begin{eqnarray}
......@@ -764,15 +764,15 @@ c_{\textrm{KN}}(\cdot) = \left\{\begin{array}{ll}
\subsection{搜索问题的建模}
\parinterval 具体来说,基于语言模型的序列生成问题的本质是在无数任意排列的单词序列中搜索出最合理、最流畅的“最优解”。这里单词序列$w = w_1 w_2 \ldots w_m$的合理性和流畅性可以通过语言模型的打分$P(w)$衡量。因此在序列生成中,基于语言模型的搜索问题可以被建模为如下形式:
\parinterval 具体来说,基于语言模型的序列生成问题的本质是在无数任意排列的单词序列中搜索出最合理、最流畅的“最优解”。这里单词序列$w = w_1 w_2 \ldots w_m$的合理性和流畅性可以通过语言模型的打分$\funp{P}(w)$衡量。因此在序列生成中,基于语言模型的搜索问题可以被建模为如下形式:
\begin{eqnarray}
w^{'} = \argmax_{w \in \chi}P(w)
w^{'} = \argmax_{w \in \chi}\funp{P}(w)
\label{eq:2-40}
\end{eqnarray}
\parinterval 这里$\arg$即argument,$\argmax_{w \in \chi}P(w)$表示想要找到使语言模型得分$P(w)$达到最大的单词序列$w$$\chi$是搜索问题的解空间 \footnote[1]{解空间,是一个算法执行后,所得到的所有解构成的集合。},在这里是所有可能的单词序列$w$的集合。$w^{'}$可以被看做该搜索问题中的“最优解”,即“出现概率最大的单词序列”。
\parinterval 这里$\arg$即argument,$\argmax_{w \in \chi}\funp{P}(w)$表示想要找到使语言模型得分$\funp{P}(w)$达到最大的单词序列$w$$\chi$是搜索问题的解空间 \footnote[1]{解空间,是一个算法执行后,所得到的所有解构成的集合。},在这里是所有可能的单词序列$w$的集合。$w^{'}$可以被看做该搜索问题中的“最优解”,即“出现概率最大的单词序列”。
\parinterval 在序列生成问题中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并没有预先指定序列的长度。比如,机器翻译中译文的长度是无法预先知道的。那么怎样判断一个序列何时完成了生成过程呢?回顾人类书写文字的过程可以发现,句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的符号<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的符号<eos>来表示。
\parinterval 在序列生成问题中,最简单的策略就是对词表中的词汇进行任意组合,通过这种枚举的方式得到全部可能的序列。但是,很多时候并没有预先指定序列的长度。比如,机器翻译中目标语句子的长度是无法预先知道的。那么怎样判断一个序列何时完成了生成过程呢?回顾人类书写文字的过程可以发现,句子的生成首先从一片空白开始,然后从左到右逐词生成,除了第一个单词,所有单词的生成都依赖于前面已经生成的单词。为了方便计算机实现,通常定义单词序列从一个特殊的符号<sos>后开始生成。同样地,一个单词序列的结束也用一个特殊的符号<eos>来表示。
\parinterval 对于一个序列$<$sos$>$\ \ I\ \ agree\ \ $<$eos$>$,图\ref{fig:2-13}展示语言模型视角该序列的生成过程。该过程通过在序列的末尾不断附加词表中的单词来逐渐扩展序列,直到这段序列结束。这种生成单词序列的过程被称作{\small\bfnew{自左向右生成}}\index{自左向右生成}(Left-To-Right Generation)\index{Left-To-Right Generation}
......@@ -831,7 +831,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\parinterval 此时上述生成策略虽然可以满足完备性和最优性,但其仍然算不上是优秀的生成策略,因为这两种算法在时间复杂度和空间复杂度上的表现很差,如表\ref{tab:2-3}所示。其中$|V|$为词表大小,$m$为序列长度,$\ast$表示“当且仅当在单词序列的最大长度被确定”。值得注意的是,在之前的遍历过程中,除了在序列开头一定会挑选<sos>之外,其他位置每次可挑选的单词并不只有词表中的单词,还有结束符号<eos>,因此实际上生成过程中每个位置的单词候选数量为$|V|+1$
\parinterval 那么是否能改进枚举策略使得它更高效呢?答案是肯定的。首先从图\ref{fig:2-14}可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树\footnote[2]{解空间树是搜索路径的树型表示,它包含了搜索过程中可生成的全部序列。该树的根节点恒为$<$sos$>$,代表序列均从$<$sos$>$开始。该树结构中非叶子节点的兄弟节点有$|V|$个,由词表和结束符号$<$eos$>$构成。}中从根节点<sos>开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词$i$也就是在上图选择$w_i$一列的一个节点,语言模型就可以为当前的树节点$w_i$给出一个分值,即$P(w_i | w_1 w_2 \ldots w_{i-1})$
\parinterval 那么是否能改进枚举策略使得它更高效呢?答案是肯定的。从图\ref{fig:2-14}可以看到,对于一个最大长度为4的序列的搜索过程,生成某个单词序列的过程实际上就是访问解空间树\footnote[2]{解空间树是搜索路径的树型表示,它包含了搜索过程中可生成的全部序列。该树的根节点恒为$<$sos$>$,代表序列均从$<$sos$>$开始。该树结构中非叶子节点的兄弟节点有$|V|$个,由词表和结束符号$<$eos$>$构成。}中从根节点<sos>开始一直到叶子节点<eos>结束的某条路径,而这条的路径上节点按顺序组成了一段独特的单词序列。此时对所有可能单词序列的枚举就变成了对解空间树的遍历。并且枚举的过程与语言模型打分的过程也是一致的,每枚举一个词$i$也就是在上图选择$w_i$一列的一个节点,语言模型就可以为当前的树节点$w_i$给出一个分值,即$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$
%----------------------------------------------
\begin{figure}[htp]
......@@ -842,10 +842,10 @@ w^{'} = \argmax_{w \in \chi}P(w)
\end{figure}
%-------------------------------------------
\parinterval 从这个角度来看,可以很自然地引入语言模型打分来对枚举的解空间树的遍历进行增广:在解空间树中引入节点的权重\ \dash\ 将当前节点$i$的得分重设为语言模型打分$\log P(w_i | w_1 w_2 \ldots w_{i-1})$,其中$w_1 w_2 \ldots w_{i-1}$是该节点的全部祖先。与先前不同的是,由于在使用语言模型打分时,词的概率通常小于1,因此句子很长时概率会非常小,容易造成浮点误差,所以这里使用概率的对数形式$\log P(w_i | w_1 w_2 \ldots w_{i-1})$代替$P(w_i | w_1 w_2 \ldots w_{i-1})$。此时对于图中一条包含<eos>的完整序列来说,它的最终得分为$\log P(w_1 w_2 \ldots w_m) = \sum_{i=1}^{m}\log P(w_i | w_1 w_2 \ldots w_{i-1})$。如图\ref{fig:2-15}所示,可知红线所示单词序列“<sos>\ I\ agree\ <eos>”的得分为:
\parinterval 从这个角度来看,可以很自然地引入语言模型打分来对枚举的解空间树的遍历进行增广:在解空间树中引入节点的权重\ \dash\ 将当前节点$i$的得分重设为语言模型打分$\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$,其中$w_1 w_2 \ldots w_{i-1}$是该节点的全部祖先。与先前不同的是,由于在使用语言模型打分时,词的概率通常小于1,因此句子很长时概率会非常小,容易造成浮点误差,所以这里使用概率的对数形式$\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$代替$\funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$。此时对于图中一条包含<eos>的完整序列来说,它的最终得分为$\log \funp{P}(w_1 w_2 \ldots w_m) = \sum_{i=1}^{m}\log \funp{P}(w_i | w_1 w_2 \ldots w_{i-1})$。如图\ref{fig:2-15}所示,可知红线所示单词序列“<sos>\ I\ agree\ <eos>”的得分为:
\begin{eqnarray}
&&\textrm{score(<sos>\ I\ agree\ <eos>)} \nonumber \\
& = & \log P(\textrm{I} | \textrm{<sos>}) + \log P(\textrm{agree} | \textrm{<sos>\ I}) + \log P(\textrm{<sos>}| \textrm{<sos>\ I\ agree}) \nonumber \\
& = & \log \funp{P}(\textrm{I} | \textrm{<sos>}) + \log \funp{P}(\textrm{agree} | \textrm{<sos>\ I}) + \log \funp{P}(\textrm{<sos>}| \textrm{<sos>\ I\ agree}) \nonumber \\
& = & -0.5-0.2-0.8 \nonumber \\
& = & -1.5
\label{eq:2-41}
......@@ -860,7 +860,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\end{figure}
%-------------------------------------------
\parinterval 现在已经把枚举过程跟语言模型打分过程统一起来,变成解空间树的遍历问题。而单词序列生成的问题即可定义为这样一个搜索问题:寻找所有单词序列组成的解空间树中权重总和最大的一条路径。前面提到的两种枚举的实现方式就是经典搜索里{\small\bfnew{深度优先搜索}}\index{深度优先搜索}(Depth-First Search)\index{Depth-First Search}{\small\bfnew{宽度优先搜索}}\index{宽度优先搜索}(Breadth-First Search)\index{Breadth-First Search}的雏形。在后面的内容中可以看到,从遍历解空间树的角度出发,可以对原始的枚举策略的效率进行优化。
\parinterval 现在已经把枚举过程跟语言模型打分过程统一起来,变成解空间树的遍历问题。而单词序列生成的问题即可定义为这样一个搜索问题:寻找所有单词序列组成的解空间树中权重总和最大的一条路径。前面提到的两种枚举的实现方式就是经典搜索里{\small\bfnew{深度优先搜索}}\index{深度优先搜索}(Depth-first Search)\index{Depth-first Search}{\small\bfnew{宽度优先搜索}}\index{宽度优先搜索}(Breadth-first Search)\index{Breadth-first Search}的雏形。在后面的内容中可以看到,从遍历解空间树的角度出发,可以对原始的枚举策略的效率进行优化。
%----------------------------------------------------------------------------------------
% NEW SUB-SECTION
......@@ -887,7 +887,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\end{figure}
%-------------------------------------------
\parinterval 类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用节点的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图\ref{fig:2-17}所示,由于“<sos>\ I”在图右侧的5条路径中分数最高,因此下一步将要扩展$w_2$一列“I”节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做{\small\bfnew{一致代价搜索}}\index{一致代价搜索}(Uniform-Cost Search)\index{Uniform-Cost Search}\upcite{russell2003artificial}
\parinterval 类似的思想也可以应用于宽度优先搜索,由于宽度优先搜索每次都选择了所有的单词,因此简单使用节点的权重来选择单词是不可行的。重新回顾宽度优先搜索的过程:它维护了一个未结束单词序列的集合,每次扩展单词序列后根据长度往集合里面加入单词序列。而搜索问题关心的是单词序列的得分而非其长度。因此可以在搜索过程中维护未结束的单词序列集合里每个单词序列的得分,然后优先扩展该集合中得分最高的单词序列,使得扩展过程中未结束的单词序列集合包含的单词序列分数逐渐变高。如图\ref{fig:2-17}所示,由于“<sos>\ I”在图右侧的5条路径中分数最高,因此下一步将要扩展$w_2$一列“I”节点后的全部后继。图中绿色节点表示下一步将要扩展的节点。普通宽度优先搜索中,扩展后生成的单词序列长度相同,但是分数却参差不齐。而改造后的宽度优先搜索则不同,它会优先生成得分较高的单词序列,这种宽度优先搜索也叫做{\small\bfnew{一致代价搜索}}\index{一致代价搜索}(Uniform-cost Search)\index{Uniform-cost Search}\upcite{russell2003artificial}
%----------------------------------------------
\begin{figure}[htp]
......@@ -910,7 +910,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\parinterval 在搜索问题中,一个单词序列的生成可以分为两部分:已生成部分和未生成部分。既然最终目标是使得一个完整的单词序列得分最高,那么关注未生成部分的得分也许能为现有搜索策略的改进提供思路。
\parinterval 但是,问题在于未生成部分来自搜索树中未被搜索过的区域,直接得到其得分并不现实。既然仅依赖于问题本身的信息无法得到未生成部分的得分,那么是否可以通过一些外部信息来估计未生成部分得分$\textrm{h}(w_1 w_2 \ldots w_m)$呢?在前面所提到的剪枝技术中,借助语言模型的特性可以使得搜索变得高效。与其类似,利用语言模型的其他特性也可以实现对未生成部分得分的估计。这个对未生成部分得分的估计通常被称为{\small\bfnew{启发式函数}}\index{启发式函数}(Heuristic Function)\index{Heuristic Function}。在扩展假设过程中,可以优先挑选当前得分$\log P(w_1 w_2 \ldots w_m)$和启发式函数值$\textrm{h}(w_1 w_2 \ldots w_m)$最大的候选进行扩展,从而大大提高搜索的效率。这种基于启发式函数的一致代价搜索通常也被称为$\textrm{A}^{\ast}$搜索或{\small\bfnew{启发式搜索}}\index{启发式搜索}(Heuristically Search)\index{Heuristically Search}\upcite{DBLP:journals/tssc/HartNR68}
\parinterval 但是,问题在于未生成部分来自搜索树中未被搜索过的区域,直接得到其得分并不现实。既然仅依赖于问题本身的信息无法得到未生成部分的得分,那么是否可以通过一些外部信息来估计未生成部分得分$\textrm{h}(w_1 w_2 \ldots w_m)$呢?在前面所提到的剪枝技术中,借助语言模型的特性可以使得搜索变得高效。与其类似,利用语言模型的其他特性也可以实现对未生成部分得分的估计。这个对未生成部分得分的估计通常被称为{\small\bfnew{启发式函数}}\index{启发式函数}(Heuristic Function)\index{Heuristic Function}。在扩展假设过程中,可以优先挑选当前得分$\log \funp{P}(w_1 w_2 \ldots w_m)$和启发式函数值$\textrm{h}(w_1 w_2 \ldots w_m)$最大的候选进行扩展,从而大大提高搜索的效率。这种基于启发式函数的一致代价搜索通常也被称为$\textrm{A}^{\ast}$搜索或{\small\bfnew{启发式搜索}}\index{启发式搜索}(Heuristically Search)\index{Heuristically Search}\upcite{hart1968a}
\parinterval 通常可以把启发式函数看成是计算当前状态跟最优解的距离的一种方法,并把关于最优解的一些性质的猜测放到启发式函数里。比如,在序列生成中,一般认为最优序列应该在某个特定的长度附近,那么就可以把启发式函数定义成该长度与当前单词序列长度的差值。这样,在搜索过程中,启发式函数会引导搜索倾向于先生成当前得分高且序列长度接近预设长度的单词序列。此外除了手工设计启发式函数,还可以借助强化学习的手段,学习关于未来得分的估计\upcite{DBLP:conf/nips/HeLXQ0L17}
......@@ -962,7 +962,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\parinterval 束搜索也有很多的改进版本。比如,在无信息搜索策略中可以使用剪枝技术来提升搜索的效率。而实际上,束搜索本身也是一种剪枝方法。因此有时也把束搜索称作{\small\bfnew{束剪枝}}\index{束剪枝}(Beam Pruning)\index{Beam Pruning}。在这里有很多其它的剪枝策略可供选择,例如可以只保留与当前最佳路径得分相差在$\theta$之内的路径,也就是搜索只保留得分差距在一定范围内的路径,这种方法也被称作{\small\bfnew{直方图剪枝}}\index{直方图剪枝}(Histogram Pruning)\index{Histogram Pruning}
\parinterval 对于语言模型来说,当进行搜索时正在搜索的多个路径中最高得分比当前搜索到的最好的解的得分低之后可以立刻停止搜索,因为此时序列越长语言模型得分$\log P(w_1 w_2 \ldots w_m)$会越低,因此继续扩展这些路径不会产生更好的结果。这个技术通常也被称为{\small\bfnew{最佳停止条件}}\index{最佳停止条件}(Optimal Stopping Criteria)\index{Optimal Stopping Criteria}
\parinterval 对于语言模型来说,当进行搜索时正在搜索的多个路径中最高得分比当前搜索到的最好的解的得分低之后可以立刻停止搜索,因为此时序列越长语言模型得分$\log \funp{P}(w_1 w_2 \ldots w_m)$会越低,因此继续扩展这些路径不会产生更好的结果。这个技术通常也被称为{\small\bfnew{最佳停止条件}}\index{最佳停止条件}(Optimal Stopping Criteria)\index{Optimal Stopping Criteria}
\parinterval 总的来说,虽然局部搜索由于没有遍历完整的解空间,使得这类方法无法保证找到最优解。但是,局部搜索算法大大降低了搜索过程的时间、空间复杂度。因此在语言模型生成和机器翻译的解码过程中常常使用局部搜索算法。在{\chapterseven}{\chapterten}{\chaptereleven}中还将介绍这些算法的具体应用。
......@@ -975,7 +975,7 @@ w^{'} = \argmax_{w \in \chi}P(w)
\parinterval 本章重点介绍了如何对自然语言处理问题进行统计建模,并从数据中自动学习统计模型的参数,最终使用学习到的模型对新的问题进行处理。之后,本章将这种思想应用到语言建模这个自然语言处理任务中,它也和机器翻译有着紧密的联系。通过系统化的建模,可以发现:经过适当的假设和化简,统计模型可以很好的描述复杂的自然语言处理问题。相关概念和方法也会在后续章节的内容中被广泛使用。
\parinterval 由于本章重点介绍如何用统计的思想对自然语言处理任务进行建模,因此并没有对具体的问题展开深入讨论。关于不同语言模型的对比和分析可以进一步参考相关综述\upcite{Joshua2001A,jing2019survey}。此外,有几方面内容,读者可以继续关注:
\parinterval 由于本章重点介绍如何用统计的思想对自然语言处理任务进行建模,因此并没有对具体的问题展开深入讨论。关于不同语言模型的对比和分析可以进一步参考相关综述\upcite{goodman2001a,jing2019survey}。此外,有几方面内容,读者可以继续关注:
\begin{adjustwidth}{1em}{}
\begin{itemize}
......
......@@ -958,19 +958,11 @@
}
@article{huang2015bidirectional,
author = {Zhiheng Huang and
Wei Xu and
Kai Yu},
title = {Bidirectional {LSTM-CRF} Models for Sequence Tagging},
journal = {CoRR},
volume = {abs/1508.01991},
year = {2015},
//url = {http://arxiv.org/abs/1508.01991},
//archivePrefix = {arXiv},
//eprint = {1508.01991},
//timestamp = {Mon, 13 Aug 2018 16:46:46 +0200},
//biburl = {https://dblp.org/rec/journals/corr/HuangXY15.bib},
//bibsource = {dblp computer science bibliography, https://dblp.org}
title={Bidirectional LSTM-CRF Models for Sequence Tagging},
author={Zhiheng {Huang} and Wei {Xu} and Kai {Yu}},
journal={arXiv preprint arXiv:1508.01991},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/1940872118",
year={2015}
}
@inproceedings{kneser1995improved,
author = {Reinhard Kneser and
......@@ -1161,34 +1153,28 @@
}
@book{russell2003artificial,
title="Artificial Intelligence : A Modern Approach",
author="Stuart J. {Russell} and Peter {Norvig}",
title={Artificial Intelligence : A Modern Approach},
author={Stuart J. {Russell} and Peter {Norvig}},
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2122410182",
year="2003"
year={2003}
}
@book{sahni1978fundamentals,
title="Fundamentals of Computer Algorithms",
author="Sartaj {Sahni} and Ellis {Horowitz}",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/1554451661",
year="1978"
}
@article{DBLP:journals/tssc/HartNR68,
author = {Peter E. Hart and
Nils J. Nilsson and
Bertram Raphael},
title = {A Formal Basis for the Heuristic Determination of Minimum Cost Paths},
journal = {{IEEE} Trans. Syst. Sci. Cybern.},
volume = {4},
number = {2},
pages = {100--107},
year = {1968},
//url = {https://doi.org/10.1109/TSSC.1968.300136},
//doi = {10.1109/TSSC.1968.300136},
//timestamp = {Sat, 25 Apr 2020 13:57:19 +0200},
//biburl = {https://dblp.org/rec/journals/tssc/HartNR68.bib},
//bibsource = {dblp computer science bibliography, https://dblp.org}
title={Fundamentals of Computer Algorithms},
author={Sartaj {Sahni} and Ellis {Horowitz}},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/1554451661",
year={1978}
}
@article{hart1968a,
title={A Formal Basis for the Heuristic Determination of Minimum Cost Paths},
author={Peter E. {Hart} and Nils J. {Nilsson} and Bertram {Raphael}},
journal={IEEE Transactions on Systems Science and Cybernetics},
volume={4},
number={2},
pages={100--107},
notes={Sourced from Microsoft Academic - https://academic.microsoft.com/paper/1969483458},
year={1968}
}
@inproceedings{DBLP:conf/nips/HeLXQ0L17,
......@@ -1217,19 +1203,15 @@
//bibsource = {dblp computer science bibliography, https://dblp.org}
}
@article{Joshua2001A,
author={Joshua T. Goodman},
@article{goodman2001a,
title={A bit of progress in language modeling},
journal={Comput. Speech Lang.},
author={Joshua T. {Goodman}},
journal={Computer Speech & Language},
volume={15},
number={4},
pages={403--434},
year={2001},
//url={https://doi.org/10.1006/csla.2001.0174},
//doi={10.1006/csla.2001.0174},
//timestamp={Thu, 20 Feb 2020 11:32:09 +0100},
//biburl={https://dblp.org/rec/journals/csl/Goodman01.bib},
//bibsource = {dblp computer science bibliography, https://dblp.org}
//notes={Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2111305191},
year={2001}
}
@article{jing2019survey,
......@@ -1367,59 +1349,59 @@
@book{lowerre1976the,
title="The HARPY speech recognition system",
author="Bruce T. {Lowerre}",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2137095888",
year="1976"
title={The HARPY speech recognition system},
author={Bruce T. {Lowerre}},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2137095888",
year={1976}
}
@book{bishop1995neural,
title="Neural networks for pattern recognition",
author="Christopher M. {Bishop}",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/1554663460",
year="1995"
title={Neural networks for pattern recognition},
author={Christopher M. {Bishop}},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/1554663460",
year={1995}
}
@article{åström1965optimal,
title="Optimal control of Markov processes with incomplete state information",
author="Karl Johan {Åström}",
journal="Journal of Mathematical Analysis and Applications",
volume="10",
number="1",
pages="174--205",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2011418219",
year="1965"
title={Optimal control of Markov processes with incomplete state information},
author={Karl Johan {Åström}},
journal={Journal of Mathematical Analysis and Applications},
volume={10},
number={1},
pages={174--205},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2011418219",
year={1965}
}
@article{korf1990real,
title="Real-time heuristic search",
author="Richard E. {Korf}",
journal="Artificial Intelligence",
volume="42",
number="2",
pages="189--211",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2021061679",
year="1990"
title={Real-time heuristic search},
author={Richard E. {Korf}},
journal={Artificial Intelligence},
volume={42},
number={2},
pages={189--211},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2021061679",
year={1990}
}
@article{ney1994on,
title="On structuring probabilistic dependences in stochastic language modelling",
author="Hermann {Ney} and Ute {Essen} and Reinhard {Kneser}",
journal="Computer Speech \& Language",
volume="8",
number="1",
pages="1--38",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2075201173",
year="1994"
title={On structuring probabilistic dependences in stochastic language modelling},
author={Hermann {Ney} and Ute {Essen} and Reinhard {Kneser}},
journal={Computer Speech \& Language},
volume={8},
number={1},
pages={1--38},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2075201173",
year={1994}
}
@inproceedings{ney1991on,
title="On smoothing techniques for bigram-based natural language modelling",
author="H. {Ney} and U. {Essen}",
booktitle="[Proceedings] ICASSP 91: 1991 International Conference on Acoustics, Speech, and Signal Processing",
pages="825--828",
notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2020749563",
year="1991"
title={On smoothing techniques for bigram-based natural language modelling},
author={H. {Ney} and U. {Essen}},
booktitle={[Proceedings] ICASSP 91: 1991 International Conference on Acoustics, Speech, and Signal Processing},
pages={825--828},
//notes="Sourced from Microsoft Academic - https://academic.microsoft.com/paper/2020749563",
year={1991}
}
%%%%% chapter 2------------------------------------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论