利用 N-gram 语言模型构建的输入法引擎,在手机端运行时,存在着如下问题:
不能充分利用词序列信息进行预测:受制于手机有限的 CPU 和内存资源,N-gram 中的 N 通常都不能太大,基本上 N 为 3 已经是极限。这意味着只能根据最近的 1 到 2 个词来进行预测,会丢失大量的关键信息;
不能准确预测语料数据集中未出现的单词序列。例如,如果在语料数据中 出现过「go to work」,而没有出现过「go to school」。即使用户输入「A parents guide to go to s」,引擎也不能准确地将「school」排在候选区靠前的位置。
上述问题,利用深度神经网络技术可以很好地解决。
为什么要转向深度神经网络引擎
深度神经网络 (Neep Neural Networks, DNN) 是一种具备至少一个隐层的神经网络,通过调整神经元的连接方式以及网络的层数,可以提供任意复杂度的非线性模型建模能力。基于强大的非线性建模能力,深度神经网络已经在图像识别、语音识别、机器翻译等领域取得了突破性的进展,并正在自然语言处理、内容推荐等领域得到广泛的应用。
典型的深度神经网络技术有卷积神经网络 (Convolutional Neural Networks, CNN) 、递归神经网络 (Recurrent Neural Network,RNN) 、生成对抗网络 (Generative Adversarial Nets, GAN) 等,分别适用于不同的应用场景。其中,RNN(如图 1 所示)特别适合序列到序列的预测场景。

图1:RNN网络结构
传统的神经网络中层与层之间是全连接的,但层间的神经元是没有连接的(其实是假设各个数据之间是独立的),这种结构不善于处理序列化预测的问题。在输入法引擎的场景中,下一个词往往与前面的词序列是密切相关的。RNN 通过添加跨越时序的自连接隐藏层,对序列关系进行建模;也就是说,前一个状态隐藏层的反馈,不仅仅作为本状态的输出,而且还进入下一状态隐层中作为输入,这样的网络可以打破独立假设,得以刻画序列相关性。
RNN 的优点是可以考虑足够长的输入词序列信息,每一个输入词状态的信息可以作为下一个状态的输入发挥作用,但这些信息不一定都是有用的,需要过滤以准确使用。为了实现这个目标,我们使用长短期记忆网络 (Long-Short Memory Networks, LSTM) 对数据进行建模,以实现更准确的预测。
LSTM(图 2)是一种特殊的 RNN,能够有选择性地学习长期的依赖关系。图像识别 神经网络 LSTM 也具有 RNN 链结构,但具有不同的网络结构。在 LSTM 中,每个单元都有三个门(输入门,输出门和遗忘门)来控制哪部分信息应该被考虑进行预测。利用 LSTM,不仅可以考虑更长的输入序列,并且可以利用三种门的参数训练来自动学习筛选出真正对于预测有价值的输入词,而非同等对待整个序列中所有的词。

图 2 LSTM 网络结构
并且,可以在 LSTM 的网络结构中添加嵌入层 (Word Embedding Layer) 来将词与词的语义关系加入到训练和预测过程中。通过 Word Embedding,虽然在语料数据中没有出现过「go to school」,但是因为「go to work」出现在语料库中,而通过 Word Embedding 可以发现「work」和「school」具有强烈的语义关联;这样,当用户输入「A parents guide to go to s」时,引擎会根据「work」和「school」的语义关联,以及 LSTM 中学习到的「parents」同「school」间存在的预测关系,而准确地向用户推荐「school」,而非「swimming」。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-81276-3.html
撞啊
告诉美军这里不是你想来就来
太帅~~~~
看不出来吗