StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

生成AIに頼ることで失われるもの

 今年、大学院入試の取りまとめ役をやっていたのですが、私が所属してる専攻は教員が100人ぐらいいるんですけど、毎年1名のメイン担当がほぼすべての情報を把握し、ほぼすべての書類を作成するので、けっこう大変でした。夏の院試は170人ぐらい、冬の院試は30人ぐらいが受験していて、一斉に行われる筆記試験はともかく、1人1人違う時間、違う部屋で行う面接試験のスケジュール管理などは非常に神経をつかう仕事で、面接官をやる先生もすべて変わるので、誰に何を依頼するか間違えそうでハラハラします。大学院入試というのは案外複雑な制度で、受験資格や試験のカテゴリが何種類もあるので、「この人にはこの書類でよかったっけ?」というのがよく分からなくなりがちです。


 で、受験生ごとの個別資料にせよ全員に関わる共通資料にせよ、「去年までの書類をベースに、日付や名前や番号だけを書き換える」という作業がとても多く、こういうものは自動化したいなと強く思いました。実際、毎年少しずつ電子化や自動化を進めていますし、「教員の本来の仕事は研究と教育なので、事務作業は事務部門に任せるべき」という理由で、事務部門への移管を進めているものもあります。


 ところが、実際にやってみて気付いたのですが、「去年の書類の日付と人の名前だけを今年バージョンに書き換える」みたいな単純作業をひと通りやることで、初めて、入試制度の仕組みが頭に入るんです。「ここの日付はこっちでよかったっけ?」みたいな確認が、学習を強力に後押しする感じです。もちろん、募集要項や内規などを丹念に読めば、入試制度を理解することは理論上はできるはずなんですが、過去に入試担当をしていた先生たちに聞いてもそんなことができている人は皆無で、「入試の仕事が終わって担当から外れる頃に、初めて入試制度が理解できるんだよ」と口を揃えて言ってます。


 これと似たようなことを、最近はデータ解析のためのプログラミングに関して感じています。ChatGPTやGeminiなどの生成AIが、完全に実用的なレベルになったわけですが、学生にその使用を推奨するかしないかは、けっこう悩みどころです。イチからコードを書く経験がないと、生成AIが出してくるコードの意味が分からなかったり、間違いに気づけなかったりするからです。だから基礎は自分で勉強したほうがいい気がするものの、それも生成AIにダブルチェックをさせたり、コードの意味や使い方や注意点を説明させることができてしまうので、あまり意味はないかも知れません。


 思えば我々教員だって、PythonやR、ちょっと気合を入れてC++ぐらいは使うことがあったとしても、機械語はもちろんアセンブラのような低級言語*1を書いた経験がある人はほぼいないし、CPUやメモリの動作原理を詳細に把握してるわけでもないので、「中身をよく理解せずにツールを使っている」という意味では、生成AIにコードをかかせている学生と似たようなものだとも言えます。


 結局、昨年度ぐらいから、学生には卒業論文や修士論文のためのデータ解析で、ガンガン生成AIを利用してコードを書かせています。Rの基本的な操作方法だけは教えてますが、生成AIをつかって実用的なコードを書きながら、生成AIとのやり取りを通じて勉強するほうが、圧倒的に効率的なので、そっちでいいと判断してます。


 しかし、仮にそっちが効率的だとしても、なんというか、「人生経験」のような意味では物足りない気はします。私は、会社員だった2010年代の初頭にデータ解析やプログラミングの勉強をはじめたのですが、当時は勉強する手段と言えば、「教科書」と「その界隈のブログ」と「その界隈の勉強会」でした。私はその「界隈」に深入りはしませんでしたが、当時は「ビッグデータ」や「ディープラーニング」の時代の入口で、ビジネスマンで初めて勉強するという人が多かったので、詳しい人(たとえば大学院で統計学や機械学習をみっちり勉強した人)をみつけて教わったり、同レベルの人とお互いの意識を高め合ったりする機会がけっこうあって、あの頃の「熱い空気」はよかったなといい思い出になっています。しかもそれを匿名(ハンドルネーム)でやるっていう、あの文化が私はいまでも好きです。


 その後、YouTubeの解説動画にもいいものが出てきたことでも、少し時代が変わったのかも知れません。ちなみに今の学生は、数学の勉強をするときも、YouTubeの動画をけっこう見るらしいです。偏差値トップクラスの理系学生でもそうなので、YouTubeは侮れないです。逆に言えば、YouTubeよりわかりやすく面白い授業ができている教員が、いかに少ないかということでもありますね(笑)


 でもまぁやっぱりインパクトが大きいのは生成AIですよね。なんでも教えてくれるし、しかも回答は瞬時で、間違いがない*2。分からないところを何度も聞き直しても、嫌がらずに教えてくれます。昔は、技術面で気になることがあってGooglで検索すると、それを説明しているっぽいブログ記事とかが何個か見つかり、読み比べているうちにおぼろげながら分かってくる……という感じでした。読んでるうちにさらに疑問が出てきて筆者に質問をしてみるものの、すぐに返事があるとは限らない、というか結局返事がもらえない場合も多いし、その人自身もちょっと間違えてたりします。Stack Overflowなどの質問サイトも同じですね。


 そういう「界隈」の「先人」を頼るモデルは、明らかに非効率なので、生成AIを使わずにそれをやれとは、なかなか学生には言えません。というか、そういう「界隈」自体がハッキリと存在しなくなっていくのかも知れないですね。「TokyoR*3でLT*4を披露したりするのカッコよくて憧れるなぁ〜」というような価値観は、今もあるんでしょうけど、生成AIが何でも教えてくれるとなると、界隈と関わりをもつ必要自体が薄れていきますね。


 しかしこれはぜひ言っておきたいのですが、人から教わるしかなかった時代の美点の一つは、「自分もこのコミュニティに貢献したい」という利他的なモチベーションをもつことができたことです。このブログを書き始めた当初の目的も、「細かい技術的な問題を解決した記録をつけておくと、もしかしたら将来、誰かの検索に引っかかってその人の役に立つかもしれない」というのが大きかったです。*5


 これは、今の学生たちにもぜひ経験してほしいですね。データ解析やプログラミングに関してそれをやる必要がなくなったなら、別の領域ででもいいし、もちろんブログなどという旧式のメディアを使うことにもこだわらなくていいので。自分より詳しい「人」に教えてもらって、「なるほど!」と納得しつつ敬意を抱く経験や、自分が苦労して理解したことを仲間にわかりやすく説明して尊敬されたいという願望は、持ったほうがいいと思います。これは「承認欲求」(私はこの言葉が嫌いです)というようなレベルの低い話ではなく、ふつうに人間としての美徳です(笑)。そのほうが勉強自体も捗るし。


 また、さっき冒頭で、入試の書類の日付を更新する作業を通じて入試制度の全体像が頭に入るという話をしましたが、統計分析やプログラミングでも、自分で手を動かして間違えたりしないと、根本の仕組みが分からないという面はかなりあると思います。生成AIの教えてくれるコードは、いまのところは間違いもあるのですが、これが完璧になってしまうと、「なぜ動かないんだろう」と引っかかって疑問をもつ機会がなくなってしまいます。


 「そんな無駄な時間はないほうがいい」という人がいるかも知れませんが、それは、目先の作業を片付ける上での効率性について言えば、そのとおりです。しかし、引っかかったタイミングでこそ、その仕事を成り立たせている「根本の原理」や「システムの全体像」への関心が開かれるんですよね。その機会を持たない人は、「なぜこんなことが可能になってるんだっけ?」「なぜこのやり方ではダメなんだっけ?」という疑問をもつこともなくなってしまいます。


 「人間はものごとの本質的な仕組みや目的だけ理解していればよく、単純作業は機械に任せよう」というのは、本当にそれで本質が理解できるなら正しいと思います。しかし実際には、機械に頼ることで「本質に対する興味自体がなくなってしまう」場合がほとんどです。


 工学部の一回生向けの情報処理の演習を担当したことがあり、LinuxやFortranやTexを教えるのですが(今年ぐらいから言語はPythonに変わるようですが)、学生に「機械語は数字の0と1から成るという話は聞いたことあると思うが、機械がどうやって数字の概念を理解してると思う?」みたいなクイズを出したりしていると、知識として知らないだけでなく、そもそもそういう疑問を持ったことすらない人が多くてちょっと驚きました。「え、君ら工学部の学生なんちゃうの?」と。


 そのうち、「そもそも自分がやりたいことはなんだっけ?」と目的を問い直すことも、できなくなってしまうんじゃないでしょうか。先日、学生とデータ分析の打ち合わせをしていて、「このデータに対しては、こういう分析をやる必要がある。細かいやりかたはChatGPTに聞いといて」というアドバイスを繰り返していたら、「先生、次はChatGPTに何を聞けばいいですか」と質問されて衝撃を受けました。「いや、何をすべきかはお前が考えることやろ」と一瞬思ったのですが、その学生を馬鹿にするのではなく、優秀な人間でも容易にそうなってしまうのだという戒めにすべきだと思います。


 ちなみに、今のところ生成AI(LLM)は、そもそも単純に頼っているだけの人だと、大した情報を引き出せなくて、活用しきれないのが現状だと思います。なので、人間をスポイルしてしまう効果も、まだそれほど大きくはないのかも知れません。


 ものごとの本質や根本原理に関心をもつ人が生成AIと対話を続けていくと、どんどん理解が深まっていくのですが、「鋭い問い」を持てない人は浅いところで対話をやめてしまうので、「Googleで検索するよりちょっと楽」という程度にしか価値を引き出せない。そういう意味では、まだ今は「生成AIを使うにも苦労と工夫が必要な時代」であり、黎明期ならではのワクワク感があるので、我々がインターネットやデータ解析についてしたような経験を、生成AIについてすればいいだけかも知れません。これがもっと高度なエージェントになってくると、どうなるんでしょうね💦


 生成AIの圧倒的な効率性を、利用しない手はないです。しかしそれによって失われるものも確実にある。効率性によって得るものと失うもののバランスというのは、テクノロジーにまつわる永遠のテーマみたいなもので、単純な正解はないのですが、なるべくそれを「言語化」しておいたほうがいいとは思います。


 余談ですが、 いま、生成AIにレポートを書かせたりエロ画像を作らせたりしている学生たちは、思い通りの出力にならなくてそれなりに苦労をしていると思いますが、10年ぐらい経つとそれを後輩たちに「武勇伝」や「ノスタルジー」として語るようになるでしょうね(笑)。おそらく10年たつと、技術が進んで苦労がなくなるか、もしくは規制が強化されてグレーゾーン的な楽しみ方ができなくなって、「お前らにはわからんだろうが、あの頃は楽しかったんだぜ」と語る時代がきます。インターネットの歴史はそれの繰り返しです。


 そういえば他学部の学生ですが、超人気企業のインターン選考でオンライン面接をChatGPTだけで乗り切って、最終的に内定までもらって就職するという奴がいます。けしからんと思う面もありますが、企業側も対策するようになってきてるので、「生成AIの黎明期に一瞬だけ可能だったチート技」として、かけがえのないエピソードであるとも思います。そう考えれば、今のうちに生成AIと思う存分戯れておくのが正解という気はします。


 研究者にとって重要なところでは、海外の文書の翻訳とかも、今は割と自由にできてますが、「著作権の問題があるので訳せません」と言われるケースが増えてきてますよね。プロンプトの工夫で容易に回避できるのも、今のうちだけかも知れません。厳密にいえば違法行為が含まれるのでやるべきだとは言いませんが、ファイル共有や動画ダウンロードツールとかと同じで、「使えるうちに使いまくって保存したもん勝ち」な面はあると思います。個人的には、YouTubeがそうなってきたように、著作権者にお金が流れる仕組みをうまく作ってほしいのですが。

