この授業では, LISP(Scheme)というプログラミング言語を用いて, 記号処理の基本となる演習を行います.
なお,このページからリンクされているページ, さらにそのからリンクされているページ...の中には, 京都大学吉田地区のKUINSネットワークからしか参照できないものがあるかもしれません.
LISPに関するエッセイ
Paul Grahamによるエッセイ(Shiro Kawai氏訳,外部リンク):
演習で利用するScheme処理系
- DrRacket(PLT Scheme, DrScheme)
-
メディアセンタのWindows環境では,スタートメニューから少しメニューをたどってDrSchemeを選択すると動きます.
もうすこし詳しくはこちら.
- Gauche
-
詳しくはこちら(外部リンク).
マニュアルはこちら(外部リンク).
DrRacketの処理系をBYODのPCにインストールして利用します。
メディアセンタのVDI環境を利用できる場合には,スタートメニューから少しメニューをたどってGaucheを選択すると動きます.
この授業の方向性とプログラミングの授業の意味合いについて
やや実験的になりますが、この授業では希望者について、一般ユーザーが利用可能な大規模言語モデルを、プログラミングの学習に役立てることを目指します。
現在の技術水準で可能な、プログラミングにおけるAIの活用は、 まだ始まったばかりの模索状態であって纏まっていません。 つまり系統立った活用法には必ずしもなりません。 しかも技術的には日進月歩の状態がしばらく、あるいはずっと続くと考えられます。 そのため、活用法を学習してもすぐに陳腐化する可能性があります。 また将来的には、様々なAIの技術を利用してプログラムを作成・生成することや、 プログラミングを支援することが普通になると考えられます。 つまり従来のプログラミングの方法やそれの教育方法が、現在陳腐化しつつあります。 その先では人間がプログラミングを行うこと自体がかなり減ってしまう可能性さえあります。 そうなるとプログラミングの技術を習得することの価値が、現在とは大きく変化するでしょう。 [ただしこれはプログラミングやそれに関する授業についてだけではなく、 他の種類の文字列や各種データの生成についても同じことが言える場合が多いです。 また、他の科目の授業についてもその内容は大きな影響を受けるでしょう。]
しかし一方では、プログラミングがどのようなものなのか理解する人間がある程度以上(現状でも低い割合に思えます)は必要であり、 そうでないとプログラミングやAIが人類にとって完全にブラックボックス化してしまいます。 これは例えば他の技術、例えば静止画生成などと比較すると、 完全にブラックボックス化した時の困り具合や恐怖感が、プログラミングの方がずっと大きいように思えます。 またAI関連の技術の利用を拒否しても、 結果的に置いてきぼりを食らうだけ、ということになるでしょう。 現状技術が急速に進歩しているから、 それが安定してから学習しようとしても、 かなり長く、あるいはずっと待っていなければならない可能性があります。 [ただしこれは、AIの方が人間に合わせてくれるようになって、 特別なスキルがなくても十分使える技術になる可能性が高い気がします。]
上記のような考察を経て、 プログラミングの方法論や意味合い、教育方法が大きく変わる可能性がある、 という状況認識の下でこの授業を行います。 具体的には、希望者について、 大規模言語モデルを使えるように個人的に用意していただき (現状大学ではそのような用意を特にしていないと考えられます。 やってみないとわからないところがありますが、ChatGPTシリーズでなくても BingのAIチャットで十分かもしれず、そうであれば少しの手間と時間、 ある程度の個人情報の提供で無料で用意できます)、 プログラミング上、あるいはその学習上のサポートをする 役割を果たすようにそれを使いつつ、 学習を進めるという方法をとることになります。
大規模言語モデルの教育利用はまだ試行錯誤の段階にあると言えるので、 実験的にならざるを得ないこととなり、 どの程度の効率向上が見込めるか不明です。 従って必ずしもお勧めできないところがあります。 ですが、モデルによるサポートの利用を途中でやめたり再開したりは自由にできますので、 リスクはあまりないと考えられます。 また、大規模言語モデルの利用に慣れておくことそのものが、 スキルとして(少なくとも現在では)相当程度価値があるかもしれません。 つまり他のいろいろな場面においても役に立つスキルだろうということです。 例えば他のプログラミング言語の学習の際には、 この授業で有効であると分かったスキルは、やはり有効な場合が多いでしょう。 他の授業や、授業とは全く関係ない、例えばアルバイトや企業等でも役に立つ可能性があります。 [もちろん今の技術水準で必要なスキルやコツも、急速に陳腐化する可能性があります。]
注意点: 大規模言語モデルの利用についてそのライセンス上の条件を守ること、 この授業での利用がライセンス上問題ないこと、 提出レポートにはどのモデルをどのように利用したか或いは利用しなかったかを明記すること、 さらに学習利用した上でプログラムを自分で書いたのではなく、提出プログラムの一部をモデルにより生成した場合にはそれを明記すると共に、 そのプログラムが著作権法違反となっていないことを (少なくともある程度以上)チェックすること、 加えてそのプログラムが正しいことを人間がチェックすること、 この授業以外の他の授業でどのように大規模言語モデルを利用してよいかは授業ごとに異なることを理解し、利用する場合には担当の先生に確認すること、 生成されたプログラムや文章を仕事やアルバイトの成果物として提出したり、 ネットで公表する場合には、 現状の大規模言語モデルによる生成の場合には著作権上の問題がある可能性があることを理解し十分に注意することが、 この授業での大規模言語モデルの利用条件となります。
上記の著作権上の問題としては、 学習データとして非常に多数の著作権が保護されたプログラム(ネット上のものの場合もあるでしょう) を利用している場合、 それらの一部が生成プログラムや文章に紛れ込んだり、 それらの二次的著作物だと考えられるものが紛れ込む可能性があることが指摘されます。 これは、そのようになっても構わない、というライセンスを設定し、 そういったライセンスを満たし、著作権上も問題がないプログラムのみを訓練データとして 学習した大規模言語モデルであれば、 少なくともコメントを除いたプログラムについてはクリアされる可能性が高いです。 文章部分を含めて問題がない訓練データのみを用いている場合にはコメントの部分も大丈夫な場合が多いと考えられます。 人間のプログラマの場合、多数のプログラムを眺めて学習していても、 書いたプログラムが他と表現として似ていず、 他からの改変等を経て得られたものでなければ著作権上の問題はありませんが、 AI生成物の場合には、 元データの一部の二次的著作物であると判定される可能性があります。 裁判による判例が積み重ねられるか、 立法がなされるまで確定しないと考えられますが、 それまでは指摘されたり訴訟されたりするリスクがあります。 現状ではグレーであり、何も工夫がなければ避ける方が無難に思えます。 工夫としては、例えばwebクロールのデータを学習に用いている場合には、 そのような場合を対象とする著作権の判定プログラムが利用できるなら、 それで判定してOKだったらよいとする、などの方法が考えられます。 言語モデルに、 「著作権上問題がないプログラムを生成せよ」という条件を与えてどうなるかや、 「このプログラムはネット上のプログラムのどれかと類似していますか」などと 質問するのは実験する価値はあるにせよ、 出力結果が間違っている可能性があります。
上記の、その時の「出力データが訓練データそのまま、或はその二次的著作物」である という疑いを受ける他に、入力データに関する問題があります。 まず入力する質問等が漏洩するリスクがあります。 次に、第三者の著作物が入力されてその後のモデルの訓練等に用いられることで、 その後の誰かが得た出力データが意図せぬ著作権侵害を引き起こすリスクです。 これを避けられるかどうかを利用規約で確認し、 場合によりその防止手続きを行っておく必要があります。
準備
- PCのセキュリティを保つために (内容の部分。課題は無関係)
- DrRacketをBYODのPCにインストールしてください.
- VDI(仮想端末)について (仮想型端末サービスの部分。課題は無関係。VDIを利用できる方への情報です)
- 大規模言語モデル(LLM)を授業で利用したい場合には、 利用を開始する前に、それを個人的に利用できるようにし、 それのライセンス契約を読んで理解して守るようにしてください。 また、可能である場合には、 オプトアウト(システムに入力された、 ユーザーの個人情報などのデータの利用を停止すること)の設定を行ってください (もちろん最初からそのようになっている場合もあります)。 これは公開データのみを入力する場合であっても、 利用規約の内容によってはそれらをモデルの訓練などに用いる結果、 その後の生成データの著作権に関する問題に巻き込まれる可能性があるためです。 可能でない場合には、利用規約の慎重な検討が特に必要になります。 具体的に利用できそうなモデルは、ChatGPT無料版、ChatGPT有料版、BingのAIチャット(無料)、GoogleのGemini等になります。 それらを試せる環境も提供されています(Poe)。 利用開始する方法は適切なキーワードにより検索すれば得られます。 またMeta等が発表した、シングルGPUで動作可能な言語モデルのプログラムを個人的に動かしてもよいかもしれません。
-
LLMとしては、例えば以下のうちの全部または一部から利用すればよいと考えます。
無料版と有料版がある場合があります。
もちろん利用しない、あるいは途中から利用する、途中で利用を止めるのも問題ありません。
参考資料
以下はあくまで参考資料であってリンク先にある課題や次回の予定はこの授業のものとは異なります. 注意して下さい.
参考文献
- G.J. Sussman, H. Abelson and J. Sussman 著 / 和田英一訳 「計算機プログラムの構造と解釈 第二版」 ピアソン・エデュケーション 2000 英語版全文 日本語版全文
- 湯浅太一 「Scheme入門」 岩波書店 1991 (残念なことに現在入手困難です)
- K.ディヴィグ著 / 村上雅章 訳 「プログラミング言語 SCHEME」 ピアソン・エデュケーション 2000
- D.P.フリードマン, M.フェライセン 著 / 元吉文男, 横山晶一 訳 「Scheme手習い」 マグロウヒル出版 1990
- 猪股俊光, 益崎真治 「Schemeによる記号処理入門」 森北出版 1994
- Kahuaプロジェクト, 川合史朗「プログラミングGauche」 オライリージャパン 2008
授業予定日(令和6年度): 4/10,17,24,5/1,8,15,22,29,6/5,12,19,26,7/3,10
課題
課題の問題掲示は今ご覧のページから下記でリンクするwebページにて行います。 ただし回答のファイルはPandAにて提出していただきます。 メールで回答を提出しても無視されます。 PandAでの通常の提出方法と異なり、提出用の仮の課題に対しまとめて提出することに注意してください。 特に授業期間の途中で以前提出したファイルを誤って消すと、未提出扱いになる場合があることに注意してください。 提出方法について詳しくはPandAのこの授業のサイトの課題を参照してください。
各課題(番号ごと)の提出期限は、 別記しない限りそれについて説明してから2週間後を基本とします。 Webページに掲示しても直ちに説明しない場合も多いので、 掲示から2週間後よりは大抵の場合遅くなります。
- kadai01 (掲示:4月10日、締切4月24日) 今年度この日にはこれ以外にDr.Racketを自分のPCにインストールする作業をしていただきます。 上記「演習で利用するScheme処理系」のDrRacketの項目と「準備」を参照してください。インストールについての提出物や締切はありませんが、次回までに動作するようにしないと演習を行えません。
- kadai02-07 (掲示:4月17日、kadai02まで説明:4月17日、kadai06まで説明:4月24日、kadai04opt,kadai07optはオプション課題)
- kadai08-11 (掲示:4月24日、kadai08を飛ばしてkadai09,10を説明:5月1日、kadai11optはオプション課題)
- kadai12-16 (掲示:5月1日、kadai15まで説明:5月8日、kadai16optはオプション課題)
- 遅延評価 (掲示:5月8日、提出課題なし)
- kadai17-22 (掲示:5月8日、kadai21まで説明:5月22日、kadai19opt,kadai22optはオプション課題)
- kadai23-26 (掲示:5月22日、kadai25まで説明:5月29日、kadai26までとkadai08を説明:6月5日)
- kadai27-30 (掲示:5月29日、kadai27opt,kadai28opt,kadai29opt,kadai30optはオプション課題)
- Lisp in Lisp (掲示:6月21日、提出課題なし)
通常の課題の回答はできるだけ6月26日頃 遅くとも7月3日までに提出して下さい. これらの頃までに提出されていれば、本来の提出期限(説明後2週間)より遅れていても、 採点対象とする場合があります。 本来、説明した日から2週間後くらいまでに提出することを推奨します。 それ以後の提出の場合には、採点しても少し減点する予定です。
最終課題は以下の中から一つ以上選ぶか,相当する程度のプログラムを自分で考えて作成して下さい.期限は7月19日です(延長する場合があります). ただしこれらの課題のうちの一つを完遂しなくても他が十分にできていれば単位を取得できます.
フィードバックについて
フィードバックについてはいずれ授業中に連絡します。
なお演習課題はPandAで提出していただきます.
総合人間学部の履修生へのお願い
授業評価アンケートを、学部授業についてはKULASISを利用せずに別にとることになっています。 教員あるいはTAにアンケート用紙をもらって、記入提出をお願いします。
他に履修すると良い科目(最下行以外は総合人間学部学部科目だが他学部生も受講可能。他学部性が単位取得したい場合には相談してください)
- 数理情報特論I,II,III(後期集中講義) 隔年で計算機関係の講義を行う (おそらく10-11月ごろに開講。後期の最初に登録)。
- 計算機科学の基礎A(前期隔年開講、λ計算の基礎が含まれています)
- 機械学習の基礎(前期隔年開講)
- 情報処理の方法と演習AB(前期隔年開講)
- 人工知能(後期隔年開講)
- 情報基礎演習
リンク集
- LISPを利用している実用システムの例
- Practical Scheme(外部リンク)は充実した資料集になっています.