見出し画像

自分から最も遠い分野を調べる(fastText使ってみた結果)

GoogleColabでfastTextを使って調べてみました。GoogleColabは、Gmailアカウントとかがあれば、誰でも無料ですぐ使えます。

!git clone https://github.com/facebookresearch/fastText.git
!pip install fasttext==0.9.2
!python ./fastText/download_model.py ja
import fasttext
model = fasttext.load_model("cc.ja.300.bin")
# 動作確認
model.get_nearest_neighbors('ファミリーマート')
=> [(0.7821096181869507, 'ファミマ'),
 (0.7481350898742676, 'ローソン'),
 (0.7475607395172119, 'ミニストップ'),
 (0.7465670704841614, 'ファミリマート'),
 (0.6844927668571472, 'コンビニエンスストア'),
 (0.6520388722419739, 'コンビニ'),
 (0.6248900294303894, 'セブンーイレブン'),
 (0.6120826601982117, 'AMPM'),
 (0.6101804971694946, 'エーエム・ピーエム'),
 (0.6054256558418274, 'ファミリーマー')]
# 動作確認
model.get_analogies("羽田空港", "東京", "大阪")
=> [(0.6704632639884949, '関西国際空港'),
 (0.6555172204971313, '伊丹空港'),
 (0.6281035542488098, '関空'),
 (0.5682251453399658, '福岡空港'),
 (0.5673949718475342, '大阪国際空港'),
 (0.5617151856422424, '成田空港'),
 (0.5319705605506897, '那覇空港'),
 (0.530733048915863, '空港'),
 (0.5212101340293884, 'りんくうタウン'),
 (0.5157061815261841, '千歳空港')]
# コサイン類似度
import numpy as np
def cosine_similarity(vec_a, vec_b):
  """Compute cosine similarity between vec_a and vec_b"""
  return np.dot(vec_a, vec_b) / \
    (np.linalg.norm(vec_a) * np.linalg.norm(vec_b))
# 自分に経験のある法学と情報工学からの距離を調べる
law_vec = model.get_word_vector('法学');
it_vec = model.get_word_vector('情報工学');

class Gakubu:
  name = '' # 学部名
  word = '' # 解釈用のワード
  dist_from_law = 0.0
  dist_from_it = 0.0

  def __init__(self, name, word, dist_from_law, dist_from_it):
    self.name = name
    self.word = word
    self.dist_from_law = dist_from_law
    self.dist_from_it = dist_from_it

gakubu_array = []

def add_gakubu(gakubu_name, word):
  vec = model.get_word_vector(word);
  dist_from_law = cosine_similarity(law_vec, vec);
  dist_from_it = cosine_similarity(it_vec, vec);
  gakubu = Gakubu(gakubu_name, word, dist_from_law, dist_from_it)
  gakubu_array.append(gakubu)
# 学部の情報追加
# 学部名は旧帝大クラスの大学とか、早慶、上智あたりから、取って来ました。
# あまり複雑なワードだと、うまく解釈してくれないので
# 実際に使うのは学部名ではなく、右側の解釈に使う用のワードです。

gakubu_array = []