*1:ここでいう「低級」はショボいという意味ではなく、機械語に近く基礎的という意味。

*2:歴史的事実とかを尋ねると間違えてることがありますが、入門レベルのプログラムに関しては間違いがほぼないです。

*3:Rユーザのイベント

*4:ライトニングトーク

*5:大して意味のある記録は書けてないのですが、それでも頻繁に更新していた頃は、一応、毎月3万UUぐらいのアクセスがありました。独自ドメインに変更するときの手違いで、Google検索からのリンクが切れてしまい、激減しましたが(笑)

大学教員が最近の学生をみて感じるカルチャーショック10選

民間企業で10年働いてから大学に転職して、8年が経ちました。自分が大学生だった20年前と比べてのカルチャーショック、ジェネレーションギャップのまとめ(決定版)です。
 

第10位 授業にちゃんと出席している

最近の大学生は、とにかく授業に出席します。
いや当たり前だろと言われそうですが、昔の大学は出席管理が甘かったので、語学や体育のように出席を重視している一部の科目と、話が面白いと思える授業だけ出席して、あとの授業はレポートや試験だけ何とか頑張るというスタイルが割と一般的だったと思います。
周りの教員に聞いてみても、そういう人けっこういますね。
なので個人的には、自分がやってる授業でも出席なんて取らずに興味ある人だけ聴いてればいいと思うのですが、最近はしっかり管理しないと大学から怒られます。文科省が厳しいらしいです。
 

