学习LSTM最好的教程之一莫过是deep learning tutorial
见 http://deeplearning.net/tutorial/lstm.html
这里的Sentiment analysis实际上和 Topic classification有点像
首先学习输入数据格式,把整个流程跑一遍,数据还是非常简单的,是从IDBM上下载的电影评论数据,50000条有标注的数据,正负各一半,5000条无标注的数据,每个电影不超过30个评论(防止某个电影下的表达较多重复)。
实际上电影评分1-10,映射到正(>=7)负(<=4)两类。
训练时,取前5000常见词语,除去50个词语(可以视为“停用词”,实际上并不是“停用词”)
把lstm.py和idbm.py放在一起,同时把下载的idbm.pkl放在同一目录下,运行idbm.py可以读入数据。
(一开始不知道从哪里下了个idbm.pkl竟然只有训练集,没有测试集,从头到尾把代码检查了一遍,折腾了一个晚上加一个上午,检查tokenizer.perl等问题...idbm.pkl大小为31.67M,下载地址
http://www.iro.umontreal.ca/~lisa/deep/data/imdb.pkl)
idbm.pkl数据将每个电影评论使用VSM模型,也就是Libsvm常见的one-hot词袋模型来表达,简单说就是将词语使用标号来表达。
如:
[12, 13, 9, 11, 12, 13, 9, 11, 33, 75, 98, 1484, 10372, 184, 619, 49, 10444, 76236, 425, 256, 5, 33, 75, 35, 1484, 10372, 516, 8, 953, 1118, 665, 29, 24, 45, 2400, 1188, 28, 43, 95, 683, 78, 407, 44, 2, 188, 1428, 275, 16700, 60626, 37, 359, 110, 40, 12, 13, 9, 11, 12, 13, 9, 11, 5, 17672, 41, 18, 148, 3, 41, 1484, 136, 700, 54, 102, 399, 3, 462, 3, 24193, 5, 8917, 194, 1679, 35, 4, 5, 43, 196, 197, 1669, 8, 383, 194, 54, 102, 96, 18, 10, 4, 12, 13, 9, 11, 12, 13, 9, 11, 57, 30, 140, 37, 2, 589, 8, 79, 17, 25, 3, 104, 32, 4, 89, 3, 896, 30, 2678, 47, 6790, 53, 2, 2812, 35, 17, 25, 53, 35981, 5884, 221, 20883, 4, 12, 13, 9, 11, 12, 13, 9, 11, 17, 25, 502, 8, 91, 6, 1483, 3, 16841, 234, 645, 26, 75, 2843, 15, 267, 30, 5938, 5, 6382, 14, 640, 532, 4]
0
表示个电影评论,词语编号12,13, 9翻译过来就是:
was as i that was as i that who any delivers...
0代表为类别标号。
idbm将train set中的10%作为valid set验证数据集.
运行lstm.py既可以跑起来