add_gakubu('スポーツ科学部', 'スポーツ')
add_gakubu('医学部', '医学')
add_gakubu('音楽学部', '音楽')
add_gakubu('海事科学部', '海事')
add_gakubu('海洋政策科学部', '海洋')
add_gakubu('外国語学部', '外国語')
add_gakubu('環境情報学部', '環境')
add_gakubu('看護医療学部', '看護')
add_gakubu('看護医療学部', '医療')
# add_gakubu('基幹理工学部', '')
# add_gakubu('基礎工学部', '')
# add_gakubu('共創学部', '')
add_gakubu('教育学部', '教育')
add_gakubu('教養学部', '教養')
add_gakubu('経営学部', '経営')
add_gakubu('経済学部', '経済')
# add_gakubu('芸術工学部', '')
add_gakubu('工学部', '工学')
# add_gakubu('国際教養学部', '')
# add_gakubu('国際人間科学部', '')
add_gakubu('歯学部', '歯学')
add_gakubu('社会科学部', '社会科学')
add_gakubu('社会学部', '社会学')
add_gakubu('社会学部', '社会')
add_gakubu('獣医学部', '獣医')
add_gakubu('商学部', '商学')
add_gakubu('情報学部', '情報')
add_gakubu('情報学部', '情報学')
add_gakubu('情報工学科', '情報工学')
add_gakubu('人間科学部', '人間')
add_gakubu('水産学部', '水産')
add_gakubu('政治経済学部', '政治')
# add_gakubu('先進理工学部', '')
# add_gakubu('創造理工学部', '')
# add_gakubu('総合グローバル学部', '')
# add_gakubu('総合人間科学部', '')
# add_gakubu('総合人間学部', '')
add_gakubu('総合政策学部', '政策')
add_gakubu('農学部', '農学')
add_gakubu('美術学部', '美術')
add_gakubu('文化構想学部', '文化')
add_gakubu('文学部', '文学')
add_gakubu('法学部', '法学')
add_gakubu('薬学部', '薬学')
add_gakubu('理学部', '理学')
# add_gakubu('理工学部', '理工学')
add_gakubu('神学部', '神学')
# 法学に近いもの
sorted_law = sorted(gakubu_array, key=lambda x: x.dist_from_law, reverse=True)
for gakubu in sorted_law:
  print('{}({}): {}'.format(gakubu.name, gakubu.word, gakubu.dist_from_law))
=> 
法学部(法学): 0.9999998807907104
神学部(神学): 0.6337738633155823
商学部(商学): 0.578230082988739
文学部(文学): 0.5661576390266418
薬学部(薬学): 0.5553722977638245
農学部(農学): 0.5403213500976562
政治経済学部(政治): 0.539928674697876
歯学部(歯学): 0.5068399906158447
医学部(医学): 0.4995163381099701
工学部(工学): 0.4928053915500641
経済学部(経済): 0.48442256450653076
海事科学部(海事): 0.4364825189113617
教養学部(教養): 0.4352326989173889
教育学部(教育): 0.4342460632324219
経営学部(経営): 0.43130722641944885
総合政策学部(政策): 0.4297390878200531
理学部(理学): 0.42361927032470703
社会学部(社会): 0.4143827259540558
看護医療学部(医療): 0.3737333416938782
看護医療学部(看護): 0.37005123496055603
音楽学部(音楽): 0.36911922693252563
美術学部(美術): 0.3662216365337372
文化構想学部(文化): 0.35298842191696167
獣医学部(獣医): 0.35234740376472473
水産学部(水産): 0.34900718927383423
人間科学部(人間): 0.32650941610336304
スポーツ科学部(スポーツ): 0.31239253282546997
海洋政策科学部(海洋): 0.30032092332839966
情報学部(情報): 0.25273391604423523
環境情報学部(環境): 0.2190900593996048
社会学部(社会学): 0.07387739419937134
社会科学部(社会科学): -0.031914569437503815
情報学部(情報学): -0.035477690398693085
外国語学部(外国語): -0.07373292744159698
情報工学科(情報工学): -0.12290079891681671

この、法学に近いものを見ると、情報工学が一番遠いっていうのは、私には面白いですね。これが正しいとしたら、現時点でも、全然違うものをやれてるということになりますが。。さて、本当にそうでしょうか?そうだったらいいな、ということで、こういう結果になるようにやってしまった、という面もあるかもしれません。

# 情報工学に近い物
情報工学科(情報工学): 1.0
社会科学部(社会科学): 0.133025661110878
社会学部(社会学): 0.07254485040903091
外国語学部(外国語): 0.03106146864593029
環境情報学部(環境): 0.015718549489974976
スポーツ科学部(スポーツ): 0.007780788466334343
工学部(工学): -0.04915495216846466
海事科学部(海事): -0.05098201707005501
音楽学部(音楽): -0.05573630332946777
教養学部(教養): -0.06813967227935791
総合政策学部(政策): -0.06885473430156708
人間科学部(人間): -0.07693710178136826
文化構想学部(文化): -0.07736320048570633
水産学部(水産): -0.07971777021884918
経済学部(経済): -0.08124977350234985
情報学部(情報): -0.08241701871156693
経営学部(経営): -0.08484814316034317
政治経済学部(政治): -0.08501873910427094
医学部(医学): -0.08655327558517456
看護医療学部(医療): -0.08772388845682144
教育学部(教育): -0.09377209842205048
美術学部(美術): -0.0961512103676796
社会学部(社会): -0.10680180042982101
獣医学部(獣医): -0.10695310682058334
歯学部(歯学): -0.11461655795574188
文学部(文学): -0.11607491970062256
法学部(法学): -0.12290079891681671
農学部(農学): -0.12869077920913696
理学部(理学): -0.1300336867570877
薬学部(薬学): -0.13973261415958405
海洋政策科学部(海洋): -0.14023974537849426
情報学部(情報学): -0.14203926920890808
神学部(神学): -0.1458926647901535
商学部(商学): -0.15547849237918854
看護医療学部(看護): -0.16441307961940765