第9位 20歳になるまで酒を飲まない

最近の大学生は、法律を守ります。
私ぐらいの世代だと、まず初めての「飲み会」が高校1年の6月の体育祭の打ち上げでした。昔は、居酒屋にせよ、コンビニや酒屋にせよ、年齢確認とかなかったですし、教師も黙認してましたよね。
大学に入ると、清楚で真面目な女の子とかも、周りに合わせてふつうに飲んでたと思います。現役で入った1年生は18-19歳ですが、サークルの新歓とかに行けば酒を飲むのが普通だったと思います。
一方、今の大学生は、20歳になるまで飲まないという人が多いみたいです。真面目になったような印象ですが、そもそも昔に比べると飲み会自体が少ないし、酒を飲みたいというモチベーションもべつになさそうではありますね。
 

第8位 読書量が少ない

最近の大学生は、昔に比べると、読書量が少ないと思います。
特に、いわゆる教養書を読まなくなっていますね。私が教えてる工学部ではもともと本を読まないのは普通なのですが、とある文系学部(偏差値が国内最高だった時代もある)の先生に聞いたところ、最近の学生に「最近読んだ面白い本は?」と聞くと、池上彰の解説本とかを挙げてきて驚いたそうです。
昔の文系学部だと、『必読書150』に出てくるような岩波文庫の古典を片っ端から読んでいく……というのは大げさにしても、読んだフリができる程度にはつまみ食いしておくとか、そういう感覚があったと思います。
一方、今の大学生は、成績が優秀な層でも、「◯◯ぐらいは読んでいないと恥ずかしい」「解説書に頼ったことは人に隠しておく」という感覚があまりないようですね。
私が大学生の頃、ゼミの先生から、「教養書(典型的なイメージとしては岩波文庫や中公新書)は1週間に1冊ぐらい読んでいれば大学生として及第点」と言われたのを覚えています。自分では1日1冊を目標にしていて、結局サボるので平均すると2〜3日に1冊になってたと思いますが、大学生は週1ぐらいでそういう本を読んだほうがいい気はします。
 

