Skip to main content

Posts

Showing posts with the label education

パターンのある文の翻訳 (Emacs Lisp)

次のような練習問題(一部)がある.これを日本語に翻訳したいと思っている. The $200$ is the $\\green{\\text{whole}}$. We are trying to find the $\\pink{\\text{part}}$ that makes up $11\\%$ of it: The $25$ is the $\\green{\\text{whole}}$. We are trying to find the $\\pink{\\text{part}}$ that makes up $12\\%$ of it: 良く見るとこれは数字が異なるだけの問題であるので,regexp で,次の置換をすれば良いことがわかる. The $\(.*\)$ is the $\(.*\)$. We are trying to find the $\(.*\)$ that makes up $\(.*\)$ of it: $\1$ は $\2$ です.私達はその $\4$ となるだけの $\3$ を探しています: しかし, The $200$ is the $\\green{\\text{whole}}$. We are trying to find the $\\pink{\\text{part}}$ that makes up $11\\%$ of it: を The $\(.*\)$ is the $\(.*\)$. We are trying to find the $\(.*\)$ that makes up $\(.*\)$ of it: にするのも面倒であるので,これもコンピュータにやってもらおうと (query-replace-regexp "\\$[^\\$]+\\$" "$\\\\(.*\\\\)$") と書いたのであるが,なぜかこの regexp では $\\green{\\text{whole}}$ の部分がマッチしない. 仕方ないので,次のようなプログラムを書いた. (let ((finishp nil))   (while (null finishp)     (progn       (setq match...

ゾンビの数えかたは?

「日本語でのゾンビの数え方がわからない」と思った.私は Khan academy ( https://www.khanacademy.org/ ) という MOOC の算数の教材を日本語にするボランティアに加わっている.ここで比例についての問題に次のようなものがあった. Liliana used 4 dark power crystals to raise 14 zombie soldiers. She wants to know how many zombie soldiers (z) she can raise with 10 dark power crystals... リリアナは 4 個のダークパワークリスタルを使って 14 人のゾンビ兵士を動かすことができます.彼女は 10 個のダークパワークリスタルで何人のゾンビ兵士を動かせるかを知りたいと思います... 最初に思ったのは,ゾンビは人間同様に 1人,2人,3人と数えるのか? である.もしかしたらゾンビは動物なのか? すると1匹,2匹,3匹かもしれない.ゾンビは死体だとすると,1体,2体,3体かもしれない.いや,ゾンビは神霊なのか? そうすると,1柱,2柱か.ここではゾンビ兵士だ,すると兵士だと人間と同じで1人,2人ではないか.結局そこでゾンビは1人,2人と数えるように翻訳した. 翻訳作業というのはなかなか面白い.あなたも Khan academy の国際化の作業に参加して,自分の言葉に翻訳してみませんか.( https://www.khanacademy.org/contribute )

ビデオ字幕のタイミング作成の半自動化

概要 私はボランティア活動として誰もが無料で利用できる算数の解説のビデオの翻訳をしている.このビデオに字幕をつける作業に費やす時間が意外に多くて困っている.作業の流れ(ワークフロー)から,字幕作成時には既に音声の入ったビデオとそのスクリプトがあるので,これを使ってできるだけ自動で字幕を作成できないかと考えた.今回,タイミング作成のエンジンとして YouTube の transcript機能を使って,半自動で字幕タイミングを作成したところ,作業時間をある程度短縮することができた.YouTube のtranscript 機能では text フォーマットが入力となるので,srt ファイルを text にする filter を実装した.また,transcript 機能でタイミングを作成した場合,字幕に不自然な改行が入ることがある.そこでこれを除く機能も実装した.以前,13分のビデオの字幕のタイミング生成をした時,手動で 4 時間半程度かかったが,今回の方法でほぼ同じ長さのビデオの字幕タイミング作成を3時間弱程度に短縮することができた.今回作成したソフトウェアは new BSD license で公開しているので,誰でも自由に利用することができる. 字幕のタイミング作成の半自動化 私はボランティア活動で「どうして分数の割り算はひっくりかえしてかけるのか」とか「そもそも分数で割るというのはどういう意味か? 3で割るという意味ならわかるが,2/3 で割るとはどういう意味なのか?」のような算数の解説のビデオ作成をしている.その際に字幕も作成するのだが,このタイミングの作成にかなりの時間をとられている.例えば,13分のビデオの字幕タイミング作成に4時間半程度かかったことがある. しかし,私には字幕のスクリプトがあり,そして音声も作成している.今回,これを使ってできるだけ字幕のタイミング生成を自動化できないかをSundayResearch のテーマとした. 私の友人の一人に音楽の mp3 ファイルをフーリエ解析し,そこからリズムをとり出すというソフトを作った人がいる.その人はダンスダンスレボリューションというゲームのマットを持っているのだが,ゲーム機は持っていないので,それで遊ぶために作ってみたということである.最初は字幕作成には音声の解析をすべき...

Scratch を学ぶ (2)

前回は scratch というプログラミング環境がどういうものかを簡単に話しました.そこではイベントという考えを使ってプログラムが動きます.今回はこの環境でキャラクターを動かした10歳の生徒の話です. この Scratch というプログラミング環境では,キーイベントというイベントの一種が提供されています.たとえば,「右の矢印キーを押す」というイベントがあります.このイベントが起こると,x を 10 増やすというようなプログラムを書きます.すると,右の矢印キーを押すたびに猫を右に動かすことができます.これを上下左右のキーでそれぞれ行うことで,キーを使って猫を移動させることができます. 今日の生徒はドラゴンを登場させて,同じことをしました.するとなんと,猫もドラゴンも全く同じ動きをしてしまいます.まあ,そのようにプログラムしたので当然です.コンピュータはとても速く計算し,とても正確で,そしてとても愚かなものです.書いたとおりのことしかしません.その生徒はドラゴンを速く動かしたいと言いました.私は動く量を変えましょうと答えました.今は1回のキーを押すと,動く量が 10 です.速さとは一定時間に動く距離のことですから,これを増やせば速度は思いのままに変えられます.しばらくしてどうしたかなと思って見たら,この生徒はなんと,同じキーイベントをもう1つ作っていました. つまり,右矢印のイベントが発生すると,2つのプログラムが起動するのです.1つのプログラムは10右へ移動であり,2つのプログラムでは合わせて20の移動になります.この環境では並列に動く部分でもちゃんと考慮されているようにできているらしく,これで正しく2倍の速度で動くのです.3倍速く動かすためには,もう1つプログラムを起動すればできます.なんという発想! 私はジョジョという漫画の1シーンを突然思い出しました.主人公がスタンドで浮くという場面です.(知らない人はすみません) 仗助がスタンドに押されて移動する場合,私の発想はスタンドの押す速度を変えることでしたが,この生徒の発想はスタンドの数を増やすことだったのです. しかし,この生徒の方法では基本的に整数倍にしか速くできません.もちろん1つのプログラムがキャラクターを10押して,もう1つが同じキャラクターを5押すとすれば 15 押すことになり.1.5 倍の...

Scratch を学ぶ (1)

しばらく前から私は Scratch [1] というプログラム言語を10歳から12歳の生徒達に教えています.時々見る生徒の創造力というのはかなり驚くものです.その1つをここに書いておこうと思います. まずはプログラムを少し知っている人に向けての概念的な説明をしましょう.後で10歳の生徒にする例による説明も書きます.概念を理解した方が応用がきくのですが,どうしてもとっつきにくいものです.また,例による説明はその例についてはわかるのですが,その他の場合にどうなるかがわからないことが多いという問題があります. Scratch というのは言語名でもありますが,プログラム環境でもあります.その環境ではスプライトキャラクター [2] というものをイベントリブンで動かすプログラムができます.スプライトキャラクターはオブジェクトと考えても良いもので,イベントによってプログラムが起動し,それぞれのプログラムは並列に走ります. しかし,このような説明ではプログラムをしたことのない人には何のことはわからないでしょう.プログラム環境,スプライト,イベント,オブジェクトなどはプログラミングで使う概念なので,それぞれについて理解する必要があります.しかし,もちろんこのような概念は10歳の生徒にはあまり話をすることはありません.先に述べたように例による説明には問題点がありますが,ここではまず例を使って説明をしたいと思います. たとえば scratch を起動すると,猫がいます(図 1).この猫に何かが起こるとどうするかということをプログラムするのです.ここで何かが起こるというのは,マウスのボタンが押されたとか,何かキーが押されたとか,そういうことです.それをイベントが発生すると言います.イベントが発生するとプログラムが動き出すので,イベントで駆動(driven: ドリブン)のプログラムと言います.それぞれのキャラクター,猫とか犬とかは自分の状態を持っており,その状態を使ってプログラムが動きます.状態というのは,猫がどこにいるかという位置とか,猫がどちらの方向を向いているとかのことです.プログラミングでは,状態を持っているものをオブジェクトということがあります.ここでは猫は1つのオブジェクトであり,犬もまた1つのオブジェクトです. Figure 1. Scratch pro...

昔ながらのおもちゃはどこに?

I'm looking for an old school toy.

あわせるの意味: Part 3

前回のような話を知人にすると,「そんなことわからなくても皆生きていけます」と言われることもあります.確かにその通りかもしれません.私も以前はわからない人が多数いてもいいんだと思っていました.しかしこのようなことを使って人を騙す人達がいることをみるにつれ,それでいいのかと思うようになりました.特にお金を騙し取る方法としてこれに類似した間違った論理を使った事件の記事などを見ると,知っておいて欲しいなと思うのです. 前回書いたことは実は数学の問題に見えますが,むしろ言葉の問題です.数学の問題の形になっていますがこの問題の言葉の問題の部分だけでも少し考えてもらえたら嬉しいと思います.つまりそれは問題が何を意味しているかということです. 問題は言葉で述べられていますから,言葉の意味を考えて欲しいのです.この場合にはゴールの率という考えと合わせるという言葉の意味を深く理解する必要があります.私はこの生徒に,このことを考えて欲しくてこの問題を考えました.ゴールの率というのはシュートした回数のうちの成功した回数でそんなに難しくありません.しかし,私は意外なことに「合わせる」の意味を理解していない人が多いことに気がついてこの問題を作ったのです.ここではいくらたしても値が同じというおかしな計算を正しいように見せるために,「合わせる」の持つ多重の意味を利用したのです. 私は「合わせる」という言葉が簡単なように見えるのに,実はそうでないことに気がつきました.言葉の持つ奥深さがあることに気がつきました.そして簡単に見えるが故にあまり深く考えないという盲点をついたのです.文学をする人など,一言一言の言葉の意味を大切にする人ならばこれには気がつくことでしょう.日常の生活ではあまり気がつかないことだと思います.しかし,これが見破られなければ,合わせても同じ量になることを利用して,たとえば税の負担やある料金の負担が変化しないように見せかけることができることでしょう.私は人々がそのようなことに騙されて欲しくありません.民主主義の世界では多数が嘘に騙されれば,私も騙されてしまいます.いや,たとえもし私がわかっていても多数に巻き込まれて騙されなくてはいけなくなるからです. この少年は問題の意味を理解して,私の嘘を見抜きました.そしてこの少年は私に尋ねました「先生も嘘を言うのですか?」私は答...

あわせるの意味: Part 2

少し前に私はある13歳の少年に算数を数ヶ月教えていました.彼の家族はちょっと遠くに引っ越してしまうため,最後のセッションの日がやってきました. 最後のセッションでは, \(\frac{1}{2}\) と \(\frac{1}{2}\) を合わせるといくつになるかという話で2つの話をしました. \(\frac{1}{2}\) 個のケーキと \(\frac{1}{2}\)個のケーキを合われれば \begin{eqnarray*} \frac{1}{2} + \frac{1}{2} = \frac{1+1}{2} = \frac{2}{2} = 1 \end{eqnarray*} と,1になります.分母はそのままに分子をたすという分数のたし算がここにあります.私達はなぜこのようにするのかの理由について議論しました.そしてこうする意味について話し合いました. そこで私はもう1つの話をしました.あるサッカー選手がある試合で2回のシュートをして1回ゴールしました.ですから,この選手のゴールした率は 2 回のうち1 回のシュートで \(\frac{1}{2}\)です.(シュート2回で1ゴール.) 次の試合でこのサッカー選手はやはり2回のシュートをして1回ゴールしました.ですから,この選手のゴールした率は今回も 2 回のうち 1 回のシュートで \(\frac{1}{2}\) です.2試合分を合わせると 4 回シュートして 2回のゴールですからこの選手のゴールの成功率は \(\frac{1}{2}\) です. \begin{eqnarray*}  \frac{1}{2} + \frac{1}{2} = \frac{1+1}{2+2} = \frac{2}{4} = \frac{1}{2} \end{eqnarray*} これは正しいはずですが,しかし,\(\frac{1}{2}\) と \(\frac{1}{2}\) を合わせたら 1 ではなかったでしょうか?  分数のたし算としてはおかしいですね.ケーキを合わせると \begin{eqnarray*}  \frac{1}{2} + \frac{1}{2} = 1 \end{eqnarray*} なのにゴール率は2試合分を合わせても \begin{eqnar...

あわせるの意味: Part 1

人は言葉を使って考えるので,考えたことをプログラムにする私にとっても言葉は重要なものです.1つの言葉が状況によって様々な意味に使われることはよく見られます.それはある種の冗談,洒落というものがあることからもわかります.あるいは基本的な言葉が文脈によって意味が変化するというのも普通であり,それが人間には普通であるようです.たとえば「上げる」と言うことばは,「地面に対して高い方向に移動する」ということもあれば,ものを贈る時に他人を尊敬する意味で相手を上として,「上げる」ということもあり,またコンピュータで「ファイルを上げておく」とするとファイルをどこかのサーバーにアップロードするというふうにもあります.声を上げるというのは物を動かすのではなく,意見を言うという意味です.同じ「上げる」という言葉でも実際に行うことは違います. このようなことは1つの言語だけで考えているだけでは気がつきにくいものですが,外国語を学んだことのある人は翻訳という作業を通して母国語と外国語の両方の奥深さを新たに知ることが多いでしょう.辞書には普通複数の意味が書かれています.文学,特に詩では1つの言葉を2つの意味として使うことで奥深さを持たせるということが重要となっています.1984 のNewspeak では人民の思考を制御するために言葉の意味を制限する描写があります.またコンピュータ言語を学んだ人ならば例えば overloadingなどの概念で同じ名前の関数が異なる実装となることから人間が言葉に複数の意味を持たせていることに気がつくことができます.数学を学んだ人は同じ演算子記号の意味が様々な操作になることにも気がついているでしょう. プログラミング言語や数学を学ぶ時,そこには文学的なものを感じる人達はいくらかいらっしゃると思います.ルイス・キャロルやチョムスキーのような言語と数学の両方にいる人達は2つの異なる物に得意なのではなく,そこにあるのは1つのものだと私は想像しています. この1つの言葉が様々な意味を持つことから,自分の言っている言葉が本当はどのような定義なのかを考えることは重要です.最近そのことを感じる機会があったので次回はそれについて続けます.

電力会社の指数のパワー

2013 年 Kaninchschule 入試問題より うさぎさんの町ではきつねさんが電気を作っています.ある日きつねさんは他に電気を作っている人がいないことに気がついて,毎年値上げをすることにしました.きつねさんは役場で働いているきつねの伯父さんに,今1万円払っている人に毎年千円づつ定年まで30年間値上げしたいと思うけれどもどう思うかと聞いたところ,伯父さんは「お前は商売を知らないな,千円ではなく 10% 毎年値上げすると言いなさい」と言われました.この時,以下の文のうち正しいものはどれですか. 1万円から毎年千円値上げする場合と,1万円から毎年10%値上げする場合は同じである.30年後にはどちらも千円×30年 = 3万円で,最初の値段 1 万円と合わせて電気代は月 4 万円になる. きつねの伯父さんの言うように 10% と言う方が 30 年たった時にもっと値上げることができる.値上げは毎年千円の時の2倍の 6 万円で月に 7 万円の電気代になる. きつねの伯父さんの言うように 10% と言う方が 30 年たった時にもっと値上げることができる.値上げは毎年千円の時の5倍以上になる. 解答 10% と言う方が値上げ幅を大きくできる. 1年目の値上げ額 10000 * 0.1 = 1000,これに 10000円をたして,11000 円 2年目の値上げ額は,既に料金が 11000円に上がっているのでこの 10% は11000 * 0.1 = 1100,これに 11000円をたして,12100 円. 3年目の値上げ額は,既に料金が 12100円に上がっているのでこの 10% は12100 * 0.1 = 1210,これに 12100円をたして,13310 円. n 年目の値上げ額は,$10000*(1.1)^n$ で計算できる.30 年後には$10000*(1.1)^{30}$ でこれは 17万4494円です.したがって答えは 3 です. どうして伯父さんが「いくら値上げするか言わずに毎年10%値上げする」ように言ったのかわかりましたか? 日常生活でも,このように,「毎年同じ 10%」と言って,同じという印象を植え,値上げ幅を毎年増やす人達がいますので,注意しましょう.

マララ・ユサフザイ国連スピーチ字幕(日本語・英語)

子供達の教育を訴えたため,昨年の10月にタリバーンの銃撃にあい,奇跡的に回復したマララ・ユサフザイ.16歳になったばかりの彼女の国連の全スピーチに字幕をつけました.英語と日本語の字幕があります.HTML5 JavaScript 対応のブラウザ(Firefox, Chrome, IE10, 等)でご覧下さい.もしこのページでビデオを見ることに問題がある場合には, こちら のページをお試し下さい.