2023年1月8日日曜日

MacのOCR

だいぶ以前,MacでOCRを使いたいと思ったことがあった。散々探し回ったけれどなかなか適当なアプリケーションがなくてそのままになっていた。

ふと気がつくとMacでOCRできるコマンドがころがっていた。Tesseractというものだ。homebrewでインストールしてみると,すでに導入済みだ。あれ?いつ入れたっけ。覚えていないので再インストールし,ついでに日本語セットもインストールした。

brew install tesseract
brew install tesseract-lang
tesseract --list-langs | grep jpn
jpn
jpn_vert
tesseract test.png test.txt -l jpn+jpn_vert


tesseractでOCRを体験しようにあるような例を一通り試してみたところうまくいっている。横書きと縦書きの混合文も大丈夫だけれど,日本語と英語が混じっている場合,わずかに狂いが生じる場合もありそうだ。また,手書き文字はやはりうまくいかない。これが実用的かどうかはちょっと未知数。

しかし,そもそも何をOCRしようと思っていたのかを忘れてしまっている老人だった。

あっ,思い出した(というかblogを検索して見つけた,こういうときのために毎日ログをとっているわけだ)。WHOのCOVID関係のデータがpdfになっていて,そこからテキストデータを取り出したかったのだ。しかし,これは,pdftotextで解決済みだった(久々のPerl 2020.3.18)。


2023年1月7日土曜日

はぐれ惑星

NHKのコズミック フロントで,はぐれ惑星(自由浮遊惑星)を取り上げていた。

番組は阪大の住貴宏さんによる重力マイクロレンズ法の説明からから始まる。太陽系の外に存在している太陽系外惑星探索方法としては,次のようなものがある。(1) パルサータイミング法:パルサーの回りを枠背卯が回ることによるパルサー周期の変化による。(2) 視線速度法:ドップラー効果による恒星=惑星系の重心の回りをまわる恒星の視線方向の波長の変化による。(3) トランジット法:恒星の前を横切る惑星による恒星の光度変化による。(4) 重力マイクロレンズ法:遠方の天体(銀河・銀河団)の前を横切る恒星=惑星系の重力レンズ効果による天体の光度変化の微細構造による。(5) 直接撮像法:惑星が恒星から遠くにあって熱放射する場合。

もっともよく用いられるトランジット法は,惑星が大きく,恒星に近い場合にに有効であるが,重力マイクロレンズ法は,恒星から比較的遠くて小さな惑星について用いられる。現在までに,5300個ほどの系外惑星が発見されている。

重力マイクロレンズ法の結果から,惑星が恒星よりも存在している比率がはるかに高く,銀河系の恒星1個につき,恒星から0.5~10au離れた位置に平均で惑星を1.6個持つ事が推定された(Wikipedia 惑星系)。天の川銀河には2000-4000億の恒星があるので,恒星の回りを公転する惑星の数は数千億個ということになる。

さらに,惑星系の誕生期や恒星の終焉期にはじき飛ばされる惑星が,自由浮遊惑星として銀河系内を公転することになる。その浮遊惑星の数は恒星の数の2倍程度と評価されているらしく,これも数千個程度存在する。これは,住さんを含む国際共同チームが重力マイクロレンズ法を用いて最初のはぐれ惑星(Rogue Planet)を発見したことからきている。

さて,これについて,ChatGPTの見解を尋ねてみた。
Q:天の川銀河系にある恒星の総数,惑星の総数,自由浮遊惑星(はぐれ惑星)の総数を教えてください。

A:天の川銀河系には、恒星の総数が約100億個、惑星の総数が数百億個と言われています。また、自由浮遊惑星(はぐれ惑星)の総数は、まだ正確には分かっていませんが、数十億個と推定されています。

天の川銀河系は、銀河系の1つで、地球が属する銀河系です。銀河系は、恒星、惑星、小惑星、彗星、星雲などが含まれる天体系で、その大きさは広大です。天の川銀河系は、その中でも比較的小さい銀河系であり、銀河系全体に比べると、恒星や惑星の数が少なめです。
ChatGPTの天文学の知識もどうやら十分ではなかったようだ。しかし,平均的な人間に比べればまともな回答だ。その辺の高校生や大学生に聞いてもこうは答えられない。


図:Wikipedia Rogue Planet の説明を入力したときの DiffusionBee の出力