第7位 教員を見下さない

最近の大学生は、教員を見下したりしないです。
昔はどうだったかというと、熱心な学生ほど教員を小馬鹿にしているようなところがあって、「あの先生はじつは本質を分かってない」「あいつは所詮左翼だから」「この授業の説明は古い」とかよく文句を言っていたと思います。
もちろん、今もそういう学生はいるのですが、昔に比べたらだいぶ少なくなってるんじゃないでしょうか。表に出さないので私の目に入ってこないだけ、という可能性はあるのですが、どうもそういう感じでもなさそうなんですよね。
優秀な学生でも、教師の言うことを素直に信じているという印象です。もう少し反骨心があってもいいかも知れません。
 

第6位 (笑)でもwでもなく笑

最近の大学生は、「笑」を直接語尾にくっつけます
括弧とかは付けません。

「先生そんなことも知らないんですか笑」

というふうに使います。
2個並べるときは、

「先生さっきチャック開いてました笑笑」

となります。
我々のような2ちゃんねる世代は「w」も使いますが、今の学生は全く使わないですね。
ちなみに私は、(笑)を変換辞書に登録したので(笑)を基本につかっています。
 

第5位 授業中に講義スライドの写真を撮る

最近の大学生は、講義中に教員が投影しているスライドを、スマホで撮影します。
撮っていいか確認したりもせず、当たり前のようにパシャパシャ撮影します。
私自身は撮られても構いませんし、「熱心に聴いてるやん」ぐらいに思うのですが、本来は、他人のプレゼンテーションを撮影していいかどうかは事前に確認するのがマナーですよね。一般の講演会とか企業の打ち合わせなどでは、著作権や機密情報への配慮も必要なので、勝手に撮るのはNGです。
最近、そういう一般常識を知らずに学生が社会に出るのも問題だなと思ったので、今後は、一応そういう一般的なマナーを教えた上で、私のスライドは自由に撮っていいと伝えようと思います。
 

第4位 格闘技に興味がない

