word2vecの実装を試みています。
最終的目的は特定の単語に対して、類似語を出すことです。
下記にコードを記載します。
83行目の「model = word2vec.Word2Vec(word_list, size=100,min_count=5,window=5,iter=100)」の箇所でエラーが出てしまいます。
途中までは動くのですが、83行目の「size」につていエラーが出てしまいます。
何卒宜しくお願い致します。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "ch05-02.py", line 96, in <module> model = word2vec.Word2Vec(word_list, size=200,min_count=5,window=5,iter=5) TypeError: __init__() got an unexpected keyword argument 'size'
該当のソースコード
# zipファイルダウンロード url = 'https://www.aozora.gr.jp/cards/000148/files/794_ruby_4237.zip' zip = '794_ruby_4237.zip' import urllib.request urllib.request.urlretrieve(url, zip) # ダウンロードしたzipの解凍 import zipfile with zipfile.ZipFile(zip, 'r') as myzip: myzip.extractall() # 解凍後のファイルからデータ読み込み for myfile in myzip.infolist(): # 解凍後ファイル名取得 filename = myfile.filename # ファイルオープン時にencodingを指定してsjisの変換をする with open(filename, encoding='sjis') as file: text = file.read() # ファイル整形 import re # ヘッダ部分の除去 text = re.split('\-{5,}',text)[2] # フッタ部分の除去 text = re.split('底本:',text)[0] # | の除去 text = text.replace('|', '') # ルビの削除 text = re.sub('《.+?》', '', text) # 入力注の削除 text = re.sub('[#.+?]', '',text) # 空行の削除 text = re.sub('\n\n', '\n', text) text = re.sub('\r', '', text) # 整形結果確認 # 頭の100文字の表示 print(text[:100]) # 見やすくするため、空行 print() print() # 後ろの100文字の表示 print(text[-100:]) # Janomeのロード from janome.tokenizer import Tokenizer # Tokenizerインスタンスの生成 t = Tokenizer() # テキストを引数として、形態素解析の結果、名詞・動詞・形容詞(原形)のみを配列で抽出する関数を定義 def extract_words(text): tokens = t.tokenize(text) return [token.base_form for token in tokens if token.part_of_speech.split(',')[0] in['名詞', '動詞']] # 関数テスト # ret = extract_words('三四郎は京都でちょっと用があって降りたついでに。') # for word in ret: # print(word) # 全体のテキストを句点('。')で区切った配列にする。 sentences = text.split('。') # それぞれの文章を単語リストに変換(処理に数分かかります) word_list = [extract_words(sentence) for sentence in sentences] # 結果の一部を確認 for word in word_list[0]: print(word) # Word2Vecライブラリのロード from gensim.models import word2vec # size: 圧縮次元数 # min_count: 出現頻度の低いものをカットする # window: 前後の単語を拾う際の窓の広さを決める # iter: 機械学習の繰り返し回数(デフォルト:5)十分学習できていないときにこの値を調整する # model.wv.most_similarの結果が1に近いものばかりで、model.dict['wv']のベクトル値が小さい値ばかりの # ときは、学習回数が少ないと考えられます。 # その場合、iterの値を大きくして、再度学習を行います。 # 事前準備したword_listを使ってWord2Vecの学習実施 model = word2vec.Word2Vec(word_list, size=100,min_count=5,window=5,iter=100) # 結果の確認1 # 一つ一つの単語は100次元のベクトルになっています。 # 「世間」のベクトル値を確認します。 print(model.__dict__['wv']['世間']) # 結果の確認2 # 関数most_similarを使って「世間」の類似単語を調べます ret = model.wv.most_similar(positive=['世間']) for item in ret: print(item[0], item[1])
試したこと
83行目のsizeをなくして
「model = word2vec.Word2Vec(word_list, min_count=5,window=5,iter=100)」
上記のようにしたところ、次は「iter」につてい全く同じエラーがでてしまいました。
「model = word2vec.Word2Vec(word_list, min_count=5,window=5)」
最終的に上記のようにしたところ、動くことはできましたが、sizeとiterを含めた実装をしたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください
回答1件
あなたの回答
tips
プレビュー