Slide 1

Slide 1 text

文字列 AIチーム 河合

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

文字列・・・文字列・・・

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

データはどこで得た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 より抜粋

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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)

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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