最近の大学生は、格闘技には興味ないです。
私が学生だった頃は、K-1とかPRIDEとかがゴールデンタイムに地上波で流れていたので、特段「格闘技好き」というわけではない人も割と観てましたが、今の学生は全く観ないようです。
ここ数年、BreakingDownがバズってますし、格闘技選手のYouTubeチャンネルなどもかなりメジャーになっているので、てっきり学生たちも朝倉未来とか安保瑠輝也とか平本蓮とかの動向を知ってるのかと思いきや、驚くほど、まったく話が通じません
そういえば、学生をフィールドワークに連れていく少人数制の授業があるのですが、一昨年(2023年)、その履修者に「大晦日のRIZIN、チケット代は無料でいいので行きたい人いますか?」と募ったら、希望者ゼロでした。1枚33,000円のチケットを私費で4枚取ってたので、ふつうに友人と行きました(笑)
 

第3位 男子でも免許はAT限定

最近の大学生は、クラッチ操作ができません。
私が大学生の頃だと、男子は9割以上がMT免許を取り(ただしクルマを買うなら9割がAT車)、女の子は逆に9割がAT限定免許という感じでしたが、今は男子でも8-9割ぐらいがAT限定のようです。
免許の取得率そのものは、それほど低下はしていない印象です。3回生向けの交通工学の授業を担当しているので、毎年学生に手を上げてもらってるのですが、7-8割の学生が免許は取っています。
しかしクルマを買いたいという人は稀で、学生のうちに取っとくのが無難だから取ってるというだけですね。
 

第2位 就活時期が早い

最近の大学生の就活は、早いケースでは2回生の12月頃から始まります。
3回生の4〜8月ぐらいに、外資系コンサル、投資銀行、メガベンチャーあたりの有力どころのインターンがあるのですが、それに受かるためには「選抜コミュニティ」という、就活戦闘力最高レベルの意識の高い学生が集まるサークルみたいなやつに所属する必要があります。いや、べつに所属しなくてもいいんですけど、私が話を聞いている範囲では、内定まで取れる学生の8-9割ぐらいはその種の選抜コミュニティに所属してますね。
選抜コミュニティは、SPIやケース面接の対策のための互助会でもあるし、人脈づくりの場にもなっています。
選抜コミュニティ自体が、誰でも入れるわけではなく見込みのある学生しか入れてくれないので、その準備を2回生の12月ぐらいからする人もいるわけです。
なお、早ければ3回生の8月頃に内定が出てしまうので、就活にかけている時間自体がめちゃめちゃ長いというわけでもないですね。内定が早い人は、残りの1年半ぐらい学業と遊びに専念できます。
 

第1位 忙しそう

最近の大学生は、とても忙しいようです。
これ、大学の教員はみんな感じていると思うのですが、「えっ、学生ってそんな忙しいもんだっけ!?」と不思議に思ってしまうほど、みんなスケジュールの空きがないんですよね。
学生に何かを頼んだり誘ったりすると、「月末まで余裕がありません」みたいなことがけっこうあります。
何がそんなに忙しいのかいまいちわからなくて、教員から見るとけっこう「謎」です。学生も、教員から「学生がそんなに忙しいわけないだろ」と不思議がられているということは知らないと思うので、お互いの認識ギャップを埋めるためにも、何らかの調査が必要なんじゃないかと真面目に思っています(笑)

  1. 教員自身も、自分が学生だった頃はバイトとか入れまくっていて空き時間がなかったのを、忘れているだけ。
  2. 実際に、最近の学生は昔の学生より忙しい。
  3. 教員の依頼を断るために忙しいフリをしている。

と、いろいろ可能性が考えられるのですが、私の仮説は1ですね。自分が何かを頼む側になった時に、都合よく「学生は暇なはず」と思い込むバイアスが働いているのではないかと思っています(笑)

「社会課題」という日本語への違和感

学生のレポートや、就職活動のために書いているエントリーシートの作文などを見ていて、「社会課題」という言葉がよく使われるのが前から気になっていました。「この技術はさまざまな社会課題の解決に貢献し得る」みたいな。


おかしな日本語なのかと言われると、べつにそうでもないんだろうと頭では思うんですが、「そんな言い方しなくない?」って個人的には感じてしまいます。
「社会的な課題」とか「社会の課題」とか言うほうが普通だろうと。
「社会課題」という短縮の仕方は、「学校の宿題」を「学校宿題」と略しているような感じがして、気持ち悪いんですよね(笑)
「社会的課題」だと、まだ自然に感じます。理由はよくわかりませんが。


