如何建立专门领域的语言模型?

理解了这个自然语言模型怎么用RNN来建立以后,建立一个专门的领域语言模型那就非常简单了,其实就是需要把这个领域特有的大量的语料数据放到训练里面来,最后出来的就是这个领域所特有的语言模型。以会计家园和软件的服务社区为基础,利用上面几十万个问题和答案,在去掉敏感数据的情况下,训练出适合于在财务领域使用的语言模型。

举例说明,报销差旅费,这是在会计领域经常使用的语言,比如“报销XX费”。经过训练的语言模型会有这样一个行为表现,当出现“报”的时候,它预测下面可能就会出现“销”,也就是按照时间序列,它可以把报销差旅费,一个一个预测出来。

另一个例子就是将拼音转化为专门领域的汉字,比如这样几个拼音的输入,借、备、用、金,这是财务领域非常专用的说法,假如说我们用通用的语音识别,很有可能会识别成“戒备用尽”。但通过专门的训练数据训练出来的语言模型,就不会出这样的结果,而是会出来“借备用金”这样一个结果。这就达到了我们实现一个财务领域专用的语言模型的目的。

 

由RNN建立语言模型效果

最后我们来看一下用RNN来建立语言模型的效果。评价一个语言模型可以用困惑度来衡量,不同语言模型的表现是不一样的,比如说用单个汉字去预测下一个汉字这种方式,它的困惑度非常高,用两个字就来预测下一个字,这个困惑度会大大下降,用三个字可以达到大概50左右。

做分词以后,用前一个词预测下一个词,这个困惑度也是比较高的,是129。先做分词,然后用前面的两个汉语词去预测下一个汉语词,这个困惑度达到四十三点几。用RNN语言模型只用单个汉字来预测的话,这个困惑度也达到36。困惑度人类的极限大约是10到20之间,所以RNN的语言模型已经非常好。根据谷歌的研究,他们最高的达到了30左右,也就是说RNN这种语言模型已经非常接近人类的自然语言,很有可能在接下来的一两年内我们就会看到自然语言处理的重大突破,就是机器识别的这种自然语言能力有可能会达到人类相当的程度。


Encoder-Decoder深度学习框架

下面介绍一下用到的另外一项技术就是Encoder-Decoder深度学习框架,这种框架是把不同的模型组合在一起,来达到最终目的的一种方法。Encoder(编码器)接受一个序列的输入,然后把它编码成为一个中间的语义编码,这种语义编码有可能是显式的编码,比如说在翻译系统中用到的词向量,也可能是保留在Encoder的最后一层隐藏层的状态,把这个中间语义编码输入到Decoder(解码器)的部分,然后由Decoder来完成最终的输出。

 

Encoder-Decoder框架应用:语言翻译

这是一个具体Encoder-Decoder模型的结构,我们看到Encoder部分接收一系列的输入,比如说是一系列的单词,当输入完成以后,它的最终状态会保留在Hn最后一个隐藏层,从这里输出到Decoder,作为Decoder解码器的输入,然后由Decoder完成最终的输出。

来看一个具体例子,就是用机器来做翻译,Encoder把原始的输入编码成为一个词向量输出到Decoder,比如英文的“Iam hungry”,它会编码成为三个词向量,一个代表我,一个代表现在是,或者是在这种状态,一个是饿这样的一个词,这几个词向量映射到中文相应的词向量,由Decoder把中文的词向量通过中文的语言模型去选择输出最适合的中文表达方式,英文的“I am hungry”,翻译出来结果就是“我饿了”,这就是一个Encoder-Decoder在机器翻译里面应用的实例。Encoder-Decoder框架也可以用在聊天机器人这样的场景,Encoder会把人的语言做编码,比如一个问候,Howare you?你好吗?编码以后输入给Decoder,Decoder就根据上下文的聊天场景来做应答,比如现在是一个问题,问候,你好吗?那么它会给出最适合的答案,Iam fine,我很好。

 

Encoder-Decoder框架应用:图片描述

这是Encoder-Decoder框架另外一个应用,就是图片描述。首先通过图象识别正常的CNN,把图片里所有侯选信息识别出来,然后把这些信息输出到生成语言的一个RNN里头,最后得到对图片的自然语言的描述。

这种框架也可以用来做一段视频的自然语言描述,我们知道CNN可以很好识别一个单幅图象的特征,我们把一段视频变成每一帧通过CNN去提取特征识别出来以后,把这个序列输出到一个循环神经网络RNN里头,最终就可以得出来一个自然语言,用来描述这段视频的内容。

 

Encoder-Decoder框架应用:拼音纠错

回顾一下借备用金这个例子,其实这个是个非常典型的Encoder-Decoder框架,输入是这些拼音,得出汉字。这个模型同样可以用在音字转换和纠错上面,比如说“畅捷通公司”,这些拼音经过输入以后,最后输出的是“畅捷通公司”。怎样用于纠错呢?比如输入一串错误拼音,最常见的错误是把Chang Jie Tong读成Cang Jie Tong,知道这样的规律后,可以在训练数据时,可以把这些错误的输入也作为训练数据的一部分,经过这样的训练以后,错误的拼音输入也可输出成正确结果。