diff --git a/language_model/README.md b/language_model/README.md index 9fdbb0a4a4a0be23f756fb1266be42b27c4e0a36..75c3417ef2308acb15641f570d1c63f9f1366299 100644 --- a/language_model/README.md +++ b/language_model/README.md @@ -1,7 +1,7 @@ # 语言模型 ## 简介 -语言模型即 Language Model,简称LM,它是一个概率分布模型,简单来说,就是用来计算一个句子的概率的模型。利用它可以确定哪个词序列的可能性更大,或者给定若干个词,可以预测下一个最可能出现的词语。它是自然语言处理领域的一个重要的基础模型。 +语言模型即 Language Model,简称LM。它是一个概率分布模型,简单来说,就是用来计算一个句子的概率的模型。利用它可以确定哪个词序列的可能性更大,或者给定若干个词,可以预测下一个最可能出现的词。语言模型是自然语言处理领域里一个重要的基础模型。 ## 应用场景 **语言模型被应用在很多领域**,如: @@ -9,7 +9,7 @@ * **自动写作**:语言模型可以根据上文生成下一个词,递归下去可以生成整个句子、段落、篇章。 * **QA**:语言模型可以根据Question生成Answer。 * **机器翻译**:当前主流的机器翻译模型大多基于Encoder-Decoder模式,其中Decoder就是一个语言模型,用来生成目标语言。 -* **拼写检查**:语言模型可以计算出词语序列的概率,一般在拼写错误处序列的概率会骤减,可以用来识别拼写错误并提供改正候选集。 +* **拼写检查**:语言模型可以计算出词序列的概率,一般在拼写错误处序列的概率会骤减,可以用来识别拼写错误并提供改正候选集。 * **词性标注、句法分析、语音识别......** ## 关于本例 @@ -36,15 +36,9 @@ Language Model 常见的实现方式有 N-Gram、RNN、seq2seq。本例中实现 ## RNN 语言模型 ### 简介 -RNN是一个序列模型,基本思路是:在时刻t,将前一时刻t-1的隐藏层输出和t时刻的词向量一起输入到隐藏层从而得到时刻t的特征表示,然后用这个特征表示得到t时刻的预测输出,如此在时间维上递归下去,如下图所示: +RNN是一个序列模型,基本思路是:在时刻t,将前一时刻t-1的隐藏层输出和t时刻的词向量一起输入到隐藏层从而得到时刻t的特征表示,然后用这个特征表示得到t时刻的预测输出,如此在时间维上递归下去。可以看出RNN善于使用上文信息、历史知识,具有“记忆”功能。理论上RNN能实现“长依赖”(即利用很久之前的知识),但在实际应用中发现效果并不理想,于是出现了很多RNN的变种,如常用的LSTM和GRU,它们对传统RNN的cell进行了改进,弥补了传统RNN的不足,本例中即使用了LSTM、GRU。下图是RNN(广义上包含了LSTM、GRU等)语言模型“循环”思想的示意图: -

- -可以看出RNN善于使用上文信息、历史知识,具有“记忆”功能。理论上RNN能实现“长依赖”(即利用很久之前的知识),但在实际应用中发现效果并不理想,于是出现了很多RNN的变种,如常用的LSTM和GRU,它们对传统RNN的cell进行了改进,弥补了RNN的不足,下图是LSTM的示意图: - -

- -本例中即使用了LSTM、GRU。 +

### 模型实现 @@ -60,7 +54,7 @@ RNN是一个序列模型,基本思路是:在时刻t,将前一时刻t-1的 * 准备输入数据:建立并保存词典、构建train和test数据的reader。 * 初始化模型:包括模型的结构、参数。 * 构建训练器:demo中使用的是Adam优化算法。 - * 定义回调函数:构建`event_handler`来跟踪训练过程中loss的变化,并在每轮时结束保存模型的参数。 + * 定义回调函数:构建`event_handler`来跟踪训练过程中loss的变化,并在每轮训练结束时保存模型的参数。 * 训练:使用trainer训练模型。 * **生成文本**:`infer.py`中的`main`方法实现了文本的生成,实现流程如下: @@ -73,7 +67,9 @@ RNN是一个序列模型,基本思路是:在时刻t,将前一时刻t-1的 ## N-Gram 语言模型 ### 简介 -N-Gram模型也称为N-1阶马尔科夫模型,它有一个有限历史假设:当前词的出现概率仅仅与前面N-1个词相关。一般采用最大似然估计(Maximum Likelihood Estimation,MLE)的方法对模型的参数进行估计。当N取1、2、3时,N-Gram模型分别称为unigram、bigram和trigram语言模型。一般情况下,N越大、训练语料的规模越大,参数估计的结果越可靠,但由于模型较简单、表达能力不强以及数据稀疏等问题。一般情况下用N-Gram实现的语言模型不如RNN、seq2seq效果好。 +N-Gram模型也称为N-1阶马尔科夫模型,它有一个有限历史假设:当前词的出现概率仅仅与前面N-1个词相关。一般采用最大似然估计(Maximum Likelihood Estimation,MLE)方法对模型的参数进行估计。当N取1、2、3时,N-Gram模型分别称为unigram、bigram和trigram语言模型。一般情况下,N越大、训练语料的规模越大,参数估计的结果越可靠,但由于模型较简单、表达能力不强以及数据稀疏等问题。一般情况下用N-Gram实现的语言模型不如RNN、seq2seq效果好。下图是基于神经网络的N-Gram语言模型结构示意图: + +

### 模型实现 @@ -182,7 +178,7 @@ N-Gram模型也称为N-1阶马尔科夫模型,它有一个有限历史假设 beam_size = 5 # beam_width, the number of the prediction sentence for each prefix ``` - 其中,`input_file`中保存的是带生成的文本前缀,utf-8编码,每个前缀占一行,形如: + 其中,`input_file`中保存的是待生成的文本前缀,utf-8编码,每个前缀占一行,形如: ```text 我 diff --git a/language_model/images/lstm.png b/language_model/images/lstm.png deleted file mode 100644 index 123807fd4027f5b4bf7d51427b5124557a80359e..0000000000000000000000000000000000000000 Binary files a/language_model/images/lstm.png and /dev/null differ diff --git a/language_model/images/ps.png b/language_model/images/ps.png deleted file mode 100644 index 3c80fcf5906d42efecd0148e37bd430364463b45..0000000000000000000000000000000000000000 Binary files a/language_model/images/ps.png and /dev/null differ diff --git a/language_model/images/ps2.png b/language_model/images/ps2.png deleted file mode 100644 index b4b01f9a0d778f341fdeaf0f3e3d018f908f08b3..0000000000000000000000000000000000000000 Binary files a/language_model/images/ps2.png and /dev/null differ diff --git a/language_model/images/rnn_str.png b/language_model/images/rnn_str.png deleted file mode 100644 index aa7d8d107d183285ef4758cfbca98c0ff1bddc65..0000000000000000000000000000000000000000 Binary files a/language_model/images/rnn_str.png and /dev/null differ diff --git a/language_model/images/s.png b/language_model/images/s.png deleted file mode 100644 index a110af606492569b0b0c0c27db7475ba44d1380d..0000000000000000000000000000000000000000 Binary files a/language_model/images/s.png and /dev/null differ