で、調べてみたら、「社会課題」という言い回しはここ10年ぐらいで急に増えたようです。
以下は、日経テレコン21という新聞記事のデータベースで、日経・朝日・毎日・読売・産経の記事を5年ごとに検索して、「社会課題」を含む記事の件数を、総記事数で割って、10万件あたりの数字に直したものです。



まぁ、個人的に気持ち悪いだけで、それなりに市民権を得ている表現ではあるようなので、学生に「使うな」とまで指導はしませんが、俺と同じように感じてる人けっこういるんじゃないかな〜?


あ、関係ないけど「自分ごと」という日本語は「使うな」と指導しています(笑)*1

*1:カギカッコをつけたりして「あえて」書いてる感を出しながら使う分にはあり。市民権を完全に得ているわけではない新しい日本語を、かたい文章の中で当たり前のように(市民権を得きっていないことを知らずに)使ってしまうと、子供っぽく見えるので。

researchmapに一括登録するためのcsvをエクセルから生成するツール

以前、researchmapに一括登録するためのcsvをエクセルからの変換で生成する方法についてのエントリ(リンク)を書いてましたが、Pythonのスクリプトとシェルスクリプトに分かれていたり、スクリプトを置く場所を気をつけないといけなかったり、Windowsの人とツールが共有できるか謎だったりしたので、ブラウザで動かせるようにJavascriptにしました。
ごく簡単な内容で、ポイントとしては、

  • CSVの1行目はデータではなく識別コードを記載する(下記コードのfilePrefixの部分)
  • すべてのデータを""で囲む
  • アブストラクトのコピーも登録する場合、セル内で改行が発生する場合があるので、念のため改行コードをそろえるようにしておく

程度ですね。
1つのエクセルファイルに「rm_published_papers」(論文)や「 rm_presentations」(口頭発表)などのシートを設けておいて、それを全部読み込んで個別にCSV化(すべてのCSVを1つのzipファイルにまとめて出力)するという内容です。
 

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>researchmap CSV 変換ツール</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.3.2/papaparse.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
  <style>
    body { font-family: sans-serif; padding: 2em; }
    h1 { font-size: 1.5em; margin-bottom: 1em; }
    input, button { margin-top: 1em; display: block; }
  </style>
</head>
<body>
  <h1>researchmap CSV 変換ツール</h1>
  <input type="file" id="excelFile" accept=".xlsx" />
  <button onclick="handleConvert()">CSVへ変換(ZIP出力)</button>
  <p id="status"></p>

  <script>
    const sheetConfig = {
      rm_published_papers: "published_papers",
      rm_presentations: "presentations",
      rm_books_etc: "books_etc",
      rm_research_projects: "research_projects",
      rm_teaching_experience: "teaching_experience",
      rm_media_coverage: "media_coverage",
      rm_industrial_property_rights: "industrial_property_rights",
      rm_awards: "awards",
      rm_committee_memberships: "committee_memberships",
      rm_misc: "misc"
    };

    function handleConvert() {
      const fileInput = document.getElementById('excelFile');
      const status = document.getElementById('status');
      const file = fileInput.files[0];
      if (!file) return;

      const reader = new FileReader();
      reader.onload = async (e) => {
        const data = new Uint8Array(e.target.result);
        const workbook = XLSX.read(data, { type: "array" });
        const zip = new JSZip();

        Object.entries(sheetConfig).forEach(([sheetName, filePrefix]) => {
          const sheet = workbook.Sheets[sheetName];
          if (sheet) {
            const json = XLSX.utils.sheet_to_json(sheet, { defval: "", raw: false });
            let csv = Papa.unparse(json, { quotes: true });
            csv = csv.replace(/\r?\n/g, "\r\n"); // 改行コードをCRLFに統一
            const content = `${filePrefix}\r\n${csv}`;
            zip.file(`${filePrefix}.csv`, content);
          }
        });

        const blob = await zip.generateAsync({ type: "blob" });
        saveAs(blob, "researchmap_csvs.zip");
        status.textContent = "CSVファイルをZIPで出力しました。";
      };
      reader.readAsArrayBuffer(file);
    }
  </script>
</body>
</html>