ハイ、出ました。さっきは、法学からは情報工学が一番遠かったのに、情報工学から見たら、看護が一番遠いみたいです。数直線で考えたら、情報工学と看護の間に法学がある感じかも。。あと、情報工学から見たら、情報学が遠いっていうのは、何かのバグですね。

# 情報工学、法学との類似度の合計、上のものほど近い
sorted_it_law = sorted(gakubu_array, key=lambda x: x.dist_from_it + x.dist_from_law, reverse=True)
for gakubu in sorted_it_law:
  print('{}({}): {}'.format(gakubu.name, gakubu.word, gakubu.dist_from_it + gakubu.dist_from_law))
=> 
情報工学科(情報工学): 0.8770992159843445
法学部(法学): 0.8770990967750549
神学部(神学): 0.4878811836242676
政治経済学部(政治): 0.45490992069244385
文学部(文学): 0.4500827193260193
工学部(工学): 0.44365042448043823
商学部(商学): 0.42275160551071167
薬学部(薬学): 0.4156396985054016
医学部(医学): 0.41296306252479553
農学部(農学): 0.4116305708885193
経済学部(経済): 0.4031727910041809
歯学部(歯学): 0.39222341775894165
海事科学部(海事): 0.3855004906654358
教養学部(教養): 0.367093026638031
総合政策学部(政策): 0.3608843684196472
経営学部(経営): 0.3464590907096863
教育学部(教育): 0.3404739499092102
スポーツ科学部(スポーツ): 0.32017332315444946
音楽学部(音楽): 0.31338292360305786
社会学部(社会): 0.3075809180736542
理学部(理学): 0.2935855984687805
看護医療学部(医療): 0.28600946068763733
文化構想学部(文化): 0.27562522888183594
美術学部(美術): 0.2700704336166382
水産学部(水産): 0.26928943395614624
人間科学部(人間): 0.24957230687141418
獣医学部(獣医): 0.2453942894935608
環境情報学部(環境): 0.23480860888957977
看護医療学部(看護): 0.20563815534114838
情報学部(情報): 0.1703169047832489
海洋政策科学部(海洋): 0.1600811779499054
社会学部(社会学): 0.14642223715782166
社会科学部(社会科学): 0.10111109167337418
外国語学部(外国語): -0.042671456933021545
情報学部(情報学): -0.17751696705818176

最後の結果を見ますけど、ツッコミどころは多いと思います。情報工学から見たら、情報学が遠いっていうのは、さっきと同じです。それは無視しましょう。

外国語は、書いてませんでしたけど、私の長年の関心領域内なので、私の中では全然遠くないです。

社会科学も私が大学でやってた分野と全然遠くないです。詳しい専攻言っちゃうとアレなんですけど、社会科学はもろやってた分野です。社会学も同様でしょう。だから、この結果もちょっと違いますね。

海洋政策を「海洋」で処理してるのはだいぶ違うと思いますが、政策だったら、「総合政策」のほうでやってますからね。「海洋」っていうと、海洋生物とかも含みそうですね。そう考えたら遠いってことなんだろうと思います。

パッと見た感じ、リアルに生きてるもの、生き物が遠いのかな、っていう感じがします。外国語も生身の人間が使うやつだし、海洋生物は生き物だし、看護も人間が対象だし、獣医も生き物対象だし、人間科学の人間も遠いって出てますし、水産も生き物だし。。

法律っていうのが、割と非情なものであり、コンピュータというのも、もちろん、それ以上に非情なものであり、その両方から遠いのが、生き物なのかな、と、そう解釈できますね。

