2021.03.10

数理・データサイエンス・人工知能: ZDF ニュースのヘッドラインを Anna に朗読させる!


本投稿記事の中で御紹介しているソースコードは FU_box(福岡大学公認クラウドストレージ)に格納してあります。

動画や画像は本ブログ記事投稿者が管理する本学内のウェブサーバに置いてあります。

いずれも自由に御利用ください。


本学(福岡大学)では,近く学部共通教育において「外国語科目を削減」し,代わりに「『数理・データサイエンス・人工知能』科目が新設」され,しかもそれ(ら?)を「必修化」する,ということが検討されています。

今回の投稿記事は,こうした世の趨勢に対する「一つのデモンストレーション」です。

記事内容は,「ビッグデータの解析」(コンピュータに株価や気候変動の動向を予測させる「回帰分析」など)や「機械学習」(多量のデータを基にコンピュータ自身に学習させる「分類」,「グループ分け」,「強化学習」など)といったものではありませんが,プログラミング言語 Python を使った「数理・データサイエンス・人工知能」に関する「ドイツ語的実践」の「一つの具体例」となっています。

お楽しみいただければ,幸いです。

問題の所在とその解決(2021-02-28 付 投稿者の独り言と PPDAC サイクル)

  1. [問題]Problem: 最近,なんだかんだと,ゆっくり ZDF heute(ドイツ語ニュース.主要な世界情勢についてもコンパクトに伝えてくれる)を視聴できる時間が取れなくなってきた! が,ドイツのみならず世界の動きは常に把握しとかんといかん!!
  2. [調査計画]Plan: 幸い充実した ZDF heute ウェブサイトがあるので,まずは,このウェブサイトをチェックすることから始めてみようか・・・
  3. [情報収集]Data: ふむふむ,夜のプライムタイム 19:00 から始まるニュースは一切カットされず,本国での放映時間同様,20数分まるまる動画配信されてるのは良いとして,よく見ると「Einzelbeiträge」として「ニュースヘッドライン」もずらーっと並んどるな.こいつは使えそうじゃないか!? おっと,ちょいと待てよ,「Weitere laden」を押してやると「折り畳まれていたヘッドライン」がどんどん開かれてくるぞ.しかも,その量,結構多くね? こいつは,一度ページをダウンロードして,何がどうなっているのか,ちゃんと調べた方が良さそうだな.
  4. [情報分析]Analysis: げっ,全部で 7,172 行もある! テキストデータだけで 651 KB のファイルサイズだ!! 2バイト文字の日本語に換算すると 32 万字越え.これ,平均的な新書2冊以上のサイズじゃないか!? この中身を最初から最後まで人間の目で追うことは非効率的だし,疲れてくると見落としがあるかもしれん.おまけに俺は老眼だぞ! この方法を取るのは非現実的だよな.じゃ,どうする? ここはつまり「必要なデータのみを抽出」してやれ,ってやつだな.どれどれ,最初のヘッドラインに含まれる文字列「Städte bieten」を検索してみると・・・おや,何箇所も出てくるぞ.結構複雑な作りになっとるな・・・んじゃ,次の「Gedenkgottesdienste」を調べてやれ・・・おー,なるほど,どうやら法則が見つかったようだぞ!「div 要素の class 属性値が normal-space」となっている箇所が「ニュースヘッドライン」の記述があるピンポイントだ!! だがしかし,その周りには何だかごちゃごちゃとゴミ,もとい,各種タグだの空白スペースだの何だの,がまとわりくっついとるな.ま,でも,このあたりは Python の関数が「さくっ」と掃除してくれるだろ,多分.どの関数だったか調べるのは後回し.今は,細かいことは気にしない,気にしない.
  5. [結論]Conclusion: 最終的に「ニュースヘッドライン」のみを抽出したテキストをファイルに書き出してやればいいんだよな.必要となれば,いつでも後から落ち着いてテキスト内容を参照できるわけだし.けど・・・ヘッドラインだけでも結構な数だったな.これに全部目を通す,というのも,正直,かったるいわな.他に良い方法はないかしらん・・・ピコーン 💡 人工知能のドイツ語話者 Anna にニュースヘッドラインを朗読させればいいんじゃね?! あいつは疲れ知らずだし,電源入っている限り喋り続けてくれるし,何度リピートさせても怒らんし.よし,決まり! 今から頑張ってプログラムを書いてみようじゃないの.一度書いてしまえば,ZDF heute ウェブサイトの「ロジック」(= 「ニュースヘッドライン」データの記述法)が変わらない限り,翌日以降もそのままプログラムを使い回せるので逆に楽ちんだし,音声であれば「ながら」作業もできるし,いいことずくめでしょ?

Python と 数理・データサイエンス・人工知能

インタープリタ型(=ソースコードをそのまま解釈しながら実行するプログラム.対概念は C 言語のようなコンパイラ型)のプログラミング言語「Python」は,オランダ人の作者 Guido van Rossum によれば,イギリスのコメディ団 Monty Python へのオマージュとしてその名が付けられたそうです(一般名詞としては「ニシキヘビ」を指すので Python のロゴは「2頭のヘビが絡み合った意匠」となっています)。