西部邁とAI

 あるところで西部邁という人のむかしの仕事について、短い論評を書く機会があったのだが、字数制限があったので省略していた論点についてメモしておきたい。


 西部邁はもともと東大の経済学者で、ある揉め事があって東大を辞めてからは「保守派の評論家」としてテレビなどで活躍するのだが、東大を辞めるちょっと前の時期に、パーソンズの構造機能主義を言語学に引き寄せて再解釈しつつ、それを拡張して社会科学の基礎理論を組み立てようという取り組みを行っていた。
 で、中味についてここでは詳しく紹介しないが、彼の考えた言語の意味論*1のモデルというものがある*2。西部の読者には「TEAM図式」として知られているもので、このモデルは突き詰めれば、人間の言語が、意味の「差異化と同一化」「顕在化と潜在化」という2対の機能の組み合わせで成り立っているという仮説に立脚している。多くの読者は、T(伝達)・E(表現)・A(蓄積)・M(尺度)の4点セットを提案したことだけ覚えていて、その4つもこれら2対の機能の組み合わせから生まれているという話は忘れていると思うのだが、個人的にはそっちのほうが大事だと考えている。
 その理由の一つは、「最小限の原理(規則)」から出発し、そこから機能が「分化」していくプロセスとして人間の言語のはたらきの全体像を捉えようとする思考法が、何かとっても包括的で気持ちいいからである。もう一つの理由は、今の機械学習AIによる自然言語処理も、「差異化と同一化」「顕在化と潜在化」という2つの機能の組み合わせとして解釈することで、有意義な理解が得られるような気がしたからだ。ここでメモしておきたいのは後者のことである。


 たとえばChatGPTなどのベースになっているTransformerは、単語(正確にはトークンといわれる、文字と単語の間みたいなものだが)の埋め込み空間から処理がスタートする感じになっているが、埋め込み空間というのは、それぞれの単語の意味を現実世界に存在する事物との対応(いわゆる記号接地)によってではなく、単語と単語のベクトル空間上の位置関係によって表現している。この空間内では、ある記号の意味*3というものは、いわば「他の記号と、どの観点で、どれだけ異なっているか/似ているか」だけで評価されており、これは「差異化/同一化」の原理に立脚しているといえる。


 また、西部邁が持ち出したもう一つの原理である「顕在化/潜在化」は、機械学習AIの学習プロセスに対応していると思えばいいと思う。ニューラルネットの学習は、

  1. 入力が与えられる
  2. 適当なパラメータに基づいて計算して何か出力する
  3. その出力が誤差関数により評価される
  4. パラメータをよりよいものに更新する

というステップで進んでいくわけなのだが、これは、何かを表現(顕在化)した上で、現実からフィードバックを受け、その教訓をパラメータの集合の中に蓄積(潜在化)していく過程だということができる。


 ちなみに先ほど、西部邁は最小限の原理で言葉のはたらきの全体を包括しようとしたという話をしたが、生成AIの「生成」という言葉はもともと、それに似た意味の数学用語から来ている。生成AIの生成は直接的には「生成モデル」から来ており、群論でいう「生成元」などよりも創造的なニュアンスが強いのだが、それでも、「具体的な事物がすべてそこから表れてくるような、大元となる抽象的な要素と規則」を重視する点で本質的には同じような発想である*4


 ……だから何なのという話ではあるのだが、人間を理解するために提案された理論が、機械学習AIの原理にもけっこう当てはまるというのは個人的に面白いく感じるので、そういうのをもっと考えていきたいと思っている。

*1:意味論というより、言語行為の機能論ぐらいに言っておくほうが適切な気はする。

*2:とりあえずのアイディアとして素描されたという感じのもので、学問的に精緻化していく努力は、西部によっても他の人によっても行われなかったが。

*3:正確には、意味は文脈に依存して決まるので、文脈の中で意味が与えられる前の素材のようなものだが。

*4:もともと識別モデルと生成モデルという区別があって、生成モデルの特徴は「同時分布」というものを推定するという点で、これは「最小限」というニュアンスはあまりないものの、生成される可能性がある全てのものの構造と分布を捉えるという「包括性」の意味はある。

頻度主義の「統計的仮説検定」についての理解度チェック

