エムスリー社内でのLTで文字列について話したスライド
文字列AIチーム 河合
View Slide
河合 俊典● AIチーム● Twitter: @vaaaaanquish● 3度の飯よりTwitterが好き
あたまのおかしい回だ・・・ 参加しなきゃ・・・
文字列・・・文字列・・・
モジモジしてないで 好きな文字列の話を せんかーい!!※ 社外の@_329_さんのプライバシー保護のため一部画像を加工しています
ダジャレを言いなシャレAIチーム 河合
調査をする俺は慎重さwwwww● 駄洒落をテーマとしたAI関連研究○ 駄洒落の検出、評価○ データベースの構築○ 面白さの分析○ 生成○ 対話https://github.com/vaaaaanquish/dajare-pythonより
ダジャレを研究してるのはダレじゃwwwwww● 北海道大学・荒木健治 教授が第一人者(多分)○ 多く論文がこの荒木研から出ているhttps://www.ist.hokudai.ac.jp/netjournal/net_31_1.html より引用
データはどこで得た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 より抜粋
クロールする玄人wwwwwww● クローラ及び、関連研究をOSSとして公開○ https://github.com/vaaaaanquish/dajare-python○ time.sleepによる厳しめの調整○ 論文内のサイト以外からもクロール先を追加■ 社内Slackなど■ 合計12万件のダジャレデータを所持■ 多分日本で一番持ってる○ データをノーマライズして Driveに設置しました■ 社外への持ち出し厳禁でお願いします
マルコフ連鎖が惜しかった未練さwwwww● 最もシンプルに思い付くマルコフ連鎖を試す(意外と既存研究がない)○ ダジャレは言葉同士の確率過程から作成できるだろうという仮説○ GiNZAで形態素解析して計算○ Google Colabで計算済みモデルをロードして今すぐ遊べます■ https://~~~~(社内のみ)概ね勢いがあって面白い
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)
BERTでバーッと生成wwwwwwww● BERTで文章生成タスクを解く○ ベースとして京大 黒橋・河原研究室 が公開する日本語学習済みモデルを使う■ 一般的に0からの学習はリソースが必要なので「転移学習」という手法を利用する○ Google Colabで計算済みモデルをロードして今すぐ遊べます■ https://~~~ (社内のみ)色々チューニングしてみたがダメそうな例
何で上手くいかないんだろう …データも十分あるはずだし …ベースかタスク設計が悪いのか …もしかしてバグか…?
バグを疑わずもっと基本にバックせんかーい!!※ 社外の@_329_さんのプライバシー保護のため一部画像を加工しています
Elasticsearchにindexingすればいいんでっくすww● データが大規模かつスパース○ queryに対して近いダジャレを引く所から始めてみる■ 検索によるダジャレ生成サポート → 対話における正解データの収集 → 対話タスクと捉えて■ Indexingの仕方を考える必要があるquery: 蜜柑食べたいなresult: みつかんないんですか?
indexingを考えればいいんでっくすwwwww● ダジャレの面白さを考慮したスコアリングを考える○ 単語、単語の一部が被っている → 一般的なmatch, fuzziness○ 音が同じである → 文章をヘボン式ローマ字に変換して index○ 近い意味の単語で作られている → ES 7.3から追加されたvector feildをindexしcosine距離■ 複合的に含まれていれば高いスコアとなるよう boost, weightを調整する駄洒落の面白さにおける要因の分析,An Analysis of Factors of Funniness of Japanese Puns,谷津, 荒木, 2016 日本知能情報ファジィ学会 より
embeddingを確認すればいいんでっくすwwww食べ物のダジャレが集まる例
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
検索だけに幸ありwwwwwwwwwwwfuzzy、vector検索によって吉野家、松山などが引けている(上手いダジャレの返しができそう)
運用するうんようwwwwwwwwww● 2020/06/22 (月) 各位のtimelineでオンラインテスト
駄率wwwww● Slackへの投稿をqueryとしtop10以内の結果から良さげな回答を選んで返す● challengeした数:10○ :da: が付いた数:7○ しーきび:2○ Iwasa method:1参考:皆に優しいダジャレ評価フローとリアクション(一部)すごい回答の例vector検索で「ケーブル」関連語として「故障」があがる
検索すれば幸になるのか● 検索によるサポートで誰でも :da: が取得できる○ ESのvector検索、ローマ字検索の queryの重みを変更する事で、誰でも簡単に、好きな面白い方向性でダジャレを検索、投稿できる○ 果たしてその :da: に価値はあるのかという議論は別途ある■ 敷居を下げる十分な効果がある● 難しい例も存在する利用困難な例
今後の改善点● 「Docker」「JIS」「Jenkins」「Jira」「CI/CD」など 英語、技術用語に対応したダジャレがデータベース上にない○ ローマ字変換を試みたが、オノマトペ難しい● Elasticsearchをどう管理するか○ Elasticsearch docker-composeを使っておりローカルマシンが重くて仕事にならない● End2Endなモデルの作成○ 大きなMLモデルは事前学習モデルが基本自然文で学習されているため唐突な遷移が難しい■ 今後のfeature worksとしたい
華金だから もうおしごとは できんよう〜〜w※ 社外の@_329_さんのプライバシー保護のため一部画像を加工しています