表題の件で質問させてください
かなり初歩的な質問になります
word2vecでモデル生成時に使うコーパスの作り方がどのように作るべきものなのか分からず悩んでいます
あるEXCElシートから特定の列のテキストを抜出し、そのテキストに対して形態素解析をさせ、その結果をリストに格納しています。
この時のリストへの格納の仕方なのですが、例えば以下のようなテキストを'名詞','形容詞','動詞'で形態素解析したとします
pythonは、プログラミング言語である。 コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある
この際、結果をリストに格納する場合の方法なのですが①、②のどちらで格納すべきなのでしょうか?
①に関しては文章を一つの要素としていますが'python プログラミング'という単語になっているためテキストファイル等に別途起こさなければword2vecのモデルには渡せないないかなと考えます
②に関しては単語ごとに一つの要素となりますが単語の前後の言葉の関係性が取れるのかなと疑問に感じます
test = [] ① test[0] = 'python プログラミング' test[1] = '言語 コード シンプル 扱う やすい ~ ' ② test[0] = 'python' test[1] = 'プログラミング' test[2] = '言語' test[3] = 'コード'
①はテキストの名詞だけをリストに格納し、そのリストをテキストファイルに書き起こし、テキストファイルを学習モデルとして渡すことで単語の類似度は確認できました
②はテキストの名詞だけをリストに格納し、そのリストを学習モデルとして渡すことで単語の類似度は確認できました
両方で処理自体は実行できたのですが、webなどで検索すると、コーパスは空白で区切られたテキスト、と書かれている記事があれば、②のように形態素解析した内容をリストに格納して結果を求める方法と両方のやり方が紹介されており、どちらが正しい手法なのか知識が浅いため疑問に感じるためアドバイス頂けたら幸いです
またwindowパラメータは前後の単語を拾う際の窓の広さを決めるというよう理解しているのですが、①はこれが有効に働いている気がするのですが、②は単語ごとに別の要素となっていますが、それでもこのパラメータは有効に働いているのでしょうか?
機械学習自体の知識がなく、かなり的外れな質問をして申し訳ありません
アドバイス宜しくお願い致します
python
1import pandas as pd 2from janome.tokenizer import Tokenizer 3from collections import Counter 4from gensim.models import word2vec 5 6 7#ファイル指定 8input_file_name = (r'C:\Users\Desktop\Book.xlsm') 9 10#ファイル読み込み 11input_book = pd.ExcelFile(input_file_name) 12 13#シート名取得(sheet_namesメソッドでExcelブック内の各シートの名前をリスト型で取得) 14input_sheet_name = input_book.sheet_names 15 16#シート総数取得 17num_sheet = len(input_sheet_name) 18 19#シート総数表示 20print('シートの数:', num_sheet) 21#シート名表示 22print('シートの名前:',input_sheet_name) 23#type確認 24print('type :',type(input_book)) 25 26 27input_sheet_df = input_book.parse(input_sheet_name[1], 28 skiprows = 5, 29 skip_footer = 1, 30 usecols = 'Z,AD:AF', 31 names = range(0,4)) 32 33 34ret = [] 35 36#1パターン 37for wordlist in input_sheet_df[1]: 38 print(wordlist) 39 strword = '' 40 tokens = t.tokenize(str(wordlist)) 41 for token in tokens: 42 #print(token) 43 if token.part_of_speech.split(',')[0] in ['名詞','形容詞','動詞']: 44 strword = strword + token.surface + ' ' 45 ret.append(strword) 46 47#2パターン 48#for wordlist in input_sheet_df[1]: 49# #print(wordlist) 50# #strword = '' 51# tokens = t.tokenize(str(wordlist)) 52# for token in tokens: 53# #print(token) 54# if token.part_of_speech.split(',')[0] in ['名詞','形容詞','動詞']: 55# ret.append(token.base_form) 56 57print(ret) 58 59 60#word2vec 61#1パターン 62#txtdata = word2vec.LineSentence(r'C:/Users/Desktop/test.txt') 63#model = word2vec.Word2Vec(txtdata, size=100, min_count=5, window=3, iter=200, seed=0 ) 64#model.save('C:/Users/Desktop/test.model') 65word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/test.model') 66 67#2パターン 68#model = word2vec.Word2Vec([ret], size=100, min_count=1, window=1, iter=200, seed=0 ) 69#model.save('C:/Users/Desktop/test.model') 70#word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/test.model') 71 72 73ttt = word2vec_model.wv.most_similar(positive=['中間'], topn=10) 74for item in ttt: 75 print(item[0], item[1]) 76 77 78 79 80

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/21 00:14