Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BERTによる自然言語処理を学ぼう!【 Live!人工知能 #26】 #Live人工知能

yuky_az
November 02, 2020

BERTによる自然言語処理を学ぼう!【 Live!人工知能 #26】 #Live人工知能

自然言語処理の様々なタスクで高い性能を発揮する、「BERT」を解説する講座です。
BERT(Bidirectional Encoder Representations from Transformers )は2018年10月にGoogleが公開して以来、世界中のAI関係者の注目を集めています。
BERTは「Transformer」と呼ばれるモデルを利用することで、離れた単語間の関係、すなわち「文脈」を考慮した自然言語処理を実現します。
タスクによっては人間並みの精度を発揮する可能性もあり、「応答文の生成」や「文書の要約」といった様々なタスクでの活用が期待されています。
本講座により、新しい時代の有用な自然言語処理技術を身に付けましょう。

講座の内容は以下を予定しています。
Section1. 講座とBERTの概要: https://youtu.be/wPvRJXpLEyg
Section2. シンプルなBERTの実装: https://youtu.be/ZK3lFu5mXRM
Section3. BERTの仕組み: https://youtu.be/4iEVNNAh0SI
Section4. ファインチューニングの活用: https://youtu.be/InWiIJwrvH8
Section5. BERTの応用: https://youtu.be/02tfJx8ic3Q
講座の内容は、予告なく変更されることもあるのでご注意ください。

なお、今回の講座でプログラミング言語Pythonの解説は最小限となります。

【Live!人工知能】
毎週月曜日21時に開催。人工知能(AI)技術に関する無料のライブ講義です。
YouTube Liveを利用して配信されます。
以下のチャンネルで過去のライブ動画の一部を見ることができます。
https://www.youtube.com/channel/UCT_HwlT8bgYrpKrEvw0jH7Q

講師: 我妻幸長(@yuky_az)
「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役。AI関連の教育と研究開発に従事。
東北大学大学院理学研究科修了。理学博士(物理学)。
興味の対象は、人工知能(AI)、脳科学、シンギュラリティなど。
オンライン教育プラットフォームUdemyで、数万人にAIを教える人気講師。
様々な有名企業でAI研修を担当。
著書に、「はじめてのディープラーニング」「はじめてのディープラーニング2」(SBクリエイティブ)、「Pythonで動かして学ぶ!あたらしい数学の教科書 機械学習・深層学習に必要な基礎知識」(翔泳社)。共著に「No.1スクール講師陣による 世界一受けたいiPhoneアプリ開発の授業」(技術評論社)。

yuky_az

November 02, 2020
Tweet

More Decks by yuky_az

Other Decks in Technology