うちは工学部で、4回生になると研究室に配属されて卒論のための研究が始まるのですが、その段階で統計データの分析をしなければならないので、研究室内で毎年春から夏にかけて、統計学の基本的な理論とRのコードの書き方の勉強会が行われています。
で、この勉強会の1回目あたりで扱う「統計的仮説検定」についての理解(本質的な意味が分かっているかどうか。まぁ私も分かっているかどうか怪しいですが。)をチェックするための質問をいくつか考えているのですが、他にもっと良いものありますかね?どうでしょう。

  1. サンプル数とサンプルサイズの違いは?*1
  2. t分布とF分布について、どのような確率分布であるか、「グラフ」と「(α値付きの)分布表」をどちらも使ってみんなに説明できますか?α値とp値の関係が分かることと、両側確率、片側確率の違いがわかることが必須です。*2
  3. t分布が発見されたことによって、われわれは何ができるようになった?ハンドルネーム「student」氏はどこがすごい?
  4. 自由度って何が自由なん?*3それ計算して何が嬉しいん?*4
  5. p値って何の確率なのか、正確に説明できますか?*5
  6. 95%信頼区間って、何が95%なん?*6
  7. 統計的仮説検定でp値が小さくなりやすく(有意になりやすく)なるのはどういう時?ついでに検出力の話もできれば完璧。
  8. 不偏推定量と一致推定量の違いは?
  9. p<.05が有意水準としてひろく採用されているのはなぜか知ってる?*7
  10. 平均値と標準偏差が報告されている基本統計表をよく見るけど、標準偏差からは何が分かる?*8

*1:しょうもないけど、母集団からサンプリングするというイメージを確認するため。

*2:ソフトの使い方の解説を重視した簡単なテキストだと、分布表とか載ってないことがあるので、これをやらせるのは意外と大事。

*3:これは答えやすい

*4:これは答えにくい

*5:教員でもつい「帰無仮説が真である確率」みたいな間違ったことを言ってしまう人が意外といます。

*6:ベイズ信用区間みたいな捉え方をしていないかの確認。

*7:内容的にはただのウンチクですが(笑)、ここに疑問を持たない学生は物事を本質的に理解しようとする態度が足りないと思うので、案外重要。

*8:いろいろ言えるけど、標準偏差を上下に2個分でだいたい95%になり〜みたいな話ができるといい。

不偏分散の分母がn-1である理由の直観的な理解

統計学初学者の超あるあるネタなので、くどくど説明しませんが、件名の通りです。
で、これをChatGPTに説明させてみたら、概ね以下のような趣旨の説明をしていて、けっこう腑に落ちる感じがしました。

データポイントが n 個あるとき、それを「n次元空間」に配置して考えることができる。ただし、「平均で中心化されたデータ」は、1次元少ない空間上に存在することになる。したがって、そのデータのばらつき(広がり)を評価する際は、n−1 次元上でのばらつきを計算すべき。

注意が必要なのは、普通はたとえば1000人の学生の体重のデータが得られた場合、体重という1つの(1次元の)変数に関して1000個のサンプルが得られたというふうに捉えるけど、ここでは1000個の(1000次元の)変数に関して1つずつ値が得られたというふうに捉え直している点。
1000次元空間上の1点に今回得られたデータセットが配置されるというイメージだと、「1つの点のばらつきって??」となって混乱しそうなところがトリッキーではある。
1000次元の空間上の1点として1つのデータセットが表現されることになるわけだけど、そのデータセットが、xy平面でいうところのy=x(いわゆる45度線)からどれだけズレているかで、データのばらつきを表す発想だと言い換えてもいいと思う。*1
「平均で中心化された結果として、1次元小さい空間にばらついている」というのも、具体的にイメージするのが難しく、次元というよりはランクと言ったほうがいいのかも。


【追記】
あとで考えたのだが、1回のサンプリングで得られたデータがn-1次元空間にばらつくのではなく、サンプリングを何回も繰り返したときに、そのサンプルのばらつきがn-1次元空間に収まるということで、これは図示すればわかりやすい。
サンプルサイズ3のデータをサンプリングして、3次元空間に描画するというのをランダムにやると、当然立体的にまんべんなく分布するのだが、平均や合計が特定の値になるように制約を置くと、平べったく平面上に分布する。
平均値を固定して何回もサンプリングするという話と、今回たまたま得られたデータの平均値を「正」として分散を計算するという話のつながりを意識しないといけないので、頭がこんがらがってくるが。

*1:n次元の空間にランダムに生成されたデータの45度線からの距離は、nの平方根に比例し、次元が大きいほどばらつきは大きくなる。