この Python,比較的古く(1991年に初リリース)から存在するプログラミング言語ですが,最近では,特に「数理・データサイエンス・人工知能」との相性が良いとのことで,日毎に注目度が高まっています。有名どころのウェブアプリとしては,Instagram, Dropbox などが Python で作られています。

以下は,今回御紹介する Python プログラムのソースコードです。画像ですと,こんな感じです。

「ZDF ニュースのヘッドラインを Anna に朗読させる!」のソースコード画像
「ZDF ニュースのヘッドラインを Anna に朗読させる!」のソースコード

御覧のとおり,

  1. まずは ZDF heute のウェブサイトから Web ページを丸ごと取得し(2, 5 行目)
  2. その HTML データの解析準備を整えてやった上で(3 行目)
  3. ニュースヘッドライン「以外」の不要な情報を削ぎ落とし(6 行目)
  4. 整形関連の微調整を施した上で(9 行目)
  5. 最終結果をテキストファイルへ書き出し(7–9 行目)
  6. これを人工知能の「ドイツ語話者 Anna」に読み上げさせる(4, 10 行目)

というプログラムが「たった 9 行!」で書けてしまいます! 同じことを別の言語(例えば PHP)で書こうとすれば,恐らくもっと長いソースコードとなるでしょう。このあたりの「簡潔さ」も Python 人気の一つであると思います。

Python は元々強力な標準ライブラリを備えていますが,今回のプログラムでは,requests(インターネット上のデータを「掻き集め」させる=クローリング crawling),BeautifulSoup(余分なデータをごっそり「削ぎ落とし」たり「解析」させたりする=スクレイピング scraping)といった「外部ライブラリ」も使っています。

Python は,多くのプログラミング言語同様,フリーかつオープンソースそしてクロスプラットフォーム(= OS の区別なく使用できる)のソフトウェアで,こうした外部ライブラリも全てフリー(注: 「無償」という側面も見逃せませんが,それよりも重要なファクタは「自由」という理念です)で利用できます。他にも Pillow(画像処理),scikit-learn(機械学習),scipy(科学計算),matplotlib(グラフ表示),pandas(表計算データ処理),等々,といった沢山の外部ライブラリがあります。

インターネットで「Python インストール」をキーワードに検索してやりますと,たくさんの解説ページが見つかりますので,Python のインストールをお考えの方は参考になさってください。

なお,Mac には最初から Python が入っていますが古すぎる(サポート対象外のバージョン 2 系列)ため,Homebrew あたりのフリーのパッケージマネジャを使って Python 3 系列以降のものをインストールして使う方が良いと思います。

今回のプログラムのソースファイル(zdf-heute_say.py)は

に置いてあります(単なるテキストファイルです)。興味を持ってくださった方は,どうぞ,自由に御利用ください。

なお,say コマンドによる人工知能ドイツ語合成音声 Anna が使えるのは Mac だけですので, Windows や Linux で本プログラムをお試しくださる場合,「4, 10 行目の subprocess 箇所」は「削除またはコメントアウト」してお使いください。

Mac であれ Windows であれ Linux であれ,本プログラムを実行した「同じディレクトリ内」に「ニュースヘッドラインのみが書き出された zdf-heute.txt というテキストファイルが自動生成される」点は全く同じです。

今回の例で言いますと,(動画,画像といったコンテンツを全て省いた)「文字情報だけから成る元 HTML ファイル」のサイズが 650,538 バイトで,そこから抽出された「ニュースヘッドライン・ファイル」のサイズが 2,284 バイトでしたので,およそ「1/284」のサイズに情報を集約できたことになります。

最後に本プログラムを実行した様を録画(2021-02-28 夕刻時.ドイツと日本との時差は 8 時間)した動画を掲げます。結構処理速度が速く,ターミナルでのプログラム実行後,出し抜けに Anna が喋り始めますので,すぐさま,あらかじめブラウザで開いておいた「当該のニュースヘッドラインがある ZDF heute のウェブページ」に切り替え,Anna による音声と画面のスクロールを(手動で 😅)シンクロさせています。再生時間は 2 分 54 秒。

米国の「バイデン」(Biden)大統領や(英国の第63代首相であるウィンストン・チャーチルの先祖マールバラ公ジョン・チャーチルに因んで名付けられた)カナダのマニトバ州にある都市「チャーチル」(シロクマの首都として有名)といった単語の発音が「ドイツ語風」になっていたり,「WHO」(世界保健機関)の発音が英語の疑問代名詞「who」の発音となってしまっているのは御愛嬌(現時点での人工知能= Anna の限界です)。

動画最後にある「あれ?」なシーンは見なかったことにしてやってください。老眼のため,投稿者が「録画終了ボタン」を押し違えたとです。😅