2023年1月6日金曜日

新聞も消える

本屋が消えるからの続き

本屋の話題では,比較のため新聞発行部数のグラフを示した。12月に日本新聞協会が最新データを出したことでこれがまた記事になっていた。例えば,「1年で200万部減「新聞離れ」は止まらず 「一般紙」は15年後に消える勢い」などだ。

外岡秀俊(1953-2021)は同じ1953年生まれだ。札幌南高校から東大法学部に進み朝日新聞に入社した。在学中に書いた北帰行は石川啄木をテーマとした小説で文藝賞を受賞した。出版早々に読了して強い印象を受けた小説だ。てっきり彼は作家の道へ進むのものと思ったところ,朝日新聞に入社して編集局長までなったことに二度驚いたものだ。

彼が残した最後の論考が,「敗因」から探る新聞の未来,縮小か大胆なDXで再生か(Journalism 2022年1月号)だ。そこで指摘されていたのは日本の新聞社の敗因だ。それは,成功体験からの脱却ができなかったということにつきる。2000年に入ってからのDXに転換する最後のチャンス(当時はDXというキーワードはなかった)をみすみすと逃してしまった。

新聞やテレビの報道機能が縮小していくとして(すでにジャーナリズムの崩壊は進んでいる),外岡秀俊が最後に述べていたメディアの機能は誰がどのようにして維持していくのだろうか。あるいは民主主義が既存メディアと一蓮托生で終焉を迎えるのかもしれない。
SNSの時代が,この先どう変容するか,予見することはできない。だが,埋もれた事実を果断・公正に報道し,誤りがあればお詫(わ)びと訂正を出して品質を担保し,分断の時代に広い言論のフォーラムを提供するというこれまでのメディアの機能と役割は,どのような時代でも,欠かせない民主主義のインフラであり続けるだろう。


図:日本新聞協会のデータから(亀松太郎氏の作図を引用)


2023年1月5日木曜日

小鍛冶 

正月に孫の世話をするのはたいへんだ。

バーバもカーカもお節料理の準備で手一杯なので,ジージにもその順が回ってくる。そんなときは,NHKの教育テレビ(Eテレ)が神様だ。普段はおかあさんといっしょとかピタゴラスイッチを見せている。元旦のEテレは,新春能狂言 能「小鍛冶 白頭」をやっていたので,5歳と2歳はテレビにかじりついて見ていた。

謡曲「小鍛冶五番目物)」のストーリーは次のとおり(精選版日本国語大辞典から引用)。
三条の小鍛冶宗近は剣を打てとの勅命を受けるが相鎚あいづちの者がいないので当惑し,稲荷明神に祈誓に行く。すると童子が現われ,力を貸し与えようといって消える。宗近が用意を整えると,稲荷明神が現われて相鎚をつとめ,名剣小狐丸ができあがる。

稲荷明神が頭に狐の型をつけていた。何も知らないジージは,頭にネコがいるというと,すーちゃんは違うよと。イヌだ。うぅうん。キツネかなというと,そうだよとやっとOKが出た。すーちゃんは何でキツネだとわかったのだろう。


図:小鍛冶のシテの頭のキツネ(銕仙会から引用)

小鍛冶のワキの三条宗近は,平安時代の刀工である。京都の三条通りに住んでいたことからその名がついているが,現在では若草山の麓に三條小鎩治宗近の店がある。

追伸:ChatGPTにクイズを出してみたところ,正解したのだが,後半の説明はウソだった。

Q:能の小鍛冶のシテの頭についている動物は次のどれでしょう。(1) イヌ,(2) ウサギ,(3) キツネ,(4) ネコ の中から選んでください

A:(3) キツネが正解です。能の小鍛冶のシテの頭には、キツネの形をした帽子がついています。能の小鍛冶は、日本の伝統的な芸能の一つで、演者が鎧を着て、剣や槍などの武器を使いながら、模擬戦や舞踏を演じるものです。能の小鍛冶のシテは、その中でも特に重要な役割を担う演者で、能の小鍛冶を指導する役割を担っています

2023年1月1日日曜日

(冬休み 7)

「春の兆しを素手で掬う*」 (ChatGPT 2022)

*ChatGPTが生成した俳句,新年を指定したもの。もうひといきか。

2022年12月31日土曜日

(冬休み 6)

