SlideShare a Scribd company logo
1 of 26
Copyright (C) 2021 Yuto Watanabe
いい感じの文章を生成する
やつ
インターネットプログラミング プロジェクト
Yuto Watanabe
Copyright (C) 2021 Yuto Watanabe
どういうもの?
2
Copyright (C) 2021 Yuto Watanabe
• 分かち書き→マルコフ連鎖を使用していい感じの文章を
生成
• サーバーとソケット通信を行いコンソールベースで操作
どういうもの?
3
Copyright (C) 2021 Yuto Watanabe
分かち書きとは?
4
Copyright (C) 2021 Yuto Watanabe
分かち書きとは?
5
今日の朝ごはんは餃子定食だった。
Copyright (C) 2021 Yuto Watanabe
分かち書きとは?
6
今日 / の / 朝 / ごはん / は / 餃子 / 定食 / だっ / た / 。
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
7
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
晴れ
曇り 雨
0.3
0.4
0.7
0.4
0.2
0.3
0.3
0.3
8
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
私
の
は
ご飯
最強 の
を 食べた
盾
矛
9
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
私
の
は
ご飯
最強 の
を 食べた
盾
矛
10
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
私
の
は
ご飯
最強 の
を 食べた
盾
矛
11
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
12
Value1 Value2 Value3 isStart isEnd
私 は 最強 True False
私 は ご飯 True False
私 の 最強 True False
の 最強 の False False
は 最強 の False False
は ご飯 を False False
最強 の 矛 False True
最強 の 盾 False True
ご飯 を 食べた False True
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
13
Value1 Value2 Value3 isStart isEnd
私 は 最強 True False
私 は ご飯 True False
私 の 最強 True False
の 最強 の False False
は 最強 の False False
は ご飯 を False False
最強 の 矛 False True
最強 の 盾 False True
ご飯 を 食べた False True
Copyright (C) 2021 Yuto Watanabe
マルコフ連鎖とは?
14
Value1 Value2 Value3 isStart isEnd
私 は 最強 True False
私 は ご飯 True False
私 の 最強 True False
の 最強 の False False
は 最強 の False False
は ご飯 を False False
最強 の 矛 False True
最強 の 盾 False True
ご飯 を 食べた False True
Copyright (C) 2021 Yuto Watanabe
プログラムを実行する
15
Copyright (C) 2021 Yuto Watanabe
プログラムを実行する
16
$ git clone https://github.com/yuto51942/socket-programming-project
$ cd socket-programming-project
Copyright (C) 2021 Yuto Watanabe
プログラムを実行する
17
http://igo.osdn.jp/
Copyright (C) 2021 Yuto Watanabe
プログラムを実行する
18
$ cd server
$ sh build.sh
$ cd client
$ sh build.sh
• Server側のビルド
• Client側のビルド
$ cd server
$ sh run.sh
$ cd client
$ sh run.sh
• Server側の実行
• Client側の実行
Copyright (C) 2021 Yuto Watanabe
処理の流れ
19
Copyright (C) 2021 Yuto Watanabe
処理の流れ
20
/train
マルコフ連鎖の
アルゴリズム
/generate
形態素解析器
Client Server
ソケット通信
追加
Value1 Value2 Value3 isStart isEnd
私 は 最強 True False
私 は ご飯 True False
私 の 最強 True False
の 最強 の False False
は 最強 の False False
は ご飯 を False False
最強 の 矛 False True
最強 の 盾 False True
ご飯 を 食べた False True
オブジェクトの配列
Copyright (C) 2021 Yuto Watanabe
工夫した点
21
Copyright (C) 2021 Yuto Watanabe
• MarkovChain Class
• void addElement(String text)
• String generate()
• void reset()
• void printData()
• Connect Class
• void postText(String text)
• String getText()
工夫した点
22
Copyright (C) 2021 Yuto Watanabe
工夫した点
23
JavaDocを記述
Copyright (C) 2021 Yuto Watanabe
工夫した点
24
コマンドベースでの操作
マルコフ連鎖で文章を生成する。
/generate
/reset
/end
引数に文章を指定し、マルコフ連鎖に使用するデータを追加する。
/train [text]
/trainで追加した文章をすべて削除する。
Server、Clientを終了する。
Copyright (C) 2021 Yuto Watanabe
25
yuto51942/socket-programming-project
https://github.com/yuto51942/socket-programming-project
Copyright (C) 2021 Yuto Watanabe
• N-gramモデル
• https://ocw.u-tokyo.ac.jp/lecture_files/is_01/6/notes/ja/langinfo6.pdf
• JavaでTwitterBotをつくってみたよ
• https://shironeko.hateblo.jp/entry/2016/11/14/201912
• 【自動生成】入賞作品から作文を生成したら素晴らしい文章ができ
る説 – YouTube
• https://www.youtube.com/watch?v=1OfCyavg_ZE
参考文献
26

