2023年2月11日土曜日

冥王代

2月10日の日経夕刊のあすへの話題で,「地球へ…」の竹宮惠子が友人の地質学者の話を書いている。

名前は出しておらず,誰のことだろうとおもっていたら,全地球史アトラス冥王代生命学というキーワードが出てきたので,丸山茂徳だった。2人は徳島県出身で,1968年に徳島大学教育学部の別の専攻に入学していた。大学時代の部活動で接点があったらしいが,何部だったのかまではわからない。もっとも,1970年に竹宮は大学を中退して東京で漫画家の道を進んでいる。

丸山先生は,プルームテクトニクスの提唱者として有名だが,地球温暖化の人為起源説には否定的な見解を持っていた。たぶん,彼の時間スケール把握の観点からは,コンピュータシミュレーションの正当性の主張は霞んでしまうのだろう。


図:ChatGPT+DiffusionBeeによる冥王代のイメージ

Q: 画像生成AIのStableDiffusionに地球の冥王代の風景をかかせたいと思います。これにふさわしいプロンプト構文を200字以内でお願いします。40-45億年前の地球の形成過程の科学的知見に基づいて,ヘンな文字が紛れこまないようなものにしてください。

A: "Generate an image of the landscapes of Earth's underworld during the Hadean period, based on the scientific understanding of the Earth's formation process around 4 to 4.5 billion years ago. Show a desolate and hostile environment with volcanic activity and intense heat, surrounded by a young and constantly changing terrain."

[1]地球史年表History of Earth

2023年2月10日金曜日

QRコード(2)

QRコード(1)からの続き

前回の結果をまとめて,次のような仕様のpythonプログラム qr.py をつくる。テキストをファイルで与えるとエンコードしたQRコードの画像ファイルを生成し,逆にQRコードの画像ファイルを与えるとデコードしたテキストファイルを生成するソフトウェアである。いろいろ調べた結果を継ぎ接ぎしているだけだ。

(1) ./qr.py t hoge とすると,hoge.txt を hoge.png に変換する。
(2) ./qr.py g hoge とすると,hoge.png を hoge.txt に変換する。

#!/Users/koshi/bin/python

import sys
import qrcode
from pyzbar.pyzbar import decode
from PIL import Image, ImageGrab

foo=sys.argv[1]
bar=sys.argv[2]

if foo == 't':
    infile = bar+'.txt'
    outfile = bar+'.png'

    with open(infile, "r") as file:
        moji = file.read()
    img = qrcode.make(moji)
    img.save(outfile)

elif foo == 'g':
    infile = bar+'.png'
    outfile = bar+'.txt'

    with open(outfile, 'w') as file:
        img = Image.open(infile)
        for x in decode(img):
            moji = x[0].decode("utf-8")
            file.write(moji)
QRコードの仕様によれば,変換できる漢字かな文字数は最大1871文字までだ。726文字のサンプルで確認できた。

図:726文字のテキストに対するQRコード

726文字のこのQRコードは約7.5cm×7.5cmの面積なので,1㎠あたり13文字の情報密度になる。日本経済新聞で同じ面積の正方形に含まれる活字数を数える368文字であり,1㎠あたり6.5文字と約半分の情報密度だ。人間の目と手がQRコードに適応するよう進化していたら2倍の効率で情報伝達が可能になる・・・わけではない。

2023年2月9日木曜日

BardとBing

ChatGPTに端を発するAI チャットシステムの話題がNHKや新聞で大きく取り上げられるニュースになってきた。マイクロソフトとグーグルがこの大規模言語モデルの対応に大きく柁を切るアナウンスをしたからだ。いずれも検索エンジンの将来にかかわるという観点から取り上げられている。

マイクロソフトは,OpenAIと共同で,GPT関連技術を検索エンジンBingとブラウザEdgeに組み込むことを発表し,具体的なイメージを示した。2月7日からスタートするということだが,日本人の我々は待ち行列に並ばされている。これが誰にでも使えるようになるのならば,Macbook Air M1に十数年ぶりの Parallels Desktop for Mac を導入してWindows11を走らせなければならない。

グーグルは,OpenAIのGPT-3(Generative Pre-Trained Transformer 3)に対抗するLaMDA(Language Model for Dialogue Applications)という大規模言語モデルを持っている。去年の夏「AIが意識を持った?」で話題になっていた。OpenAIとは違って,これを一般に公開はしていなかったのだけれど,ChatGPTが1億人のユーザをあっという間に集めてしまったことでお尻に火がついたようだ。

グーグルは,2月7日にCEOのSundar Pichai がブログでアナウンスし,2月8日にパリからやや具体的なBard関連の発表があった。そこでは,Prabhakara Raghavan が Google Search は25年前の今日はじまったといってた。25周年の痕跡を探してもこれぐらいしかみつからない。

25年前(1998年)は,akebono(相撲の曙)サーバーのYahooが日本語版を出したころだ。全文検索エンジンとしてはgooを日常的に使っていたが,googleに出会った瞬間にこれが標準になってしまった。

追伸(2/11/2023)

2023年2月8日水曜日

QRコード(1)

1994年に日本で開発されたQRコードには日々お世話になっている。LINEのログインとか,PayPayの支払いとか,非常勤先のコロナ対応在席チェックなどだ。

長いURLをQRコードにして誰かに伝えたい場合,自分でQRコードを作成すると便利な場合がある。そんなときは,巷のQRコード作成サイトにたよっていた。例えば,こんなところそんなところあんなところである。

しかし,機微な情報もあるので,手元で作ることができればよいし,コマンドラインで実行できればもっとありがたい。さっそく,勉強のため自作しようかと意気込んで,python QRコードで検索すると,そりゃありますよね,既存のパッケージが。