「降る雪を追いかけぬが花*」 (ChatGPT 2022)

*ChatGPTが生成した俳句,大晦日を指定したもの。

2022年12月30日金曜日

(冬休み 5)

「鳥は霜の木をさまよう熊は森をさまよい歩く*」 (ChatGPT 2022)

*ChatGPTが生成した俳句,冬の動物を指定したら,「鳥」と「熊」を提案してきた。

2022年12月29日木曜日

(冬休み 4)

「霜柱に霜降り霜降りに霜柱雪降りでつつまれる*」 (ChatGPT 2022)

*ChatGPTが生成した俳句,冬の植物を指定したら,「霜柱」と「霜降り」を提案してきた。

2022年12月28日水曜日

(冬休み 3)

「風に吹かれながら歩いている*」 (<竹内景子> 1930-)

*ChatGPTが生成した俳句,仮想世界の日本の代表的女性俳人のもう一人が<竹内景子>だ

2022年12月27日火曜日

(冬休み 2)

「人は石を投げる太陽は花を咲かせる*」 (<高野和子> 1950-)

*ChatGPTが生成した俳句,仮想世界の日本の代表的女性俳人の一人が<高野和子>らしい

2022年12月26日月曜日

(冬休み 1)

「月よりも白い白い花に雪が降る*」 (<松尾芭蕉> 2022)

*ChatGPTが生成した冬の俳句,仮想世界の日本でも<松尾芭蕉>は歴史上最も有名な俳人らしい

2022年12月25日日曜日

四色問題


四色定理の証明といえば,コンピュータを駆使して2000個の配位集合を虱潰しに調べたことで長年の課題が初めて証明された問題として有名である(1976 Appel, Haken)。

コンピュータに頼らない証明ができないので,なんとなくモヤモヤ感が抜けないと同時に,証明に関する既成の観念を変えた例としてもよくあげられる。深層学習による大規模言語モデルに基づいた物理法則の発見でも同じような固定観念の変更が求められているといわれることもあった。

その四色定理の新しい証明がarxivに登場した。"A non-constructive proof of the Four Colour Theorem"というもので,わずか7ページの論文だ。「このアプローチでは,特定の写像の集合に対する生成関数の特異点解析と,Tutteによる平面写像とその彩色多項式に関する列挙的・漸近的研究が用いられている」

Twitterでは,素人衆の期待の声が多いのだけれど,プロからは厳しい声が上がっているような雰囲気もチラチラ見え隠れしていた。どうなることやら。



写真:一松信の四色問題(ブルーバックス1983年版から引用)

2022年12月24日土曜日

第二次量子革命

arxiv.orgに1000ページを超えるレポートがあった。タイトルは,Understanding Quantum Technologiesで,著者は,Olivier Ezrattyというソフトウェアエンジニアで,量子技術関連のコンサルタントらしい。怪しさ満点。

量子力学的粒子の多体系集団を扱えるようになったのが,1947年からの第一次量子革命であり,トランジスター,レーザー,太陽電池,発光ダイオードなどの技術を指している。2018年からの第二次量子革命は,単一量子のレベルまで含んで重ね合わせとエンタングルメントを扱えるようになったものであり,量子計算,量子通信,量子暗号,量子測定などの技術を指している。

まあ,だいたいそんなものかもしれない。2025年はハイゼンベルクがヘルゴランドで量子力学の基本的関係式を思いついてから100年目にあたるので,大阪万博ではなくてこちらの方で盛り上がることになるのではないかと予想していたけれど。日本は米国に忖度しすぎて武器購入大盤振る舞いと科学技術放擲大作戦の真っ最中となってしまった。

PCR検査を否定するような非合理的政策がまかりとおり,新しいパラダイムでベンチャーによって開発が促進される新薬の承認スケジュールからどんどん取り残される中,選択と集中の旗をかかげ続けたまま学者集団をディスり続けるこの国の将来っていったい何なのだろうか。


図:第一次&第二次量子革命(Understanding Quantum Technologiesから引用)

2022年12月23日金曜日

NDLデジタルコレクション

個人送信(2)からの続き

国立国会図書館(NDL)のデジタルコレクションが12月21日にリニューアルされた。

