豪鬼メモ

一瞬千撃

オンライン発音記号検定

先日ChatGPTでIPA発音記号を拡充したが、それを使って発音記号に該当する英単語を当てる検定を作ってみた。IPA発音記号の読み方を学習し、その成果を確認するにあたって便利なツールだ。まずは実際やってみてほしい。結構むずい。そこそこ英語ができると自負しているあなたも、きっと高校生レベルあたりでつまづくに違いない。


外国語の辞書を引くと、そのフレーズのIPA発音記号が書いてあることが多い。「internationalization」という英単語には /ɪntɚˌnæʃənələˈzeɪʃən/ とか書いてあることだろう。中学で英語を学び始めた時にいきなりこの暗号のような文字の羅列を見せられると英語が嫌いになることうけあいだ。しかし、慣れると結構普通に読めるようになる。だいたいはローマ字読みで、いくつかの例外的な記号を覚えればいいだけからだ。

言語の理解と発音記号の理解は全く別ものだ。雑多な言語の歌を歌わねばならないオペラ歌手はIPA発音記号が書き込まれた楽譜を見て意味もわからず歌いこなせるらしい。発音記号の読解と発音の練習は、該当の言語を全く知らなくてもできるし、逆に該当の言語を知っていても発音記号の読解ができるとは限らない。オペラ歌手でもなければ発音記号を学ぶ必要なんてないとも言えるが、辞書に書いてあるものを活用しようと思えば、発音記号は読めた方がいい。読み上げソフトがあるんだから、もはや発音記号なんて不要だという意見も尤もだと思う。ただし、それは聞き取り能力が十分にあればの話だ。「annihilate」の音だけ聞いて、/əˈnaɪə.leɪt/ という発音を即座に模倣できるなら発音記号など不要だ。しかし、外国語として英語を学んでいる多くの学習者には、その芸当は難しい。かといって、「アナイアレイト」などと仮名に直して覚えるのは情報欠損が激しすぎる。もちろんIPA発音記号とて発音の全て情報を再現できるわけではないのだが、誤解なく意思疎通するのに十分な再現度で発音を学ぶのに適した表現力を持っていると一般に考えられている。だからこそ多くの辞書に採用されているのだ。

私も発音は苦手であり、IPA発音記号を見せられて即座に口が動くというには程遠い。しかし聞き取りも壊滅的に駄目なので、IPA発音記号を頼りに発音練習することも多い。英文読解中に未知語を調べた際には、IPA発音記号を見て一度は口に出してみることにしている。最初から全部の記号を覚える必要はなく、よく出てくるものだけ押さえておけばいい。頻出3万語における発音記号の出現頻度を数えたので、上の方だけでも覚えておくといいだろう。

記号 頻度 備考
ˈ 26838 第1ストレス
ɪ 23118 「え」っぽい「い」
ə 17482 曖昧な「あ」
. 15002 音節の切れ目
t 14720
n 14296
s 12166
l 11712
ɹ 11530 R音
k 9742
d 9509
i 8362 「い」
m 6587
ɛ 6147 「え」
p 6082
ː 6039 長い伸ばし
æ 5070 「あ」と「え」の間くらい
ʊ 4695 「う」
e 4645 「え」(ɛよりも口が小さいらしい)
b 4406
ˌ 4238 第2ストレス
a 4230 「あ」
ʃ 3714 「しゃ」「しゅ」「しょ」的な
f 3614
ɑ 3531 喉の奥で「お」っぽい「あ」
o 2936 「お」
ʌ 2743 喉の奥で「う」っぽい「あ」
ŋ 2726 「んぐ」
v 2667
z 2463
u 2360 「う」
ɚ 2326 喉の奥で曖昧な「あ」とR的余韻
ɔ 2225 「お」っぽい「あ」
ɡ 2204
͡ 1907 2つの音をつなげる
ʒ 1875 だぢづでど的な
w 1756
j 1616 やゆよ的な
h 1597
r 1476 R音。英語ではɹとの区別はないらしい
ɒ 1238 喉の奥で「あ」っぽい「お」(ɑのイギリス風)
θ 788 th音。「た」っぽい「さ」
ɝ 745 「う」っぽい「あ」とR的余韻
ɨ 448 「う」っぽい「い」
ɜ 430 「う」っぽい「あ」
g 236
ð 196 濁ったth音。
ɾ 110
ɫ 97 L音
ʧ 36
ʤ 34
ʰ 26
ʍ 17 W音
ʔ 15 つまる音。T音に近い
15
x 11
ʉ 11 「い」っぽい「う」

もうちょいまともな解説は、以下のようなサイトを読むとよい。
dr-d.jp

