book icon indicating copy to clipboard operation
book copied to clipboard

06.understand_sentiment情感分析中的问题

Open freefreesea opened this issue 5 years ago • 12 comments

def inference_program(word_dict): data = fluid.layers.data( name="words", shape=[1], dtype="int64", lod_level=1)

dict_dim = len(word_dict)
pred = dynamic_rnn_lstm(data, dict_dim, CLASS_DIM, EMB_DIM, LSTM_SIZE)
return pred

请问这个创建的data层为什么shape是[1]呢? 我看了之前的实例,这个data中的shape都代表的是输入数据的维度

freefreesea avatar Sep 06 '19 08:09 freefreesea

可以看看官方文档: https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/api_cn/layers_cn/io_cn.html#data

seiriosPlus avatar Sep 06 '19 09:09 seiriosPlus

我的意思是 这个IMDB的数据读进来,明明维度是文字长度,并不是1,为什么可以这么表示呢?我查了imdb的reader,读进来的数据明明是128维的,为什么不用[128]呢?

freefreesea avatar Sep 09 '19 07:09 freefreesea

是因为lstm网络的需要还是什么,现在卡在这里,很着急

freefreesea avatar Sep 09 '19 07:09 freefreesea

这个实例是 引用了imdb的数据集,利用RNN,LSTM模型进行了情感的分析,进行分类。但是在这一行,这个shape=1,文档并没有给出解释

freefreesea avatar Sep 09 '19 07:09 freefreesea

这行代码是预测相关的输入代码, 可以结合后2行来一起看:

data = fluid.layers.data(
        name="words", shape=[1], dtype="int64", lod_level=1)
emb = fluid.layers.embedding(
        input=data, size=[input_dim, emb_dim], is_sparse=True)

通过变长的词Id得到低维映射的词向量, 既输入是 词的 ID序列。

seiriosPlus avatar Sep 09 '19 07:09 seiriosPlus

([5146, 43, 71, 6, 1092, 14, 0, 878, 130, 151, 5146, 18, 281, 747, 0, 5146, 3, 5146, 2165, 37, 5146, 46, 5, 71, 4089, 377, 162, 46, 5, 32, 1287, 300, 35, 203, 2136, 565, 14, 2, 253, 26, 146, 61, 372, 1, 615, 5146, 5, 30, 0, 50, 3290, 6, 2148, 14, 0, 5146, 11, 17, 451, 24, 4, 127, 10, 0, 878, 130, 43, 2, 50, 5146, 751, 5146, 5, 2, 221, 3727, 6, 9, 1167, 373, 9, 5, 5146, 7, 5, 1343, 13, 2, 5146, 1, 250, 7, 98, 4270, 56, 2316, 0, 928, 11, 11, 9, 16, 5, 5146, 5146, 6, 50, 69, 27, 280, 27, 108, 1045, 0, 2633, 4177, 3180, 17, 1675, 1, 2571], 0)

freefreesea avatar Sep 09 '19 07:09 freefreesea

这是从reader中读取的第一组数据,id序列是指什么意思,为什么是1,还是没听懂- -

freefreesea avatar Sep 09 '19 07:09 freefreesea

我理解中转化成id序列之后,一个样本的shape不应该是这些id的数量嘛

freefreesea avatar Sep 09 '19 07:09 freefreesea

不知道哪理解错了,求大佬指点啊

freefreesea avatar Sep 09 '19 07:09 freefreesea

shape=1 表示, 输入的纬度就是1维的, lod_level=1 表示, 这是一个1维的变长序列。

将这个1维的变长序列输入到 embedding layer后得到这些id对应的 size=[batch_size, emb_dim]的词向量。

seiriosPlus avatar Sep 09 '19 07:09 seiriosPlus

明白了,谢谢大佬

freefreesea avatar Sep 09 '19 07:09 freefreesea

您好,还想请教您一个问题 我基于这个代码改了一个reader,读入了我本地的数据,数据是40万条,在test阶段会报错 Assertion label >= 0 && label < feature_size_ failed (The label is out of the range. 5 但是我假如把40万条数据中的前100条数据拿出来,就不会报错

freefreesea avatar Sep 09 '19 08:09 freefreesea