自然言語処理プログラミング勉強会0 - プログラミング入門

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

Faculty of Computer and Information Sciences, Hosei University Resource Administration Team CIS RAT 1 Linux リテラシ 2006 第 3 回 エディタ、シェル.
情報アプリケーション1 2006 年 10 月 12 日 第四回資料 担当 重定 如彦. 目次 データの送信とフォーム クイズ CGI 複数のパーツのデータの分割方法 配列変数.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
P HI T S スクリプト言語を用いた PHITS の連続 実行 Multi-Purpose Particle and Heavy Ion Transport code System title 年 2 月改訂.
BBT 大学 Ruby on Rails 開発環境セットアップマニュアル Mac 版 1.1 最終更新日: 2013/1/5.
BBT大学 Ruby on Rails開発環境セットアップマニュアル
実習1:コマンドシェルの使い方.
UNIX利用法.
UNIX利用法 情報ネットワーク特論資料.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
JavaScript プログラミング入門 2006/11/10 神津.
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング基礎I(再) 山元進.
Java I 第2回 (4/18)
コンピュータリテラシー 第3回授業の復習 基本的なUNIXコマンド
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
Excel による データベース入門 Ver /9.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
最適化ソルバーのための Python言語入門
ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題
第13回 プログラミングⅡ 第13回
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
Bottle/Pythonによる Webアプリ入門
第8回 プログラミングⅡ 第8回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
条件式 (Conditional Expressions)
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
TA 高田正法 B10 CPUを作る 2日目 SPIMのコンパイル TA 高田正法
スクリプト言語を用いたPHITSの連続実行
鯖管のすヽめ.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
計算物理学基礎 第1回 UNIXの基礎 C言語の基本.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
情報処理概論Ⅰ 2007 第4回 2018/11/30 情報処理概論Ⅰ 第4回.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
2016年度 植物バイオサイエンス情報処理演習 第6回 情報処理(4) データを加工する・2
デジタル画像とC言語.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
UNIX演習 情報ネットワーク特論.
プログラミング基礎B 文字列の扱い.
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
B演習(言語処理系演習)第2回 田浦.
C言語 はじめに 2016年 吉田研究室.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
UNIX演習 情報ネットワーク特論資料.
統計ソフトウエアRの基礎.
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
C言語講習 第0章 Hello, world!.
標準入出力、変数、演算子、エスケープシーケンス
情報処理Ⅱ 2007年12月3日(月) その1.
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
情報処理Ⅱ 2005年11月25日(金).
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
クリエイティブ リサーチ 2019/05/20 日本工学院八王子専門学校 M.Katsube.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
Presentation transcript:

自然言語処理プログラミング勉強会0 - プログラミング入門 Graham Neubig 奈良先端科学技術大学院大学 (NAIST)

本チュートリアルについて 14部構成、比較的簡単なトピックから 各回: チュートリアルで:新しい内容 宿題:プログラミング演習 次の週:結果について発表、もしくは話し合いをす る プログラミング言語:任意 スライドはPythonで Python, C++, Java, Perlについての質問い答えられる 2人で組んで作業をするのもおすすめ

環境設定

端末を開く Linux, Mac プログラムメニューから「端末」を選択 Windows cygwinを利用 もしくはLinuxマシンにsshで接続

ソフトのインストール 3種類のソフト: python: プログラミング言語のインタープリター テキスト編集ソフト(gvim, emacsなど) git: バージョン管理ソフト Linux: sudo apt-get install git vim-gnome python Windows: cygwinのsetup.exeを実行 「プログラム」で「git」「gvim」「python」を選択

チュートリアルのファイルをgithub からダウンロード 「git clone」を使ってチュートリアルのファイルをダウ ンロード このファイルはnlptutorialディレクトリにあるはず $ git clone https://github.com/neubig/nlptutorial.git $ cd nlptutorial $ ls download/00-intro/nlp-programming-en-00-intro.pdf

gvimの使い方 どのテキストエディタでも良いが、vimを使う場合: 初めてなら、vimの設定を記述するvimrcをコピーすると 使いやすくなるかも: vimで「test.txt」というファイルを作る: 「i」を押すと入力開始、「test」を書く エスケープを押して、「:wq」でファイルを保存して終 了(:wは保存、:qは終了) $ cp misc/vimrc ~/.vimrc $ gvim test.txt

gitの使い方 gitを使って書いたコードの履歴管理することが可能 まず、追加したファイルをadd 「commit」で変更を保存 (「テストファイルを追加」などのメッセージを入力) 他の機能は最後のcommitへの巻き戻し(git reset)、サー バーに置いてあるコードの変更の反映(git pull)、サーバ ーへのコードのアップロード(git push) $ git add test.txt $ git commit

