Yoshimaru's Blog

京都に住む院生が書いています

Word2vec型で格納されたデータの語彙一覧を見る

Gensim のword2vec型の語彙一覧を見る方法について

ベクトルを得る方法は色々あるが,そもそもキーがあるかどうかがわからないとエラーが出るので,語彙一覧は見たい所.

以前のバージョンでは以下で取得できたようだが,4.0.0で仕様が変更.

from gensim.models import word2vec

model = word2vec.Word2Vec.load("ファイルのパス")
print(model.wv.vocab.keys())

4.0.0では以下のようにする

print(model.wv.index_to_key)

公式の説明とサイト

説明の日本語文は以下(ベタ翻訳)

Gensim 4.0.0 で KeyedVector から vocab 属性が削除されました。代わりに KeyedVector の .key_to_index dict, .index_to_key list, .get_vecattr(key, attr) と .set_vecattr(key, attr, new_val) メソッドを使用してください。

そのサイト

github.com

Overleafのコンパイルが終わらない

コンパイルが終わらない

Latexで卒論を書いていた時に,なぜかコンパイルが終わらない.

エラーコード調べてもよくわからなかったし,いい解答がのっていなかったので共有.

エラー画面

エラー画面

以下エラーメッセージ

Timed out. Sorry, your compile took too long to run and timed out. This may be due to a LaTeX error, or a large number of high-res images or complicated diagrams.
Learn how to fix compile timeouts

解決法

よくよく見たらTebleが悪さしていることがわかった. テーブルの一部分だけ線を引きたいときの\clineに引数を数字を一つにしていた. 一行目だけに引きたい時も\cline{1-1}と指定してかく.

\begin{table}[]
    \centering
    \begin{tabular}{c|c}
         aaa&bbb  \\\cline{1} <--- 引数が1つしかないのが原因
    \end{tabular}
    \caption{Caption}
    \label{tab:my_label}
\end{table}

公式ドキュメント エラーで参照されていた公式サイト.

www.overleaf.com

食材と化合物の異種グラフ FlavorGraphの解説

食材をベクトル化する研究を紹介. 論文理解の助けになれば幸い.

FlavorGraphとは

食材と化合物を同じグラフ上で表現し,異種グラフ特化型の埋め込み手法に入れることでそれぞれ食材の分散表現を得ている. 論文中ではこの構築している異種グラフのことをFlavorGraph[1]と呼んでいる. 埋め込み手法は異種グラフ埋め込み手法としては初期のものである Metapath2vec[2]を使っている. その中で新たな層を追加する提案もしている. 性能は普通のword2vecなどの文字埋め込みや食材に含まれる成分の値を特徴量としたものと比べ精度が良いとしている. 化合物の構造まで考慮した点が売りだと思われる. 一年も立たずうちに被引用数も伸びているので食材埋め込みの中では注目されていると言えるのではないか

詳細は元論文を読もう

www.nature.com

背景

"Food Pairing" といういわゆる食材同士をどう組み合わせて料理を作ろうかと考えるテーマ. これまでシェフの直感で見つけられていた食材の相性を機械で行えるようにしましょうという流れ. 既存手法との差異は,レシピのデータかつ化合物のデータを用いて埋め込みをした点と,既存のグラフ埋め込み手法に層を追加した点.

グラフの構成データ

グラフの構成データは食材がRecipe1M,これは画像系の研究でよく見られるものだけど.レシピと食材名だけ取ってきている. 化合物はFlavorDBとHyperFoodsから.これらは食材と化合物の関係を示したデータベースだが,どういう閾値で関係性を見ているのかは各自参照して欲しい. 以下の表がその要素と数.(わかりやすくするためそれぞれの要素に形式的な記号がつけられている,ありがたい)

グラフの構成要素とその数

ここで注意すべき点が食材ノードが二種類あるところ.(HとN) Hは化合物との関係性が貼られている食材,要は化学データベース内に存在している食材とレシピ内の食材で照合し,一致した食材になる.Nはそれ以外の食材.

(余談) 頭文字のHはハブ(hub)のHからきていて,複数の化合物のハブ的役割を果たす食材のような意味合いだと思う

異種グラフ埋め込み

構築したFlavorGraphを異種グラフ特化の埋め込み手法のMetapath2vecに入れる. Metapath2vecの仕組みは以下が参考になった.

論文紹介 / metapath2vec: Scalable Representation Learning for Heterogeneous Networks - Speaker Deck

異なるカテゴリの関係をベクトルに表現できるが,その場合パスの生成ルールであるメタパスを設定必要がある. この研究では以下の二つを設定.

