nico-illustデータセット( https://dmv.nico/ja/nico-opendata/ )を用いて、イラストを入力すると適切なコメントを生成するモデルを学習する。
niconico超コメント生成ハッカソン ( https://chokaigi2016-dmv.connpass.com/event/28524/ )のチュートリアル資料です。
イラストからのコメント生成チュートリアルコメント生成ハッカソンגࣜձࣾυϫϯΰେ֞ܚհ
View Slide
Ipython ϋϯζΦϯhttps://github.com/nico-opendata/illust_comment_search2
લฤը૾ಛྔͷ
Nico-illustλάೝࣝ4
Nico-illustλάೝࣝ• ͬͯΔϞσϧɺVGGͷҰ൪খ͍͞Ϟσϧ• λάෳ͚ͭΒΕΔͷͰ͋ΓɺϚϧνϥϕϧ• ग़ݱස্Ґͷ͏ͪɺΩϟϥΫλ໊ɾ࡞໊Λද͢ͷΛ400λά༻ҙ• (దͳύϥϝλΛબ)GPUΛར༻ͯ͠1िؒ͘Β͍Ͱऩଋ͢ΔɻτϨʔχϯάσʔλͰ༧ଌਫ਼5ׂ͘Β͍5ΞϦγΞɾιϦου χίχཱମͪΌΜイラストCNNタグマルチラベルSigmoid cross entropy
Nico-illustಛྔநग़• ΩϟϥΫλ໊ͷࣝผثԿ͕خ͍͠ͷ͔ʁ– Πϥετʹ͓͚Δ”ΩϟϥΫλੑͷྨࣅ”͕ܭࢉͰ͖ΔΑ͏ʹ• λάͷग़ྗϨΠϠͰͳ͘ɺͦͷલͷϨΠϠΛϕΫτϧͱͯ͠ѻ͍ɺۙ୳ࡧ͢Δɻ6今回用いる特徴量
ྨࣅը૾ݕࡧ• ྨࣅը૾ΛͲΜͲΜ୧ͬͯɺٻΊΔը૾ʹͨͲΓண͚ΔUI• ܕɾͳͲͷΩϟϥΫλੑ͕ྨࣅ͍ͯ͠Δը૾͕ީิʹग़ͯ͘Δ– ͜͜ͰΩϟϥΫλͷྫग़͞ͳ͍ͷͰɺͥͻwebσϞͰࢼͯ͠Έ͍ͯͩ͘͞– https://nico-opendata.jp/ja/demo/similar/7
ϞʔϑΟϯά8• ಛΛϕΫτϧͱͯ͠ѻ͍ͬͯΔͷͰɺ2ͭɺ3ͭͷϕΫτϧͷฏۉΛऔΔ͜ͱͰ͖Δɻ• ˠനࠇೣࣖը૾͔ΒΧϥʔೣࣖը૾Λܦͯࠇϩϯάը૾ʹભҠ͢Δྫ
ίϝϯτಛ
ྨࣅίϝϯτݕࡧ10
ίϝϯτಛͷநग़• ৄ͍͠લճͷChainer meetup vol.1ͰհࡁΈͳͷͰɺ͜͜Ͱඞཁ࠷ݶ͚ͩ͠·͢ɻ• લճొஃऀͷ @ixixi ͷҎԼͷهࣄΛࢀর͍ͯͩ͘͠͞ɻ11
ίϝϯτಛͷநग़\n ͖ ΌΘ ͨ Μ ͖ Ό Θ ͨ Μ 12LSTMLSTMLinear• ίϝϯτղੳͷϙΠϯτɺܗଶૉղੳ্͕ख͘ߦ͔ͳ͍ͱ͍͏͜ͱɻ– ৽ޠ͕ଟͯࣙ͘ॻ͕ରԠͰ͖ͳ͍– ࣙॻΛڧԽͯ͠ɺݴ่͍͕͑͠ଟ͍• ࠓͷͱ͜Ζɺจࣈ୯ҐLSTM͕ͬͱ্ख͍͘͘ɻ
ྨࣅίϝϯτݕࡧ• ΧςΰϦೝࣝͷΛ༻͍ͯLSTMΛτϨʔχϯά13\n ͔ Θ ͑ ͑ LSTMLSTMLinear動物シングルラベルSoftmax cross entropy
ྨࣅίϝϯτݕࡧ• ΧςΰϦೝࣝͷΛ༻͍ͯLSTMΛτϨʔχϯά14\n ͔ Θ ͑ ͑ LSTMLSTMLinear類似検索用特徴量
コメント生成
એ: niconicoίϝϯτੜΠϥετը૾(+λά)͔ΒίϝϯτΛੜ͢ΔϓϩάϥϜΛڝ͏ίϯςετΛχίχίձٞ2016Ͱ։࠵!!ࢀՃํ๏2ͭɻੋඇࢀՃ͍ͯͩ͘͠͞• 3/21(໌ޙ)ʹߦΘΕΔϋοΧιϯʹࢀՃ͠ɺγʔυݖΛউͪऔΔ• 4݄ʹ࣮ࢪ͢ΔެืʹԠืͯ͠ɺॻྨ৹ࠪΛ௨Δ
ը૾ಛͱίϝϯτಛͷରԠͷֶश• Πϥετɾίϝϯτͷ̎छྨͷղੳʹ͍ͭͯड़ͨͷͰɺ͜ͷ̎ͭΛ݁ͼ͚ͭΔΛ͢Δɻ• ඪɺΠϥετʹదͳίϝϯτΛ͚ͭΔ͜ͱ• ·ͣɺੜͰͳ͘ݕࡧʹ͍ͭͯड़Δ17イラストコメントΠϥετCNNίϝϯτLSTMイラスト特徴コメント特徴
18\n ͔ Θ ͑ ͑ LSTMLSTMLinearベクトル同士の比較Mean Squared Error画像と、そこについているコメントのペアデータ
19\n ͔ Θ ͑ ͑ LSTMLSTMLinearベクトル同士の比較Mean Squared Error画像と、そこについているコメントのペアデータロスの伝搬画像とコメントの特徴空間をマージする
ը૾ಛͷ20
ίϝϯτಛͷ21
ྨࣅίϝϯτ܈• ؋͜Είϝϯτ22
ྨࣅίϝϯτ܈23幼女うーにゃーかわいい
ը૾ -> ίϝϯτͷ࠷ۙ୳ࡧ˞͔͜͜ΒઌඇৗʹϋΠίϯςΫετͳΛ͠·͢ɻχίਥͳχϡʔϥϧωοτϫʔΫͷؾ࣋ͪʹͳ͍ͬͯͩ͘͞ɻ24
౦ํͷνϧϊ͞Μʹ͍ͭͯ25• 数値は、画像ベクトルとコメントベクトルの距離• 画像ベクトルの近傍からコメントを幾つか拾う
౦ํͷϨϛϦΞ͞Μʹ͍ͭͯ26
؋͜Εͷۚ߶ܕ࢞ຓͷը૾ʹ͍ͭͯ27
৺ͷ؟Ͱݟଓ͚ΔͷͭΒ͍ͷͰɺը૾༗ΓͰΛ͠·͢˞ͬͺΓϋΠίϯςΫετͰ͢ɻ28
༮ஓԂੜͷঁͷࢠͷΠϥετʢਫ৭ͷ੍ʣ29
༮ஓԂੜͷঁͷࢠͷΠϥετʢਫ৭ͷ੍ʣ30
༮ஓԂੜͷঁͷࢠͷΠϥετʢਫ৭ͷ੍ʣ31έϩϩ܉ͱ͍͏࡞ʹɺԫ৭͍ɺϔϧϝοτΛඃͬͨɺΧΤϧͷ͕͍ΔͷͰ͢ɻɻɻ
ೖֶࣜͷΠϥετʮαΪʯ32
ೖֶࣜͷΠϥετʮαΪʯ33
ೖֶࣜͷΠϥετʮαΪʯ34౦ํProjectʹɺ͏ͲΜ͛ͪΌΜͱ͍͏ɺ͏͞ΈΈͷঁͷࢠ͕͍ΔͷͰ͢
ΤΞΨϯͰԐͱઓ͏ओ්ͷΠϥετ35
ΤΞΨϯͰԐͱઓ͏ओ්ͷΠϥετ36
ΤΞΨϯͰԐͱઓ͏ओ්ͷΠϥετ37連邦の主婦は化け物か
ఆྔධՁ• 1000ݸͷΠϥετ-ίϝϯτϖΞΛ༻ҙ• ը૾ಛ͔Βۙίϝϯτ୳ࡧΛߦ͍ɺରʹͳΔίϝϯτ͕ԿҐ͔ΛௐΔ• ্Ґ5%ج४Ͱ23%͕ਖ਼ղ38
TODO1: Contrastive Loss39\n ͔ Θ ͑ ͑ LSTMLSTMLinearベクトル同士の比較Mean Squared Error画像と、そこについているコメントのペアデータロスの伝搬画像とコメントの特徴空間をマージする
TODO1: Contrastive Loss40\n ͔ Θ ͑ ͑ LSTMLSTMLinear正例なら近づける、負例なら離すContrastive Loss画像とコメントのペアデータ負例として他の画像に付いているコメントもロスの伝搬画像とコメントの特徴空間をマージするロスの伝搬
TODO1: Contrastive Loss• ϩεΛ্ख͘Լ͛ΒΕͳ͔ͬͨ• ϚʔδϯΛͲΕ͘Β͍ʹऔΔ͔ɺਖ਼ྫͱෛྫΛͲ͏͍͏ׂ߹Ͱֶशͤ͞Δ͔ɺ͕γϏΞͳΑ͏ʹײͨ͡ɻ• ͦͦSiameseωοτϫʔΫ(ೖྗ1ͱ2͕ωοτϫʔΫ͔Βग़ྗ͞ΕΔͷ)Ͱͷద༻͕ओ?41
TODO2: Encoder-decoder• ࠓճͨ͠ͷɺը૾ͷencoderͱίϝϯτͷencoderΛಉ࣌ʹτϨʔχϯά͢Δͱ͍͑Δ• Ұൠʹɺը૾->ίϝϯτͷ(ͱ͍͏͔ࣗવݴޠॲཧͷ)ࠓͷτϨϯυencoder-decoder• ը૾ΛCNNͰΤϯίʔυͯ͠ɺͦΕΛLSTMͷ0จࣈͷೖྗͱͯ͠ɺ1จࣈʙΛ༧ଌ͍ͯ͘͠Ϟσϧ42LSTMLSTMLinear\n ͖ Ό Θ ͨ Μ ͖ Ό Θ ͨ Μ Encoder-CNNDecoder-LSTM
TODO2: Encoder-decoderੜྫλά༧ଌ: ϥϒϥΠϒʂ, ᖒʹ͜>͡Ό͋Latͷ͠खͱฦͯ͠Β͓͏λά༧ଌ: Steins;Gate>ത࢜!!!!!!!!!!!!!!!!λά༧ଌ: ౦ํ, খ௩খொ, ෩ݟ༓߳>ਆʑ͍͠ͳ͊λά༧ଌ: ਐܸͷڊਓ>දΆ͍ͳ͊• ͨΓোΓͷແ͍ίϝϯτ͔ɺΠϚΠνຊޠͱͯ͠ඍົͳίϝϯτ͕ੜ͞Εͯ͠·͏• ຊޠΛจࣈ୯ҐͰѻ͍ͬͯΔͱ͍͏ͷ͕ɺdecoderͱ૬ੑ͕ѱ͍ͷ͔ͳɺͱߟ͑ΒΕΔɻࢀߟʹͯ͠ΔจӳޠϑϥϯεޠͳͲͰɺ୯ޠ୯ҐͰग़ྗ͢ΔϞσϧͳͷͰɻ43
niconicoίϝϯτੜΠϥετը૾(+λά)͔ΒίϝϯτΛੜ͢ΔϓϩάϥϜΛڝ͏ίϯςετΛχίχίձٞ2016Ͱ։࠵!!ࢀՃํ๏2ͭɻੋඇࢀՃ͍ͯͩ͘͠͞• 3/21(໌ޙ)ʹߦΘΕΔϋοΧιϯʹࢀՃ͠ɺγʔυݖΛউͪऔΔ– “ίϝϯτੜϋοΧιϯ”Ͱݕࡧ– http://chokaigi2016-dmv.connpass.com/event/28524/• 4݄ʹ࣮ࢪ͢ΔެืʹԠืͯ͠ɺॻྨ৹ࠪΛ௨Δ
ίϝϯτੜϋοΧιϯ
Ipython ϋϯζΦϯhttps://github.com/nico-opendata/illust_comment_search46
ͦͷଞͷํ๏1: ྨࣅը૾ݕࡧ• ྨࣅը૾ݕࡧͷipython༻ҙ͓͖ͯ͠·ͨ͠ɻ47
ͦͷଞͷํ๏1: ྨࣅը૾ݕࡧ1. ྨࣅը૾ݕࡧͰը૾͔Βྨࣅը૾ͷIDΛͻ͘2. ίϝϯτσʔληοτ͔Βɺྨࣅը૾IDͷίϝϯτΛऔͬͯ͘Δ48• ࣮ࡍɺίϝϯτΛݕࡧ͢Δͷͱɺ͍ͬͯΔ͜ͱͦΜͳʹมΘΒͳ͍͔͠Εͳ͍
ͦͷଞͷํ๏2: タグݕࡧ1. ίϯςετͰλά͕ิॿใͱͯ͠༩͑ΒΕΔͷͰɺ͜ΕͰίϝϯτͷଟ͍ॱݕࡧΛ͢Δɻ2. ίϝϯτσʔληοτ͔Βɺը૾IDʹରԠ͢ΔίϝϯτΛͱͬͯ͘Δ49
ͦͷଞͷํ๏2: タグݕࡧ• ͨͩ͠ɺλά͕ेʹ͍͍ͯΔը૾͕ଟ͍Θ͚Ͱͳ͍• λά͕͍͍ͭͯͯɺ”ঁͷࢠ””ΦϦδφϧ”ͷΑ͏ͳɺҰൠతͳλά͕ඇৗʹଟ͍– ͲͷλάͰݕࡧ͢Δ͔ͷ50
ͦͷଞ: χίχί֎ͷࢿݯΛར༻• ಛʹݴޠͷํɺχίχίͷ֎ʹͨ͘͞Μσʔλ͕༗Δɻ– ՎʹಛԽֶͨ͠शΛ͢Δ– খઆʹಛԽֶͨ͠शΛ͢Δ• ը૾ͱݴޠͷϖΞσʔλɺຊޠͰͳ͚Ε͍͔ͭ͋͘Δ– MS COCOσʔληοτͳͲ51