qcode 7.4.2 というのがよさげだったので,早速インストールしてみた。
pip3 install qrcode
 or
pip3 install "qrcode[pil]"
 then
import qrcode
img = qrcode.make('QRコードです!')
img.save("qr.png")

たった3行でよい。コマンドラインからテキストとファイル名を取り込むようにした。

#!/Users/koshi/bin/python 
import sys
import qrcode
moji=sys.argv[1]
file=sys.argv[2]
out =file+'.png'
img = qrcode.make(moji)
img.save(out)

なお,pip3 install qrcodeで,qrというコマンドも別途インストールされていた。

逆に,QRコードの画像ファイルからテキストを取り出すこともできる。これは奥村先生のpython/qrcodeのページに詳しく書かれている。

brew install zbar
pip3 install pyzbar

として,qrdecode.pyを実行すればOKだった。

図:./qr.py 越桐國雄 kk で生成したQRコードkk.png



2023年2月7日火曜日

バナーイメージ

ノストラダムスからの続き

Damusのホームページでは,iPhoneクライアントが出るまで待ち行列に並べと書いてある。そのわりには,App Storeから簡単にDamusがインストールできて登録も完了した。

デフォルトのバナーとロボットアイコンはいやなので,変更するにはどうすればよいか調べると,設定画面から各画像のURLへのリンクを張ればよかった。自分のアイコンは,Twitterの10年くらい前の顔写真を流用する。バナーの方は bloggerのものを使おうとしたが,模様が薄くて単なるホワイトにみえるので改めて自作することにした。

画像なのでProcessingを使う。適当なサンプルを探してきて編集する。ChatGPTにもきいてみたのだけれど,エラーの理由がいまいちわからなくてあきらめた。void setup()は初期化のために1度だけ,void draw() はデフォルトでは繰り返し実行される。これで困る場合は,setup()にnoLoop()を入れればよい。setup中の最初に置くことになっているsizeコマンドの引数は数値でなければならなかった。このあたりが最初のつまづきポイント。

背景のグラデーションは,あとでGraphicConverter側でもっと調整できるかと思ったけれど,あまり思うようには設定できないので,プログラム側で努力することにした。

メインのルーチンであるネットワークの描画だけれど,乱数点をランダムに結んだだけでは,見栄えがよくないので次のようにした。(1) 選んだ2点を結ぶ線分の長さが一定以上のものは排除する。(2) ランダムな点で既存点との距離が近すぎるものはダミー点に置き換えてしまい(1)から使わないようにしてしまう。

これで得られたのが,現在のblogspotで使っているバナーである。サイズは750x250ピクセルとした。
int np = 600;
int[] x = new int[np+1];
int[] y = new int[np+1];
int[] c = new int[np+1];

void setup() {
  size(960, 480);
  int a0 = 30;
  int c1 = 180; 
  int c2 = 215;
  int c3 = 240; 
  for(int k = 0; k < height/a0; k++){
      noStroke();
      c1=c1+5;
      c2=c2+2;
      c3=c3+1;
      fill(c1,c2,c3);
      rect(0,a0*k, width,a0*(k+1));
  }
  noLoop();
  for (int i = 0; i < np+1; i++) {
    x[i] = (int) random(50, width-50);
    y[i] = (int) random(50, height-50);
    c[i] = (int) random(230, 250);
    for (int j = 0; j < i; j++) {
      float r = sqrt(sq(x[i]-x[j])+sq(y[i]-y[j]));
      if(r < 30) {
        x[i] = -200;
        y[i] = -200;
      }
    }
    fill(150,250,250);
    arc(x[i],y[i],2,2,0,2*PI);
  }
}

void draw(){
  for (int k = 0; k < np*1000; k++) {
    int i = (k + (int) random(0, np)) % np + 1;
    int j = (k + (int) random(0, np)) % np + 1;
    int l = (k + (int) random(0, np)) % np + 1;
      stroke(c[l], c[l], c[l]);
      if(sq(x[i]-x[j]) + sq(y[i]-y[j]) < 4000) {
          line(x[i], y[i], x[j], y[j]);
      }
  }
}


図:ネットワークをイメージした薄味のバナー

2023年2月6日月曜日

ノストラダムス

2月に入ってノストラダムスが話題を集めている。正確には,Nostrdamusなのだけれど。

Nostr(ノストル)とは,ネットワークのプロトコル名だ。公開鍵と秘密鍵の暗号鍵ペアに基づく分散型ネットワークである。ピア・ツー・ピアでもブロックチェーンでもない。メールと同様の古典的なリレー方式だ。超シンプルでスケーラブルなため,SNSプロトコルとして役に立つ可能性がある。

Damus(ダムス)とは,Nostrプロトコルを用いた分散型のSNSシステムだ。Twitterのような中央集権プラットフォームのサーバーは不要であり,登録に個人情報はいらず,暗号鍵ペアの秘密鍵でログイン認証し,公開鍵で他人の検索・フォローができる。

ActivityPub(アクティビティパブ)というプロトコルを用いた,分散型SNSのMastodon(マストドン)やMisskey(ミスキー)との違いは,[2]に詳しい。

さっそくiPhoneアプリのDamusに登録してみた。なにしろ,Twitterはイーロン・マスクによってかなり危うい運営状態になっているので,皆さん受け皿探しに必死(というほどでもないのだけれど)になりつつある。現時点で,Twitterは4億人,Mastodonは400万人,Damusは4万人というユーザ数のオーダーなので,世界は簡単には変わらない。

なお,@koshix Kunio Koshigiri の公開鍵は以下の通りである。

npub1r0r87scde7m66vvuz9dc5fht4g0va0ucl87yj4c984xdlwed5lmqv0m3ce


図:Damus macOS版(iOS版?)のアイコン

