【深層学習】word2vec - 単語の意味を機械が理解する仕組み【ディープラーニングの世界 vol. 21】
HTML-код
- Опубликовано: 9 июл 2024
- ▼テーマ
単語をベクトルで表す単語分散表現の中で最も有名な word2vec の紹介です。
word2vec は4種のアルゴリズムの総称です。
それぞれを丁寧に説明していきます。
▼関連プレイリスト
Deep Learning の世界 • Deep Learning の世界
自然言語処理シリーズ • 自然言語処理シリーズ
▼目次
00:00 OP
==== 1.単語分散表現 ====
02:06 1-1 単語分散表現って何?
03:56 1-2 分散表現が得られると何が便利なのか?
==== 2.word2vec ====
08:31 2-1 引用論文紹介
09:14 2-2 引っかかりポイント①:word2vecは総称
11:45 2-3 CBOWはどんなタスクを解くのか?
14:00 2-4 引っかかりポイント②:目的とやってることのズレ
16:33 2-5 CBOWのモデル解説
20:21 2-6 ここまでのストーリーと残る謎のおさらい
21:51 2-7 学習結果から分散表現を手に入れる
25:40 2-8 ここまでのまとめ
26:54 2-9 skip-gramが解くタスクとモデル解説
30:30 2-10 2つの高速化の手法とアイデア紹介
34:49 2-11 今日のまとめ
36:02 ED
==== 3.なぜ単語の演算ができるのか? ====
...は次回です! お楽しみに!
▼参考文献
Mikolov, Tomas, et al. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013).
arxiv.org/abs/1301.3781
現論文はこちら!
これを読めば、 word2vec が複数のモデルの総称であることは一目瞭然!
Mikolov, Tomas, et al. "Distributed representations of words and phrases and their compositionality." Advances in neural information processing systems 26 (2013): 3111-3119.
papers.nips.cc/paper/2013/fil...
negative sampling について書かれています。 Mikolov さん大活躍ですね
Morin, Frederic, and Yoshua Bengio. "Hierarchical probabilistic neural network language model." Aistats. Vol. 5. 2005.
citeseerx.ist.psu.edu/viewdoc/...
Hierarchical Softmax は実は2005年の論文から存在しています。
詳細が知りたい方はこちらをどうぞ!
【2019年版】自然言語処理の代表的なモデル・アルゴリズム時系列まとめ - Qiita
qiita.com/LeftLetter/items/14...
シリーズ構成で大変参考にしております。色々まとまってて good です!
▼終わりに
ご視聴ありがとうございました!
面白かったら高評価、チャンネル登録お願いします。
動画の質問、感想などは、コメント欄やTwitterにどうぞ!
お仕事、コラボのご依頼は、TwitterのDMからお願い致します。
動画生成:AIcia Solid (Twitter: / aicia_solid )
動画編集:AIris Solid (妹) (Twitter: / airis_solid )
=======
Logo: TEICAさん ( / t_e_i_c_a )
Model: 3d.nicovideo.jp/works/td44519
Model by: W01fa さん ( / w01fa ) Наука
神動画.この動画だけで十分理解できてしまう
でしょでしょー😎✌️
ぜひいろんな人に紹介してください😋
素晴らしい!!
でっしょー!😍😍😍🎉🎉
わかりやすい!
でしょ!🤩
よくわかりました!!
それはよかったです!!!😍🎉🎉🎉
わかりやすすぎて驚いてる
でしょ😎✌️
本当に素晴らしい。わかったつもりで流していた部分の解像度が千倍上がりました。
ご視聴コメントありがとうございます!🥰🎉🎉🎉
そう言っていただけるととても嬉しいです!
ぜひこの理解をご活用くださいませ🤩🎉
word2vecを使っている身ですが、知らないことが多く恥ずかしいです。とてもわかりやすかったです、他の動画も見ます。ありがとうございました!
ご視聴コメントありがとうございます!!
お役に立てれば良かったです😊
ぜひ他の動画もご活用くださいませ🤩🎉
高評価100回押したいくらい分かりやすい!!
ご視聴コメントありがとうございます!!!🎉
そう言っていただけるととても嬉しいです🤩🎉🎉🎉
でも!
高評価はぜひ奇数回押してください!😋
分かりやすかったのでいいね7回押しました!
わーい!
奇数回!
さすがです😎✌️
自然言語処理始めて注意2で詰まっていたので、すごく納得しました(➰〰➰)ノ
ありがとうございます
そうなんですよーーーーー!!!
私も大混乱しました😭😭😭
お役に立ててよかったです😊
数学が超弱い私でも分かりやすく、ちゃんと深く解説されていて面白かったです!
質問なのですが、高次元を学習させるデメリットは、計算量が膨大になる、ベクトルが冗長(疎)になることで精度が悪化する、過学習しやすい等があるのかなと思ったのですが、他にもあるのでしょうか?
また、この現象に名前は付いてますか?(調べ方が分かりませんでした...)
ご視聴コメントありがとうございます😍😍😍
ぜひ「高次元統計」で検索してみてください!
色々出てきます、、、、、!😱
面白かったです!2つ質問があります。①単語分散表現を得る手法として、cbowとskipgramはどっちが良いのでしょうか?
②hierarchical samplingとnegative samplingはどちらがよく使われますか?
ご視聴コメントありがとうございます!🍣🍣🍣
こういうのは全部データ次第ですので、気になる場合は4つ全部試して比較していいやつ使うのがいいと思います(^^)
gensim の default が CBOW と negative sampling なので、これがふつうなのだろうなーとは思います。
ちなみに、私も、hierarchical softmax と negative sampling なら、 negative sampling の方が数理的な挙動が良さそうなので好きです(^^)
NLPは疎いのですが凄くためになりました!ありがとうございます.
CBow(encoder)とskip-gram(decoder)を組み合わせてautoencoderのように(skip-gramの入力はCBowの出力のon-hot vector)再構成誤差が小さくなるように学習すると,更に潜在変数空間がうまく学習できるのでは?と思いました.画像系とはやはり違うのですかね?パラメータ数が大きくなりすぎるのでしょうか
ご視聴コメントありがとうございます!
うーん、、、。
AutoEncoder 的なので、圧縮効率は良くなる気もします(どう効率を定義するかの問題はありますが)。
ただ、単語演算などの性質はどの程度残ってくれるのかは非自明な気もします🤔🤔🤔
実際に実験してみるのが一番良いかと思います!
今回の動画も分かりやすかったです!
ありがとうございます!!
されていたら申し訳ないのですが、Doc2Vecについても解説して欲しいです!
ご視聴コメントありがとうございます!😍
doc2vec は再来週辺りに公開予定です😎✌️
本当ですか!?!
めっちゃ楽しみです😄!!!
すごくためになりました!ひとつ最後のNegative samplingについて質問です!
Negative SamplingのモデルとしてはCBOWとskip-gramのどちらの場合でもsoftmaxの部分がロジスティック回帰になっていると考えて大丈夫でしょうか?
ご視聴コメントありがとうございます!
その通りです!😋
@@AIcia_Solid ありがとうございます!
はじめまして。いつもわかりやすい動画ありがとうございます。CBOWについての質問です。中間層では入力層のV次元ベクトルに(h × V)行列を掛けると書いてありますが、高校時代に行列の掛け算というのは(1,V)×(V×h)のような計算はできても(1,V)×(h×V)という計算はできないという風に習った記憶があります。今回はベクトル×行列なので上記のルールは適用されないのでしょうか?数弱すぎて初歩的な質問になってしまい申し訳ありません。
ご質問ありがとうございます🎉
日本語の表現なので微妙なところですが、行列が左、(列)ベクトルが右の順でかけることを想定していますので、
(h, V) x (V) の形で問題ないかと思います!
24:25 くらいに出てくるのは実際に W_I e_i の順になっています!
@@AIcia_Solid 回答ありがとうございます!なるほど!スッキリ出来ました!ほんとにありがとうございます。これからも勉強頑張ります
いつも分かりやすい動画を生成いただきありがとうございます!
ようやく NLP 編に追いつきました… (NLP だけに)
1点質問させていただきたいですのですが,
学習の高速化のところで 「高速化なし (現実的ではないとのことですが)」「hierarchical softmax」「negative sampling」それぞれについて,
同一の単語でも取得できる分散表現は結果が異なりそうな気がしているのですが理解あっておりますでしょうか?
またその場合, どの手法が分散表現の結果が人間の理解に近しいものなのかという観点での研究結果はございますか?
NLP を勉強し始めたばかりの初心者質問で申し訳ございませんが, ご回答いただければ幸いです。
ご視聴コメントありがとうございます!(^o^)
良い質問ですね😎
高速化を変えたら分散表現も変わります!
それはご想像のとおりです!
どれが人間と近いかという研究は、、、私はあまり知りません🙇♂️
でもあるかもしれません!
論文を探してみると良いかと思います!
@@AIcia_Solid
お返事いただきありがとうございます!
1点目については自分の認識通りで安心しました!
2点目については論文を調べてみることにします!
自分が修士の時に、SOMの改良版で文書分類してたんですが、Word2Vecなかったんですよね。
なんと、そうなんですね!!
この領域はほんとに進化が早いですよね、、、!😮
いつもめちゃくちゃ勉強になってます!ありがとうございます!
いいね2回押しました!ちなみにfasttextのご紹介などもご検討いただけたりしますでしょうか?
fasttextも上記のような形で学べたらテンソン上がりすぎていいね4回押しちゃうと思います!
押すなら奇数回にしてくださいー!/(^o^)\
fasttext もそのうちやる予定です!
しばしお待ちを😍🎉
「面白い、わかりやすい、深い」が見事に実現されていますね。日本語が分かって本当によかったと毎回感じさせてもらっています(日本人ですが)。お願いとしては、「Alciaからみた大学入試問題の風景」のシリーズなどはご無理でしょうか?答えを出すための解法動画は他にもありますが、もっと高みから見たものをAlciaさんに解説していただけると、すばらしいと思います。現在かなりコアな方が対象になっていますが、中高校生から社会人までどーんと日本中でAlciaファンが増えるのではないでしょうか。こちらのチャンネルの1ファンとして是非そうなって欲しいと思います。長文失礼しました。
いつもご視聴いただいてありがとうございます😊
日本語コンテンツを増やすことが私の活動の中で大事なことのひとつですので、そういっていただけると非常にうれしいです🎉
高校数学の魅力も、いつかやってみたいと思ってます!🔥
少しずつやってみようと思います😊
現役高校生からもお願いします。
非常に分かり易かったです。毎回、ありがとうございます。1つ質問させてください。分散表現を横に並べたW_i は学習により求めると理解しました。ただその場合、特にskip-gramでは必ずしもW_iは予測精度の観点からみると適切ではない、でも分散表現としては適切となるでしょうか?分散表現をどのようにして得るのかを知りたいです。
> 予測の観点からみると適切ではない?
適切かどうかは、問題設定によると思います。
分類問題としては、正解率1%程度が関の山なので、あまりよくないといえるかもしれません。
> 分散表現はどう得る?
これは動画で話してるので、再度みてみてください!
随分と前のコメントですが、私も同じような疑問を持ちました。
収束しないような学習をさせているにも関わらず、どうして得られた分散表現重みW_i は最適な次元圧縮を学習できていると言えるのかイマイチ腑に落ちません。
収束はするとは思いますよ!
ただが良くないだけで🤔
@@AIcia_Solid お返事ありがとうございます。
甘えた質問ばかりで申し訳無いんですが、skip-gramによって[he]のその後2単語を予測するとき恐らく(0.51, 0.49)みたいな(とりあえず一番損失が少ない)出力をする形で学習は収束する。加えて予測精度が良かろうが悪かろうがW_iは、
W_womenよりもW_manとの内積が大きくなるようなベクトル を出力できるように学習していくため
期待されるような分散表現を獲得できる。
という解釈はおかしいですか?
だいたいその解釈で良いかと思います!
注目単語から周辺単語を予測する条件付き確率ってどうやって計算するのでしょうか。
ご視聴コメントありがとうございます!
しかしこれは、どういう意味の質問でしょうか、、、?
予測値であれば、 skip-gram の softmax (やその軽量版)の出力がそのまま条件付き確率のようなものになりますが、、、!
たいへん勉強になります。ありがとうございます。1つ質問です。18分頃から出てくるhX V行列は具体的にどのような行列になりますか?
ご視聴コメントありがとうございます!
おそらく、W_I のことですよね?
この役割については、
21:51 2-7 学習結果から分散表現を手に入れる
あたりから話してありますが、こちらを見ていただいた上で疑問があるということでしょうか?
もう少し疑問を詳しくお教えいただけますと助かります。
よろしくおねがいします!
negative samplingについて教えてください。
正例と負例のうち、負例は説明の通りでわかったのですが、正例がわかりませんでした。
これは、そもそも学習の時にインプットと合わせてモデルに与える(w_tは〇〇だよと)という理解で合っていますでしょうか?
ご視聴コメントありがとうございます!
正例は、元にしているデータから作れます。
CBoW なら、文章データのまんなかの1単語を隠して当てさせていますので、
隠した単語を用いればそれが正例になります。
これで疑問は解けますでしょうか?
まだ謎がありましたら遠慮なく聞いて下さい!
@@AIcia_Solid
はい!ありがとうございます!
動画乙。自然言語処理は疎くて、word2vecって、ベクトル化程度にしか記憶してなかったけど、よくわかりました。次回も期待。
いつもご視聴ありがとうございます(^^)
ぜひお楽しみに😎
いつもありがとうございます!
17:44 h×vのhは2c個の単語の単語数で最大でも2cという認識であっていますでしょうか?
いえ、h は単語埋め込みの次元で、2c とは別物です!
@@AIcia_Solid ありがとうございます。
one-hotベクトルを次元数が低い密なベクトル(h×v)に変換してるという事だと思うのですが、hはどのように決定しているのでしょうか?
h は勘と経験で適度に決めます🤤
だいたい数百くらいが多い気がします!
@@AIcia_Solid ありがとうございます😋
他の重みのようにhを更新していくアルゴリズム?もあるのでしょうか?
それとも、例えば木モデルのmax_depthのように何パターンか試すのでしょうか?
そうではなく、変更してもそこまで影響がないので決めうちでいくのでしょうか?
何回も質問してすいません🙇🏻♂️
質問はやりたいだけやってください!(^o^)
h はハイパーパラメーターなので、色々試して探索する感じになります。
一言で言える感じではないですが、数値変えると色々変わるので、各種影響見ながら調整して決めていく感じです!(^o^)
動画ありがとうございます。
勉強させていただいています。
1つ質問させてください。
25分あたりでW_I=(V1, V2......Vv)と説明されていますが
これは図でいうと以下のように単語ごとのベクトルが縦に入っているという理解であっているのでしょうか。
v_1 = wt-cのone hotベクトル
v_2 = wt-1のone hotベクトル
ご視聴コメントありがとうございます!🎉
素敵な質問ですね!
v_1, v_2,... は、w_t のベクトルとは異なります。
分析の前に、登場する単語リストを作り、
その1番目の単語のベクトルが v_1、2番めの単語のベクトルが v_2、、、という感じです!
伝わりますでしょうか?
もし疑問が残っていたら遠慮なく聞いてください!
@@AIcia_Solid ご返信ありがとうございます。
登場する単語のリストという部分ですが、以下のどの解釈になりますでしょうか。
1.予測する単語が含まれる文章に登場する単語
2.対象言語が持つ単語リスト(動画内で数万〜数十万と言ってるもの)
3.上記どちらでもない
2です!
@@AIcia_Solid なるほどです。
教えていただいた情報を頭に入れてもう一度見返してみます。
かわいいかわいいアイシアちゃんありがとー!
ぜひぜひ!🤩
また分からない事があれば是非質問してください!🎉
すごい分かりやすかったです!
けど数学のところが...
機械学習および自然言語処理をやるうえで大学1.2年で習った数学の知識全部必要でした💦
こんなの何に使うんだよ!!早くプログラミングやらせろ!!とか言ってた2年前の自分を殴りたいです😭
そーなんですよ、めちゃ使うんですよー😮
ただ、逆に、ほぼそれしか使わないので、それだけやっちゃえば楽ですよ😋
必要にかられた時の方が勉強早かったりしますし、取り組んでみたら良いと思います(^o^)
ニューラルネットワークで次元を圧縮して特徴量を抽出する。発想としてはオートエンコーダと似てて、それの発展みたいな感じかな。しかしまあ、よくこんなの思いつくもんだ。
ですよね😮
すごい人もいるものです😍
質問2件です
(1/2) CBOWで2C個の平均を取っているのは、W_t-c〜W_t-1、W_t+1〜W_t+cの平均が大体W_tを表すベクトルになるんじゃない?という気持ちなのでしょうか?
(2/2) CBOWがお勉強して賢くなると、W_I行列がブラッシュアップされて、結果として分散表現が上手くなるという雰囲気なのでしょうか?
ご視聴コメントありがとうございます!
どちらも yes です!
そんな気持ちで計算されています!🔥
@@AIcia_Solid 返信ありがとうございました。気持ちがよく分かりました!AttentionのEncoderに雰囲気似ていますね。
引き続き動画シリーズ拝見して参ります。いつもありがとうございます。
それは良かったです!!🎉
まさに、Attention の Encoder は、word2vec の非線形版ですし、その感覚はめちゃ正しいと思います🤩🎉
ふぎゃぁあ(分かった)
いえええええい!(うれしい😊)
skipgramがさすがに適当過ぎて圧縮できればおkと言われても感覚的には無理がある気がするしcbowがあるなら全部それでいいじゃんって思っちゃうけど、実際cbowよりskipgramの方が有利な場合や使われる場合ってどんなケースがあるんだろ。
skipgram のテキトーさはやばいですが、 cbow と入出力が逆になっているだけですし、単語の分散表現獲得ではこれでいいのかもしれません😮
私はもうそこにストレスを感じないからだになってしまったので、ぜひ M S K さんに探求していただきたいです😍
hierarchical softmax がマジでわからん
logV回の2分類はどれとどれを分類するんだ?
2分類をlogV回繰り返して最終的にV分類するためには、単語を完全2分木の葉にして根からたどることになるはずだけど、完全2分木は誰が作るの?
その完全2分木も、なんかいい感じの方法で作成されます😋
原論文や、そこで引かれている論文に書いてありますので、ぜひ見てみてください!🎉
アイシアさーん。
この動画から、動画タイトルのナンバリングがズレてませんかー?
この動画は、【ディープラーニングの世界 vol. 21】のはず。
ほ、ほんとだ、、、😮
ありがとうございます!なおしました!😍🎉
ちなみに私はアイシアです😋
@@AIcia_Solid
すみません。
私の方にも、ミスがありましたね笑😁
おあいこということで😊
skip-gramだと出力のそれぞれの単語に対して予測確率が同じになってダメダメという話がありましたが、出力のそれぞれに対する予測を独立に行っているだけであって、分類精度を平均するとCBOWと同じようなものではないのでしょうか。分類精度を高くするというのが直接の目的ではないのはその通りだと思うのですが、skip-gramがCBOWよりもダメなモデルであるというのは誤解を生むのではないかと思います。実際skip-gramの方がよく使われていると思います。
ご指摘ありがとうございます!
skip-gram が次単語予測器として強くはないとは話していますが、
CBOW との比較はたぶんしてないと思います!
(していたら教えてください🙇♀️🙇♀️🙇♀️)
@@AIcia_Solid skip-gramのところにだけ分類精度が低いという注意書きがあったのと、その前に出力のそれぞれに対して同じ予測をする、というのを合わせて聞くと、skip-gramの方が悪いという風に聞こえてしまいました。
ありがとうございます!
たしかに、それだとそう見えてしまうかもしれません、、、
ご指摘ありがとうございます!
以後気を付けて発信していきます!🔥
もうめちゃくちゃ単純なことがわからない、Vとhってどれ、なんのことですか😢
ご視聴コメントありがとうございます🎉
V は単語数で、h は単語ベクトルの次元です!
書いてあったり、喋ってたりするので、ぜひもう一度見返してみてください!(^o^)