化合物(C)から始まり他の化合物(C')で終わるパス 食材(H)から始まり,化合物を通りつつ他の食材(H’)で終わるパス ここで着目したいのが食材(H)から始まっている点. 全省のデータ説明でも述べたが,食材には化合物とのエッジが貼られているものと貼られていないものがある. この二つのメタパスを設定することで,グラフ学習内で混ざってこれらが学習されるので(H)に対して化合物の関係の情報を渡すことができる(メタパスの性質上)

CSP層の追加

この研究のコアな提案としてmetapath2vecの学習に新たな層を追加している点. 元論文の図が以下で,中間層を経たものが新たに877次元の化学構造予測層を追加している.(これをCSP層と呼んでいる)場所としては①のところ.

FlavorGraphのアーキテクチャ

ここの877次元は化合物の線形表記方法であるFingerPrintsに沿った数だと思われる.化学には疎いので以下のサイトが分かりやすかった.

datachemeng.com

以下図は上サイトの引用から. 要するに化合物の官能基(?)の部分があるかないかのバイナリ列で化合物を表すケモインフォでのデータ構造. このバイナリの次元が追加したCSP層の次元と一致している.

これらの情報をMetapath2vecの学習に混ぜることで,化合物の形を考慮しつつより高品質な食材ベクトルを得ることができるとしている.

結果

食材カテゴリにクラスタリングし,どれだけ食材を良く表せているかを測った. 肉とか魚とかの計8カテゴリを対象にしている. kmeansでクラスタリングし,クラスタ結果と元データのカテゴリの分布の一致度を測る正規化相互情報NMIを用いて評価する. 以下がその定義式.よく使われる相互情報量を0から1の間に収まるように正規化したもの.(コードを見ると算術平均だったなので以下の式になる) $$ NMI = \frac{2I(X;Y)}{H(X) + H(Y)} $$

結果を色々他の埋め込み手法と比べている.

手法 Random FlavorDB Im2Recipe Node2vec/DeepWalk Metapath2vec Metapath2vec + CSP
次元 - 1645 300 300 300 300
精度 0.111 0.272 0.079 0.079 0.286 0.309
  • Random:ランダムベクトル
  • FlavorDB:グラフ構築元となっているデータから化合物が含まれているかどうかのバイナリを食材特徴量としている
  • Im2Recipe:これもデータ元となっているRecipe1Mのデータからテキスト埋め込みをしている
  • node2vec:構築したグラフにnode2vecを適応
  • metapath2vec:構築したグラフにmetapath2vecを適応
  • metapath2vec+CSP:この研究の提案

結果,CSPを追加した提案手法の精度が一番高いとしている.

何ができるのか

食材の分散表現を作って嬉しいこととして食材の演算. この研究している考察の一つとして,食材+食材をしたベクトルで類似度検索をしたものを挙げている. (類似度の計算方法は一般的なcos類似度) その例が以下の表.

食材の演算

一列目は単にアイスクリームとの類似度を測っているだけだけど,2行目3行目はアイスとイチゴ,チョコを足した時を示している. 結果のアイス+イチゴを見ると"strawberry_gelatin"とか"strawberry_preserve"とかのいちご系が推薦できていることがわかる. あと全体的に似たジャンルの食材が推薦できていることから,食合せの推薦とかに使えるのでは? あと演算することができるので三つ以上とか引き算とか色々応用先がありそう.

その他

類似度検索とか未知ペアリング予測などの考察をしている. 詳細は元論文を読んでください.

気になった点

まず埋め込み手法が少し古い気がする.グラフ埋め込み手法は結構盛んに行われている分野なので,今一番精度の良いものに入れてみてどうなるのか気になる. あと評価がクラスタリングなのも少し微妙.分布を見ていて,そのクラスタ番号と食カテゴリが一致しているとは言えないので他クラス分類とかの方がいいのでは(Metapath2vecでの評価は多項ロジスティック回帰だった)

まとめ

FlavorGraphの論文の内容を軽くまとめた. 化合物との関係性をグラフで表現したものとしては革新的であり,著者が言うとおりまだまだな発展の余地が分野であると言える. ただ食材というレシピ研究の基本がうまく行けば後続の応用タスクへの貢献も見えるので今後の展開に期待.

ソースコード

Githubにコードが公開されている. 気になる中身などは実際に動かしてみた方が早いかもしれない. pythonとかpytouchのバージョンが少し古いので注意.

github.com

sklearnでつかえるMNIの計算式

sklearn.metricsでNMIを計算する.

NMIは正規化相互情報量で2つのデータ群の分布の一致度を見ることができる. (自分が見たのはクラスタリングの評価)

使い方は公式から以下.

from sklearn.metrics.cluster import normalized_mutual_info_score

A = [0, 0, 1, 1]
B = [0, 0, 1, 1]

normalized_mutual_info_score(A,B)

normalized_mutual_info_scoreの引数は,

  • labels_true : ラベル列
  • labels_pred : もう一つのラベル列
  • average_method : 平均をどうやって計算するのかを指定

average_methodは算術平均,幾何平均,最大最小を選べる

計算式とコードは以下

  • 算術平均(デフォルト) $$ NMI = \frac{2I(X;Y)}{H(X) + H(Y)} $$
normalized_mutual_info_score(A,B,arithmetic)
  • 幾何平均 $$ NMI = \frac{I(X;Y)}{\sqrt{H(X) \cdot H(Y)}} $$
normalized_mutual_info_score(A,B,geometric)

ちなみにMNIは0-1の間に収まる値.

Ubuntu18.04が入らなかった問題

エラー内容

謎の文字画面と壊れたGUIで入らない

エラー画面

nouveau 0000:15:00.0: DRM: failed to create kernel channel, -22

環境

quadro RTX4000

原因

macでISOファイルを作成して作成していたが,これが原因の可能性.windowsRufusでやると解決したからMacはだめ?

balenaEtcher

windowsでやったけど,次はグラフィックボードのドライバが悪さして行けなかった.

解決法 

Rufusの設定を以下の項目にする.

後はデフォルトでスタート

 

 

Rufusの設定項目

 

  • USBをPCに挿して,ブートデバイス選択を行えるモードにする.自分はHPのパソコンだったのでF9を長押し
  • USBメモリを選択
  • install ubuntu 〜 と書いている所を矢印で選択して 'e' をおす.
  • するとコマンドを打つことができる画面になるので,
file= 〜 boot= 〜 quiet splash ---

の---前を以下のように修正

file= 〜 boot=〜 nomodeset ---

 

〜のところは人それぞれ違う?のかな

---以下は設定項目なので気にしなくておk

 

結局のところ

Nvidiaのグラフィックドライバが悪さをしていたっぽい.なら一番最初の画面が壊れていることも納得できる

参考サイト

色々見たけど結局このサイトが解決につながった.保存領域をMaxにしろって言ってるものあれば0にしろというのもあって振り回された...

NVIDIA搭載機にUbuntuをインストールできない問題の解決 – 回れ右の内輪差

 

博士課程進学を支援してくれる企業まとめ

この記事では博士課程進学を支援してくれる企業についてまとめています.

博士課程進学するかどうか迷っている修士学生や,転職を気に社会人博士を検討している社会人の方の参考になれば幸いです.

随時更新(最終更新 : 2022/5/7)

目次

まとめ表

企業名 分野 支援内容
メルカリ

メルカリに有益であれば不問

国内の大学院限定

学費の全額支給

原則3年間

ヤフー

自然言語処理・画像処理

音声処理・機械学習・情報検索

レコメンデーション・コンテキストアウエア

HCI・大規模分散処理・HPC

仮想化技術・統計モデリングセマンティックウェブ

週1日を保証
エクサウィザーズ  AIを用いた社会課題解決

卒業までの学費

平日の週1を確保

Rist

 ICTや機械学習

業務に深く関わる分野

卒業までの学費
リチェルカセキュリティ サイバーセキュリティ

学位取得までの学費

学習日の確保

ridge-i 分野については明記なし(おそらくCV関連)

研究日の確保

学費(上限あり)

昭和興業 環境衛生に関する分野 明記なし
ユニバーサルコーポレーション 高度な医療に対応できる薬剤師 明記なし

以下でそれぞれの説明を行う

大手・中小

メルカリ「mercari R4D PhD Support Program」

  • 少し前にニュースで話題になったので知っている人も多いのではないだろうか
  • https://r4d.mercari.com/careers/phdprogram/

  • 応募条件

    • メルカリグループに2年以上在籍する社員かつ評価が一定基準以上

     

ヤフー「社会人ドクター進学支援制度」

 

昭和興業「博士課程進学支援制度」

 

ユニバーサルコーポレーション「博士号の取得支援」

 

ベンチャー

エクサウィザーズ 「博士課程進学支援制度」

 

Rist「博士課程進学支援制度」

 

リチェルカセキュリティ

 

Ridge-i「修士・博士課程進学支援制度」

 

更新履歴

  • 2022/5/8 : 公開