プレスリリースによれば次のような内容である。
(1)所蔵資料をデジタル化した 「デジタル化資料」約 311 万点と収集した「電子書籍・電子雑誌等」約 150 万点を検索・閲覧・視聴できる・・・下表との関係が不明・・・
(2)全文検索できる資料が5万点から247万点に増えた。
(3)閲覧画面の改善・・・改善余地がまだあるような・・・
(4)画像検索の実現
(5)シングルサインオンの実現

前回と比較してどのあたりが増えたのかがいま一つはっきりしない。ちゃんと内訳を記録しておけばよかった。全文検索の有り無しはこのデータのままではわからない。

表:NDLデジタルコレクションの内訳(公開,登録者限定,館内限定)
 公開登録者館内小計
電子書籍・電子雑誌1,228,0870218,1281,446,215
雑  誌16,901825,998525,0421,367,941
図  書362,523560,466387,6231,310,612
博士論文15,929125,420123,322264,671
日本占領関係資料70,805029,963100,768
古典籍資料82,10717,235799,349
録音・映像関係資料6,008048,43454,442
歴史的音源6,001042,73148,732
プランゲ文庫016,01728,45944,476
官  報20,9800020,980
憲政資料10,86501,72312,588
他機関デジタル化資料3251,0338832,241
地  図4101,3051,346
パッケージ系電子出版物00338338
特殊デジタルコレクション197045242
     
合  計1,820,7691,546,1691,408,0034,774,941



2022年12月22日木曜日

ウルトラQ

ウルトラQは,円谷プロダクションによる空想特撮テレビシリーズの第1弾として1966年1月から7月にかけて放映された。この武田薬品提供枠では,月光仮面(1958-1959),豹(ジャガー)の眼(1959-1960),隠密剣士(1962-1965)なども見ていた。月光仮面やジャガーの眼は自分がまだ幼稚園のころだ。小学生のころ,風呂敷被って月光仮面ごっこをしている絵日記を書いた記憶や真っ赤なサタンの爪が印象的だった絵本を読んだ記憶もある。

ウルトラQは,当時の中学1年生にとって丁度手ごろなSFドラマだった。アウター・リミッツなどもうすこし高級で怖いものもたまに見る機会があったけれど,民放のチャンネルが限られている田舎町にはなかなか文化の香りが届かない。その後,ウルトラマン(1966.7-1967.4),ウルトラセブン(1967.10-1968.9)ときて中学生を卒業することになる。

高校になると,この枠は桜木健一・吉沢京子・近藤正臣の柔道一直線(1969.6-1971.4)になってしまう。柔道が得意でピアノもひける同級生の上出君が,若き日の近藤正臣がピアノの上を跳ね回って演奏するシーンに感心していたのが印象的だった。なんだったのだろう。


さて,「ウルトラQとウルトラマンの関係について」とChatGPTに日本語で尋ねてみると,次のような残念な答しか返ってこなかった。
「ウルトラQ」は、1966年から1967年にかけて放送された「ウルトラマン」シリーズの第1作です。この番組は、地球を守るために、人間から姿を変えた異星人が、異星生命体との戦いを繰り広げるという内容です。
ところで,ChatGPTは,英語では十分訓練されていて日本語に比べてずっとマシな答えを返すという話だ。そこで,英語で尋ねてみた。
Please explain the story of Ultra Q which is the TV program in Japan mid 1960's
答えをDeepLで翻訳すると次の通りだった。だいぶマシなのである。
「ウルトラQ」は、1966年1月2日から7月3日まで日本で放送されたサイエンスフィクションテレビシリーズです。ウルトラシリーズの最初の作品であり、その後に多くの他の特撮番組や映画が加わることになりました。

番組は、奇妙な現象を調査する科学者やジャーナリストたちを描いており、彼らは様々な怪物や宇宙生物と出会います。主人公は写真家としてチームに加わる若い女性、江戸川ゆり子です。彼らは世界中を旅し、チームのリーダーである岩本教授が備える技術的に先進的な車両や武器を活用しながら、奇妙で危険な状況に遭遇します。

「ウルトラQ」は日本で人気を博し、いくつかの続編シリーズを生んでいます。その中でも「ウルトラマン」は文化的現象となり、今でも最も有名な特撮番組の一つとして知られています。日本のサイエンスフィクションの代表的作品とされ、特撮ジャンルに長く影響を与えています。
岩本教授というのはちょっと余計だが,かなり適確な回答が返ってきた。