2023年2月5日日曜日

スライムハンド

NHKの朝のニュースで名古屋市立大学芸術工学部小鷹研究室が紹介されていた。小鷹研理准教授は,もともとロボットの研究をしていたが,鏡に映った身体感覚の錯覚におどろいて,その分野の研究にシフトした。

テレビで紹介されていたのは,スライムハンドという錯覚だ。実験者と被験者がテーブルに向かいあって座っている。被験者は右手をテーブルに載せ,鏡を挟んで左手の位置にはスライムだけが置かれている。被験者は鏡を左からのぞき込み,右手の位置に映ったスライムだけを見ている。

実験者が被験者の左手と右手側のスライムを同時に触ったり放したりする。やがて,左手の甲の皮膚をつまみながら,スライムをつまんで引き伸ばすというものだ。動画を見ていただいたほうが話が早い。このとき,被験者は自分の手の甲の皮膚が伸びていくような錯覚を感じる。

NHKの番組では実演までやっていた。研究室のホームページにはこのほかにも楽しそうな錯覚実験がたくさんのっていた。昨年にはあちこちのメディアで取り上げられていたらしい。


写真:スライムハンドの実験の様子(小鷹研YouTubeから引用)


2023年2月4日土曜日

ChatGPTと教育(2)

ChatGPTと教育(1)からの続き

ChatGPTがどのような役割を果たして教育のシステムを改善していくのか,あるいはAIの教育利用がどんな問題点をはらんでいるのかについて,様々な議論が始まっている。そこで,よくあるパターンの一つとしてChatGPT自身に聞いてみた(下記Q&A参照)。これは,ChatGPTが学習してきた大量の文書総体≒人類の「意識」の平均的なありようの射影になっている。

その結果は,例によって,もっともらしい単語の羅列であって,一瞥すると的を射たコメントのように見えたりもする。しかし,言葉を十分に吟味してみれば,テレビの時事情報番組のコメンテーターの場合と同様に,論理的にかみあわない単語の連鎖にキーワードをまぶして雰囲気だけを醸し出しているに過ぎない。
Q:大規模言語モデルを用いたAIによるシステムを学校教育に利用しようと思います。どのような活用方法が有用なのか5つあげて,その理由を箇条書きで説明してください。

