全然解決にならないので、すみません。
機械学習も初心者で、もはやRNNなんて知らない子だったので...
Google Colaboratoryを駆使して、試してみました。
とりあえず、こちらのページが紹介記事ですね。
https://www.pytry3g.com/entry/2018/03/16/203414
get_dataset.py
まずデータセットの生成から試してみましたが、テキストファイルが生成されるきりで中身が入っていませんでした。
適当にしか確認していませんが、get_dataset.py
のall_p_tag
がall_p_tag = re.findall("<p>.*</p>", html)
をやったあとでも空で、そのためその下のforループが回らず、空のリストをファイルに出力したからみたいです。
Python
1tagger = MeCab.Tagger("-Owakati")
2link = "https://ja.wikipedia.org/wiki/"
3fname_list = ["nobunaga", "hideyoshi", "ieyasu"]
4word_list = ["織田信長", "豊臣秀吉", "徳川家康"]
5for fname, word in zip(fname_list, word_list):
6 with req.urlopen(link + par.quote_plus(word)) as response:
7 html = response.read().decode('utf-8')
8 # <p>タグを取得
9 all_p_tag = re.findall("<p>.*</p>", html)
10 temp = []
11 for p in all_p_tag:
12 # 半角文字を削除
13 p = re.sub("[\s!-~]*", "", p)
14 p = p.split("。")
15 # 分かち書き
16 morphemes = get_morphemes(p)
17 if morphemes == -1:
18 continue
19 temp = temp + morphemes
20 write2file(fname + ".txt", temp)
21
train.py
次に、train.py
の方も確認しました。
word2id, id2sent, dataset = U.get_dataset()
の部分ですが、以下の関数を見ると、word2id
には空のリストが入るみたいです。というより、確認したところ空のリストが入っていました。
def get_dataset():
fname_list = ["nobunaga", "hideyoshi", "ieyasu"]
dataset = []
# make dictionary
for fname in fname_list:
sentences = read_file(fname)
sentences = select_sentences(sentences)
make_vocab(sentences)
dataset = dataset + sentences
id2sent = sent2id(dataset)
return word2id, id2sent, dataset
word2id = {}
次にこの部分を見ると、n_vocab
には0が入ります。
よって、model = RNN(n_vocab, embedding_dim, hidden_dim)
はmodel = RNN(0, 128, 128)
となります。
n_epochs = 1000
n_vocab = len(word2id)
embedding_dim = 128
hidden_dim = 128
learning_rate = 0.01
model = RNN(n_vocab, embedding_dim, hidden_dim)
RNNのコンストラクタを見ると、self.decoder = nn.Linear(hidden_dim, n_vocab)
でn_vocab
を使っています。そうすると、`nn.Linear{の出力サイズが0になって、これはおかしいと思います。
def __init__(self, n_vocab, embedding_dim, hidden_dim):
super(RNN, self).__init__()
self.encoder = nn.Embedding(n_vocab, embedding_dim)
self.gru = nn.GRU(embedding_dim, hidden_dim)
self.decoder = nn.Linear(hidden_dim, n_vocab)
self.embedding_dim = embedding_dim
self.num_layers = 1
self.dropout = nn.Dropout(0.1)
self.init_hidden()
結局これしかわかりませんでした。
私がなんかおかしいと思ったのは2箇所ですが、それがおかしいのかもわかりません。
結局解決していない回答ですみません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/18 09:42
2018/09/18 21:28