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

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

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

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

解決済

python TensorBoard の表示内容について(単語ベクトルの表示)

---stax---
---stax---

総合スコア148

Python 3.x

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

1回答

0評価

0クリップ

202閲覧

投稿2018/05/11 03:38

編集2018/05/11 03:40

かなり初歩的な質問になります。
申し訳ありません。

テキストファイルをベクトル化し、その内容をTensorBoardを使って可視化させました
その際の表示内容で分からない箇所があります
以下の表示内容の画像の右側に”方法”というワードに意味が近いものが順に並んでいると解釈しています

並んでいるワードの横に値が表示されており、その値が高いと”方法”というワードに近いと理解していたのですが、低い物から並んでいることが疑問に感じます
また、実際pythonで学習させたモデルから”方法”に近い物を出してみると表示された内容はTensorBoardに表示されているものに近いですが一致はしていません
値に関しては高いものから表示されています

同じ学習モデルを使用しているので表示内容に差が出ている原因が分からず悩んでいます

機械学習の知識も全くない状態で触れており初歩的で失礼な質問で大変申し訳ありませんがアドバイスお願い致します

表示内容

python”方法”に近いもの表示

我々 0.5427109003067017 いたずら 0.5349133014678955 暮らす 0.4886106848716736 0.48565226793289185 かって 0.47538068890571594 文学 0.47107696533203125 0.47081437706947327 活動 0.4649048447608948 研究 0.46410828828811646 違う 0.46296119689941406

python実装内容

from janome.tokenizer import Tokenizer from gensim.models import word2vec from sklearn.decomposition import PCA from sklearn.manifold import TSNE import matplotlib.pyplot as plt import matplotlib import logging import sys import re import numpy as np from collections import Counter import operator import logging word=[] word_dic = [] ## 分かち書き(janome使用) # Tokenizerのインスタンス生成 t = Tokenizer() #--------------------------------------------------------------関数 # 文字列型を引数とする def extract_words(text, fp=sys.stdout): #tokenizeメソッドに文字列の引数を渡して形態素解析を行う,tokensはlist型 #中身は。区切りした文が形態素解析された状態で入っている #うとうととして目がさめると女はいつのまにか、隣のじいさんと話を始めている。 #⇒['うとうと', 'と', 'し', 'て', '目', 'が', 'さめる', 'と', '女', 'は', 'いつのまにか', '、', '隣', 'の', 'じいさん', 'と', '話', 'を', '始め', 'て', 'いる'] # テキストファイル作成部分 tokens = t.tokenize(text) for token in tokens: fp.writelines(token.surface) fp.write("\n") #リスト内包表記を使用して形態素解析されたリストtokensの中身の品詞を、区切り,名詞・動詞原型のみを返す # token.part_of_speech.split(',')[0]はjanomeで解析した内容(すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ)の一番最初の要素(名詞)を取得 # split(',')を表記していないと'名'しか指定されない。split(',')[0]で'名詞'と指定していることになる。 # token.part_of_speech.split(',')[0]の中に'名詞', '動詞'という文字列のものだけ返すイメージ return [token.base_form for token in tokens if token.part_of_speech.split(',')[0] in ['名詞', '動詞']] def flatten_by_extend(nested_list): flat_list = [] for e in nested_list: flat_list.extend(e) return flat_list def save_embedding_projector_files(self, vector_file, metadata_file): with open(vector_file, 'w', encoding='utf-8') as f, \ open(metadata_file, 'w', encoding='utf-8') as g: # metadata file needs header g.write('Word\n') for word in self.wv.vocab.keys(): embedding = self.wv[word] # Save vector TSV file f.write('\t'.join([('%f' % x) for x in embedding]) + '\n') # Save metadata TSV file g.write(word + '\n') #-----------------------------------------------------------textファイルを開く・閉じる # ファイルを開く パス⇒\はエラー、\で表記する # textfile = open(r'C:\Users\Desktop\sanshiro.txt')でもよい textfile = open('C:\Users\Desktop\sanshiro.txt') # textファイルの内容を読み込む(文字列を返す type:str型) line = textfile.read() # ファイルを閉じる textfile.close() #-----------------------------------------------------------ファイル整形 # |の除去 text = line.replace(r'|','') #ルビの除去 text = re.sub(r'《.+?》', '', line) #入力注の除去 text = re.sub(r'[#.+?]', '', line) # 空行の削除 text = re.sub('\n\n', '\n', line) text = re.sub('\r', '', line) sentences = text.split('。') #-----------------------------------------------------------整形結果確認 # 先頭100文字出力 print(line[:100]) #----------------------------------------------------------関数呼び出し # with構文使用 # クローズが必要な処理を簡潔に記述できる # ブロックが終了した際に、そのオブジェクトの終了処理が自動的に実行 # ファイルを書き込みモードで開く。test_token.txtファイルが存在しない時は新規作成される with open("test_token.txt", "w") as fp: wordlist = [extract_words(sentence,fp) for sentence in sentences] # リスト内包表記使用 # wordlist = [extract_words(sentence,fp) for sentence in sentences] # 上記は以下と同じ意味 #wordlist = [] #for sentence in sentences: # word_list.append(extract_words(sentence)) #----------------------------------------------------------単語出現回数 countdata = flatten_by_extend(wordlist) counter = Counter(countdata) counter.most_common() print(counter) #----------------------------------------------------------word2vec学習開始 # size: 圧縮次元数,特徴量の数 # min_count: 出現頻度の低いものを破棄する # window: 前後の単語を拾う際の窓の広さを決める,文脈の最大単語数 # iter: 機械学習の繰り返し回数(デフォルト:5)十分学習できていないときにこの値を調整する logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) model = word2vec.Word2Vec(wordlist, size=200, min_count=5, window=5, iter=100, seed=0 ) model.save('C:/Users/Desktop/word2vec.model') word2vec_model = word2vec.Word2Vec.load('C:/Users/Desktop/word2vec.model') save_embedding_projector_files(word2vec_model,'vector.tsv', 'metadata.tsv') #print(model['世間']) #print(model.__dict__['wv']['世間']) ret = word2vec_model.wv.most_similar(positive=['方法'], topn=10) for item in ret: print(item[0], item[1])

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Python 3.x

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