More Related Content

Similar to インターネットプログラミング 解説資料

Dockerで始める開発環境構築
Dockerで始める開発環境構築Dockerで始める開発環境構築
Dockerで始める開発環境構築虎の穴 開発室
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使うフィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使うYoshitaka Kuwata
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphonedena_study
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)NTT DATA Technology & Innovation
 
Windows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAIWindows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAITomokazu Kizawa
 
5分でわかるWebRTC
5分でわかるWebRTC5分でわかるWebRTC
5分でわかるWebRTCRyosuke Otsuya
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったCHY72
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMKoichi Sakata
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発虎の穴 開発室
 
「デモリッションロボッツK.K.」のGenvidインティグレート事例
「デモリッションロボッツK.K.」のGenvidインティグレート事例「デモリッションロボッツK.K.」のGenvidインティグレート事例
「デモリッションロボッツK.K.」のGenvidインティグレート事例Takaaki Ichijo
 
リモート先へログインする時環境あるある
リモート先へログインする時環境あるあるリモート先へログインする時環境あるある
リモート先へログインする時環境あるあるRyota Sakamoto
 
Bot Framework Composer Fukuazu
Bot Framework Composer FukuazuBot Framework Composer Fukuazu
Bot Framework Composer Fukuazuru pic
 
Deno の node 互換モードと ソケット
Deno の node 互換モードと ソケットDeno の node 互換モードと ソケット
Deno の node 互換モードと ソケット虎の穴 開発室
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Shota Umeda
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニーTokuhiro Eto
 
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離Takashi Kanai
 

Similar to インターネットプログラミング 解説資料 (20)

Dockerで始める開発環境構築
Dockerで始める開発環境構築Dockerで始める開発環境構築
Dockerで始める開発環境構築
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使うフィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
Windows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAIWindows 11とNPUで実現するWindowsのAI
Windows 11とNPUで実現するWindowsのAI
 
5分でわかるWebRTC
5分でわかるWebRTC5分でわかるWebRTC
5分でわかるWebRTC
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
Hacktoberfest 概要、Node-REDプロジェクト貢献手順
Hacktoberfest 概要、Node-REDプロジェクト貢献手順Hacktoberfest 概要、Node-REDプロジェクト貢献手順
Hacktoberfest 概要、Node-REDプロジェクト貢献手順
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
 
「デモリッションロボッツK.K.」のGenvidインティグレート事例
「デモリッションロボッツK.K.」のGenvidインティグレート事例「デモリッションロボッツK.K.」のGenvidインティグレート事例
「デモリッションロボッツK.K.」のGenvidインティグレート事例
 
リモート先へログインする時環境あるある
リモート先へログインする時環境あるあるリモート先へログインする時環境あるある
リモート先へログインする時環境あるある
 
Bot Framework Composer Fukuazu
Bot Framework Composer FukuazuBot Framework Composer Fukuazu
Bot Framework Composer Fukuazu
 
Deno の node 互換モードと ソケット
Deno の node 互換モードと ソケットDeno の node 互換モードと ソケット
Deno の node 互換モードと ソケット
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー決済金融から始めるデータドリブンカンパニー
決済金融から始めるデータドリブンカンパニー
 
決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu決済金融から始めるデータドリブンカンパニー #yjmu
決済金融から始めるデータドリブンカンパニー #yjmu
 
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
Kubernetes上のWindows Server コンテナーのマイクロサービス間分離
 

Recently uploaded

ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 

Recently uploaded (7)

ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 

