質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

7620閲覧

python word2vecのコーパスについて

---stax---

総合スコア148

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2018/05/18 07:39

表題の件で質問させてください
かなり初歩的な質問になります

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

難しく考える必要はありません。公式ドキュメント読みに行くのが一番手っ取り早いです。

gensim: models.word2vec – Deep learning with word2vec#gensim.models.word2vec.Word2Vec

Parameters:
sentences (iterable of iterables) – The sentences iterable can be simply a list of lists of tokens, but for larger corpora, consider an iterable that streams the sentences directly from disk/network. See BrownCorpus, Text8Corpus or LineSentence in word2vec module for such examples. If you don’t supply sentences, the model is left uninitialized – use if you plan to initialize it in some other way.

トークンのリストのリストで良い、メモリ上に乗り切らないときはBrownCorpus, Text8Corpus or LineSentenceとか活用しろと書いてあります。

gensim: models.word2vec – Deep learning with word2vec#gensim.models.word2vec.LineSentence

Simple format: one sentence = one line; words already preprocessed and separated by whitespace.

こっちは空白で分かち書き、行で文区切りされたファイルを読みます。

なので結論としては、どっち使っても大丈夫です。windowパラメータもどっちでも効きます。

投稿2018/05/18 09:42

編集2018/05/18 09:43
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

---stax---

2018/05/21 00:14

回答ありがとうございます。 返答遅くなり申し訳ありません。 改めて公式のドキュメント見てみました。 質問の②の方が手間が少なくていいですが、①の方がファイルに残しておけるので使い勝手の点で有用なのかなと感じました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問