ここまで読んだあなたは、きっと検定がやりたくなっているに違いない。このサイトにアクセスしてみてほしい。10問のクイズが出る。各問では、IPA発音記号が表示されるので、それに該当する英単語を入力してほしい。正解なら発音が読み上げられて、次の問題に進める。10問を100秒以内に正解できたらそのレベルは合格だ。レベル別の想定習得語数は以下の通りだ。

  • 中学生並:1500語以上
  • 高校生並:4300語以上
  • 大学生並:9000語以上
  • 留学生並:15000語以上
  • ネイティブ並:22000語以上

発音記号が読めたとしても知らない語彙に関しては答えようがないので、自分に合ったレベルで挑戦してみてほしい。というか、発音記号の理解を確かめるだけなら中学生並だけやるのがおすすめだ。高いレベルを目指すより、中学生並でタイムアタックをする方が楽しいと思う。ちなみに私は中学生並でも合格率は半分も行かない。留学生並やネイティブ並は学術用語とか固有名詞とかも出てくるのでかなり難しく、発音のクイズというより語彙力クイズになってしまっている。俺スゲー感を得たい人だけどうぞ。

何年か前に作った英語語彙力年齢診断も運用中なので、お時間があればそちらもどうぞ。


ここから先はクイズの実装の話をするので、興味がある人だけ読んでほしい。まず、対象となる英単語の集合は、Webコーパスでの出現頻度や平均獲得年齢のデータベースを元にスコアリングして選んでいる。それぞれの発音記号はWiktionaryから取得するとともに、足りない分はChatGPTに生成させた。和訳語のリストも同様だ。

UIの実装はPythonで行い、CGIスクリプトとして起動させている。コードはこのファイルだ。問題の生成、クイズUIのHTML出力、結果の保存、結果の表示という4つのモードからプログラムは構成される。

問題の生成では、このファイルから、単語と発音と訳語のタプルを30000件読み込み、重要度順で並べた上で、レベル別にクラス分けする。1500位未満、それ以上で4300位未満、それ以上で9000位未満、それ以上で22000位未満に分ける。そして、指定されたクラスのレコードの中からランダムに10個を選ぶ。同じ発音のものが選ばれないように排他制御を行う。また、「complement」「compliment」のような同音語の全てを正解にするために、選ばれた発音のそれぞれに対してクラス横断的に同音語を集めておく。あとは、それをJSONのデータとして出力する。以下のようなデータだ。

{
  "questions": [
    ["saɪn", [["sign", "記号, 符号, サイン"], ["sine", "正弦, サイン, 正弦関数"]]],
    ["ɪmiːdiətli", [["immediately", "直ちに, 即座に, すぐに"]]],
    ["maʊnt", [["mount", "マウント, 台紙, 乗る"]]],
    ["wɪθaʊt", [["without", "無し, なし, せずに"]]],
    ...
  ],
}

クイズUIの生成は、単にほぼ静的なXHTMLページを出力するだけだ。その中にJavaScriptのコードが埋め込まれていて、UIのロジックを実装している。まずはタイトル画面を表示し、そこでユーザ名とレベルを入力させ、クイズ生成ボタンでクイズを開始する。クイズが開始されたら、問題の生成機能をXHRで呼んでレベルに合った10問のJSONデータを取得する。各問においては、発音記号と回答用フォームを表示する。「回答」ボタンが押されたら、現在の問題の正答リストと照らし合わせて、正解なら正解情報を表示するとともに、発音を読み上げる。読み上げにはブラウザの読み上げAPIを使う。問題が表示された直後に時刻を記憶しておいて、正解した時刻との差でその問題の所要時間がわかる。

10問全ての問題が終わったら、結果を保存する。これはXHRでJSONデータを送ることで行われる。JSONデータの中身はユーザ名とレベルと各問題の回答とその所要時間だ。UUIDでIDを生成して、それをファイル名としてJSONデータを保存して、そのIDを返す。以下のようなデータだ。

{
  "user": "赤松則村",
  "level": 1,
  "answers": [
    ["saɪn", "sign", "記号, 符号, サイン", 10.3],
    ["ɪmiːdiətli", "immediately", "直ちに, 即座に, すぐに", 5.8],
    ["maʊnt", "mount", "マウント, 台紙, 乗る", 3.3],
    ["wɪθaʊt", "without", "無し, なし, せずに", 13.2],
    ...
  ]
}
];

結果の保存が終わったら、結果表示用のページに遷移する。そこではIDを受け取って、保存してあるJSONデータを読み出して、単にそれをテーブルとして表示する。Twitterで結果をシェアするボタンもつける。


まとめ。IPA発音記号に該当する英単語を当てるクイズを作った。中学生レベルの単語でも意外に答えられないのに自分でも驚いたが、慣れると正答率が上がってくるので、よい練習ツールになっていると思う。実装はPythonJavaScriptで素直にできた。趣味的なプログラミングはやはり楽しい。