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

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

ただいまの
回答率

90.51%

  • Python

    7987questions

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

  • Python 3.x

    6400questions

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

  • 機械学習

    684questions

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

  • 自然言語処理

    118questions

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

python word2vecのコーパスについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 607

---stax---

score 62

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

word2vecでモデル生成時に使うコーパスの作り方がどのように作るべきものなのか分からず悩んでいます
あるEXCElシートから特定の列のテキストを抜出し、そのテキストに対して形態素解析をさせ、その結果をリストに格納しています。
この時のリストへの格納の仕方なのですが、例えば以下のようなテキストを'名詞','形容詞','動詞'で形態素解析したとします

pythonは、プログラミング言語である。
コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある

この際、結果をリストに格納する場合の方法なのですが①、②のどちらで格納すべきなのでしょうか?
①に関しては文章を一つの要素としていますが'python  プログラミング'という単語になっているためテキストファイル等に別途起こさなければword2vecのモデルには渡せないないかなと考えます

②に関しては単語ごとに一つの要素となりますが単語の前後の言葉の関係性が取れるのかなと疑問に感じます

test = []

①
test[0] = 'python  プログラミング'  
test[1] = '言語 コード シンプル 扱う やすい ~ 'test[0] = 'python' 
test[1] = 'プログラミング' 
test[2] = '言語'
test[3] = 'コード' 

①はテキストの名詞だけをリストに格納し、そのリストをテキストファイルに書き起こし、テキストファイルを学習モデルとして渡すことで単語の類似度は確認できました

②はテキストの名詞だけをリストに格納し、そのリストを学習モデルとして渡すことで単語の類似度は確認できました

両方で処理自体は実行できたのですが、webなどで検索すると、コーパスは空白で区切られたテキスト、と書かれている記事があれば、②のように形態素解析した内容をリストに格納して結果を求める方法と両方のやり方が紹介されており、どちらが正しい手法なのか知識が浅いため疑問に感じるためアドバイス頂けたら幸いです

またwindowパラメータは前後の単語を拾う際の窓の広さを決めるというよう理解しているのですが、①はこれが有効に働いている気がするのですが、②は単語ごとに別の要素となっていますが、それでもこのパラメータは有効に働いているのでしょうか?

機械学習自体の知識がなく、かなり的外れな質問をして申し訳ありません
アドバイス宜しくお願い致します

import pandas as pd
from janome.tokenizer import Tokenizer
from collections import Counter
from gensim.models import word2vec


#ファイル指定
input_file_name = (r'C:\Users\Desktop\Book.xlsm')

#ファイル読み込み
input_book = pd.ExcelFile(input_file_name)

#シート名取得(sheet_namesメソッドでExcelブック内の各シートの名前をリスト型で取得)
input_sheet_name = input_book.sheet_names

#シート総数取得
num_sheet = len(input_sheet_name)

#シート総数表示
print('シートの数:', num_sheet)
#シート名表示
print('シートの名前:',input_sheet_name)
#type確認
print('type :',type(input_book))


input_sheet_df = input_book.parse(input_sheet_name[1],
                                  skiprows = 5,
                                  skip_footer = 1,
                                  usecols = 'Z,AD:AF',
                                  names = range(0,4))


ret = []

#1パターン
for wordlist in input_sheet_df[1]:
    print(wordlist)
    strword = ''
    tokens = t.tokenize(str(wordlist))    
    for token in tokens:
        #print(token)
        if token.part_of_speech.split(',')[0] in ['名詞','形容詞','動詞']:
            strword = strword + token.surface + ' '
    ret.append(strword)

#2パターン
#for wordlist in input_sheet_df[1]:
#    #print(wordlist)
#    #strword = ''
#    tokens = t.tokenize(str(wordlist))    
#    for token in tokens:
#        #print(token)
#        if token.part_of_speech.split(',')[0] in ['名詞','形容詞','動詞']:
#            ret.append(token.base_form)

print(ret)


#word2vec
#1パターン
#txtdata = word2vec.LineSentence(r'C:/Users/Desktop/test.txt')
#model = word2vec.Word2Vec(txtdata, size=100, min_count=5, window=3, iter=200, seed=0 )
#model.save('C:/Users/Desktop/test.model')
word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/test.model')

#2パターン
#model = word2vec.Word2Vec([ret], size=100, min_count=1, window=1, iter=200, seed=0 )
#model.save('C:/Users/Desktop/test.model')
#word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/test.model')


ttt = word2vec_model.wv.most_similar(positive=['中間'], topn=10) 
for item in ttt:
    print(item[0], item[1])    
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

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

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/21 09:14

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonのコードについての質問

    pythonについての質問です gensimのチュートリアルのコードです >>>from gensim import corpora, models, similariti

  • 解決済

    文字列を比較して配列に格納できない

    ans配列の要素の文字列の最初の文字がlinesの要素の最初の文字と一致するならlinesの2番目の要素('A'/'B'/'C'/'D')をline_alpha配列に格納する、とい

  • 解決済

    scikit-learn tfidf求め方

    前提・実現したいこと pythonのscikit-learnを使い,tfidfを求めようと考えています. 形態素解析を行って,単語だけを集めたテキストファイルを読み込み, 値が0.

  • 解決済

    [Python3]どういうロジックで動いているのか分かりません

    皆様いつもお世話になっております。 このようなサンプルに巡り会ったのですが line = """If you can dream it, you can do it. -

  • 解決済

    pythonで配列からある要素を取り出したい

    pythonのnltkというライブラリであるテキストを形態素解析し、登場頻度順に配列を生成しました。その結果が下記のものです。一行ごとの示す意味は左から単語、品詞、登場数となります

  • 解決済

    Pythonでの形態素解析について

    表題の件で質問させてください Pythonでjanomeを用いて形態素解析を行いたいと考えています windowsを用いて開発しています データベースからは value列から”

  • 解決済

    glob.glob()で取得したフォルダのパスを特定の条件のもと、ソートしたい

    掲題にある通り、glob.glob()で取得したフォルダのパスを、特定の条件下でソートしたいです。 具体的には、ファイルパスの最後のディレクトリに書いてある日付で(昔→今)ソートし

  • 解決済

    pythonでのテキストファイル処理

    pythonでのプログラミングについてです 現在、キーボード入力した単語をテキストファイルへ書き込み その次、キーボード入力により検索したい単語がテキストファイルに存在すれば、それ

同じタグがついた質問を見る

  • Python

    7987questions

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

  • Python 3.x

    6400questions

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

  • 機械学習

    684questions

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

  • 自然言語処理

    118questions

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