インターネットプログラミング 解説資料

  • 1. Copyright (C) 2021 Yuto Watanabe いい感じの文章を生成する やつ インターネットプログラミング プロジェクト Yuto Watanabe
  • 2. Copyright (C) 2021 Yuto Watanabe どういうもの? 2
  • 3. Copyright (C) 2021 Yuto Watanabe • 分かち書き→マルコフ連鎖を使用していい感じの文章を 生成 • サーバーとソケット通信を行いコンソールベースで操作 どういうもの? 3
  • 4. Copyright (C) 2021 Yuto Watanabe 分かち書きとは? 4
  • 5. Copyright (C) 2021 Yuto Watanabe 分かち書きとは? 5 今日の朝ごはんは餃子定食だった。
  • 6. Copyright (C) 2021 Yuto Watanabe 分かち書きとは? 6 今日 / の / 朝 / ごはん / は / 餃子 / 定食 / だっ / た / 。
  • 7. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 7
  • 8. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 晴れ 曇り 雨 0.3 0.4 0.7 0.4 0.2 0.3 0.3 0.3 8
  • 9. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 私 の は ご飯 最強 の を 食べた 盾 矛 9
  • 10. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 私 の は ご飯 最強 の を 食べた 盾 矛 10
  • 11. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 私 の は ご飯 最強 の を 食べた 盾 矛 11
  • 12. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 12 Value1 Value2 Value3 isStart isEnd 私 は 最強 True False 私 は ご飯 True False 私 の 最強 True False の 最強 の False False は 最強 の False False は ご飯 を False False 最強 の 矛 False True 最強 の 盾 False True ご飯 を 食べた False True
  • 13. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 13 Value1 Value2 Value3 isStart isEnd 私 は 最強 True False 私 は ご飯 True False 私 の 最強 True False の 最強 の False False は 最強 の False False は ご飯 を False False 最強 の 矛 False True 最強 の 盾 False True ご飯 を 食べた False True
  • 14. Copyright (C) 2021 Yuto Watanabe マルコフ連鎖とは? 14 Value1 Value2 Value3 isStart isEnd 私 は 最強 True False 私 は ご飯 True False 私 の 最強 True False の 最強 の False False は 最強 の False False は ご飯 を False False 最強 の 矛 False True 最強 の 盾 False True ご飯 を 食べた False True
  • 15. Copyright (C) 2021 Yuto Watanabe プログラムを実行する 15
  • 16. Copyright (C) 2021 Yuto Watanabe プログラムを実行する 16 $ git clone https://github.com/yuto51942/socket-programming-project $ cd socket-programming-project
  • 17. Copyright (C) 2021 Yuto Watanabe プログラムを実行する 17 http://igo.osdn.jp/
  • 18. Copyright (C) 2021 Yuto Watanabe プログラムを実行する 18 $ cd server $ sh build.sh $ cd client $ sh build.sh • Server側のビルド • Client側のビルド $ cd server $ sh run.sh $ cd client $ sh run.sh • Server側の実行 • Client側の実行
  • 19. Copyright (C) 2021 Yuto Watanabe 処理の流れ 19
  • 20. Copyright (C) 2021 Yuto Watanabe 処理の流れ 20 /train マルコフ連鎖の アルゴリズム /generate 形態素解析器 Client Server ソケット通信 追加 Value1 Value2 Value3 isStart isEnd 私 は 最強 True False 私 は ご飯 True False 私 の 最強 True False の 最強 の False False は 最強 の False False は ご飯 を False False 最強 の 矛 False True 最強 の 盾 False True ご飯 を 食べた False True オブジェクトの配列
  • 21. Copyright (C) 2021 Yuto Watanabe 工夫した点 21
  • 22. Copyright (C) 2021 Yuto Watanabe • MarkovChain Class • void addElement(String text) • String generate() • void reset() • void printData() • Connect Class • void postText(String text) • String getText() 工夫した点 22
  • 23. Copyright (C) 2021 Yuto Watanabe 工夫した点 23 JavaDocを記述
  • 24. Copyright (C) 2021 Yuto Watanabe 工夫した点 24 コマンドベースでの操作 マルコフ連鎖で文章を生成する。 /generate /reset /end 引数に文章を指定し、マルコフ連鎖に使用するデータを追加する。 /train [text] /trainで追加した文章をすべて削除する。 Server、Clientを終了する。
  • 25. Copyright (C) 2021 Yuto Watanabe 25 yuto51942/socket-programming-project https://github.com/yuto51942/socket-programming-project
  • 26. Copyright (C) 2021 Yuto Watanabe • N-gramモデル • https://ocw.u-tokyo.ac.jp/lecture_files/is_01/6/notes/ja/langinfo6.pdf • JavaでTwitterBotをつくってみたよ • https://shironeko.hateblo.jp/entry/2016/11/14/201912 • 【自動生成】入賞作品から作文を生成したら素晴らしい文章ができ る説 – YouTube • https://www.youtube.com/watch?v=1OfCyavg_ZE 参考文献 26