P.S.

  1. ZDF を語るなら,ついでに ZDF のマスコット「マインツ小僧 Mainzelmännchen」に言及しないわけにはいきません。
  2. 「マインツ小僧」は,日本の「座敷童」に相当する者で,ドイツ人で彼等(全部で6人います.それぞれに名前もついていますが割愛します)を知らない者は皆無でしょう。
  3. ドイツと日本の公共放送のあり方は,かなり異なっています.「地方自治」を地で行くドイツでは,ZDF の本社は(首都ベルリンではなく)ラインラント・プファルツ州にあるマインツに置かれています(だから「マインツ」小僧)。
  4. ZDF では「コマーシャル」も放映されますが,「コマーシャルの時間帯」と「本番組の時間帯」は「截然と分けられて」います.ですから,コマーシャルを見たくない場合は,その時間帯だけ TV から離れるか,録画予約を飛ばせば良いようになっています。
  5. 「マインツ小僧」達は,主にコマーシャルと本番組を「隔てる」時間に「ちょこまか」と登場します(なので彼等はドイツ語で「コマーシャルを分け隔てる者達(Werbetrenner)」と形容されます)。
  6. 「座敷童」であるから,彼等は「寡黙」です.仲間内で何やら小声で「ゴニョゴニョ」言い合っていることはありますが,人間の耳に「意味を持った音声」として聞こえてくることはありません。
  7. ほぼ唯一といって良い「例外」が,視聴者に向かって放たれる「Gud’n Aamd!」(通常のドイツ語 „Guten Abend!“「こんばんは!」に相当)という発声です。
  8. 実はこの「マインツ小僧」,(大聖堂で有名な)ケルンの伝説に伝わる「家精」(要するに「座敷童」です)の Heinzelmännchen(ハインリヒ小僧)をもじった名称となっています(「マインツェルメンヒェン」と「ハインツェルメンヒェン」)。
  9. そしてこの「ハインリヒ小僧」伝説のルーツは,童話集で有名なグリム兄弟の『ドイツ伝説集』(上巻1816年/下巻1818年)の「31番: 小人族の結婚式(Des kleinen Volks Hochzeit-Fest [auf der Eilenburg in Sachsen])」にあります(グリム兄弟は当時この伝説を「口承」で採取しています)。
    • アイレンブルク城の城主である老伯爵は,ある晩,この城の座敷童であった小人達に「伯爵たった一人だけ」で「結婚式に臨席」してくれるよう請われる。
    • 老伯爵は,小人達たっての要請に応じ,世にも奇妙な彼等の結婚式の様子や踊りの様を眺めていたが,突然,パタっと,全ての動きが止まり,音楽も止んだ。
    • 広間の天井の明り窓には,物珍しそうにこの楽しげな集いを見下ろしている老伯爵夫人の姿があったのだ。
    • 小人は,老伯爵の結婚式臨席に対し慇懃に礼を述べた後,次のように言った: 「他人に見られたので,我々の喜びも婚礼の式もおじゃんとなった.こうなった以上,今後アイレンブルクの一家の男子は7人以上を数えることはない」。
  10. この「呪い」は今日に至るもまだ解けていません。なので,マインツ小僧も「6人」止まりとなっているわけです。
  11. Python の外部ライブラリ「BeautifulSoup」は,ルイス・キャロル作『不思議の国のアリス』に登場する「海亀もどき Mock Turtle」が歌う自己言及歌「Turtle Soup」の冒頭に出てくる「Beautiful Soup」という言葉へのオマージュです。
  12. フリーソフト(オープンソースソフト)やプログラミング言語界隈では,見る者読む者に「しばしの省察」を促さずにはおかない「自己言及型頭字語 recursive acronym」(再帰的頭字語とも)が良く使用されます(マサチューセッツ工科大学由来の伝統とも言われます.例: GNU’s Not Unix; PHP: Hypertext Preprocessor; PIP Installs Python-packages, etc.)。
  13. そもそも「海亀もどき Mock Turtle」という生物(?)キャラクタは,「『海亀スープ』もどき Mock “Turtle Soup”」という実在する(少なくとも 18, 19 世紀には実在した)料理名の「分節」を意図的に「『海亀もどき』スープ “Mock Turtle” Soup」へとズラして作られた「ルイス・キャロル十八番の言葉遊びによる造語」です。
  14. 本物の「海亀スープ Turtle Soup」は高価でおいそれと口にすることが叶わなかったため,味が似ている「安価な子牛の頭や足」で代用した「海亀スープ『もどき』Mock “Turtle Soup”」が生まれた,という経緯があったわけです。
  15. なので,「海亀もどき」のイラスト(ジョン・テニエルのものが有名)は「子牛の頭と後脚をした海亀」の姿で描かれています。
  16. ルイス・キャロル(本名: Charles Ludwidge Dodgson)は英国オクスフォード大学クライストチャーチ学寮の数学教師でもあったので,「数理」の取り扱いは御手の物。
  17. 英語(とロジック)に自信のある方は,「公爵夫人」が「アリス」に説いた次の「教訓」を是非味わってみてください。数理(ロジック)の塊となっています。
  18. “Be what you would seem to be” – or, if you’d like it put more simply – “Never imagine yourself not to be otherwise than what it might appear to others that what you were or might have been was not otherwise than what you had been would have appeared to them to be otherwise.”