rabbit-slide-znz-osakarubykaigi02-chatbot 2019.09.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b2ed3b5be47aee4a9b1c5bcbbff73f7b6bd344a48d11db48e135fe496ff415c5
4
+ data.tar.gz: 80a6a5154bd5eb9c7caef22a7c24f4580642b3aa1d6bb645ad7c2979126eefd5
5
+ SHA512:
6
+ metadata.gz: 03bde3a96e46e564899103f3f63662721a1206afb3c038a4d2e22384d7351ee1be8d23af84cfb75c710ab6e19a44cafaff3a8c36857553f64c87a17d93a7ec42
7
+ data.tar.gz: cc56ca1ba76d3d21706b4ec4e564e9a9b8ecdd8f8708622f1f3a55cd378341c06031d85bf7e23e41efd5190122374d58767de0e4a6657efaf431dd5e04e379f7
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ chatbot.md
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # チャットボットのススメ
2
+
3
+ [Osaka RubyKaigi 02](http://regional.rubykaigi.org/osaka02/) での発表資料です。
4
+
5
+ ## For author
6
+
7
+ ### Show
8
+
9
+ rake
10
+
11
+ ### Publish
12
+
13
+ rake publish
14
+
15
+ ## For viewers
16
+
17
+ ### Install
18
+
19
+ gem install rabbit-slide-znz-osakarubykaigi02-chatbot
20
+
21
+ ### Show
22
+
23
+ rabbit rabbit-slide-znz-osakarubykaigi02-chatbot.gem
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
data/chatbot.md ADDED
@@ -0,0 +1,231 @@
1
+ # チャットボットのススメ
2
+
3
+ author
4
+ : Kazuhiro NISHIYAMA
5
+
6
+ content-source
7
+ : Osaka RubyKaigi 02
8
+
9
+ date
10
+ : 2019/09/15
11
+
12
+ institution
13
+ : 株式会社Ruby開発
14
+
15
+ allotted-time
16
+ : 30m
17
+
18
+ theme
19
+ : lightning-simple
20
+
21
+ # Agenda
22
+
23
+ - チャットとは
24
+ - チャットボットとは
25
+ - なぜおすすめなのか
26
+ - 色々なボット例
27
+ - 人工無脳の話
28
+ - ボット作成時の注意
29
+
30
+ # チャットとは?
31
+
32
+ - 主にテキストで
33
+ - リアルタイムに
34
+ - 会話(chat)するシステム
35
+
36
+ # 使ってきたチャットシステム
37
+
38
+ - NIFTY-Serve の RT
39
+ - → RT を含むサービス終了 (@nifty 自体は存続)
40
+ - IRC → 今も利用
41
+ - Slack → 今のメイン
42
+ - Idobata, Gitter, Discord, ... → たまに利用
43
+ - Mattermost, その他色々 → 必要に応じて
44
+
45
+ # チャットボットとは?
46
+
47
+ - 誰かの発言に対して反応して発言
48
+ - 時間や通知など他のトリガーで自動発言
49
+ - システムによって使えるトリガーは違う
50
+ - RT は入退室で挨拶するボットが可能だった
51
+ - IRC は入室の挨拶は可能だが退室前は不可能
52
+ - Slack は使われ方が違うので挨拶ボットは困難
53
+
54
+ # なぜおすすめなのか? (1/3)
55
+
56
+ - プログラムの基本は入力を受けて出力を返す
57
+ - 出力がないと
58
+ - 計算だけしてもできているのかどうかわからない
59
+ - 入力がないと
60
+ - 同じことしかできない (そういう用途も多い)
61
+  - テキスト以外に時刻なども入力
62
+
63
+ # なぜおすすめなのか? (2/3)
64
+
65
+ - チャットボットはテキスト入出力で単純
66
+ - 昔ながらのチャットシステム (IRC など) だと行ごとの入出力でさらに単純
67
+ - テストもしやすい
68
+ - 標準入出力で試せるようにするのも簡単
69
+
70
+ # なぜおすすめなのか? (3/3)
71
+
72
+ - システム移行も経験可能
73
+ - 例: RT から IRC への移行を経験
74
+ - 複数対応するといろんな経験を積める
75
+ - 本質的な部分とシステム依存の分離
76
+ - システムによる機能差
77
+ - システム依存だが便利な機能の実装
78
+
79
+ # 便利ボット例
80
+
81
+ - URL → タイトル
82
+ - 文字コード, JavaScript, HTML 以外の対応など、簡単そうに見えて実際やってみると大変
83
+ - `g> 検索キーワード` → Web 検索のトップ
84
+ - `tenki> 大阪` → 天気予報
85
+ - `amedas> 大阪` → アメダスの最近の値
86
+
87
+ # 反応例
88
+
89
+ ```
90
+ g> OsakaRubyKaigi02
91
+ osrk02 - https://twitter.com/hashtag/osrk02 (and 3 hits)
92
+ tenki> 大阪
93
+ tenki bot: 大阪府 大阪 の天気: 今日:晴時々曇(max:31),
94
+ 明日:晴れ(min:24,max:35), 明後日:晴時々曇 - 近畿地方は、
95
+ 北部や中部では高気圧に覆われておおむね晴れていますが、南部では
96
+ 湿った空気の影響でおおむね曇り、雨の降っている所があります。
97
+ (2019-09-14T10:31:00+0900)
98
+ - http://weather.livedoor.com/area/forecast/270000
99
+ amedas> 大阪
100
+ amedas: 2019年09月14日 大阪(オオサカ) 時刻:15時,
101
+ 気温:31.6℃, 降水量:0.0mm, 風向:北東, 風速:3.8m/s,
102
+ 日照時間:0.6h, 湿度:49%, 気圧:1008.9hPa
103
+ http://www.jma.go.jp/jp/amedas_h/today-62078.html?groupCode=45&areaCode=000
104
+ amedas: 2019年09月14日 大阪(オオサカ)
105
+ 最低気温(℃):22.7 at 05:53, 最高気温(℃):32.0 at 13:43,
106
+ 最大瞬間風速(m/s)(風向(16方位)):9.1(東) at 01:14
107
+ ```
108
+
109
+ # 小ネタ系ボット例
110
+
111
+ - `ping` → `pong` と返すだけ
112
+ - ボットの生存確認やユーザー側の接続確認
113
+
114
+ # 時報ボット
115
+
116
+ - 「西暦2019(平成31/昭和94/大正108/明治152/皇紀2679)年(己亥)09月(長月)14日(土)08時00分28秒(インターネットタイム@000.3)です。」
117
+ - 過去の元号や干支や旧暦の月なども対応
118
+ - Swatch のインターネットタイムも対応 (24時間=1000ビート、タイムゾーンなしの世界共通の時刻)
119
+
120
+ # 時報ボット
121
+
122
+ - 「西暦2019年(令和元年/平成31年/昭和94年/大正108年/明治152年/皇紀2679年)(己亥)09月(長月) _13日(金)_ 18時00分00秒(インターネットタイム@416.7)です。」
123
+ - 13日の金曜日は装飾
124
+
125
+ # 挨拶ボット
126
+
127
+ - 挨拶ボット
128
+ - IRC のように接続通知がないと難しい
129
+ - 「prefix+時間の挨拶+suffix > nick+敬称」(秘蔵のランダムデータで生成)
130
+
131
+ # 挨拶ボット例
132
+
133
+ - 「次はおはようございますみゅ > NICK御中」
134
+ - 「なんでもいいおはようございますするか? > NICK代表」
135
+ - 「積極的におはようがなんともうれしい > NICKタン」
136
+
137
+ # 運用系ボット
138
+
139
+ - uptime : サーバーの uptime 確認
140
+ - 「`| uptime`」の出力を発言するだけ
141
+ - upgradable : apt で upgradable になっているパッケージ一覧
142
+ - 「`apt list -qq -o APT::Cmd::use-format=true -o APT::Cmd::format=${Package}(${installed:Version}->${candidate:Version}) --upgradable`」
143
+
144
+ # 人工無脳とは?
145
+
146
+ - 「人工無能」とも
147
+ - AI (人工知能) ほど高度なものではないということから
148
+ - ここでは人間の発言に自動発言を返すボット
149
+
150
+ # 人工無脳の種類 (1/3)
151
+
152
+ - 単純な部分文字列マッチ
153
+ - Slackbot のようにチャットシステム側に存在することも
154
+ - 正規表現マッチ
155
+ - 個人運用しているものはこれ
156
+
157
+ # 人工無脳の種類 (2/3)
158
+
159
+ - 形態素解析を利用
160
+ - 人工無脳ししゃも (Sixamo) など
161
+ - 書籍「恋するプログラム―Rubyでつくる人工無脳」の後半はこれ
162
+
163
+ # 人工無脳の種類 (3/3)
164
+
165
+ - ELIZA
166
+ - 人工無脳の起源, 英語のパターンマッチング
167
+ - 内容によってはかなり自然な会話ができるらしい
168
+ - 複数手法の組み合わせ
169
+ - 人工無能うずら (ソース非公開)
170
+ - 日本語の IRC (IRCnet) では多分一番有名
171
+ - 会話例も Wiki などで公開されている
172
+
173
+ # 人工無脳への攻撃対策 (1/2)
174
+
175
+ - 問題例: ReDoS (regular expression denial of service)
176
+ - 正規表現をユーザー登録可能な場合
177
+ - 不適切な語彙の学習
178
+ - 任意の言葉を登録可能な場合
179
+
180
+ # 人工無脳への攻撃対策 (2/2)
181
+
182
+ - 対応例 (クローズドなグループ向けを想定)
183
+ - 技術的な対応はあまりしない
184
+ - アカウントを ban するなどのソーシャルな対応が楽 (ボットが無視するアカウントにするなど)
185
+
186
+ # 不適切な学習の問題
187
+
188
+ - Tay というマイクロソフトの Twitter ボット
189
+ - ユーザーによる不適切な学習によりヘイトスピーチなどをするようになったらしい
190
+ - (その後停止)
191
+
192
+ 対処は難しそう
193
+
194
+ # ボット作成時の注意
195
+
196
+ - ボットとボットのループに注意
197
+ - ボットの発言にボットが発言するとループの可能性があって危険
198
+ - IRC ではボットは NOTICE で発言して NOTICE には反応しないのが原則
199
+ - 大量発言に注意
200
+ - アカウントが ban される可能性も
201
+
202
+ # 脆弱性にも注意
203
+
204
+ - 任意コード実行ボットはかなり難易度が高い
205
+ - タイトル取得ボットは情報漏洩に注意
206
+ - 例えば localhost に制限しているもの
207
+ - "169.254.169.254" ?
208
+
209
+ # 発言量の問題
210
+
211
+ - ほとんどの発言に反応 → 迷惑?
212
+ - 受け入れられていれば問題なし
213
+ - 以前からそういうものとして存在
214
+ - 新規ならボットとの会話用チャンネルに隔離?
215
+
216
+ # 単調にみえる反応
217
+
218
+ 大量のパターンを用意しても…
219
+
220
+ - キーワード反応型
221
+ - ユーザーの発言のバリエーションが少ない
222
+ → 反応も単調
223
+ - 時間に依存するもの
224
+ - ユーザーが使う時間がほぼ同じ
225
+ → 反応もほぼ同じ
226
+
227
+ # 最後に
228
+
229
+ - ping pong のような単純なものから始めるのがオススメ
230
+ - Twitter のような公開の場所は攻撃される可能性もあがるので Slack などのクローズドな場所で始めるのがオススメ
231
+ - アイデア次第で簡単なものでも便利だったり面白くなったり
data/config.yaml ADDED
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: osakarubykaigi02-chatbot
3
+ base_name: chatbot
4
+ tags:
5
+ - ruby
6
+ presentation_date: 2019/09/15
7
+ version: 2019.09.15
8
+ licenses: []
9
+ slideshare_id: ss-171884537
10
+ speaker_deck_id: tiyatutobotutofalsesusume
11
+ ustream_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ author:
15
+ markup_language: :markdown
16
+ name: Kazuhiro NISHIYAMA
17
+ email: zn@mbf.nifty.com
18
+ rubygems_user: znz
19
+ slideshare_user: znzjp
20
+ speaker_deck_user: znz
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-znz-osakarubykaigi02-chatbot
3
+ version: !ruby/object:Gem::Version
4
+ version: 2019.09.15
5
+ platform: ruby
6
+ authors:
7
+ - Kazuhiro NISHIYAMA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-09-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: "[Osaka RubyKaigi 02](http://regional.rubykaigi.org/osaka02/) での発表資料です。"
28
+ email:
29
+ - zn@mbf.nifty.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.md
36
+ - Rakefile
37
+ - chatbot.md
38
+ - config.yaml
39
+ - pdf/osakarubykaigi02-chatbot-chatbot.pdf
40
+ homepage: http://slide.rabbit-shocker.org/authors/znz/osakarubykaigi02-chatbot/
41
+ licenses: []
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.7.6
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: チャットボットのススメ
63
+ test_files: []