Transcript

  1. ʙ
    -JWFɛʈٝঐ
    㘴㙖㙦㙀㙞೮࿥e㘈㘍㗗㗏㗊ᗴ㗄㗗㗾㗙

    View full-size slide

  2. ΠϯτϩμΫγϣϯ

    View full-size slide

  3. ߨࢣ঺հ
    զ࠺޾௕
    :VLJOBHB"[VNB
    !ZVLZ@B[
    4"*-BCגࣜձࣾ୅දऔక໾
    "*ؔ࿈ͷڭҭɺݚڀ։ൃʹैࣄ
    ཧֶത࢜ʢ෺ཧֶʣ
    6EFNZͰ਺ສਓΛࢦಋ༗໊اۀͰ"*ݚमΛ୲౰
    ஶॻʹʮ͸͡ΊͯͷσΟʔϓϥʔχϯάʯͳͲ

    View full-size slide

  4. ίʔεͷಛ௃
    • BERTͷجૅΛֶͿ

    → TransformerɺBERTͳͲͷࣗવݴޠॲཧٕज़Λֶͼ·͢
    • PyTorchʹΑΔ࣮૷

    → Google Colaboratory؀ڥͰBERTΛಈ࡞ͤ͞·͢
    • ߨ࠲ͷର৅

    → ҰาਐΜͩࣗવݴޠॲཧٕज़Λ਎ʹ෇͚͍ͨํ

    → σΟʔϓϥʔχϯάʹؔ͢Δجૅతͳ஌ࣝͷ͋Δํ

    → ϓϩάϥϛϯάɺӳޠʹ఍߅ײ͕খ͍͞ํ

    View full-size slide

  5. ߨ࠲ͷ಺༰
    Section 1. ߨ࠲ͱBERTͷ֓ཁ
    Section 2. γϯϓϧͳBERTͷ࣮૷
    Section 3. BERTͷ࢓૊Έ
    Section 4. ϑΝΠϯνϡʔχϯάͷ׆༻
    Section 5. BERTͷԠ༻

    View full-size slide

  6. ࠓճͷ಺༰
    1. ΠϯτϩμΫγϣϯ
    2. ίʔεͷ֓ཁ
    3. ࣗવݴޠॲཧͷ֓ཁ
    4. Transformerͷ֓ཁ
    5. BERTͷ֓ཁ
    6. Google Colaboratoryͷ࢖͍ํ

    View full-size slide

  7. ڭࡐͷ঺հ
    • Pythonͷجૅ

    View full-size slide

  8. ίʔεͷ֓ཁ

    View full-size slide

  9. Section 1. ߨ࠲ͱBERTͷ֓ཁ
    ࣗવݴޠॲཧɺTransformerɺBERTʹ͍ͭͯ֓ཁΛֶͼ·͢

    View full-size slide

  10. Section 2. γϯϓϧͳBERTͷ࣮૷
    ࠷খݶͷPythonͷίʔυͰBERTΛ࣮૷͠·͢

    View full-size slide

  11. Section 3. BERTͷ࢓૊Έ
    TransformerɺBERTͳͲʹ͍ͭͯ࢓૊ΈΛৄֶ͘͠ͼ·͢

    View full-size slide

  12. Section 4. ϑΝΠϯνϡʔχϯάͷ׆༻
    ϑΝΠϯνϡʔχϯάͷ֓ཁɺͦͯ͠BERTʹ͓͚Δ׆༻ʹ͍ͭͯղઆ͠·͢

    View full-size slide

  13. Section 5. BERTͷԠ༻
    BERTΛ࢖ͬͯɺࣗવݴޠॲཧͷλεΫʹऔΓ૊Έ·͢

    View full-size slide

  14. ࣗવݴޠॲཧͷ֓ཁ

    View full-size slide

  15. ࣗવݴޠॲཧͱ͸
    • ࣗવݴޠͱ͸ɺ೔ຊޠ΍ӳޠͳͲͷզʑ͕ීஈ࢖͏ݴޠͷ͜ͱ
    • ࣗવݴޠॲཧʢNatural Language ProcessingɺNLPʣͱ͸ɺ

    ࣗવݴޠΛίϯϐϡʔλͰॲཧ͢Δٕज़ͷ͜ͱ

    View full-size slide

  16. ࣗવݴޠॲཧͷԠ༻
    • ݕࡧΤϯδϯ
    • ػց຋༁
    • ༧ଌม׵
    • εύϜϑΟϧλ
    • Ի੠Ξγελϯτ
    • খઆͷࣥච
    • ର࿩γεςϜ
    • etc…

    View full-size slide

  17. ࣗવݴޠॲཧٕज़ͷཁૉ
    • ܗଶૉղੳ

    → จॻΛ୯ޠʹ෼ׂ͢Δٕज़
    • ୯ޠͷ෼ࢄදݱ

    → จॻ಺Ͱͷؔ܎ੑΛ౿·͑ͯɺ୯ޠΛϕΫτϧԽ͢Δٕज़
    • ࠶ؼܕχϡʔϥϧωοτϫʔΫʢRNNʣ

    → ࣌ܥྻΛѻ͏ͷ͕ಘҙͳχϡʔϥϧωοτϫʔΫͷҰछ
    • Seq2Seq

    → RNNΛϕʔεʹͨ͠ɺจষͳͲΛੜ੒ՄೳͳϞσϧ
    • etc…

    View full-size slide

  18. ೔ຊޠͷܗଶૉղੳ
    • ܗଶૉͱ͸ɺݴ༿͕ҙຯΛ࣋ͭ·ͱ·Γͷ୯ޠͷ࠷খ୯Ґͷ͜ͱ
    • ܗଶૉղੳͱ͸ɺࣗવݴޠΛܗଶૉʹ·Ͱ෼ׂ͢Δ͜ͱ
    • ೔ຊޠ΍தࠃޠɺλΠޠ͸୯ޠؒʹεϖʔε͕ແ͍ͷͰɺ

    ܗଶૉղੳ͕ඞཁ
    • ҎԼ͸୅දతͳ೔ຊޠͷܗଶૉղੳϥΠϒϥϦ
    • MeCab → ஌໊౓͕ߴ͘ɺߴ଎ɺߴਫ਼౓
    • Janome → ଎౓͸MeCabʹྼΔ͕ɺಋೖ͕؆୯
    • etc…

    View full-size slide

  19. one-hotදݱ
    ͢΋΋ ΋ ΋΋ ΋ ΋΋ ͷ ͏ͪ
    ͢΋΋ ΋ ΋΋ ͷ ͏ͪ
    *%
    ʮ͢΋΋ʯͷone-hotදݱ: [1 0 0 0 0]
    ʮ΋ʯͷone-hotදݱ: [0 1 0 0 0]

    View full-size slide

  20. ෼ࢄදݱ
    • ୯ޠؒͷؔ࿈ੑ΍ྨࣅ౓ʹجͮ͘ϕΫτϧͰɺ୯ޠΛදݱ͢Δ
    ʜ
    ʜ
    ʜ
    200ཁૉఔ౓
    உੑ
    ϩϯυϯ
    Python
    • word2vecͳͲΛ࢖͑͹ɺ଍͠ࢉ΍Ҿ͖ࢉ͕ՄೳͳϕΫτϧΛ࡞Δ͜ͱ͕Ͱ͖Δ

    ྫ: ʮԦʯ-ʮஉʯ+ʮঁʯ=ʮঁԦʯ

    View full-size slide

  21. word2vec
    • word2vec͸ɺ෼ࢄදݱΛ࡞੒͢ΔͨΊͷٕज़
    • word2vecͰ͸ɺCBOWʢcontinuous bag-of-wordsʣ΋͘͠͸ɺ

    skip-gramͱ͍͏χϡʔϥϧωοτϫʔΫ͕༻͍ΒΕΔ

    View full-size slide

  22. ॏΈ
    CBOWʢcontinuous bag-of-wordsʣ
    • લޙͷ୯ޠ͔Βର৅ͷ୯ޠΛ༧ଌ͢ΔχϡʔϥϧωοτϫʔΫ
    • ֶशʹཁ͢Δ͕࣌ؒskip-gramΑΓ΋୹͍
    ͢
    ΋΋
    ΋΋
    ΋
    ೖྗ૚
    தؒ૚ ग़ྗ૚
    one-hotදݱ
    ॏΈ
    ॏΈΛද͢ߦྻ
    Wmid Wout
    ֶशʹΑΓɺWmid
    ͸෼ࢄදݱͷϕΫτϧ͕ฒΜͩߦྻʹͳΔ
    ΋
    ෼ࢄදݱͱಉ͡
    ཁૉ਺ͷϕΫτϧ

    View full-size slide

  23. skip-gram
    ॏΈ
    • ͋Δ୯ޠ͔Βɺલޙͷ୯ޠΛ༧ଌ͢ΔχϡʔϥϧωοτϫʔΫ
    • CBOWΑΓ΋ֶशʹ͕͔͔࣌ؒΔ͕ɺਫ਼౓͕Α͍
    ͢
    ΋΋
    ΋΋
    ΋
    ೖྗ૚ தؒ૚
    ग़ྗ૚
    one-hotදݱ
    ॏΈ
    ॏΈΛද͢ߦྻ
    Wmid
    Wout
    ֶशʹΑΓɺWmid
    ͸෼ࢄදݱͷ
    ϕΫτϧ͕ฒΜͩߦྻʹͳΔ
    ΋
    ෼ࢄදݱͱಉ͡
    ཁૉ਺ͷϕΫτϧ

    View full-size slide

  24. ࠶ؼܕχϡʔϥϧωοτϫʔΫʢRNNʣͱ͸ʁ
    • ࠶ؼܕχϡʔϥϧωοτϫʔΫʢReccurent Neural Networkʣ

    → ೖྗͱਖ਼ղ͕ʮ࣌ܥྻσʔλʯͱͳΔ

    → தؒ૚͕ʮ࠶ؼʯͷߏ଄Λ࣋ͪɺલޙͷ࣌ࠁͷதؒ૚ͱͭͳ͕Δ
    ೖྗ૚ தؒ૚ ग़ྗ૚
    ࠶ؼ

    View full-size slide

  25. RNNͷॱ఻೻ͱٯ఻೻
    ೖྗ

    தؒ

    ग़ྗ

    ೖྗ

    தؒ

    ग़ྗ

    ೖྗ

    தؒ

    ग़ྗ

    t = 0
    t = 1
    t = 2
    ॱ఻೻

    ٯ఻೻
    • ࣌ؒΛḪͬͯٯ఻೻͕ߦΘΕΔ
    • શͯͷ࣌ࠁͷதؒ૚Ͱɺ

    ύϥϝʔλ͸ڞ༗͞ΕΔ

    View full-size slide

  26. ࣌ܥྻσʔλͷྫ
    • จॻ
    • Ի੠σʔλ
    • ಈը
    • גՁ
    • ࢈ۀ༻ػثͷঢ়ଶ
    • etc…

    View full-size slide

  27. Seq2Seqͱ͸
    • Seq2Seq͸ɺܥྻ(sequence)Λ ड͚औΓɺผͷܥྻ΁ม׵͢ΔϞσϧ
    • ࣗવݴޠॲཧͰΑ͘ར༻͞ΕΔ
    • จষͳͲͷೖྗΛѹॖ͢Δencoderͱɺग़ྗΛల։͢Δdecoder͔ΒͳΔ
    • ҎԼ͸׆༻ྫ
    • ػց຋༁ʢྫ: ӳޠͷจষ → ϑϥϯεޠͷจষʣ
    • จষཁ໿ʢݩͷจষ → ཁ໿จʣ
    • ର࿩ʢࣗ෼ͷൃݴ → ૬खͷൃݴʣ
    • etc…

    View full-size slide

  28. Seq2Seqͷߏ଄
    3//

    Seq2SeqʹΑΔ຋༁ͷྫ
    ޗഐ ͸ ೣ ͩ
    I am a cat
    encoder decoder

    View full-size slide

  29. ͞Βʹৄֶ͘͠ͼ͍ͨํ΁…
    6EFNZίʔε
    ࣗવݴޠॲཧͱνϟοτϘοτ
    "*ʹΑΔจষੜ੒ͱձ࿩Τϯδϯ։ൃ
    6EFNZίʔε
    ਓ޻஌ೳʢ"*ʣΛ౥ࡌͨ͠5XJUUFSϘοτΛ࡞Ζ͏
    ʲ4FR4FR"UUFOUJPO$PMBCʳ

    View full-size slide

  30. Transformerͷ֓ཁ

    View full-size slide

  31. RNNʹΑΔࣗવݴޠॲཧͷ໰୊఺
    • ֶश͕࣌ؒ௕͍

    → σʔλΛฒྻͰॲཧͰ͖ͳ͍ͨΊɺ

    ֶशʹ͸௕͍͕͔͔࣌ؒΔ
    • จ຺ΛͱΒ͑Δͷ͕೉͍͠

    → ௕࣌ؒͷؔ܎ੑΛͱΒ͑Δͷ͕ۤख

    View full-size slide

  32. Transformerͷ֓ཁ
    • Transformerͱ͸ʁ

    → 2017೥ʹಋೖ͞ΕͨσΟʔϓϥʔχϯάϞσϧͰɺ

    ओʹࣗવݴޠॲཧͷ෼໺Ͱ࢖༻͞ΕΔ 

    → RNNͱಉ༷ʹɺࣗવݴޠͳͲͷ࣌ܥྻσʔλΛॲཧ͢ΔΑ͏ʹઃܭ
    ͞Ε͍ͯΔ͕ɺRNNͰ༻͍Δ࠶ؼɺCNNͰ༻͍Δ৞ΈࠐΈ͸࢖Θͳ͍

    → Attention૚ͷΈͰߏங͞ΕΔ

    → ຋༁΍ςΩετͷཁ໿ͳͲɺ༷ʑͳλεΫͰར༻Մೳ

    → ฒྻԽ͕༰қͰ͋Γɺ܇࿅࣌ؒΛେ͖͘࡟ݮͰ͖Δ

    View full-size slide

  33. Transformerͷ࿦จ
    • Attention Is All You Need

    → https://arxiv.org/abs/1706.03762

    • ʮAttentionʯ͸࣌ܥྻσʔλͷಛఆͷ෦෼ʹ

    ஫ҙΛ޲͚ΔΑ͏ʹֶश͍ͤͯ͘͞ํ๏

    View full-size slide

  34. TransformerͷϞσϧ
    "UUFOUJPO*T"MM:PV/FFE "TIJTI 7FUBM
    ΑΓҾ༻
    &ODPEFS %FDPEFS
    &ODPEFSͷߏ଄
    ̍ɽ&NCFEEJOH૚ʹΑΓೖྗจষΛϕΫτϧʹѹॖ
    ̎ɽ1PTJUJPOBM&ODPEFS૚ʹΑͬͯҐஔ৘ใΛՃ͑Δ
    ̏ɽ.VMUJ)FBE"UUFOUJPO૚
    ̐ɽOPSNBMJ[BUJPOʢਖ਼نԽʣͳͲ
    ̑ɽ1PTJUJPOXJTFGVMMZDPOOFDUFEGFFEGPSXBSEOFUXPSL
    ̒ɽOPSNBMJ[BUJPOʢਖ਼نԽʣͳͲ
    Λճ܁Γฦ͢

    View full-size slide

  35. TransformerͷϞσϧ
    "UUFOUJPO*T"MM:PV/FFE "TIJTI 7FUBM
    ΑΓҾ༻
    &ODPEFS %FDPEFS
    %FDPEFSͷߏ଄
    ̍ɽ&NCFEEJOH૚ʹΑΓೖྗจষΛϕΫτϧʹѹॖ
    ̎ɽ1PTJUJPOBM&ODPEFS૚ʹΑͬͯҐஔ৘ใΛՃ͑Δ
    ̏ɽ.VMUJ)FBE"UUFOUJPO૚
    ̐ɽOPSNBMJ[BUJPOʢਖ਼نԽʣͳͲ
    ̑.VMUJ)FBE"UUFOUJPO૚ʢ&ODPEFSͷೖྗΛ࢖༻ʣ
    ̒ɽOPSNBMJ[BUJPOʢਖ਼نԽʣͳͲ
    ̓ɽ1PTJUJPOXJTFGVMMZDPOOFDUFEGFFEGPSXBSEOFUXPSL
    ̔ɽOPSNBMJ[BUJPOʢਖ਼نԽʣͳͲ
    Λճ܁Γฦ͢

    View full-size slide

  36. BERTͷ֓ཁ
    • BERTʢBirdirectional Encoder Representation from Transformersʣͱ͸ʁ

    → 2018೥ͷޙ൒ʹGoogle͔Βൃද͞Εͨɺ

    ࣗવݴޠॲཧͷͨΊͷ৽ͨͳσΟʔϓϥʔχϯάͷϞσϧ 

    → Transformer͕ϕʔεͱͳ͍ͬͯΔ

    → ༷ʑͳࣗવݴޠॲཧλεΫͰϑΝΠϯνϡʔχϯά͕Մೳ

    → ैདྷͷࣗવݴޠॲཧλεΫͱൺֱͯ͠ɺߴ͍൚༻ੑ

    View full-size slide

  37. BERTͷ࿦จ
    • BERT: Pre-training of Deep Bidirectional Transformers for
    Language Understanding

    → https://arxiv.org/abs/1810.04805

    View full-size slide

  38. BERTͷֶश
    #&351SFUSBJOJOHPG%FFQ#JEJSFDUJPOBM5SBOTGPSNFSTGPS-BOHVBHF6OEFSTUBOEJOH %FWMJO +FUBM
    ΑΓҾ༻

    View full-size slide

  39. BERTͷֶश
    • ࣄલֶश

    → Transformer͕ɺจষ͔Βจ຺Λ૒ํ޲ʢBidirectionalʣʹֶश͢Δ

    → Masked Language Model͓ΑͼNext Sentence PredictionʹΑΔ૒ํ޲ֶश
    • ϑΝΠϯνϡʔχϯά

    → ࣄલֶशʹΑΓಘΒΕͨύϥϝʔλΛॳظ஋ͱͯ͠ɺϥϕϧ෇͖ͷσʔλͰɹ
    ϑΝΠϯνϡʔχϯάΛߦ͏

    View full-size slide

  40. Masked Language Model
    • Masked Language Model

    → จষ͔Βಛఆͷ୯ޠΛ15ˋϥϯμϜʹબͼɺ[MASK]τʔΫϯʹஔ͖׵͑Δ

    → ྫ: my dog is hairy → my dog is [MASK]

    → [MASK]ͷ୯ޠΛɺલޙͷจ຺͔Β༧ଌ͢Δ

    View full-size slide

  41. Next Sentence Prediction
    • Next Sentence Prediction

    → 2ͭͷจষʹؔ܎͕͋Δ͔Ͳ͏͔Λ൑ఆ͢Δ

    → ޙΖͷจষΛ50%ͷ֬཰Ͱແؔ܎ͳจষʹஔ͖׵͑Δ

    → ޙΖͷจষ͕ҙຯతʹద੾Ͱ͋Ε͹IsNextɺͦ͏Ͱͳ͚Ε͹NotNextͷ൑ఆ
    • [CLS] the man went to [MASK] store [SEP] / he bought a gallon [MASK] milk [SEP]

    ൑ఆɿIsNext

    [CLS] the man went to [MASK] store [SEP] / penguin [MASK] are flight #less birds
    [SEP]

    ൑ఆɿNotNext

    View full-size slide

  42. BERTͷੑೳ
    #&351SFUSBJOJOHPG%FFQ#JEJSFDUJPOBM5SBOTGPSNFSTGPS-BOHVBHF6OEFSTUBOEJOH %FWMJO +FUBM
    ΑΓҾ༻
    • SQuAD

    → ʮStanford Question Answering Datasetʯͷུ

    → ελϯϑΥʔυେֶ͕Ұൠެ։͍ͯ͠Δ

    ݴޠॲཧͷਫ਼౓ΛଌΔϕϯνϚʔΫ

    → σʔλ͸໿10ສݸͷ࣭໰Ԡ౴ͷϖΞΛؚΉ

    View full-size slide

  43. BERTͷੑೳ
    #&351SFUSBJOJOHPG%FFQ#JEJSFDUJPOBM5SBOTGPSNFSTGPS-BOHVBHF6OEFSTUBOEJOH %FWMJO +FUBM
    ΑΓҾ༻
    • GLUE

    → ࣗવݴޠॲཧͷͨΊͷ9छྨͷֶशσʔλΛؚΉσʔληοτ

    View full-size slide

  44. ೔ຊޠͷ܇࿅ࡁΈϞσϧ
    • ژ౎େֶ ࠇڮɾ㬗ɾଜ࿬ݚڀࣨ

    → http://nlp.ist.i.kyoto-u.ac.jp/index.php?BERT೔ຊޠPretrainedϞσϧ

    View full-size slide

  45. Google Colaboratoryͷ࢖͍ํ

    View full-size slide

  46. Google Colaboratoryͱ͸?
    • Google Colaboratory

    → Google͕ఏڙ͢Δɺϒϥ΢βͰPythonΛ࣮ߦͰ͖Δ؀ڥ

    → GoogleΞΧ΢ϯτͰར༻Մೳ

    → جຊతʹແྉ

    → ؀ڥߏங͕؆୯

    → ڞ༗͕؆୯

    → etc…

    https://colab.research.google.com/

    View full-size slide

  47. ίʔυηϧͱςΩετηϧ
    • ίʔυηϧ

    → PythonͷίʔυΛهड़͠ɺ࣮ߦ͢Δ
    • ςΩετηϧ

    → จষ΍਺ࣜΛهड़͢Δ

    View full-size slide

  48. Google Colaboratoryͷ༷ʑͳػೳ
    • εΫϥονίʔυηϧ
    • ίʔυεχϖοτ
    • ϑΥʔϜ
    • etc…

    View full-size slide

  49. Section 1. ߨ࠲ͱBERTͷ֓ཁ
    Section 2. γϯϓϧͳBERTͷ࣮૷
    Section 3. BERTͷ࢓૊Έ
    Section 4. ϑΝΠϯνϡʔχϯάͷ׆༻
    Section 5. BERTͷԠ༻
    ࣍ճͷ಺༰

    View full-size slide

  50. ࡶஊλΠϜ
    -JWFɛʈٝঐ
    㘴㙖㙦㙀㙞೮࿥e㘈㘍㗗㗏㗊ᗴ㗄㗗㗾㗙

    View full-size slide