写真:ウルトラQのタイトル(円谷プロから引用)

2022年12月21日水曜日

ブラックボックス

東京大学の情報理工学研究科に設置された情報理工学教育研究センターにある7部門のうち,次世代知能科学研究部門につながるのが次世代知能科学研究センターである。ここに部局をこえた関連分野の研究者を集めているが,固有スタッフはほとんどいないのかもしれない。

次世代知能科学研究センターがオンラインの連続シンポジウムを開催していて,その第11回が「共進化する物理学と人工知能の現在」というテーマだった。樺島祥介,大槻東巳,小林研介,村尾美緒,橋本幸士というメンバーで,2時間40分(20分×5+60分)の内容がYouTubeで公開されている。

物理学の分野でも,深層学習(DL)=AI に関連した研究は最近さかんに行われている。その典型的な例が,物質の実験データをディープニューラルネット(DNN)に学習させた上で,任意の物質における物理量をシュレーディンガー方程式を解かずに予測するというものだ。

ニューラルネットワークの万能近似定理によって,ニューラルネットワークは任意の関数を表現することが可能だということがわかっている。その意味では,このブラックボックスが正しい理論値を与えるのはよいとして,それは科学的な説明になっているのかというわけだ。シンポジウムではこの点を巡るやりとりがあった。

それは,科学的な説明とは何か,わかるとは何かという問題に発展する。物理屋は現象をできるだけ少数の簡単な方程式で表わすことができるとうれしいかもしれない。しかし,農業の分野でも医学でもあるいは工場の生産現場でも,科学的な説明のないブラックボックス的な技術が成功している例は枚挙にいとまない。つまり,物理屋の見方は特殊なのでないかというわけだ。

コンピュータの発達によって,解析的な解が求まらない微分方程式でも,計算機を使えば任意精度で確実に解を得ることができるようになり,微分方程式を解くという概念が変わってしまった。同じように,理論だとかわかるということの意味が変わりつつあるのかもしれない。


2022年12月20日火曜日

mecab-neologd(3)

mecab-neologd(2)からの続き

とりあえず,最新単語を含む形態素解析のmecab-ipadic-neologdが使えるようになった。次の課題は,これをpython プログラムの中から使えるようにすることだ。これは事例がたくさんころがっていたので,そのまま写経してみた。

2018年,Qiitaにsudo5in5kさんが書いた,mecab + NEologd + python3 で形態素解析という記事があるのでそのまま使える。import MeCab のCが小文字のtypoになっているところでつまづいた。その後,辞書ディレクトリを自分の環境に合わせて指定したところ,青空文庫の人間失格のテキストファイルをとってきて,無事に形態素分解した結果が出力された。

そこで,入出力ファイルをコマンドラインで指定し,任意のテキストファイルを変換できるように数行だけ修正したのが以下のコードである(ほぼsudo5in5kさんのもの)。

#!/opt/homebrew/bin/python3


# usage: aozora.py infile outfile

# infile is taken from https://www.aozora.gr.jp -> txt download


import MeCab

import re

import sys


infile = sys.argv[1]

outfile = sys.argv[2]


bindata = open(infile, 'rb').read()

textdata = bindata.decode('shift_jis')


# 青空文庫のための固有処理

textdata = re.split(r'\-{5,}', textdata)[2]

textdata = re.split(r'底本:', textdata)[0]

textdata = textdata.strip()


# 人によっては以下のパスは異なるので確認してね

mecab = MeCab.Tagger('-d /opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd')

mecab.parse('')  # バグ対処

results = []

lines = textdata.split("\r\n")

for line in lines:

    r = []

    # 学習に使わない表現の削除処理

    s = line

    s = s.replace("|", "")

    s = re.sub(r'《.+?》', "", s)

    s = re.sub(r'[.+?]', '', s)

    # Mecab

    node = mecab.parseToNode(s)

    while node:

        # 単語を取得

        if node.feature.split(",")[6] == '*':

            word = node.surface

        else:

            word = node.feature.split(",")[6]


        # 品詞を取得

        part = node.feature.split(",")[0]


        if part in ["名詞", "形容詞", "動詞", "記号"]:

            r.append(word)

        node = node.next

    rl = (" ".join(r)).strip()

    results.append(rl)


# write to a file

with open(outfile, 'w', encoding='utf-8') as wf:

    wf.write("\n".join(results))