Editor's Notes

  1. 19nc064の渡邊悠人です。よろしくおねがいします。 今回私が作成したものは、タイトルにある通り「いい感じの文章を生成するやつ」です。
  2. そんなこと言われてもよくわからないと思うのではじめにどういうものかを簡単に説明します。
  3. このプログラムは、マルコフ連鎖というものを使用してそれとなく意味が通じるような文章を生成するものです。 サーバーとクライアントに分かれており、クライアント側からコマンドプロンプトやターミナルなどのように特定のコマンドを入力することで様々なことができるようになっています。
  4. 実際にプログラムを理解してもらうため、はじめに「分かち書き」について解説します。
  5. 例えば、このような文章があったとします。
  6. 分かち書きは、文章を単語ごとに区切る操作を言います。
  7. 次にマルコフ連鎖について
  8. マルコフ連鎖とは「未来の状態が過去の状態によらず現在の状態のみで決まり、とりうる状態が離散的」なもです。 天気を例にすると、晴れから曇りになる確率は0.3、曇のから雨になる確率は0.2~~~というような感じです。
  9. この仕組みを利用することで、例えば、 「私の最強の矛」 「私の最強の盾」 「私は最強の矛」 「私は最強の盾」 「私はご飯を食べた」 などの文章が複数あった場合、このような図に表すことができます。 私の次は「の」か「は」になるので、ランダムでどちらかを選んでいくという作業を行っていくと
  10. このように、文章をつくることができます。
  11. 実際、プログラム上では、3単語を使用した2階マルコフ連鎖を使用しています。 形態素解析器で分かち書きされたものを、はじめの単語が含まれる場合isStartフラグをTrueにしてオブジェクトとして保存していきます。 また、文の終端を含むものにはisEndフラグをTrueにしていきます。 文章を生成する場合は、isStartフラグがTrueになっているものからランダムで1つ選んでいき、
  12. Value3の単語をまたValue1からランダム選択していき、
  13. isEndフラグがTrueの場合終了するという再帰的な処理となっています。
  14. では、実際にプログラムの実行方法について説明します。
  15. このソースファイルはGithubで管理されているためgit cloneをすることで誰でも簡単に実行することができます。
  16. このプログラムは、Javaの形態素解析器であるIgoというライブラリを使用しているため公式サイトからjarファイルをダウンロードしてserver/libsのディレクトリに置きます。
  17. その後、client、serverともにそのディレクトリに移動してbuild.shを実行してビルドした後、run.shを実行することで実行ができます。 では、実際に試してみます。 [デモをする。]
  18. このプログラムの処理の流れについて簡単に説明します。
  19. 処理の流れは図のようになっており、clientとserve間でソケット通信を行い、 /trainコマンドで文章を入力した場合その文章を形態素解析器で分かち書きして、マルコフ連鎖に使用するためのオブジェクトの配列に格納します。 /generateをclientからもらった場合はそのオブジェクトの配列から先ほど説明したように乱数を使用して文章を生成します。
  20. 次に工夫した点について紹介します。
  21. このプログラムでは、オブジェクト指向で書かれており、 例えば、MarkovChainクラスが存在します。このクラスは以下のような関数を持っておりこのクラス単体でこのように、文章の追加と生成をすることができます。
  22. さらに、全ての関数にJavaDocを記述することで、「この関数の引数は何だったっけ?」「何をリターンするの?」というような疑問を素早く解消できます。
  23. さらに、先ほどのデモのように、コマンドベースで操作を可能にすることで、 文章の追加、文章の生成、リセットなど様々な操作を1つのソケット通信で行えるようにしています。
  24. 最後に、このソースファイルはgithunにPushしているので興味ある方は是非ご覧ください。
  25. 以上で、発表を終了します。