## 単語埋め込みがしたい
機械学習のモデル(LSTMなど)にテキストデータを入力したいのでembedding layerを利用したいです。
データセットは青空文庫の小説を利用しようと思っております。
環境はGoogle Colaboratoryです。
やりたいことは以下の通りです。
0. 単語の分かち書き(ここはできた)
0. ID化
0. Word2Vecの分散表現とIDを辞書にする?
0. embedding層に埋め込む(参考サイト様)
kerasで学習済みword2vecをembedding layerに組み込む方法
0. モデルを作る
0. 文章生成のコードを書く
ソースコード
Python
1import os 2import tensorflow as tf 3import tensorflow_datasets as tfds 4import numpy as np 5import random 6from google.colab import files 7import re 8from janome.tokenizer import Tokenizer
python
1FILE_PATH = "./kaijin.txt" 2text="" 3with open(FILE_PATH, 'r',encoding="utf-8") as f: 4 for line in f: 5 lines = line.split() 6 text += " ".join(lines) 7 text1 = re.sub("《[^》]+》", "", text) # ルビの削除 8 text1 = re.sub("[[^]]+]", "", text1) # 読みの注意の削除 9 text1 = re.sub("[| 「」\n]", "", text1) # | と全角半角スペース、「」と改行の削除 10 11text = text.lower() 12seperator = "。" # 。をセパレータに指定 13text2 = text1.split(seperator) # セパレーターを使って文章をリストに分割する 14text2.pop() # 最後の要素は空の文字列になるので、削除 15text2 = [x+seperator for x in text2] # 文章の最後に。を追加 16print(text2)
python
1example_text = [] 2 3t = Tokenizer() # Tokenizerの初期化。 4for i in text2: 5 for token in t.tokenize(i): 6 example_text.append(token.surface) 7print(example_text)
['その', 'ころ', '、', '東京', '中', 'の', '町', 'という', '町', '、', '家', 'という', '家', 'で', 'は', '、', 'ふたり', '以上', 'の', '人', 'が', '顔', 'を', 'あわせ', 'さえ', 'すれ', 'ば', '、', 'まるで', 'お', '天気', 'の', 'あいさつ', 'でも', 'する', 'よう', 'に', '、', '怪人', '二', '十', '面相', 'の', 'うわさ', 'を', 'し', 'て', 'い', '顔', '、', 'ちがっ', 'た', '姿', 'で', '、', '人', 'の', '前', 'に', 'あらわれる', 'の', 'です', '。']
このように分かち書きまではできました。
python
1tokenizer = Tokenizer(wakati=True) 2tokenized_text = tokenizer.tokenize(example_text) 3vocabulary_list = list(set(tokenized_text)) 4encoder = tfds.deprecated.text.TokenTextEncoder(vocabulary_list, tokenizer=tokenizer) 5encoded_example = encoder.encode(example_text)
AttributeError Traceback (most recent call last) <ipython-input-27-ff6fec81ea0d> in <module>() 4 5 tokenizer = Tokenizer(wakati=True) ----> 6 tokenized_text = tokenizer.tokenize(example_text) 7 vocabulary_list = list(set(tokenized_text)) 8 encoder = tfds.deprecated.text.TokenTextEncoder(vocabulary_list, tokenizer=tokenizer) AttributeError: 'list' object has no attribute 'strip'
TensorFlow Datasetsを使ってテキストの分かち書きとID化をする
こちらのサイト様を参考にしてID化しようとしているのですが、エラーが起きてしまい上手くID化できませんでした。
リスト型からstr型に変換すれば解決できるのでしょうか?
そして図々しいですが、この後どうすれば[単語, 単語ID, W2Vの分散表現]という配列?を作れるのでしょうか。
できればコードを書いて教えていただきたいです。
追記
Python
1tokenizer = Tokenizer(wakati=True) 2tokenized_text = tokenizer.tokenize(','.join(map(str,example_text))) 3vocabulary_list = list(set(tokenized_text)) 4encoder = tfds.deprecated.text.TokenTextEncoder(vocabulary_list, tokenizer=tokenizer) 5encoded_example = encoder.encode(example_text)
TypeError
1<ipython-input-49-771cfc3993de> in <module>() 2 7 vocabulary_list = list(set(tokenized_text)) 3 8 encoder = tfds.deprecated.text.TokenTextEncoder(vocabulary_list, tokenizer=tokenizer) 4----> 9 encoded_example = encoder.encode(example_text) 5 6TypeError: Expected binary or unicode string, 7got ['その', 'ころ', '、', '東京', '中', 'の', '町', 'という',…]
書き換えてみるとこうなりました。どうすればいいでしょうか…