using keras learn Neural networks (3)

27 篇文章 0 订阅
15 篇文章 1 订阅

        语言模型是现代NLP技术的基础,所有基于统计的NLP算法都是以语言模型作为基础来设计的。什么是语言模型?简单地说,语言模型就是用来计算一个句子的概率的模型,即P(W1,W2,...Wk)。利用语言模型,可以确定哪个词序列的可能性更大,或者给定若干个词,可以预测下一个最可能出现的词语。 训练一个能覆盖很多语料的语言模型有些难度,以下通过一个简单的RNN的demo来说明它的奇妙。

       基于RNN的语言模型与传统的语言模型还是有所不同。

一、 传统的语言模型:

  • 每个词只和它前面出现的词有关
  • 每个词只和它前面出现的个词有关,
  • 将词序列的联合概率转化为每个词条件概率的连乘形式。
  • 每个词条件概率的计算通过n-gram的形式。

二、基于RNN的语言模型

  • 利用RNN本身输入是序列的特点,在隐含层神经元之上加了全连接层、Softmax层,得到输出词的概率分布
# 导入包
from keras.models import Sequential
from keras.layers.recurrent import SimpleRNN
from keras.layers.embeddings import Embedding
from keras.preprocessing.sequence import pad_sequences
from keras.utils import to_categorical
# 构造词表
vocab_dict = {"哈士奇": 1, "是": 2, "一": 3, "条": 4, "狗": 5, "萨摩耶": 6, 
              "头": 7, "辛巴": 8, "狮子": 9, "布偶": 10, "英短": 11, "只": 12, "猫": 13, "UNK": 0}
r_vocab_dict = {v: k for k, v in vocab_dict.items()}
# 语句编码
input_x = [[1, 2, 3, 4],
           [6, 2, 3, 4],
           [8, 2, 3, 7],
           [9, 2, 3, 12],
           [11, 2, 3, 12]]
input_y = [[5], [5], [9], [13], [13]]
# 构造训练集
x_train = pad_sequences(input_x, maxlen=10)
y_train = to_categorical(input_y, num_classes=14)
# 建立模型
model = Sequential()
model.add(Embedding(14, 10, input_length=10))
model.add(SimpleRNN(14, return_sequences=False))
model.summary()
# 模型编译
model.compile(loss="mse", optimizer="adam", metrics=["accuracy"])
# 模型训练
model.fit(x_train, y_train, epochs=100, batch_size=1, verbose=0)
# 模型预测
# Question_1
"".join([r_vocab_dict[x] for x in input_x[0]])
# Answer_1
y_pred = model.predict_classes(x_train)
"".join(r_vocab_dict[y_pred[0]])

test:

Q:'哈士奇是一条'

A:  '狗'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值