A:(質問者のコメント:論理的推論の欠如と概念の重複
自然言語生成:大規模言語モデルを使って自然言語を生成することができます。これにより学生が作成した文章の構文や文法のチェックなどが行えます。

自動翻訳:大規模言語モデルを使って多言語の翻訳が可能です。これにより外国語の学習をサポートすることができます。

チャットボット:大規模言語モデルを使ってチャットボットを作成することができます。これにより学生がコミュニケーションスキルを磨くことができます。

機械翻訳:大規模言語モデルを使って機械翻訳を行うことができます。これにより学生が英語など外国語を読む力を向上させることができます。

音声認識:大規模言語モデルを使って音声認識を行うことができます。これにより学生がリスニング力を向上させることができます。


Q:外国語や国語の学習が中心ですね。それら以外の教科を念頭にさらに5項目あげて下さい。

A:(質問者のコメント:単調なパターンの繰り返し,論理の飛躍
数学:大規模言語モデルを使って数学の自動生成や問題の自動解答などができます。これにより学生が数学の要点を理解しやすくなります。

科学:大規模言語モデルを使って科学の説明や解説などを自動生成することができます。これにより学生が科学の概念を理解しやすくなります。

哲学:大規模言語モデルを使って哲学的なトピックの説明や解説などを自動生成することができます。これにより学生が哲学的な観点から物事を考える力を養うことができます。

歴史:大規模言語モデルを使って歴史的なトピックの説明や解説などを自動生成することができます。これにより学生が歴史的な観点から物事を考える力を養うことができます。

社会科学:大規模言語モデルを使って社会科学的なトピックの説明や解説などを自動生成することができます。これにより学生が社会科学的な観点から物事を考える力を養うことができます。


Q:これらの例は,従来のインターネットにおける情報検索でも実現できていたのではないですか。本質的な違いがあるような具体的な方法を知りたいのですが。

A:(質問者のコメント:ChatGPTが主観をシミュレートしているということ?
その例示した内容は従来のインターネット上の情報検索でも実現可能ですが、大規模言語モデルを用いた AI によるシステムは以下のような本質的な違いがあります。

自然な文章生成:大規模言語モデルは自然な文章生成能力があり、学生にとって理解しやすい形式で情報を提示できます。

主観性のある情報提示:従来の情報検索はオブジェクト的な情報を提供しますが、大規模言語モデルは主観性のある情報も提示することができます。これにより学生が様々な観点から物事を考える力を養うことができます。

学習内容のカスタマイズ:大規模言語モデルを使った AI システムは学生の学習状況に合わせて学習内容をカスタマイズすることができます。これにより学生が効率的に学習することができます。

自動的な評価:大規模言語モデルを使った AI システムは学生の課題やテストの解答を自動的に評価することができます。これにより教師の負担が軽減されます。

これらが大規模言語モデルを用いた AI によるシステムが従来のインターネット上の情報検索と本質的に異なる点です。
[3]1/26/2023 教育現場でのChatGPTの利用についてChatGPTに直接聞いてみた(サルタック・シクシャ)

2023年2月3日金曜日

ChatGPTと教育(1)

ChatGPTの近況(2)からの続き

OpenAIはChatGPTの教育利用でつまづくことを懸念し,かなり気をつかった文章を作成していた(Educator Considerations for ChatGPT)。その一部を引用して訳出してみた。

【教育関連のリスクと機会の例】

我々は,この技術がどのように使用され,人々がどのようなアプリケーションを探求するかを理解するための,まだ初期段階にいる。教育の場における生成AIの多くの応用に期待しているが,他のテクノロジーと同様,教育者の監督のもとで教室に導入することが重要だと考えている。また,多くの教育関係者が,この技術に何ができるのか,その限界は何なのかについて疑問を持っていることも理解している。

以下にその概要を紹介する。このリストは包括的なものではないが,この技術を採用する際に何を考慮すべきかについて,さらなる議論と意見の喚起につながることを期待している。なお,これらの検討事項について,添付の入力フォームでご意見を募集している。 
*効率的で個別化された教育

ChatGPTのようなツールを使って,教育者がどのように教え・学ぶかを模索しているいくつかの例を示す。

・授業計画やその他の活動の下書きやブレーンストーミング
・練習問題やその他の演習課題の設計の支援
・カスタム自習ツールの検証
・好みに合わせて教材をカスタマイズ(言語の簡単化,読解レベルの調整,興味に合わせたアクティビティの作成)
・文章読解に対する文法的または構造的なフィードバックの提供
・作文やプログラミングの分野におけるスキルアップ活動での使用(コードのデバッグ,文章の修正,説明の依頼)
・AIが生成したテキストに対する批評

上記のいくつかは,個別学習支援ツールとして求められるChatGPTの可能性を引き出す一方で,学生のプライバシー,偏見のある扱い,不健康な習慣の助長など,個別化に関連するリスクも存在する。学生が直接の指導監督なしにこれらのサービスを提供するツールを使用する前に,学生とその教育者は,以下に概説するツールの限界(以下の*)を理解する必要がある。

同様に,教師はChatGPTを利用して課題の作成を支援したり,学生の作文にコメントを提供したりすることに成功したと報告しているが,それ自体を評価ツールとして信頼すべきではない。むしろ,教師は入力と出力の両方を慎重に確認し,AIシステムを使用したり依存したりした場合は,利用規定に沿って開示する必要がある。

*不正行為と剽窃の検出(略)
*AI倫理とリテラシー(略)
*真実性(略)
*有害なコンテンツ,偏見,ステレオタイプ(略)
*評価(略)
*過度な信頼(略)

*公平性とアクセス

ChatGPTのような技術がますます普及しているため,学生がこれらのツールに等しくアクセスし,効果的に使用する方法を学ぶことが重要である。ChatGPTは,既存の不公平,特にデジタルデバイドに関連する不公平を悪化させる可能性がある一方で,その一部に対処する機会も提供する。例えば,文章を書くのが苦手な学生や英語が第二言語である学生にとって,ChatGPTはスペルミスを減らし,コミュニケーションを向上させるのに役立つ。

しかし,このモデルの性能のばらつきの問題(偏見,他言語での性能,非西洋的視点の取り込みなど)は,学生にとって公平な結果を得る機会にも悪影響を及ぼす可能性があある。さらに,ChatGPTに関連するコストや地理的なアクセス制限は,学生や教育者のアクセスに影響を与える可能性がある。

*雇用機会と展望(略)

*利用の公開

我々は、学生がChatGPTの使用状況をエクスポートし,教育関係者と共有できるような機能を開発中だ。現在,学生はサードパーティのブラウザ拡張機能でこれを行うことができる。
教育者は,学習教材を作成する際にもChatGPTの利用を公開し,課題や活動にChatGPTの利用を取り入れる際には,学生に公開するようお願いする必要がある。
学生はChatGPTを使用したことを以下のようにBibtex形式で引用することができる。

*教育関係者の意見

我々は,教育関係者と協力して,教室で何が起こっているかを知り,ChatGPTの能力と限界について議論している。私たちのアウトリーチでは,まず私たちが本社を置く米国の教育関係者に焦点を当ているが,私たちが学びながらその範囲を広げていく予定だ。

教師,管理者,保護者,学生,教育サービス提供者など,これらの問題に影響を受けている人々が見ているものについて,さらなる視点を歓迎している。この取り組みの一環として,教育関係者の皆様には,フィードバックフォームにご記入の上,開発中のリソースや参考になったリソース(コースガイドライン,オナーコードやポリシーのアップデート,インタラクティブツール,AIリテラシープログラムなど)をご紹介いただけると幸いである。

ChatGPTの月間アクティブユーザー(MAU*)は2022年11月30日の公開開始から2ヶ月の2023年1月には1億人に達した(*Monthly Active User:ある月に1回以上利用したユーザの数)。

※※ChatGPTは,月20ドルの有料版 ChatGPT Plusを米国で提供するとアナウンスした。ピークタイムでもすぐにアクセスできること,高速なレスポンスタイム,新機能や改良の優先的適用等のメリットがある。

[1] OpenAI CEO Sam Altman | AI for the Next EraSam Altman 1985-)

[2]ChatGPT Plus(OpenAI)

2023年2月2日木曜日

ChatGPTの近況(2)

ChatGPTの近況(1)からの続き

そうこうしている内に,OpenAIは,ある文章がChatGPTのようなAIによって作られたものか,人間が書いたものかを判別するツールをオープンした。AI Text Classifier である。どうやら教育・学習の場で ChatGPTが使われることに対する批判への一つのエクスキューズのような雰囲気だ。なお,Educator considerations for ChatGPT にOpen AI側からの詳細なコメントがある。

AI Text Classifierには,現在のところ次のような制限事項がある。
・最低1,000文字(約150~250ワード)が必要である。
・分類器は必ずしも正確ではなく,AIが生成したテキストと人間が書いたテキストの両方を誤って分類することがある。
・AIが生成したテキストは,分類器を回避するために簡単に編集できる。
・分類器は,主に大人が書いた英語のコンテンツで学習したため,子供が書いたテキストや英語でないテキストでは間違う可能性が高い。(つまり日本語には対応していない)
一方の,ChatGPTの方には,数学的な扱いが少し賢くなったようなメッセージが見えた。早速,二次方程式の問題に挑戦する。x^2-5x+6=0 である。これは簡単に因数分解できるのだけれど,解の公式を当てはめて答えの3と2を導いている。しかし,2x^2+3x-2=0 の場合は,x=(-3 ± 5)/4 までは正しいのだが,最後の答えが 2と-1なのだ。なんでやねん。

次に,ChatGPTに,"please explain the general method so solve quadratic equation, for junior high school students" と入力して得られた1150文字の回答をAI Text Classifierにいれると,確かに,AIが作った文章だと判定された。まだ様子見の段階。

2023年2月1日水曜日

ChatGPTの近況(1)


いよいよ,普通のメディアでも話題になってきたChatGPTである。

(1) OpenAIがChatGPT Pro版として,月額$42(≒6,000円)の有料高速プランを出すらしいとの噂が流れている。無料版が継続されるのはどうかはわからない。また,同等のシステムはいろいろと出現しそうである。例えば,Easy-Peasy-AIは,無料プランとより安価な有料プランを提示している。それにしても,オープンソースの無料版のモデルが必要だ。対話は検索と同じくらい重要であり,すべての人がヘビーユーザになりうるからだ。

(2) ChatGPTがすでに,大学のレポートなどで使われ始めている。スタンフォード大学では,17%の学生が試験やレポートでChatGPTを使ったという。一方,初等中等教育の場からは排除しようという動きもある。ニューヨーク市の教育局が,学校の端末からのChatGPTへのアクセスを禁止するというものだ。個人の端末からのアクセスまでは制限できないので,どれほど意味があるのかはよく分からない

(3) GoogleのChromeにChatGPTの機能拡張を組み込むことができる。ChatGPT for Googleである。早速試してみた。検索語を入力すると,右サイドにこのキーワードに対するChatGPTの出力が現れる。日本語だからなのか,出力が片言で非常に時間がかかっている。Google SpreadSheetには,GPT関数を組み込むことができる神田敏晶さんが紹介している。OpenAIのAPIを使っているので有料になる。すでに無料分を使い切って課金していないので,エラーになってしまった。ChatGPTが正しい事実を話すようになれば非常に強力な仕事のツールになる。

(4) Wolfram Alpha は,2009年にカウントダウンの鳴り物入りでスタートした質問応答システムである。深層学習に基づく大規模言語モデルとは異なるものの,ChatGPTが苦手な事実データや数学的な計算処理については幅広く対応することが可能であった。そこで,Wolfram AlphaとChatGPTのタッグが強力なシステムになることが簡単に予想でき,スティーブン・ウルフラムはその期待を語っている[1]。また,ある種の実装はすでに開始されている[2]。

図:Google Trends(AI, メタバース, ChatGPT)の1年の推移


2023年1月31日火曜日

形態素解析

コンピュータによる自然言語処理のアルゴリズムで第一に取り上げられるのが形態素解析である。品詞情報がならんだ辞書をもちいて,原文を形態素(品詞情報付き)に分解できる。

これを実現するソフトウェアとしては,大学等で開発されたいくつかのフリーソフトが有名だった。Juman / Juman++ChaSenKAKASIMeCab(工藤拓),SudachiKuromoji(atilica),janome(打田智子)などである。MeCabがポピュラーなのだけれど今となっては少し古いのかもしれない。これまで,MeCabになじんできたので,Juman++出力形式はやや違和感がある。

さて,しばらく前に,mecab-neologdというMeCabの最新辞書を導入した。それでもたりない場合は,ユーザ辞書を定義して使うことになるのでチャレンジしてみる。その前に,システム辞書をipadicからipadic-neologdに変更してみた。
vi /opt/homebrew/etc/mecabrc
configuration file の dicdir の修正:
; dicdir =  /opt/homebrew/lib/mecab/dic/ipadic
dicdir = /opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd
次に,「ユーザ辞書登録をやり直す」にしたがって,ユーザ辞書を使えるようにしてみた。
cd /opt/homebrew/lib/mecab/dic
vi userdic.csv
cat userdic.csv

行政組織,,,1000,名詞,一般,*,*,*,*,行政組織,ギョウセイソシキ,ギョウセイソシキ

出発点,,,5000,名詞,一般,*,*,*,*,出発点,シュッパツテン,シュッパツテン

95%信頼区間,,,5000,名詞,一般,*,*,*,*,95%信頼区間,キュウジュウゴパーセントシンライクカン,キュージューゴパーセントシンライクカン

/opt/homebrew/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d /opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd -u userdic.dic -f utf-8 -t utf-8 userdic.csv
mecab -u /opt/homebrew/lib/mecab/dic/userdic.dic

これで使えるようになる。ユーザ辞書のcsvファイルの構造は次のようになっている。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音
左右の文脈IDは空欄でよいらしい。またコスト値を推定する方法についてはもう少し調べる必要がある。

2023年1月30日月曜日

京大OCW

高等教育研究センター(2)からの続き

騒動になってから半年たち,京都大学からオープンコースウェアを継続することが発表された。現行OCWコンテンツを維持とし,新しいOCW2.0(仮称)や検索システムKU-Search(仮称)を構築するとのこと。そのために,コンテンツ企画・支援室(仮称)を設けるらしいが,京都大学情報環境機構の情報環境支援センターに位置づけられるのかな。

この機会に他大学のOCWはどうなったかをgoogleにOCW +site:ac.jpを入れて検索した。

  (338通常講義,477公開講義,81最終講義,95国際会議,90その他)
  (5078講義ノート,40動画音声)
  (150学部講義,50大学院講義,170公開講座)
  (48テレビ講義,43ラジオ講義,131テレビC,152ラジオC)
  (269コンテンツ)
  (92学部講義,48大学院講義,264公開講座)
  (136コンテンツ)
  (352授業,251最終講義,)

googleで見つかるのものは,京大,東工大,東大がほとんどを占めていた。阪大と東北大がOCWで引っかからない。なぜなら彼らはMOOCの名前を使って,阪大はedX,東北大はJMOOCにアウトソーシングしているからだった。

それでは,OCWとMOOCの違いはなんなのだろうか。JOCW(日本オープンラーニングコンソーシアム)が解消発展したOEジャパンに定義があった。
OCW(Open Course Ware):大学や大学院などの高等教育機関で正規に提供された教材を,インターネット上に無償で公開する活動

MOOC (Massive Open Online Course):インターネットにアクセスできれば誰でも無償もしくは安価に利用できるオンライン講義

OE(Open Education):世界中のすべての人が質の高い教育経験と資源にアクセスできるようにすることで,人類の発展に貢献しようとする教育ムーブメント


OER(Open Education Resource):教材の作成者が利用者に対し,その教材の修正や改変の許可を与えてる学習資料,クリエイティブ・コモンズ・ライセンスなどにより著作権の一部もしくは全てを放棄することで,他の人々は自由にアクセス・再利用・翻訳・修正できる。
インターネットがブレイクして10年後,今から20年前にOCWは一時流行しかけていたけれど,やがて下火になって現在に至っている。GIGAスクール(一人一端末)の時代に,OERの重要性はますます高まっているはずなのだが・・・


図:MOOCのイメージ(Wikipediaから引用)




2023年1月29日日曜日

茶道

NHKの近畿のニュースで小学生の茶道教室の話題があった。アナウンサーが茶道(ちゃどう)と発音して紹介している。NHKは最近よく間違えるわと思ってみていると,2回目も「ちゃどう」と。あれ,もしかして「さどう」だと思っていた自分のほうがおかしいのか?

さっそく,物書堂の精選版日本国語大辞典で確かめてみると・・・
ちゃ-どう【茶道】〘名〙
①茶の湯を催すことによって静寂閑雅の境地にはいり,礼儀作法を修める道。…。さどう。

さ-どう【茶道・茶頭・茶堂】〘名〙
①(茶頭・茶堂)茶事をつかさどるかしら。…。
②(茶道)茶の湯。…。
[補注]茶の湯の道のことを「さどう」というのは江戸時代まではまれであり,また,茶頭との混同をさけるために「ちゃどう」というのが普通であった。
お〜い,早く教えてくれ〜。70年近く生きているのに知らなかった。たぶんそんなことが他にも沢山在るわけで,まあそれはそれでいいのかもしれないけれど・・・。なお,大辞林でも「ちゃどう」がメインで「さどう」がサブの扱いだった。

ということは,これまでも「ちゃどう」という言葉がしばしば聞こえてきてもおかしくなかったのだけれど,思い込みフィルターで完全に無視していたに違いない。高校の時は茶道部(さどうぶ)とよんでいたはずなのだが。

[参考]
(1) 裏千家,表千家の英語ページでは,Sadoはでてこない。Chanoyu だ。
(2) 日本政府観光局サイトでは,"These practices developed into sado, the art of the Japanese tea ceremony."とある。
(3) Googleでは,sado "Tea ceremony" 78,800件,chado "Tea ceremony" 65,300件
(4) Wikipedia(英語)では,The Japanese tea ceremony (known as sadō/chadō (茶道, 'The Way of Tea') or chanoyu (茶の湯)) 
(5) ChatGPTでは,Q:How do you pronaunce Japanese Tea ceremony as Japanese word.
A:The Japanese word for "tea ceremony" is "chado" or "sado" (茶道) which is pronounced "cha-doh" or "sah-doh" respectively.

一般的には,互角というところなのかもしれない。


図:The kanji characters for chadō, the 'Way of Tea' (Wikipediaから引用)

2023年1月28日土曜日

テキストマイニング

施政方針演説(2)からの続き

テキストの分析は,テキストマイニングという名前でかつて流行っていた。検索エンジンの技術が話題になってビッグデータが流行り始めていたころだ。基礎知識に欠けた自分は,形態素解析で単語の出現頻度を調べて比較する先の議論には進むことができず終いだった。当時買った本がないかと本棚を確かめてみたけれど,それらしいものも見あたらない。

さて,施政方針演説テキストの抽出までを行うことにしよう。こういう目的のためにはシェルスクリプトが有難い。pythonやperlでまとまったプログラムを書くより,複数の簡単なコマンドを組み合わせるほうが楽だと思える素人プログラマーなのだった。

(1) ウィキソースにあった,内閣総理大臣施政方針演説のpdfファイルをダウンロードする。
(2) pdftotextによってpdfファイルをテキストに変換して一時保存する。
(3) tr -d で不要な改行コード,改ページコード,記号,数字,アルファベット等を取り除く(本文中の数字は全角のアラビア数字又は漢数字が使われている)。
(4) sed で句点「。」を「。+改行」に置き換えて一時保存する。
(5) sed でキーワードから本文前後の行を取り除き,これを最終のテキストファイルとする。
(6) 全体をシェルスクリプトにまとめ,コマンドライン引数で国会の開催回と総理の姓を入力して,該当するファイルを取り出せるようにした。

#!/bin/zsh

# Speech of Prime Minister in the Diet

# https://ja.wikisource.org/wiki/カテゴリ:内閣総理大臣施政方針演説

# 1/28/2023 K. Koshigiri

# usage: jpol.sh 204 菅

# output 204.txt


lynx -dump https://ws-export.wmcloud.org/\?format=pdf\&lang=ja\&page=第\$1回国会における\$2内閣総理大臣施政方針演説 > \$1.pdf

pdftotext \$1.pdf \$1-x.txt

cat \$1-x.txt | tr -d "\n\f[0-9][A-z] .,-(→/←);:'~Ö↑í" | sed "s/。/。\n/g" > \$1-y.txt

sed -e '/ウィキソース/d' -e '/作者:/d' -e '/この著作物/d' -e '/この作品/d' -e '/本作品/d' -e '/ 二次的著作物/d' -e '/許諾者/d' -e '/クレジット/d' -e '/あなたの/d' -e '/再構成/d' -e '/クリエイティブ・コモンズ/d' -e '/閲覧/d' \$1-y.txt > \$1.txt

rm $1-?.txt

perlまで必要ない場合は,小刀のような sed が使いやすいことがわかった。sedでキーワードによる行削除をするのだが,並列に記述できるということを学ぶ。


2023年1月27日金曜日

エアポケット(2)

エアポケット(1)からの続き

引き続きタイムワープの状態にある。今は,2023年12月31日23時30ごろ

今年の締めくくりのニュースは,松本人志の話題だった。菅野完が,いまごろ,ダウンタウンの漫才は面白くなかったというのはおかしいと強調していた。それはそれで評価されるべきだという主張なのだけれど,自分にとっては彼らが面白い漫才だと印象に残ることはなかった。島田紳助・松本竜介や,ツービート,爆笑問題なども同様にそこまで共鳴できなかったチームだ。

面白かったのは,鶴瓶=たかじん(11PMの出し物),Wヤング(初代),海原千里・万里くらいかな。最近だと,さや香の一部の出し物,南海キャンディーズ,笑い飯。

いや,そんなことはどうでもいい。知恩院の除夜の鐘が鳴り出したので,お休みなさい。

2023年1月26日木曜日

エアポケット(1)

タイムワープしている。今は2023年12月31日の午後11時頃である。

冬休み中のブログはお休みだ。年越しだと思って過去ログをパラパラ見返していたら,今年のブログが363回しかないことに気づいた。探してみると,2023年1月の26日と27日の分が抜けていた。まあ,そんなこともある。11ヶ月遅れだけれど,仕方がないので,適当な雑感で埋めておく。

大晦日の夕食はみんな集まるので,スキヤキになることが多い。

今年の豆腐はちょっと柔らかすぎる絹ごし豆腐だった。これがもやる。焼き豆腐がいいのだけれど,主導権がないのでしかたがない。ここぞと奮発して肉が多すぎるのもなんとなく落ち着かない。心がざわつく。相対的にネギが少なくなってしまう。自分が子供のころは笋も必須だったけれど,これは我慢できる。そんなこんなでぶつぶついいながら,鍋奉行を始めたが,途中でクレームが多く出されて解任されてしまった。

まあ,美味しかったし,明日のおかずに少しあまっただけだからいいことにしよう。


図:無料のAIでプロンプトを工夫しない場合に出てくるスキヤキのイメージ(違うよ)



2023年1月25日水曜日

施政方針演説(2)

施政方針演説(1)からの続き

毎年1月の通常国会冒頭に行われる内閣総理大臣の施政方針演説は,時の政権が官僚技術の粋を集めて作成しているものだから,それなりに分析する価値があるような気がしてきた。そこで,首相官邸のホームページで過去の施政方針演説を一覧しようと考えた。だめだった。データは不完全でありかつゴミに埋もれていて過去の施政方針演説が簡単には見つからない。国民の検索活動を妨げようとしているに違いない。

どうして,政府のデジタル活用力はこんなに低いのだろう。あるいは,情報公開の姿勢がまったく見当たらない。担当が変われば以前のURLは簡単に変えられてしまい探し出すのが困難になる。あるいは,存在していた情報はデザイン変更に伴っていとも簡単に廃棄される。国立公文書館のデジタルアーカイブの精神は全く根付いていない。デジタル庁が始めるべきなのは,設計に失敗しているマイナンバーなどではなく全省庁における情報公開とアーカイブの徹底に違いない。

探してみると,ウィキソース内閣総理大臣施政方針演説というのがあって,1965年の第48回国会における佐藤栄作から昨年の2022年の第208回国会の岸田文雄までがアーカイブされていた。その元になっていたのは,東京大学東洋文化研究所政策研究大学院大学によるデータベース「世界と日本」の中の帝国議会・国会内の総理大臣演説だ。ここには,第1回の帝国議会やそれ以前からの内閣総理大臣の演説がほぼ網羅されている。

これを利用して,テキストの形態素解析を行えば,どんなメッセージがそれぞれの施政方針演説に込められているかを分析することができるのではないか。これによって,検証したいのは教育政策との関係であり,失われた30年をもたらした原因がこれらの演説の中に潜んでいないかというアバウトな直感だ。

2月,3月は暇なのでちょっとどうするか考えてみる。

2023年1月24日火曜日

施政方針演説(1)

NHKは国会中継をしないという文句を垂れながら,国会中継の時間になるとチャンネルを変えてしまう不良老人である。NHKテレビが14:00から国会中継を始めたので,いつものように消そうかと思ったが,気の迷いでそのまま岸田首相の施政方針演説を見始めた。

日本では議会のことを英語でいうとき,なぜparliament(こちらが普通)ではなくDiet(ラテン語源)というのか,という面白い話からはじまった。なぜだかはわからなかった。話し方は穏当で聞きやすかったのだが半分ほどで脱落してしまった。そこで,演説全文を再度確かめてみることにする(首相官邸のウェブデザインやりなおしてほしい問題・・・orz)。

第211回国会における岸田内閣総理大臣施政方針演説の全文は約12,200字であり時間は44分かかる(275文字/分=4.58文字/秒)。昨年の第208回国会の場合は約12,100字なので,ほぼ一定になっているのかもしれない。項目のリストは次の通り。

第211国会における岸田内閣総理大臣施政方針演説(12,200)R5.1.23
一 はじめに(509)
二 歴史の転換点(747・・・明治維新・終戦につぐ分岐点)
三 防衛力の抜本的強化(751)
四 新しい資本主義(3907)
(一)総論(446)
(二)物価高対策(119・・・やらない)
(三)構造的な賃上げ(828→リスキリング:279)
(四)投資と改革(2501)
  (GX)(740→原発:90・・・隠している)
  (DX)(577→マイナンバーカード:379)
  (イノベーション)(481 →教育:111・・・教育は経済政策のごく一部)
  (スタートアップ)(382)
  (資産所得倍増プラン)(252)
五 こども・子育て政策(980)
六 包摂的な経済社会づくり(1492)
  (女性)(282)
  (若者)(166)
  (孤独・孤立対策)(71)
  (地方創生)(799→交通・通信:111)
七 災害対応・復興支援(522)
八 新型コロナ(548・・・もうやめる)
九 外交・安全保障(1961=日米など:315,日中:195,日韓:99,日露:77,北朝鮮:232)
十 憲法改正(116・・・あまりやる気ない=野党分断の手段としてのみ必要)
十一 政治の信頼(259)
十二 おわりに(325)

第208国会における岸田内閣総理大臣施政方針演説(12,100)R4.1.17
一 はじめに(652)
二 新型コロナ対応(2443)
三 新しい資本主義(3678)
四 気候変動問題への対応(851)
五 全ての人が生きがいを感じられる社会へ(524)
六 地域活性化(463)
七 災害対策(645)
八 外交・安全保障(2136)
九 憲法改正(183)
十 おわりに(513)
この一年で世界は変わってしまった。簡単に防衛費倍増が実現され,自衛隊が米軍の指揮系統下に組み込まれた。つまり,憲法改正で狙う必要があるのはいよいよ24条まわりと緊急事態条項だけになってしまうということだ。立憲民主党が日本維新の会とつるんで翼賛体制が確立し,日本共産党やれいわ新選組も前後左右から叩かれている状況では,それらの改正すら必要がないかもしれない。

2023年1月23日月曜日

級数の因数分解

鈴木寛太郎の今日の問題を一般化してみると次のような問題になる。
$\displaystyle f(n,x) = \Sigma_{k=0}^{n-1} x^k = 1 + x + x^2 + x^3 + \cdots x^{n-1}$は因数分解できるかというものだ。結論は,$n$が素数の場合は因数分解できないが,それ以外なら因数分解できる。

$g(n,x)=(1-x)f(n,x)=1-x^n$とする。$n$が素数でなければ$\ n=a\,b\ $などのように自然数$a$と$b$の積で表わすことができる。つまり,$g(n,x)=1-x^{a\,b}\ $であるから,$X=x^a\ $とおいて,$g(n,x) = 1- X^b = (1-X)(1+X+X^2+\cdots+X^{b-1}) $
$= (1-x) (1+x+x^2+\cdots +x^{a-1}) (1+X+X^2+\cdots+X^{b-1}) $

となる。つまり与式は,$f(n,x)=\frac{g(n,x)}{1-x} = (1+x+x^2+\cdots +x^{a-1}) (1+X+X^2+\cdots+X^{b-1}) $と因数分解できる。

問題は,$n$が素数の場合であって,これはどうしたものかと調べてみると,アイゼンシュタインの既約判定定理というものがあった。その内容は以下の通り。

  $P(x)=a_n x^n + a_{n-1} x^{n-1} + \cdots a_1 x + a_0$を整数係数の多項式とする。

  ある素数 $p$が存在して,次の条件が満たされるとする。
   ・$i \neq n$の場合,$a_i$は$p$で割り切れる。
   ・$a_n$は$p$で割り切れない。
   ・$a_0$は$p^2$で割り切れない。

  このとき,$P(x)$は係数が有理数の範囲でこれ以上因数分解できない。

例えば,$P(x)=x^4+x^3+x^2+x+1=\frac{x^5-1}{x-1}$の既約性は,$P(x+1)$の既約性とおなじであり,$P(x+1)=\frac{(x+1)^5-1}{x}=1 \cdot x^4 + 5 x^3 + 10 x^2 + 10 x^1 + 5 $を判定すればよい。この式は素数$p=5$に対して上の条件を満たしているので,因数分解できないことになる。

全ての係数 $a_i=1$で$n=p-1$($p$は素数)という多項式,$P(x)=x^{p-1} + x^{p-2} + \cdots x + 1 = \frac{x^p-1}{x-1}$を考える。そこでは,$P(x+1) = _pC_p x^{p-1} + _p C_{p-1} x^{p-2} + \cdots _p C_2 x + _p C_1 $となる。$a_n=a_{p-1} = _p C_p = 1$ は$p$で割り切れない。$a_i = _p C_i \ (i = 1 \cdots n-1 )$は$p$で割り切れる(*)。$a_0=_p C_1 =p $は$p^2$で割り切れないので,因数分解はできない。

(*) $a_{n-1}=_pC_{p-1}=p$,$a_{n-2}=_pC_{p-2}=\frac{p(p-1)}{2!}$,$a_{n-3}=_pC_{p-3}=\frac{p(p-1)(p-2)}{3!}$,・・・である。 $p$は素数なので,$\mathrm{mod}(p-1,2)=0$,$\mathrm{mod}((p-1)(p-2),3)=0$などから,$\frac{1}{p}\ _pC_i$は整数となり,$a_i = _p C_i \ (i = 1 \cdots n-1 )$は$p$で割り切れる。

[1]アイゼンシュタインの定理(高校数学の美しい物語)