# 情報工学と法学からの類似度のうち、近いほうだけを取った結果
# つまり、いずれかから近いやつが上位
sorted_or = sorted(gakubu_array, key=lambda x: max(x.dist_from_it, x.dist_from_law), reverse=True)
for gakubu in sorted_or:
  print('{}({}): {}'.format(gakubu.name, gakubu.word, max(gakubu.dist_from_it, gakubu.dist_from_law)))
=> 
情報工学科(情報工学): 1.0
法学部(法学): 0.9999998807907104
神学部(神学): 0.6337738633155823
商学部(商学): 0.578230082988739
文学部(文学): 0.5661576390266418
薬学部(薬学): 0.5553722977638245
農学部(農学): 0.5403213500976562
政治経済学部(政治): 0.539928674697876
歯学部(歯学): 0.5068399906158447
医学部(医学): 0.4995163381099701
工学部(工学): 0.4928053915500641
経済学部(経済): 0.48442256450653076
海事科学部(海事): 0.4364825189113617
教養学部(教養): 0.4352326989173889
教育学部(教育): 0.4342460632324219
経営学部(経営): 0.43130722641944885
総合政策学部(政策): 0.4297390878200531
理学部(理学): 0.42361927032470703
社会学部(社会): 0.4143827259540558
看護医療学部(医療): 0.3737333416938782
看護医療学部(看護): 0.37005123496055603
音楽学部(音楽): 0.36911922693252563
美術学部(美術): 0.3662216365337372
文化構想学部(文化): 0.35298842191696167
獣医学部(獣医): 0.35234740376472473
水産学部(水産): 0.34900718927383423
人間科学部(人間): 0.32650941610336304
スポーツ科学部(スポーツ): 0.31239253282546997
海洋政策科学部(海洋): 0.30032092332839966
情報学部(情報): 0.25273391604423523
環境情報学部(環境): 0.2190900593996048
社会科学部(社会科学): 0.133025661110878
社会学部(社会学): 0.07387739419937134
外国語学部(外国語): 0.03106146864593029
情報学部(情報学): -0.035477690398693085

さっきの、1つ手前の結果とそんなに変わらない気がします。

結果の見ての感想

じゃあ、生き物が遠いから、海洋生物学者とか、獣医さんとか、看護師になるのか?というと、やはり、関心から遠いので、なるぞ!という感じにはならないですよね。まぁ、当たり前ですが。。

獣医だったら、収入には困らないかもしれませんけど、動物病院作るのってお金かかりそうですからね。この年からだとキツイでしょう。かと言って、雇われ獣医ってあんまり聞かないですしね。公務員とか?中年で公務員になれるのかな?

でも、ハウスダストアレルギーなので、獣の毛に付いたホコリとかがダメなんですよね。それもあるので、毛むくじゃらの生き物はあまり相手にしたくないですね。生き物を相手にするなら、毛の無い生き物がいいですね。そう考えると、魚か人間ですよね。

爬虫類とかもありますけど、爬虫類って、寝床に敷く、藁とかそういう床材に色々が汚れが溜まったりするみたいなんで、やっぱり、合わない気がします。

ちなみに、魚や肉を包丁で切ったりするのも、あんまり好きじゃないですね。日常生活の中で、なるべく生きた形跡があるものは遠ざけてる気がします。唐揚げとかになったら、全然食べるんですけど、赤い肉とかは触りたくない感じですね。だから、生き物の中でも、自然に死んだ生き物ならともかく、生き物を殺したり、殺した後の死体(=お肉とも言います)をどうこうするのは、避けてますね。というわけで、相手にするなら、生きた魚か、自然に死んだ魚かなと思います。

人間相手なら医学もありますけど、医学は、そんなに遠くには出てないですね。医学は、色々テクノロジーを使ってるから、ってことなんですかね~?それとも、もしかして、「学」が付いてるやつは上とか、そういう話ですかね。最初は「学」とか「学部」付けてやってたんですけど、トンチンカンな結果がしてしまって、やめたんですけど。。

以上、参考にするかもしれません。

あ、ちなみに、姉の旦那は魚の売買してる人ですね。何かの糸口があるかもしれません。

学問の分野を増やした場合

