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

文字列(ダジャレを言いシャレ)

 文字列(ダジャレを言いシャレ)

エムスリー社内でのLTで文字列について話したスライド

vaaaaanquish
PRO

December 08, 2020
Tweet

More Decks by vaaaaanquish

Other Decks in Technology

Transcript

  1. 文字列
    AIチーム 河合

    View Slide

  2. 河合 俊典
    ● AIチーム
    ● Twitter: @vaaaaanquish
    ● 3度の飯よりTwitterが好き

    View Slide

  3. あたまのおかしい回だ・・・
           参加しなきゃ・・・

    View Slide

  4. 文字列・・・文字列・・・

    View Slide

  5. モジモジしてないで
      好きな文字列の話を
          せんかーい!!
    ※ 社外の@_329_さんのプライバシー保護のため一部画像を加工しています

    View Slide

  6. ダジャレを言いなシャレ
    AIチーム 河合

    View Slide

  7. 調査をする俺は慎重さwwwww
    ● 駄洒落をテーマとしたAI関連研究
    ○ 駄洒落の検出、評価
    ○ データベースの構築
    ○ 面白さの分析
    ○ 生成
    ○ 対話
    https://github.com/vaaaaanquish/dajare-pythonより

    View Slide

  8. ダジャレを研究してるのはダレじゃwwwwww
    ● 北海道大学・荒木健治 教授が第一人者(多分)
    ○ 多く論文がこの荒木研から出ている
    https://www.ist.hokudai.ac.jp/netjournal/net_31_1.html より引用

    View Slide

  9. データはどこで得たwwwwwwww
    駄洒落データベースの構築及び分析
    , Construction and Analysis of Pun Database in Japanese,
    荒木 健治, Kenji Araki, 人工知能学会 2018 より引用
    データセットは
    HPより申請する事で研究用途でのみ共有されるとのこと
    ● ダジャレナビ
    ○ 『アタマがめざめる! なぞなぞ脳活 (かんき出版,2016)』等を執筆した ながれおとや氏が運営
    ● ダジャレステーション
    ○ 福井県のWeb制作会社 cheltenham software(チェルトナム・ソフトウェア)が作成
    ○ 6万5千件のデータがあるとされる
    https://kanki-pub.co.jp/pub/author/details/1004 より抜粋

    View Slide

  10. クロールする玄人wwwwwww
    ● クローラ及び、関連研究をOSSとして公開
    ○ https://github.com/vaaaaanquish/dajare-python
    ○ time.sleepによる厳しめの調整
    ○ 論文内のサイト以外からもクロール先を追加
    ■ 社内Slackなど
    ■ 合計12万件のダジャレデータを所持
    ■ 多分日本で一番持ってる
    ○ データをノーマライズして Driveに設置しました
    ■ 社外への持ち出し厳禁でお願いします

    View Slide

  11. マルコフ連鎖が惜しかった未練さwwwww
    ● 最もシンプルに思い付くマルコフ連鎖を試す(意外と既存研究がない)
    ○ ダジャレは言葉同士の確率過程から作成できるだろうという仮説
    ○ GiNZAで形態素解析して計算
    ○ Google Colabで計算済みモデルをロードして今すぐ遊べます
    ■ https://~~~~(社内のみ)
    概ね勢いがあって面白い

    View Slide

  12. BERTでバーッと生成wwwwwwww
    ● BERTとは
    ○ Pre-training of Deep Bidirectional Transformers for Language Understanding, Devlin, J. et al. (2018,
    Google)
    ○ 何がすごい?
    ■ 自然言語処理における分類、対話、翻訳
    …など全てのタスクに応用しても精度が出る
    ■ 行列積くらいしか複雑な処理がなく学習時にリソースをフル活用できる
    ○ 何故すごい?
    ■ Transformerがすごい
    ■ 双方向Transformerの学習法がすごい
    ● 普通にやると学習が収束しないのでゴリゴリにノウハウを付与
    + 問題設計を工夫
    word2vec (2016, Google) Transformar (2017, Google)
    fasttext, rcnn,
    attentionを経て…
    拡張
    BERT (2018, Google)

    View Slide

  13. BERTでバーッと生成wwwwwwww
    ● BERTで文章生成タスクを解く
    ○ ベースとして京大 黒橋・河原研究室 が公開する日本語学習済みモデルを使う
    ■ 一般的に0からの学習はリソースが必要なので「転移学習」という手法を利用する
    ○ Google Colabで計算済みモデルをロードして今すぐ遊べます
    ■ https://~~~ (社内のみ)
    色々チューニングしてみたがダメそうな例

    View Slide

  14. 何で上手くいかないんだろう …
    データも十分あるはずだし …
    ベースかタスク設計が悪いのか …
    もしかしてバグか…?

    View Slide

  15. バグを疑わず
    もっと基本に
    バックせんかーい!!
    ※ 社外の@_329_さんのプライバシー保護のため一部画像を加工しています

    View Slide

  16. Elasticsearchにindexingすればいいんでっくすww
    ● データが大規模かつスパース
    ○ queryに対して近いダジャレを引く所から始めてみる
    ■ 検索によるダジャレ生成サポート
     → 対話における正解データの収集
     → 対話タスクと捉えて
    ■ Indexingの仕方を考える必要がある
    query:
     蜜柑食べたいな
    result:
     みつかんないんですか?

    View Slide

  17. indexingを考えればいいんでっくすwwwww
    ● ダジャレの面白さを考慮したスコアリングを考える
    ○ 単語、単語の一部が被っている  → 一般的なmatch, fuzziness
    ○ 音が同じである → 文章をヘボン式ローマ字に変換して index
    ○ 近い意味の単語で作られている  → ES 7.3から追加されたvector feildをindexしcosine距離
    ■ 複合的に含まれていれば高いスコアとなるよう boost, weightを調整する
    駄洒落の面白さにおける要因の分析
    ,
    An Analysis of Factors of Funniness of Japanese Puns,
    谷津, 荒木, 2016 日本知能情報ファジィ学会 より

    View Slide

  18. embeddingを確認すればいいんでっくすwwww
    食べ物のダジャレが集まる例

    View Slide

  19. indexをつくればいいんでっくすwwwwwww
    {"query": {
    "bool": {
    "should": [
    {"match":{
    "roman": {
    "query": qr,
    "fuzziness": "AUTO"
    }}},
    {"match":{
    "body": {
    "query": q,
    "fuzziness" : "AUTO",
    "boost":100
    }}},
    {"match":{
    "vec": {
    "query": qev
    }}}]}}} + score function
    ...
    "tokenizer": {
    "normal_tokenizer": {
    "type": "kuromoji_tokenizer",
    "mode": "normal"}
    },
    "analyzer": {
    "normal_analyzer": {
    "type": "custom",
    "tokenizer": "kuromoji_tokenizer",
    "filter":[
    "trim",
    "kuromoji_stemmer",
    "ja_pos_meishi_filter"
    ]}}}},
    "mappings": {
    "dynamic": "strict",
    "properties": {
    "body": { "type": "text", "analyzer":
    "normal_analyzer", "search_analyzer":
    "normal_analyzer", "term_vector" :
    "with_positions_offsets" },
    "roman": { "type": "text"}},
    "vec": {"type": "vector"}}}
    検索
    index

    View Slide

  20. 検索だけに幸ありwwwwwwwwwww
    fuzzy、vector検索によって
    吉野家、松山などが引けている
    (上手いダジャレの返しができそう)

    View Slide

  21. 運用するうんようwwwwwwwwww
    ● 2020/06/22 (月) 各位のtimelineでオンラインテスト

    View Slide

  22. 駄率wwwww
    ● Slackへの投稿をqueryとしtop10以内の結果から良さげな回答を選んで返す
    ● challengeした数:10
    ○ :da: が付いた数:7
    ○ しーきび:2
    ○ Iwasa method:1
    参考:皆に優しいダジャレ評価フローとリアクション(一部)
    すごい回答の例
    vector検索で「ケーブル」関連語として
    「故障」があがる

    View Slide

  23. 検索すれば幸になるのか
    ● 検索によるサポートで誰でも :da: が取得できる
    ○ ESのvector検索、ローマ字検索の queryの重みを変更する事で、
    誰でも簡単に、好きな面白い方向性でダジャレを検索、投稿できる
    ○ 果たしてその :da: に価値はあるのかという議論は別途ある
    ■ 敷居を下げる十分な効果がある
    ● 難しい例も存在する
    利用困難な例

    View Slide

  24. 今後の改善点
    ● 「Docker」「JIS」「Jenkins」「Jira」「CI/CD」など
     英語、技術用語に対応したダジャレがデータベース上にない
    ○ ローマ字変換を試みたが、オノマトペ難しい
    ● Elasticsearchをどう管理するか
    ○ Elasticsearch docker-composeを使っておりローカルマシンが重くて仕事にならない
    ● End2Endなモデルの作成
    ○ 大きなMLモデルは事前学習モデルが基本自然文で学習されているため唐突な遷移が難しい
    ■ 今後のfeature worksとしたい

    View Slide

  25. 華金だから
      もうおしごとは
         できんよう〜〜w
    ※ 社外の@_329_さんのプライバシー保護のため一部画像を加工しています

    View Slide