プログラミングの基礎

Hello World! my-program.pyをエディタで開く(gvim, emacs, gedit) 下記のプログラムを入力 プログラムを実行可能に プログラムを実行 $ gvim my-program.py $ chmod 755 my-program.py $ ./my-program.py Hello World!

データタイプ 文字列: “hello”, “goodbye” 整数: -1, 0, 1, 3 浮動小数点: -4.2, 0.0, 3.14 $ ./my-program.py string: hello float: 2.500000 int: 4

if/else, for 注意! range(1, 5) == (1, 2, 3, 4) 条件が満たされれば これをする そうでなければ 各要素に対して これをする $ ./my-program.py my_variable is not 4 i == 1 i == 2 i == 3 i == 4 注意! range(1, 5) == (1, 2, 3, 4)

複数のデータ点の格納 疎行列 密行列 or キー 値 20 1 94 2 10 3 4 5 19 6 キー 値 49 20 81 94 96 20 1 94 2 10 3 4 5 19 6 キー 値 49 20 81 94 96 10 104 2 or キー 値 apple 20 banana 94 cherry 10 date 2

配列(Pythonで「リスト」) 密なデータの格納に適している キーは整数で、0から始まる 5要素のリストを作成 リストの最後尾に要素を追加 リストの長さを表示 4番目の要素を表示 リストの各要素を表示

マップ(Pythonで「辞書」) 疎行列に適している。引数は何でもOK。 キー (「alan」)と値(「22」)からなる辞書を作成 新しい要素を追加 サイズを表示 1つの要素を表示 キーが辞書内に 存在するかどうか キー・値の各組を 表示(キー順で)

defaultdict デフォルトの値を定義する辞書の拡張 ライブラリ読み込み デフォルトを0に設定 存在するキーをプリント 存在しないキーをプリント

文字列の分割、連結 NLPで文を単語に分割することはしばしばある 文を空白区切りで単語の 配列に分割 配列を“ ||| “を区切りと して文字列に連結 $ ./my-program.py ... this ||| is ||| a ||| pen

文字列の分割、連結 NLPで文を単語に分割することはしばしばある 文を空白区切りで単語の 配列に分割 配列を“ ||| “を区切りと して文字列に連結 $ ./my-program.py ... this ||| is ||| a ||| pen

関数 関数は入力を受け取り、入力を変換し、戻り値を返す add_and_absの入力は 「x」と「y」 xとyを足し、絶対値を返す

コマンドライン引数 最初の引数 ファイルを読み込み「r」で開く 1行ずつファイルを読み込む 行末記号「\n」を削除 行が空でなければ表示 $ ./my-program.py test.txt

コードのテスト

入力・出力の簡単なテスト 例: プログラムword-count.pyはファイルの中の単語を数える 1) 小さな入力ファイルを作成 2) 人手で単語を数え、出力の正解ファイルを作成 3) プログラムを実行 4) 結果を比較 test-word-count-in.txt test-word-count-out.txt a b c b c d a 1 b 2 c 2 d 1 $ ./word-count.py test-word-count-in.txt > word-count-out.txt $ diff test-word-count-out.txt word-count-out.txt

演習問題 ファイルの中の単語の頻度を数えるプログラムを作成 テスト入力=test/00-input.txt, 正解=test/00-answer.txt 実行:data/wiki-en-train.wordに対して 報告: 単語の異なり数 数単語の頻度 a 1 is 2 my 1 pen 3 this 2 this is a pen this pen is my pen

単体テスト 各関数をテストするコードを書く 様々なテストを行い、不正解の場合はエラーを表示 全てのテストが通った場合のみ1を返す

コードのテストは必要不可欠! テストを作ることで: コードを書く前に解きたい問題の意識をはっきりに デバッグに使う時間が激減 時間を置いてコードを読み返す時に分かりやすい

演習問題

演習問題 ファイルの中の単語の頻度を数えるプログラムを作成 テスト入力=test/00-input.txt, 正解=test/00-answer.txt 実行:data/wiki-en-train.wordに対して 報告: 単語の異なり数 数単語の頻度 a 1 is 2 my 1 pen 3 this 2 this is a pen this pen is my pen

擬似コード create a map counts 単語と頻度を格納するために open a file for each line in the file split line into words for w in words if w exists in counts, add 1 to counts[w] else set counts[w] = 1 print key, value of counts