最後の、法学と情報工学いずれかから近いほうの値だけ取る方法で、学問の分野を増やしたら、こうなりました。また、「学」が付いてるやつが近い、みたいになったら、あれなので、「法律」と「情報技術」からの距離で調べてみました。

法学(法律): 1.0
政治学(政治): 0.4701312780380249
建築学(建築): 0.446270614862442
宗教学(宗教): 0.43963032960891724
福祉学(福祉): 0.43099328875541687
教育学(教育): 0.42239442467689514
医学(医学): 0.41712385416030884
経済学(経済): 0.413350373506546
哲学(哲学): 0.4091465175151825
社会学(社会): 0.4081878364086151
住居学(住居): 0.398464173078537
人間科学(人間): 0.3963738679885864
環境学(環境): 0.3865774869918823
航空・船舶工学(船舶): 0.3801848292350769
獣医学(獣医): 0.37979668378829956
心理学(心理): 0.37836021184921265
土木工学(土木): 0.3761592507362366
音楽(音楽): 0.3710266649723053
児童学(児童): 0.36984097957611084
地理学(地理): 0.3670809864997864
自動車工学(自動車): 0.36441877484321594
総合科学(科学): 0.36360815167427063
歴史学(歴史): 0.3618744909763336
経営学(経営): 0.35808321833610535
保健・衛生学(保健): 0.348305344581604
美術(美術): 0.34757840633392334
農学(農業): 0.34323352575302124
教員養成(教員): 0.34277233481407166
教養学(教養): 0.33988770842552185
看護学(看護): 0.3353141248226166
システム工学(システム): 0.33369603753089905
言語学(言語): 0.32998308539390564
林産学(林業): 0.32984912395477295
数学(数学): 0.3277856707572937
家政学・生活科学(生活): 0.3259340524673462
鍼灸学(鍼灸): 0.3222395181655884
情報学(情報): 0.3193575143814087
薬学(薬): 0.3181760013103485
通信工学(通信): 0.31114184856414795
服飾学(服飾): 0.3085825741291046
デザイン学(デザイン): 0.3072163760662079
畜産学(畜産): 0.3011736571788788
栄養・食物学(栄養): 0.30058667063713074
航空・船舶工学(航空): 0.30032163858413696
柔道整復学(柔道): 0.2978125512599945
電気工学(電気): 0.29723984003067017
商学(商業): 0.29466256499290466
文芸学(文芸): 0.291342169046402
考古学(考古学): 0.28554922342300415
歯学(歯): 0.28464895486831665
画像・音響工学(画像): 0.2686322033405304
体育学(体育): 0.2670706510543823
化学(化学): 0.2667114734649658
水産学(水産): 0.2664881944656372
鉱山学(鉱山): 0.2639257311820984
画像・音響工学(音響): 0.25871631503105164
スポーツ学(スポーツ): 0.25853750109672546
観光学(観光): 0.2574680745601654
資源工学(資源): 0.25724437832832336
機械工学(機械): 0.24971331655979156
文化人類学(人類): 0.2492925375699997
エネルギー工学(エネルギー): 0.24694104492664337
電子工学(電子): 0.23549963533878326
宇宙科学(宇宙): 0.22478879988193512
コミュニケーション学(コミュニケーション): 0.21970099210739136
地球科学(地球): 0.20226892828941345
材料工学(材料): 0.15632668137550354
情報学(情報学): 0.12454068660736084
生物学(生物学): 0.11477870494127274
国際関係学(国際関係): 0.11384793370962143
日本文学(日本文学): 0.09036057442426682
外国文学(外国文学): 0.08077422529459
人間関係学(人間関係): 0.07151035219430923
物理学(物理学): 0.05930721387267113
外国語学(外国語): 0.017960090190172195
情報工学(情報工学): -0.0781060978770256

これを見ると、情報工学とか、物理とか、近いやつが下に来てるのは、謎です。ちょっと無視するしかないですね。

う~ん、分かるような、分からないような感じになってしまいました。やっぱり、まずは、学部単位で考えて、学部を絞ってから、細かい分野をしぼったほうが調べやすいかも。。

手動で並べ替えて、ランクを作って、その合計とかでいいのか。。

なんか、虚無を生み出してしまった感ありますね。データ分析でのあるあるかも。。

この記事が気に入ったらサポートをしてみませんか?