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

bert-tokenizerノードを触ってみた

Kawazu
December 04, 2021

 bert-tokenizerノードを触ってみた

Kawazu

December 04, 2021
Tweet

More Decks by Kawazu

Other Decks in Programming

Transcript

  1. bert-tokenizerノードを
    触ってみた
    河津正和

    View Slide

  2. 河津正和
    バックエンドエンジニア
    自社サービス開発をしつつ、本業以外で
    フリーランス的な仕事なども
    Twitter: kawazu255_
    自己紹介

    View Slide

  3. 直近のイベント
    毎月ゲストをお呼びして
    シビックテックな話を伺う
    CivicTechRadio
    12/9(木)
    事業立ち上げを
    行っている人たちの LT
    Technical Director Meetup
    新規事業企画LT
    12/11(土)
    音楽に関わる技術の LT
    MusicLT
    12/14(火)

    View Slide

  4. モチベーション
    何か変わったノードを触ってみたい

    View Slide

  5. View Slide

  6. bert-tokenizerについて

    View Slide

  7. BERTとは?
    ● Googleが発表した自然言語処理モデルで、2019年からは検索エンジンにも使用さ
    れている
    ● 文脈理解の精度が評価
    ● 様々な自然言語処理タスクにファインチューニングする前の、ベースモデルとしても
    使用できる
    ● BERT日本語学習済みモデル->https://yoheikikuta.github.io/bert-japanese/

    View Slide

  8. Tokenizerとは?
    ● 日本語の解析をする場合には単語、文字など何らかの部分に分ける必要がある
    ● 分割された文字列のことをトークンという
    ● Tokenizer は文書を単語分割をして、それにIDという数値に変換するモジュールで
    ある
    ● 分割方法は様々
    ○ N-gram
    ○ MeCabなどで形態素解析

    View Slide

  9. 分かち書き 今日/の/予定/は/池袋/に/ご飯/を/食べ/に/行き/ます
    トークン 20617, 20333, 7, 297, 2551, 16, 73, 30406, 28477, 11, 13043, 16
    Tokenizerの例

    View Slide

  10. 仮説
    トークンを使って
    自然言語処理できるのか

    View Slide

  11. 昼ごはん食べたい

    ラーメン行こうよ
    単語マッチに囚われない処理ができるか

    View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. 文章をTokenizerしてみた
    ● 国内で報告された新型コロナウイルス感染症の感染者に係る報告を基にした追跡
    調査の結果、感染者間の関連が認められた集団(クラスター)を地図上に表示した
    ものです。
    ○ [101,100,1635,100,1006,1702,30257,30233,30235,30265,1007,100,1636,102,0,0,...]
    ● クラスターは、現時点で、同一の場において、5人以上の感染者の接触歴等が明ら
    かとなっていることを目安として記載しています。家族等への二次感染等を載せて
    いません。また、家族間の感染も載せていません。
    ○ [101,1702,30257,30233,30235,30265,30198,1635,100,1635,1794,30266,30197,30332,30194,
    30176,30173,30191,1635,100,1636,100,1636,1677,30187,1635,100,1636,102,0,0,...]
    ● 吾輩は猫である。名前はまだない。どこで生れたか頓(とん)と見当がつかぬ。何で
    も薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩は
    ここで始めて人間というものを見た。
    ○ [101,100,1636,100,1636,100,1006,1666,30217,1007,100,1636,100,1636,100,1636,102,0,0,...]

    View Slide

  16. 文章をTokenizerしてみた
    ● 国内で報告された新型コロナウイルス感染症の感染者に係る報告を基にした追跡
    調査の結果、感染者間の関連が認められた集団(クラスター)を地図上に表示した
    ものです。
    ○ [101,100,1635,100,1006,1702,30257,30233,30235,30265,1007,100,1636,102,0,0,...]
    ● クラスターは、現時点で、同一の場において、5人以上の感染者の接触歴等が明ら
    かとなっていることを目安として記載しています。家族等への二次感染等を載せて
    いません。また、家族間の感染も載せていません。
    ○ [101,1702,30257,30233,30235,30265,30198,1635,100,1635,1794,30266,30197,30332,30194,
    30176,30173,30191,1635,100,1636,100,1636,1677,30187,1635,100,1636,102,0,0,...]
    ● 吾輩は猫である。名前はまだない。どこで生れたか頓(とん)と見当がつかぬ。何で
    も薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩は
    ここで始めて人間というものを見た。
    ○ [101,100,1636,100,1636,100,1006,1666,30217,1007,100,1636,100,1636,100,1636,102,0,0,...]

    View Slide

  17. https://github.com/tedhtchang/bert-tokenizer/blob/master/assets/vocab.json
    デフォルトの辞書

    View Slide

  18. View Slide

  19. (英語の)文章をTokenizerしてみた
    ● The map shows the groups (clusters) that were found to be related among infected people
    as a result of follow-up surveys based on the reports of infected people with new
    coronavirus infections reported in Japan.
    ○ [101,1996,4949,3065,1996,2967,1006,12906,1007,2008,2020,2179,2000,2022,3141,2426,10372,2111,2004,1
    037,2765,1997,3582,1011,2039,12265,2241,2006,1996,4311,1997,10372,...]
    ● Clusters are defined as having a known contact history of five or more infected persons in
    the same place at the present time. Secondary infection to family members is not included.
    Infection among family members is also not listed.
    ○ [101,12906,2024,4225,2004,2383,1037,2124,3967,2381,1997,2274,2030,2062,10372,5381,1999,1996,2168,2
    173,2012,1996,2556,2051,1012,3905,8985,2000,2155,...]
    ● I am a cat. I don't have a name yet. I have no idea where I was born. All I remember is that I
    was crying in a dark and dank place. This was the first time I saw a human being.
    ○ [101,1045,2572,1037,4937,1012,1045,2123,1005,1056,2031,1037,2171,2664,1012,1045,2031,2053,2801,207
    3,1045,2001,2141,1012,2035,1045,3342,2003,...]

    View Slide

  20. View Slide

  21. ユークリッド距離

    View Slide

  22. View Slide

  23. ニュース同士
    ニュースと吾輩は猫
    小さい値の方が近しい意味のは
    ずなので何かがおかしい

    View Slide

  24. うまくいかなかった仮説とやった感想
    ● そもそもTokenizerされた値はあくまで分かち書き後の値で、意味的に近しい単語
    同士が近しい値にあるわけではない
    ○ うどんが200くらいにあってラーメンが 10000くらいにある場合もある
    ● Tokenizerされた値じゃなくて、文章の特徴量を出す必要がある
    ○ https://speakerdeck.com/kawazu/bertdewen-zhang-guan-lian-du-suan-chu-sitexi-retemiru
    ● Tokenizerはそれ自体で自然言語処理をするのではなくて、処理のベース・つなぎ
    になるもの?(もうちょっと調べたい)
    ● そもそも分かち書きなのにBERTは関係あったのか
    ● MeCabに関連したノードは意外となかった(あると便利じゃないかな)

    View Slide