プログラミング演習(LISP)

この授業では, 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だったらよいとする、などの方法が考えられます。 言語モデルに、 「著作権上問題がないプログラムを生成せよ」という条件を与えてどうなるかや、 「このプログラムはネット上のプログラムのどれかと類似していますか」などと 質問するのは実験する価値はあるにせよ、 出力結果が間違っている可能性があります。

上記の、その時の「出力データが訓練データそのまま、或はその二次的著作物」である という疑いを受ける他に、入力データに関する問題があります。 まず入力する質問等が漏洩するリスクがあります。 次に、第三者の著作物が入力されてその後のモデルの訓練等に用いられることで、 その後の誰かが得た出力データが意図せぬ著作権侵害を引き起こすリスクです。 これを避けられるかどうかを利用規約で確認し、 場合によりその防止手続きを行っておく必要があります。

準備