言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議(ことば文化特設サイト)
ことば文化に関する気になるトピックを短期連載で紹介していきます。
-
- 2023年12月05日 『9. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:言語の多義性 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. 擦り切れそうになっているネタだが、左の猫は茶色だろうか、オレンジ色だろうか。右の信号は緑色だろうか、青色だろうか。左(orange cat)は言語間での境界の差、右(青信号)は言語内での多義の例になっている。同時に、色の境界の個人差とも言える。
図2. Colab上で文法や文、パーサーを定義している。
図3. 例文(2a)に対し、定義した文法で構造を割り当てた。一番下の層が単語になっており、枝分かれの節は「下にある全ての単語」が属すカテゴリーとなっている。たとえば、左の構造(a)の動詞句は下に like an arrow を持ち、これはこの3単語がすべて動詞句を構成するとみなす。
図4. 例文(2b)に対し、定義した文法で構造を割り当てた。図3と同様だが、もっともらしい構造は異なっている。
図5. 例文(2a, b)に対し、stanzaを用いて構造を割り当てた。与えられた構造はどちらも1つで、多義性は発生しなかった。
図6. 非常に申し訳なさそうに割り込めば…?
大学生のころ、講義の空き時間にバルコニーで教授にいろいろと話をしていただいていたことがある。今もし学生になったらどの学部に進んでみたいか、専攻したい分野は何か、大学教員と研究者の包含関係などなど。マニアックな話に聞こえるが、自分の考えを点検したりキャリアを想像したりする機会をもらえて、今思い返してもありがたい時間だった。
そうしたトピックのなかに、英単語のambiguousとvagueがどう違うのかという話があった。日本語では油断すると、どちらも「曖昧な」と訳してしまいそうだ。だから “ambiguous response” も “vague response” も、両方なんとなく「曖昧な反応」みたいに訳したくなる。どう違うのだろうか。
実のところambiguousとvagueには、それぞれ「両意の;多義の」と「はっきりしない;漠然とした」という和訳がある。ほかの関連語も見てみたい。まずambivalentは「相反する」、そしてamphibianは「両生類」と訳せるので、接頭辞のambi-やamphi-は「2つの面や状態がある」という意味を持っていそうだ(1)。
もちろん語源は簡単に言い切れないが、ambiguousも「異なる2つ(以上)の意味を持つ」という意味があるのもうなずける。これに対して、vagueはぼんやりとしている。どちらも「どちらかわからない」を指すが、境界の有無に違いがありそうだ。
自然言語にはvagueかつambiguousな部分がある。単語はお互いに排他的なわけではなくて、概念の輪郭が曖昧だったり重なり合ったりしている。典型的なのは色で、JIS慣用色名のRGB値を用いて定義でもしない限り、“orange cat”や「青信号」の色は曖昧だ(図1)。
こうした境界が不明な(=vague)ケースに加えて、多義な(=ambiguous)ケースもある。前に出てきたタヌキとムジナもその例で、1つの単語が複数の意味を持ちうる(2)。英語の例で言えばbankという語が銀行だけでなく土手の意味も持っていたり、bugという語が虫やプログラムのエラーの原因、あるいは盗聴器という意味を持っていたりするのがよく例に出る。これは語の多義性で例も出しやすい。
今回の話には「境界が不明な曖昧さ」は出てこず、「2つ以上の解釈ができうる曖昧さ(=多義性)」の話をする。特に単語ではなく、構造による多義性についてだ。以下で、日常と法律における多義性と関連するトピックをいくつか共有していきたい。
構造的多義性
大学院に進みたくなったきっかけの1つに『言語科学の世界へ』という書籍がある(東京大学出版会, 2011)。その14章に「ヒントは肝心」という広瀬友紀先生の解説があり、構造的・一時的な多義性が紹介されている。人が文の構造を割り出す過程の導入になっていて面白いのだが、今回は特に前者の構造的に着目した多義性だ。
書籍では以下のような文(1a,b)が紹介されている。文(1a)には2つの訳が与えられて、要は “with a telescope” が “saw”の手段を示すか “a man”を修飾するかの違いがある。それに対して(1b)は基本的に後者の、 “a man”を修飾する解釈が一般的だろう(3)。選好性、つまりどちらの解釈が(1a)において好まれるか、そしてその理由も考察が面白いのだが、ここでは1つの文に複数の意味を与えられることを共有したい。
(1)
a. A boy saw a man with a telescope.
b. A boy saw a man with a gun.
その他の有名な例としては、文(2a,b)がある。こちらは何回か引用している『言語という名の本能』で見かけた例で、前者は「光陰矢の如し」と訳せて後者は「ショウジョウバエはバナナを好む」と訳せる。2つの文の構造は異なっていて、(2a)のfilesは動詞なのに対して(2b)は “Fruit flies” でバナナなどに近づくやっかいなハエを意味する。
(2)
a. Time flies like an arrow.
b. Fruit flies like a banana.
ただ、(2a)の文には5つの構造を割り当てられて、その中には “Time files” という「時間バエ」なる新しい生物を作ってしまう例があった。これが示唆するのは、逆に(2b)にも(2a)と同じ構造を無理やり当てはめて、「時間は矢のように飛ぶ」のように「果物はバナナのように飛ぶ」という意味を与えられることだ。
これをシミュレーションするスクリプトも2つのパターンで作ってみたので試してみてほしい。まず1つは伝統的な「文法」を定義して構造を割り出す方法で、もう1つはStanfordの研究グループが開発したソフトウェアを使う方法だ(4)。前者であえて「文法」と意味ありげに表記したのは、一般的な用法ではないからだ。ただ、ここでトップダウンに定義から入ってしまうと話がややこしくなるので、ボトムアップに話を進めてみたい。
時間バエの構造
まず、名詞や動詞といった品詞を表すのに「→」を使った記法を考えてみよう。さきほどの例文(2a,b)を例にすると、timeやfliesは名詞の1つだ。だから名詞がどういう具体的な単語になりうるかを示すために、“名詞→time” や “名詞→files” と記述する。ほかにも、arrowやbananaも同様に記述できる。動詞はfliesやlikeがあるので、 “動詞→flies” や “動詞→like”とできる。なお、likeは前置詞にもなり、aやanは冠詞だ。要するに「品詞→単語」になる。
つぎに、品詞と品詞の組み合わせを考える。たとえばだが、冠詞と名詞を組み合わせて「名詞句」としてみよう。ほかにも、Fruit fliesのように名詞と名詞で「名詞句」ともできる。これらは「名詞句→冠詞 名詞」や「名詞句→名詞 名詞」と記述できる。この調子で前置詞と名詞句を「前置詞句」、動詞と名詞句を「動詞句」とし、最終的には「文→名詞句 動詞句」という記述ができる。
以下では、Google Colabを使って説明を進める。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/time_flies.ipynb
上記の文法をPythonでgrammar
として、後述するほかに必要な要素も定義しておく(図2)。sent_time_flies
やsent_fruit_flies
は構造を割り当てる対象とする文である。そしてparserは文法を与えて初期化(あるいはインスタンスを作成)して定義した。今回はBottomUpChartParserが初期化するparserには触れないが、与えられたgrammarを用いて文に構造を割り当てる仕組みを作成する。
さて、このparser
を使って文に構造を割り当ててみよう。まずは “time flies” のケースから見ていく。文をparser.parse(sent_time_flies)
のように対象にとると、割り出された構造のリストを取得できる。図3には得られた2つの木を示す。左は「時間バエ」の構造、右は「光陰矢の如し」の構造になっている。
同様に、“fruit flies” のケースも見ていく。文をparser.parse(sent_fruit_flies)
とすると、割り出された構造のリストを取得できる。図4には得られた2つの木を示す。左は「ショウジョウバエ」の構造、右は「フルーツはバナナのように飛ぶ」の構造になっている。
以上のように、自分で文法を定義して構文を割り当てられる。腕試しをしたい場合、 “time” を「Xの速度を測定せよ」という他動詞として「矢のようなハエの速度を測定せよ」命令文を作るにはどうすれば良いかを考えてみて欲しい。ヒントとして、文と名詞句、動詞に変更が必要になる。
ただ、これだと実践的にはあまり使えない。というのも、自然言語をパースさせたくなったとき、いちいち自前で文法を用意するのは大変だからだ。正直なところ「大変」という表現で片付けてはならない気もする。構造を用意するのも、たとえば国立国語研究所のNPCMJ(5)という言語データの裏には膨大な議論や作業があった。
対して、stanzaを使えば手軽に構文解析ができる。ものの数コードで言語データから学習した結果を用いてパースしてくれる。例として、再度例文の(2a,b)をパースしてみると構造を割り当てられる。しかしながら、結果は多義とはされず、意外なことに、fruit fliesの方は果物が飛ぶ結果となった(図5)。
外部のソフトウェアはバージョンによって異なるのでサンプルスクリプトでは執筆時点での最新に固定しているが、異なるモデルや設定を使えば “fruit flies” の方はショウジョウバエになるかもしれない。日本語をパースするときは単語分割の指定が必要だが、自前で文法を定義してもstanzaのようなライブラリを用いても同様に構造を与えられる。
もう少しパーシングや文法に関して知りたい場合は、『構文解析』という直球な書籍があり(鶴岡 & 宮尾, 2017)、アルゴリズムの解説まであるので腕に自信がある人は自分で実装してみるのも楽しいだろう。『言語と数理』には手順の説明はあるもののアルゴリズムの解説はないので、よりパワフルな言語理論との差を考えるのが楽しい。
ここまで多義性を見てきたが、つぎのトピックに映る前に少し抽象的な話をする。というのも、最初に以下のように述べていた。ここまで積んできた用語をまとめてつぎの話に移りたい。
ただ、ここでトップダウンに定義から入ってしまうと話がややこしくなるので、ボトムアップに話を進めてみたい。
まず図2に示す文法で「単語」に相当するものを「終端記号」と呼ぼう。そしてそれ以外を「非終端記号」と呼ぶ。終端記号を小文字のa、非終端記号をABCのような大文字のアルファベットとしたとき、矢印はA→aとA→B、A→BCのように抽象化できる。このように、左に非終端記号、右に非終端記号と終端記号の組み合わせを取れる文法を「文脈自由文法(context free grammar)」と呼ぶ。
対して、A→aとA→aB のような表現もありうる。これはつまり、ある非終端記号は単語か、単語とつぎの非終端記号に変わるというものだ。たとえば、「名詞→ ‘猫’ 副詞」や「副詞→ ‘ゆっくり’ 動詞」、「動詞→ ‘走る」などが相当する。この形式に制限する文法を「正規文法(regular grammar)」と呼ぶ。
正規文法は直前の品詞にしか依存しないので、「名詞が前にきたらそのいくつか後ろには必ず動詞がくる」のような規則を持ち込めないことがわかる。ただ、文脈自由文法は上の例で見てきたように、背後に構造を与えることでそのような依存関係を許せる。また、「名詞句→文 名詞」のような規則も作れるので、これは文の中に文を埋め込めることを意味する。
人間の使う言語は文脈自由文法では表現できないことが知られていて、現在でもどのような規則(あるいは制約、移動)のセットを用意すれば過不足なく自然言語を表現できるかの研究は進んでいる。正規文法で導出できる列も定義上は言語(language)だが、単純に「言語」という表現が我々の日常で扱う「言語」と同じクラスなのかは考えてみても面白いかもしれない。
法律における構造的多義性
ここまで多義性を具体例やプログラミングを通じて見てきた。そのほかにも、インターネットでしばしば話題になる無難な例としては「頭が赤い魚を食べる猫」がある。赤いのは魚の頭だろうか、猫の頭だろうか、それとも魚自体だろうか(この解釈はとんでもない光景を生み出すことになる)。文ではなく単語のレベルでも、unlockableがun-lockable(施錠できない)なのかunlock-able(開錠できる)なのかは多義だ。
上で挙げた例はどれも複数の構造を割り当てられることに起因する。これが構造的な多義性になる。こうした例は日常的なケースでは「え、どっちなの?」と聞き返せるのであまり問題にならない気もする。口頭なら音の情報や文脈で適切に判定できる場合も多い。
では、たとえば法律に多義性があったらどうだろうか。もちろん「いや法律が複数に解釈できてたまるか」と思う人もいるかもしれない。刑法でも民法でも多義性があってもらっては困るし、刑法に関しては違反すれば刑事罰がつきかねない。そんなものが曖昧であったり、多義であったりしてもらっては怖くて仕方がない。ただ実際には「法解釈」という学問があり、これは解釈という作業が必要であることを意味している。
最後にいくつか例をみてみよう。なお、『言語という名の本能』では保険契約、法令、陪審員に関する多義が紹介されている。ほかにも『法と言語』の第10章には構造以外の解釈(itやweの参照や、相槌についてなど)の記述がある。こちらも興味があれば参照してほしいが、ここではより構造的な話を2つ紹介する。
まずは接続詞のandやorに相当する語だ。日本語で「AもBも」を表す後には「及び」や「並びに」があり、一般的にはどちらも同じに思える。ただ、『法と言語』で紹介されている通り、「及び」は結合する語が同じ種類やレベルでなければならない。つまり、「犬及び猫」は言えるが「人及び猫」は言えない。これは英語のandも同じだ。
対して「並びに」は結合の語の種類やレベルが違う場合に使うので、「人並びに犬」が言える。また、小さな結合で「及び」を使い、それ以上の段階には「並び」を使える。では「犬X猫Y人」のXとYには何が入るだろうか。
接続詞のorにも「又は」と「若しくは」がある。こちらは『法令用語の常識』という書籍の例を挙げたい。まず、単純な比較の場合は「又は」を使う。そして((A or B) or C)のような階層性が生まれた場合、小さい接続に「若しくは」を、大きい接続に「又は」を使う。実例を(3)に引用する。
(3) 公立の中学校、小学校、盲学校、聾学校若しくは養護学校の校長又は効率の幼稚園の園長
もちろん、名詞の種類が違うので構造は明らかだろう。ただ、もっと複雑なケースもある。面白いケースとしては、「列の割り込み」に関する軽犯罪法第一条(6)が示す例だろう。読みやすさのため、カッコをつけてある。ただ、この数の「若しくは」と「又は」を捌くのは骨が折れる。
第一条 左の各号の一に該当する者は、これを拘留又は科料に処する。
十三 公共の場所において [多数の人に対して著しく[粗野若しくは乱暴]な言動で迷惑をかけ]、[又は威勢を示して[汽車、電車、乗合自動車、船舶その他の公共の乗物、演劇その他の催し若しくは割当物資の配給を待ち、若しくはこれらの乗物若しくは催しの切符を買い、若しくは割当物資の配給に関する証票を得るため待つている公衆の列]に割り込み、若しくはその列を乱した]者
この例も大きい方に「又は」を使い、小さい方に「若しくは」を使う。ポイントは「又は」の直後に「威勢を示して」という表現が与えられていることで、構造の上に位置できている。したがって、威勢を示して割り込み、威勢を示して乱した場合に満たすことになる。「若しくは」は小さい項目を結合するので、「威勢を示して」は「待ち」や「切符を買い」などにはかかれない。
この話は弁護士の方のブログ(7)で紹介されていた。面白いのは、構造的な多義性を接続詞自体に結合の条件をくわえて回避しているところが1つある。もう1つは、ブログで述べられている通り、「威勢を示して」割り込んだ場合に要件を満たすので、申し訳なさそうに「すみません、すみません」と一切の威勢を示さずに割り込めば(そして「威勢を示して」が「列を乱した」にかかっているならば、要件を満たさないことになる(図6)。逆に「威勢を示して」が「列を乱した」にかかっていないならば、列を乱した時点で要件を満たすことになる。これは構造的な多義性に思える。
なぜ割り込みの例を出したかというと、先日お菓子を買おうとしたところに割り込みをされて、目の前でお目当てがなくなってしまったからである。
参考文献
鶴岡, 慶雅., & 宮尾, 祐介. (2017). 構文解析. コロナ社.
言語科学の世界へ: ことばの不思議を体験する45題. (2011). 東京大学出版会.
Pinker, S. (1995). 言語を生み出す本能[上] (椋田直子, 訳.). 日本放送出版協会.
橋内, 武., & 堀田, 秀吾. (編). (2012). 法と言語: 法言語学へのいざない. くろしお出版.
林, 修三. (1975). 法令用語の常識. 日本評論社.
(1) https://www.etymonline.com/word/*ambhi-
(2) イルカは4m以上ならクジラだが、シロイルカがいるのでvagueかもしれない。
(3) 『ジョジョの奇妙な冒険』の5部に出てくるスタンド、セックス・ピストルズが視覚を共有する能力が持っているなら可能かもしれない。
(4) https://github.com/stanfordnlp/stanza
(5) NINJAL Parsed Corpus of Modern Japanese
(6) https://elaws.e-gov.go.jp/document?lawid=323AC0000000039
(7) https://taniharamakoto.com/archives/2599/
-
- 2023年11月28日 『8. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:読みづらい文・誤解する文 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. インターネットの界隈でバズったツイート。浅瀬蟲というカードを後輩が買ったらしい。
図2. 英語文“When Reef Worm dies, create a Fish token” と 日本語文「浅瀬蟲が死亡したとき、魚トークンを生成する」に筆者が与えた構造
図3. 英語文“When Reef Worm dies, create a fish token with “When” this creature dies, create a whale token” と 日本語文「浅瀬蟲が死亡したとき、「このクリーチャーが死亡したとき、鯨トークンを生成する」を持つ魚トークンを生成する」に筆者が与えた構造
図4. 例文(3ab)に与える構造。英語の(3a)と日本語の(3b)で形が異なる。カードの和訳としては読みづらいが、原文が持つ再帰的な構造を保存した綺麗なケースに感じた。
誰しも人に話したくなるような奇妙な経験を持っていると思う。たとえば、たまたま乗った電車でばったり、かつて親しくしていた友人に出くわすような、偶然に偶然をかけあわせたような出来事だ。以下に共有する話は、偶然を少なめに見積もっても3回はかけあわせたもので、しかも言語や情報処理への示唆を含むので、ぜひとも共有したい。
ここまで単語や音の話をしてきたが、対象をがらりと変える。今回のメインの話は、人間の言語の構造と、言語に構造を与える処理についてだ。読みやすい文を書くコツや、言語学者と呼ばれる人々の一部が言語の構造や処理を見続けられる理由を、変わった形で共有する。まずは軽めの導入として、ネットの一部界隈で話題になった投稿から紹介しよう。
カードの翻訳と読みづらさ
本人の許可を得たので、その投稿の画像を図1に引用する(1)。本文に関係する情報を整理すると、大まかには上から (a) 投稿者情報(トロピ大塚さん)と(b) 短文、(c) 画像欄の3つに分けられる。画像の下には、投稿時刻や表示回数、リポスト・いいねの数などが示されているが、今回のメインは (c)にしめす画像欄だ。画像欄で共有されている左右2枚のイラストの下には、日本語と英語の文章が示されている。
この投稿で偶然がどのようにかけあわされているのかは最後に共有するとして、言語に興味を持っている人の心をつかむのは、左右で日英対照される「中央に埋め込まれた」テキストだ。このテキストを説明するためには、まず世界的に人気を集めるトレーディングカードゲーム「マジック:ザ・ギャザリング」(以下、MTG)の説明が必要だ。
MTGはカードを使った対戦ゲームであり、プレイヤーは「プレインズウォーカー(Planeswalker(2))」という魔法使いを演じる。プレイヤーは各自が所有するカードの束(=デッキ)からカードを引き、魔法の呪文を唱えたり、「クリーチャー」を戦場に召喚したりして戦い、相手ライフポイントをゼロにして勝利を目指す。図1で引用した投稿が示すカードは、《浅瀬蟲》というクリーチャーを戦場に出せる。
さて、この《浅瀬蟲》は効果(アビリティ)を持っている。基本的にクリーチャーは攻撃や防御を行うためのカードだが、多くのクリーチャーには追加の効果が付随する。これらの効果は、クリーチャーが持つ特性や能力を示し、ゲームの戦略的な深みを与える。クリーチャーの効果には、常に効果が適用される静的なものや、特定の事象に誘発されるものなどがある。
ここで話題にあげた《浅瀬蟲》の効果を読んで(あるいは眺めて)みよう。
浅瀬蟲が死亡したとき、「このクリーチャーが死亡したとき、『このクリーチャーが死亡したとき、青の9/9のクラーケン・クリーチャー・トークン1体を生成する。』を持つ青の6/6の鯨・クリーチャー・トークン1体を生成する。」を持つ青の3/3の魚・クリーチャー・トークン1体を生成する。
もちろん、「トークン」や9/9や6/6という表記を知らないと全ては理解できない。トークンとは、カードとしてデッキに含まれるのではなく、特定の効果によってゲーム中に生成されるクリーチャーの代用品である。物理的なカードである必要はなく、コインや紙片などで代用することができる(3)。また、9/9や6/6はクリーチャーの能力で、攻撃/守備の形式を取る。ただ、この説明を追加しても、上の文は読みづらいだろう。
大塚さんの解説によると、以下の効果と言えるらしい。
この『浅瀬蟲』が死亡して墓地に置かれると、3/3の魚クリーチャー・トークンが場に出現します。そしてこの魚が死亡すると、次は6/6の鯨クリーチャー・トークンが場に出現します。そして鯨が死亡すると、最後に9/9のクラーケン・クリーチャー・トークンが出現する…という能力になっています。
これならわかりそうだ。筆者はMTG未経験者だが、死ぬと強くなって親分が出てくるイメージだ。でも、このテキストの理解が難しかったのは、MTGのルールを知らないからだろうか。それとも、言語の構造として理解し難いのだろうか。これを確認するために、似た構造を持つ、我々の知っている単語を持つ文を見てみよう。
僕は家に帰ったとき、「遊びに来るとき、『人の家に寄るとき、両親を呼ぶ』恋人を呼ぶ」友人を呼ぶ。
よし、理解できない。シチュエーションの意味が不明なのだろうか。理解度確認テストとしては「誰の恋人が呼ばれますか?」という問いでよいだろう。友人と「僕」のどちらの恋人だろうか(4)。分かりやすさのため、大塚さんのように以下のように言い換えてみよう。
僕は家に帰ったとき、友人を呼びます。その友人は遊びに来たとき、恋人を呼びます。その恋人は人の家に寄るとき、両親を呼びます。
こう書くと、はた迷惑な効果を持つ友人だということがわかる(その効果を持っているのは「僕」なのでお互い様だが)。ただ、現実に起こりうるかはさておき、さきほどに比べればずいぶんと理解しやすくなった。つまり、友人を呼ぶと、連鎖的に友人の恋人と、恋人の両親まで召喚することになる。したがって、もとの文の読みづらさは語彙に起因しないことがわかる。
では上の2つの文の読みづらさは何に起因するのだろうか。ここで《浅瀬蟲》の英文を見てみる。同じように読みづらいのだろうか。
When Reef Worm dies, create a 3/3 blue Fish creature token with "When this creature dies, create a 6/6 blue Whale creature token with ‘When this creature dies, create a 9/9 blue Kraken creature token.'"
こちらの文は下に示す通り、大塚さんの説明とほとんど同じでむしろ読みやすい。補足する点があるとすれば、「名詞 with 能力」という形で、その名詞がwith以下のもの(ここでは効果)を持つことを示せるところだろうか(5)。
When Reef Worm dies, create a 3/3 blue Fish creature token: この『浅瀬蟲』が死亡して墓地に置かれると、3/3の魚クリーチャー・トークンが場に出現します。
with "When this creature dies, create a 6/6 blue Whale creature token: そしてこの魚が死亡すると、次は6/6の鯨クリーチャー・トークンが場に出現します。
with ‘When this creature dies, create a 9/9 blue Kraken creature token.'": そして鯨が死亡すると、最後に9/9のクラーケン・クリーチャー・トークンが出現する…という能力になっています。
同じ能力を述べているのに、ほとんど同じ単語を使っているのに、どうしてこうも理解のしやすさに差が生まれるのだろうか。そこで考えたいのが言語の構造だ。
言語の文法と構造
この読みづらさを考えるために、そして「言語の構造」が示す対象を早めに共有するために、英語と日本語の構造を見比べていこう。まず考えたいのは以下の英語文(1a)と日本語文(1b)で、これは浅瀬蟲の効果を考える上で最もシンプルな文になっている。
(1)
a. When Reef Worm dies, create a Fish token
b. 浅瀬蟲が死亡したとき、魚トークンを生成する
図2の(1a)と(1b)には、それぞれに対する構造を与えてある。いかつい図だが、各構造の一番下には単語の層がある。そして一番上をみると、能力が「時+読点(、)+効果」から構成されることを示している。
なお、これらの図は後に複雑になっていくが、ノートブック上で確認・動作できる。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/mtg.ipynb
文(1a, b)に与えた構造に違いがあるとすれば、効果をトリガーする「時」の内部が、英語では「When 名詞句 動詞」であるのに対し、日本語では「名詞句 動詞 とき」であることだろうか。また、「効果」の内部も英語では「動詞 名詞句」であるのに対し、日本語では「名詞句 動詞」と入れ替わっている。この時点ではまだ読めるが、問題は魚トークンが効果を持っていることを説明する際の違いにある。
日本語と英語の構造の間にある違いの1つは、上に示したようなパーツの前後だろう。「効果」を述べる時、英語では動詞が前にくるのに日本語では後ろに来る。「時」を述べるとき、英語では When が前に来るのに日本語では後ろにくる。さらに、名詞句を修飾する方法も異なる。つぎに、1つ複雑にした文(2a, b)を見てみよう。
(2)
a. When Reef Worm dies, create a Fish token with “When this creature dies, create a Whale token”
b. 浅瀬蟲が死亡したとき、「このクリーチャーが死亡したとき、鯨トークンを生成する」を持つ魚トークンを生成する
これらの文は、まだ耐えられるはずだ。それぞれの構造を図3の(2a)と(2b)に示す(6)。さきほどと比べて様子が違い、英語は右下に修飾表現がつけくわえられたのに対し、日本語では木が中央に埋め込まれている。ただ、背景にあるのは順序の違いで、名詞句を足すとき、英語では主要な要素である名詞を前に、日本語では後ろに置く。
これらの違いを平たく言うと、大事なものを先に置くか後ろに置くかという違いに単純化できる。図3の(2a)と(2b)をもう少し眺めてみよう。まず(2b)「時」の中の「とき」を英語のようにさきにおくと、(2a)と同じ順序になる。効果の名詞句と動詞、名詞句の修飾と名詞句をひっくり返す。それを四角の中の「時」、「効果」、「名詞句」で繰り返せば、英語とおなじ順序になる(7)。
英語と日本語という別々の言語なのに、この「大切な要素を前に置くか後ろに置くか」というパラメータをスイッチするだけで、それぞれの単語は違うが同じ構造を生成できるのにはやっぱりロマンがある。今回見たものはシンプルすぎる、特殊なMTGというゲーム内の文法だが、これが我々の使う自然言語でもできるならアツい展開だ。
構造と読みづらさ
さて、読みづらい文の話に戻ろう。図3の「鯨トークン」を修飾する要素はどこに挿入されるだろうか。英語なら、修飾は名詞句の後ろに配置されるが、日本語では前に配置される。だから、さらに中央の埋め込みが日本語では深くなってしまう。さらに修飾表現を足した文を(3a, b)に見てみよう。
(3)
a. When Reef Worm dies, create a Fish token with “When this creature dies, create a Whale token with ‘When this creature dies, create a Kraken token’”
b. 浅瀬蟲が死亡したとき、「このクリーチャーが死亡したとき、『このクリーチャーが死亡したとき 、クラーケントークンを生成する』を持つ鯨トークンを生成する」を持つ魚トークンを生成する
さきほどの(2b)では辛うじて理解できていた日本語文だったが、これで少なくとも言語学を専攻しておらず説明を受けていない状態では理解できなくなった。見えることは期待しないが、形だけでも共有する意味はあるので対応する構造を図4に示す。
前回紹介した書籍『言語という名の本能』には、困った文が3つ紹介されている。これらは玉ねぎ文、ガーデンパス文、構造的多義文と言える(8)。ガーデンパスや構造的な多義性はとっておくとして、上の浅瀬蟲の日本語版はこの「玉ねぎ文」に相当し、再帰的な構造を持っている。
読みづらい理由としては、「能力」の説明が終わらないうちに別の「能力」の説明が始まり、そしてその「能力」の説明が終わらないうちに…と文が入力されることで、未完の「能力」の処理が積みあがってしまうことにある。これが日本語に限らず英語でも、処理しづらい文になる。ほかにも例を見てみよう。
以下の(4a-c)は『言語の数理』(長尾ほか, 2004)からの引用であり、(4a)は左下に構造が伸び、(4b)は右下に構造が伸びるケースだ。そして(4c)が中央埋め込みで、これもさらに伸ばしていくと理解が難しくなる。それに対して、(4a)も(4b)も埋め込まずに伸ばす限りは文の理解を妨げない。
(4)
a. 私の弟の友人
b. 今日やっとひとつ荷物が届く
c. 明日あのさっき君を助けた人が来る
もし、未完の構造を何個も維持するのが理解の妨げになるというのなら、未完の構造を作らなければよい。たとえばだが、「…とき」を3つすべて動詞の直前に再配置してたらどうなるだろうか。まず(5a)に再掲した文を、(5b)、(5c)と変えていく。
(5)
a. 浅瀬蟲が死亡したとき、「このクリーチャーが死亡したとき、『このクリーチャーが死亡したとき 、クラーケントークンを 生成する』を持つ鯨トークンを生成する」を持つ魚トークンを生成する
b. 「このクリーチャーが死亡したとき、『このクリーチャーが死亡したとき 、クラーケントークンを 生成する』を持つ鯨トークンを生成する」を持つ魚トークンを浅瀬蟲が死亡したとき生成する
c. 「『このクリーチャーが死亡したとき、クラーケントークンを 生成する』を持つ鯨トークンをこのクリーチャーが死亡したとき生成する」を持つ魚トークンを浅瀬蟲が死亡したとき生成する
あるいは、両親を召喚する恋人を召喚する友人を召喚する例はどうだろうか。
(6)
a. 僕は家に帰ったとき、「遊びに来るとき、『人の家に寄るとき、両親を呼ぶ』恋人を呼ぶ」友人を呼ぶ
b. 「『人の家に寄るとき両親を呼ぶ』恋人を遊びに来るとき呼ぶ」友人を僕は家に帰ったとき呼ぶ
どちらも悪文であることに違いはないにせよ、全く理解できないわけではないと思う。すくなくとも、「誰の恋人が呼ばれますか?」という理解度確認テストの正答率はあがるだろう(9)。処理の途中で別の処理を挟ませない、これが玉ねぎ文の生成を避ける方針に思える。
実はこの《浅瀬蟲》、たまたま大学院仲間から聞いて「こんな面白いカードがあるのか!」と思わず筆者も買ってしまった。届くや否や、同じく言語学を学んだ別の友人へメッセージを送ったのだが、偶然にもその方のパートナーがMTGに詳しかった。そしてその方が短文をネットに投稿をしたところ思いかけず話題になり、最初に《浅瀬蟲》を教えてくれた大学院仲間のタイムラインに現れて、「あれ、これ岸山のことじゃ…」となったらしい。そして見せてくれたのが図1だった。すごい偶然だ。
さて、これを玉ねぎ文にするにはどうすればよいだろうか。まずは情報を整理しよう。
1. 大学院仲間が面白いカードを岸山に見せた
2. 岸山はそのカードを大学時代の友人に伝えた
3. 大学時代の友人はパートナーに共有した
4. そのパートナーはツイートを投稿した
5. 大学院仲間が図1のツイートを岸山に共有した
これを内側に埋め込めばいい。上の5から徐々に微修正しながら中央に埋め込んでいく。
(7)
a. 大学院仲間が図1のツイートを岸山に共有した
b. そのパートナーは「大学院仲間が岸山に共有した」図1のツイートを投稿した
c. 大学時代の友人は『「大学院仲間が岸山に共有した」図1のツイートを投稿した』パートナーに共有した
d. 岸山はそのカードを<『「大学院仲間が岸山に共有した」図1のツイートを投稿した』パートナーに共有した>大学時代の友人に伝えた
e. 大学院仲間は【岸山が<『「大学院仲間が岸山に共有した」図1のツイートを投稿した』パートナーに共有した>大学時代の友人に伝えた】面白いカードを岸山に見せた
このおぞましい中央埋め込み文(7e)を解消すると(8)になる。
(8)
a. 【<『「大学院仲間が岸山に共有した」図1のツイートを投稿した』パートナーに共有した>大学時代の友人に岸山が伝えた】面白いカードを大学院仲間は岸山に見せた
b. 大学院仲間が岸山に共有した図1のツイートを投稿したパートナーに共有した大学時代の友人に岸山が伝えた面白いカードを大学院仲間は岸山に見せた
正直(8a, b)も「文を分けましょう」と言いたくなるが、(7e)の致命的な分かりづらさに比べれば努力次第で読める。努力しないと読めない時点で読み手のことを考えた文とは言い難いが、人間が文を理解する過程がこの違いから垣間見えるのはやはり面白いし、言語の奥にある構造を眺めるのは専門じゃない筆者としても楽しい。
いつの日か、見つけた玉ねぎ文を刻んでほかの人が食べやすいよう調理してみてほしい。
参考文献
長尾, 真., 中川, 裕志., 松本, 裕治., 橋田, 浩一., & ベイトマン, ジョン. (2004). 岩波講座言語の科学: 言語の数理. 岩波書店.
Pinker, S. (1995). 言語を生み出す本能[上] (直子. 椋田, 訳.). 日本放送出版協会.
(1) https://sirabee.com/2023/02/21/20163028339/
(2) MTGのストーリーは、久遠の闇と呼ばれる広大な空間に無数の次元(プレイン)が存在する多元宇宙を舞台としており、プレインズウォーカーは次元(プレインズ)を渡り歩く存在である。
(3) なお、浅瀬蟲関連のトークンはカードになっている。
(4) もし「僕は「恋人を呼ぶ」友人を呼ぶ。」という文があったとき、誰の恋人だろうか。その答えと一致するはずである。
(5) A man with a telescope. は「望遠鏡を持った男」と訳せる。
(6) こちらも見づらい場合は上記のノートブックのURLを参照してみてほしい。
(7) つまり、「とき 浅瀬蟲が 死亡した、生成する 魚トークンを を持つ(=with)「とき このクリーチャーが 死亡した、生成する 鯨トークンを」」になる。
(8) onion (or Russian doll) sentences, garden-path sentences, ambiguous sentences
(9) もし「「恋人を呼ぶ」友人を僕は呼ぶ。」という文があったとき、誰の恋人だろうか。その答えと一致するはずである。
-
- 2023年11月21日 『7. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:意味を考慮した聞き間違いの再現 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
意味を考慮した聞き間違いの再現
前回の最後で「聞き間違えない国語辞典」を作成する手順は以下の通りと紹介した(1)。手順2で解析するとされている「聞き取りづらくなる音の組み合わせ」や「科学的に似ている音の組み合わせ」はわかる。というのも、すでに見てきたスペクトログラムや聴力図を使えば音声研究の見地から似ている音の組み合わせはわかるからだ。実際に、高周波数を減衰させた場合、sとhが似るということがスペクトログラムからわかった。
1. 三省堂の大辞林、312億通りの組み合わせを列挙
2. 加齢により聞き取りづらくなる音・科学的に似ている音の組み合わせを解析
3. 1,500,000組の聞き間違えやすい言葉を抽出
4. 聞き間違いのパターンごとに聞く人に優しい話し方を提案
だが、その他が難しい。手順1に関しては、筆者を含めた一般の人は辞書のデータに気軽にアクセスできず、また312億通りの組み合わせの列挙と比較は骨が折れそうだ。手順3の抽出も、似ている組み合わせの中でピックアップする基準を考えるのも難しそうだ。手順4は特定の作業ではないので、今回の話からは外せる。したがって、辞書データの用意と抽出の手順を次に考えてみよう。
ただ、同じことを繰り返すのは気が進まない。再現することを目的とした場合、最終的な成果物が実際のものと異なる場合は目的が達成できないことになる。それに新規性がない場合はただのコピーになってしまい、人間が持っている知識を増やせている感覚があまりなくて楽しくない。そこで、もう少し人間の言語理解に寄り添った形式に組み替えてみよう。
単語の関連度合い
人間の言語理解といっても「言語」が何を指しているかで話は変わってくる。音声の話をしているのか単語の話をしているのか、それとも後にする構造の話をしているかで異なるふるまいを見せることが知られていて、ここでは単語レベルの話として「プライミング」を紹介する。
筆者が言語を面白いと感じたきっかけはいくつかあるが、その中に『言語という本能[上]』がある(Pinker, S., 1995. 訳: 椋田直子)。翻訳されたものは上下巻に分かれており、個人的な興味を刺激したのは上巻だったが、人によっては下巻のほうに興味を引かれるかもしれない。上巻の最後では人間による文理解の過程が言及されており、単語の認識が文構造の理解の処理とことなるふるまいを示す例としてプライミングは登場する。
プライミング(Priming)とは心理学の分野において、ある刺激が与えられたあと、関連する刺激に対する反応が影響を受ける現象だ。この効果により、最初の刺激(プライム)がその後の認知プロセスに影響をおよぼし、関連する単語や画像、概念などにより迅速に認識したり反応したりするようになる。
たとえば、英語で“bug”(虫)という単語を聞いたあとに“ant”(蟻)という単語が提示されると、通常よりも“ant”に対する反応時間が短くなることが書籍では紹介されている。これは“bug”と“ant”がともに昆虫というカテゴリーに属しているため、最初の単語“bug”が聞かれた時点で、関連する概念が活性化され、“ant”という単語に対して素早く反応できるようになるからと説明させている。
このことが示唆するのは、頭の中にある辞書は類語辞典のような構成になっていて、ある単語を聞くと関連する単語が近くにあって見つけやすい状態になっているということである。つまり、「渋谷」や「日比谷」のケースでも、前後(2)にある単語から影響を受けて「日比谷」に関連する語が活性化しやすくなる。
ここでようやく、単語と単語の距離を考える価値を共有できる。つまり、「日比谷」という単語が出てくる前後には、場所に関連する語がある。場所に関連する語が活性化するのは、日比谷を含めた単語の集合になる。その中には「渋谷」や「市ヶ谷」も含まれるだろう。ここでは関連する語を取得するために、Word2Vecという方法を共有しよう。
Word2Vecは、単語をベクトル(数値のリスト)として表現するためのモデルである。これを使うと、計算機は単語の意味を扱いやすくなる。ベクトルを使って画像や文書を表せたように、Word2Vecでは単語の意味や関連性を数値で表せる。タヌキやハリポタツアーの話で、すでに言語を数字に置き換えることには少し慣れてもらえていると仮定して話を進める。
説明の前に、まずは実際に手を動かしてみよう。まずは以下のノートブックを開く。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/talking_aid_minimal.ipynb
そして必要なライブラリーのインストールやWord2Vecのダウンロード(8分ほどかかる)、モデルの読み込み(30秒ほどかかる)を済ませた後、model.most_similar("日比谷", topn=TOP_N)
というコマンド(3)
で、最も「日比谷」に似たベクトルをもつ語を取得できる。最初のエントリーは[日比谷]という”[ ]”付きだが、そのつぎは代々木、池袋、市ヶ谷と続いていく。ただ、30番目くらいの候補には「渋谷」も含まれている。
これだけだと地名を集めただけのように聞こえるが、Word2Vecの面白いところは関係性を維持しており計算もできるレベルだという点にある。つまり、「日本」と「東京」の関係に相当するものを考えるとき、日比谷では何が相当するか、というのが計算できる。これには、「日本-東京=フランス-?」という等式を考えれば「?=フランス-(日本-東京)」が相当する。そこでmodel.similar_by_vector(model["フランス"]-(model["日本"]-model["東京"]))
を計算してみると、「パリ」が返ってきた(4)
。
この簡単な動作から3つのことがわかる。まず1つは、Word2Vecを使えば単語を数字に変換できるということだ。そして数字に変換できることから、単語同士の類似度を計算できる。3つめは、取得できるベクトルは計算が可能な水準で意味を表現できているということだ。
もちろん人が音から単語を活性化するときは、脈絡のない聞き間違いもする。筆者もデパートで「婦人雑貨」を「富士見坂」と聞き間違えたことがある。ただ、こうした意味のベクトルの差が大きい間違いはコミュニケーション上ではすぐに訂正可能なため、あまり問題にはならない。問題になるのは、意味も音も近いケースで、タクシーはよい例だろう。ここでマネーポストWEBからタクシーの運転手をしている50代男性のコメントを引用する(5)。
まず大前提として、絶対に避けたいのが聞き間違い。“日比谷と渋谷”や“千駄ヶ谷とセンター街(渋谷)”や、“たまプラ(たまプラーザ)と鎌倉”を間違えて大変なことになったという話も聞いたことがあります。この他、“千川(豊島区)と仙川(調布市)”とか“日赤(病院)と日石(日本石油)”とか、“目黒区の青葉台と横浜市の青葉台”とか、間違えそうな組み合わせは山ほどあります。
お互いのためですから、くどいようでも『○○線の△△』とか『□□の近くの◎◎』とか、少しでも細かく伝えてもらえるとありがたいです。
そこで、ある単語がどの単語に聞き間違えられうるかを考えるときは事前に単語のリストでベクトルを使って絞ってしまおう。なお、Word2Vecを自分で作れるようになるレベルで学びたい人は『ゼロから作るDeep Learning ② 自然言語処理編』(斎藤, 2018)を参照してほしい。数学を忘れた筆者は高校数学(対数とか微分とか)を復習することになったが、その価値は十分にあった。
さて、候補を絞ったうえで音の類似度や頻度情報を考えるにはどうすればよいだろうか。
音の類似度
音と音の類似度を計算できればいろいろなアプリケーションの開発が期待できる。ある入力音声に近い音を持つ単語を引っばってくれた単語認識ができそうだし、英語学習者の発音がどれほど “理想の” 発音に近いかを判定することや、今回のようなケースにも使えそうだ。実際に Dynamic time warping という手法を使えば音声の距離やズレは計算できる。
しかし今回は音声を使う予定がない。理由としては、音声を用意するに手間やお金がかかるのと、用意したとして計算のコスト(時間的にも計算量的にも費用的にも)がかかってうしくないのと、音声学や心理言語学、アルゴリズムの知識を使えば音声がなくても問題にはならないからだ。それではどのようにすれば音声の比較をせずに音の近さを計算できるのだろうか。
これには3の手順(音素変換→混合行列作成→編集距離計算)を踏むので、「日比谷」と聞き間違えうる単語の抽出の過程を例に考える。まず、「日比谷」と同じカテゴリーに属する語をWord2Vecで取得したとする。そのつぎは、そのリストに含まれる単語と「日比谷」を音素に変換する。つまり、日比谷をhibiya、渋谷をsibuyaなどとする。この手順は漢字→カタカナ→音素という変換で実現できる。問題は、hibiyaやsibuya、itigayaといった音素列間の距離を、難聴を考慮した形で計算する方法だが、まずはここまでを実装してみよう。
漢字の入力をカタカナにするには spaCy というライブラリー経由でGinzaというモデルを読み込むのが速い。nlp = spacy.load(‘ja_ginza’)
とすればモデルを読み込める。そして任意の単語の読みを得るには、doc = nlp(‘日比谷’)
とした結果のdocから読みを取得する処理を書けばよい。さらにでカタカナの文字をアルファベットに変換する辞書を作った。これでword_to_romaji(“日比谷”)
とすれば hibiya が返ってくる。
ここで「hibiyaやsibuya、itigayaといった音素列間の距離を、難聴を考慮した形で計算する方法」に立ち戻る。難聴を考慮するには、実験で得られる弁別精度という考え方を使う。心理言語学では弁別実験(discrimination task)をおこない、たとえば sとhが判別できるかを測る。高周波数帯の感度が低減する場合、この区別が難しくなり弁別精度が下がることになる。この結果を使えば難聴を考慮できそうだ(6)。
弁別精度を示す図としては、以下の混合行列(confusion matrix)が使える(図1)。この図では4つの音素(ksth)が判別できないケースを例として想定している。図の見方としては、横方向には与えた音素、縦方向には知覚された音素を示している。基本的に音素の数は多いので縦軸と横軸は見えないが、ここでは音素数x音素数の行列(あるいは表データ)が作れて、そこに判別できるかどうかの値を持っているとしよう。
仮に2つの音素間の弁別精度が低いならば、その人にとって該当する2つの音の距離が近いとみなす。つまり、sをhと聞き間違えてしまう場合、s→hの距離は近くなる。ただし、かりにhからsの聞き間違いが発生しない場合、h→sの距離は近くならない(7)。弁別課題をベースにすれば、こうした知覚の非対称性も扱える。このように特定の人を仮定した時に音素間の距離が求まれば、hibiyaとsibuyaの距離やhibiyaとitigayaの距離も求められる。
共有したスクリプトでは、この混合行列と2つの音素列を与えたときの ”距離” を求めている。これには「編集距離」という考え方が使える。たとえば、hibiyaをsibuyaに置き換えるためには何回編集しなければならないか、というものだ。Hibiyaをsibuyaならばh→sとi→uの2回編集が必要なので2となる。しかし、仮にhとsを判別できないなら、h→sは無視できる。編集距離の計算には効率的なアルゴリズムが存在するので、計算の過程で判別の可否を組み込んだ。
以上が「hibiyaやsibuya、itigayaといった音素列間の距離を、難聴を考慮した形で計算する方法」になる。難聴により音素ごとの弁別能力が変化するが、これを混合行列という形でデータにする。そして混合行列をもとにした編集距離を計算することで、任意の音素列の距離を計算できる。
確率の考慮と類似度の統合
ここまでで、弁別能力を示す混合行列を与えたときの2単語間の意味的・音声的類似度を計算できるようになり、最後に考慮するのは確率だ。同じ音に聞こえて意味が近い場合、知覚されるのはその人にとって確率の高いほうであろうという仮定に基づく。ただ、これは音声認識における「言語モデル」と近い考え方なので、そこまで目新しい話でもない。具体的には、文脈がなくhibiyaとsibuyaの判別が難しい場合、その人にとって頻度の高い方が活性化されるだろうという仮定だ。
これには本人の言語的な経験を全て取得して単語ごとに頻度を求めればよい。実際には不可能なので、Wikipediaの各項目の要旨を言語資源として計算する(8)。この計算にはデータの前処理に50分ほど時間がかかってしまうので、共有したスクリプトの外で事前に実行している(9)。この計算の結果、渋谷の頻度は78、日比谷の頻度は11というカウントデータが得られる。前単語の出現回数で割れば確率データとなる。
これで全ての準備は整った。調べたい単語を入力し、意味の近い単語のリストを取得し(サンプルコードでは1000個)、各単語と調べたい単語の音の距離を混合行列に基づいて計算する。そして確率を考慮することで、意味も音も近く、確率の高い語が優先して活性化される処理を実装した(10)。その結果、日比谷に対して「渋谷」を返してくれた。
そのほかはどうだろうか。うまくいった例とうまくいかなかった例を紹介しよう。日比谷に対しては渋谷が返され、「拍手」に対しては「握手」が返された。市ヶ谷に対しては「下谷」や「阿佐ヶ谷」が返ってきたが、これは実際に起こる聞き間違いかはわからない。「灘」に対しては「楢(なら)」や「那賀」が返ってきたが、確率をみると逆のパターンも起きうるのかもしれない。ちなみに、筆者の住む「稲城」に対しては「稲毛」が返された。確率のデータをより大きなものにすれば、順序などもより正確になるかもしれない。
まとめ
ここまでで、音や意味・確率を考慮して聞き間違えのシミュレーションをしてきた。ただ、批判的な思考の訓練として、いくつかダメなところを探してみて欲しい。たとえば、音の高低やアクセントを考慮できていない。また、品詞の情報を落としているので英語だと音は似ているが品詞の違うケースもピックアップしてしまうかもしれない。また、範疇外としたが実際の聞き間違いにはあり得ない聞き間違い(婦人雑貨と富士見坂)もありうるし、なにより上の方法だと処理が遅い。人間は即時的に処理をしている。
このようなモデルを作っていく過程で、異聴を含めた音声知覚の複雑さを目の当たりにするだけでなく、音声知覚メカニズムや実際の聞き取り問題に対する解決策を考察することができる。文脈や確率を使ったトップダウンの処理と音声からのボトムアップの処理は今後も深掘りできそうだ。
参考文献
Pinker, S. (1995). 言語を生み出す本能[上] (直子. 椋田, 訳.). 日本放送出版協会.
斎藤, 康毅. (2018). ゼロから作るDeep Learning ② 自然言語処理編. オライリー・ジャパン.
(1) https://www.youtube.com/watch?v=eyCqi6q1HH0
(2) 「前からの影響はわかるが後ろからも?」と思った人もいるかもしれないが、言語の処理では平気で後ろの入力が前の入力に影響する。
(3) TOP_Nは「上位N件の結果」を取得するための数値
(4) ただ、model.similar_by_vector(model["日比谷"]-(model["渋谷"]-model["ハチ公"]))
には「鍾乳」が返ってきた。うまくいかないこともある。
(5) https://www.moneypost.jp/1057961
(6) 実際に弁別能力を測定する実験をするならば57-s語表などを使った測定になるだろう。
(7) なお、A→BとB→Aの距離が等しくない点で「同一性」を満たさないので、数学的には距離ではない。その他に非負性、対称性、三角不等式を満たす必要がある。
(8) 単語の種類は206,060で総単語数は4,429,337だった。
(9) https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/talking_aid_word_freq.ipynb
(10) 確率は小さな値になるのと数値の分布を考慮して対数に変換している。
-
- 2023年11月14日 『6. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:計算機上の渋谷と日比谷 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. 聴力図は横軸に周波数、縦軸にdBを示す。図の右上は、音圧と周波数が30dB、4000Hz程度を示している。そこにはf, s, thといった摩擦音が含まれている。例として65–69歳を示す線をみると、4000Hzの周波数帯域は最低30dBの音圧がなければ聞き取れないことを意味する。
図2. 周波数を1000–2000Hz、聴閾値を20–30dBに制限して聞き取りづらさのシミュレーションを示した。
図3. 年代ごとの聴力図のサンプルデータ
図4. 筆者による日比谷と渋谷の調音のスペクトログラム
図5. 筆者による日比谷と渋谷の調音のスペクトログラムを減衰させたもの
図6. 「聞き間違えない国語辞典」における聞き間違いやすい語のペアの視覚的な表現。ひらがな単位で、「ひ–し」や「び–ぶ」の聞き分けの難しさを表現している。
これまで一見すると脈絡のない話をしてきたが、実は渋谷と日比谷の聞き間違いの話を考える上でとても重要な役割を持っている。タヌキやハリポタツアーは言葉を数字で表現することと、そのメリットを考えた。人によっては、数字で言葉を表現できるということ自体が新鮮だったかもしれない。さらに、ホーミーの謎で母音といった言語音から声道にあるパーツ(歯茎や硬口蓋)、周波数やスペクトログラムといった数字での表現も紹介した。
これが渋谷と日比谷の何に関係があるんだろう。単語の話はつぎに回すとして、今回は音を中心に難聴のメカニズムや難聴を体験してみるプログラムを見ていこう。難聴のメカニズムとどういう取り組みがされてきたのかという点、ユニークな取り組みを挙げていこうと思う(1)。さらに後半では、難聴を体験できるプログラムも共有するのでぜひ楽しんでみてほしい。
難聴のメカニズムと聴力図
実は父親の聞き間違いの件と最初に共有した仮説(摩擦音の聞き分けが困難であり、さらに単語の品詞やカテゴリーも同じだったから聞き間違えたというもの)を、補聴器メーカーに勤務する言語聴覚士の友人に話したことがある。そこでいくつか有益な情報を得た。その中には聞き間違いを専門的には「異聴」と呼ぶことや、難聴にも種類が多くあり個人差もあること、そして聴力図と呼ばれる異聴の傾向を考えるのに役立つ図があることを知った。
前回共有したスペクトログラムだが、あれは音が含む周波数ごとに強さを示すものだった。プログラミングで周波数を分解してスペクトログラムを作成したが、人間は耳の奥にある「蝸牛」と呼ばれる器官で音声の周波数成分を分解している。難聴にも複数あるが、摩擦音が聞こえないケースでは高い周波数に対する反応が減衰する。
これを視覚的に表現してくれるのが聴力図(Audiogram)と呼ばれる、個人の聴力を可視化したグラフになる(図1)。この図の縦軸には最小で聞こえる音量(聴閾値と呼ぶ)がデシベル(dB)という単位で、横軸には周波数(Hz)で表示される。縦軸は下に行くほど大きな値になっているのに注意だ。聴力検査を行った結果を線で記録し、たとえば、65–69歳を例にみると周波数が高い領域で聴閾値が下がっている。つまり聞こえるためにはより大きな音が必要になることを示している。
上の聴力図をみると、聞き取りづらさのシミュレーションはできそうだ。つまり、上の聴力図でいう50–54歳くらいの聴力図をもっているケースでも(あるいは20–24歳のものでも)、擬似的に80–84歳の聴力を擬似的に体験してみることは可能に思える。たとえば、80–84歳のグラフの4000Hzの領域をみると、これは最低でも50dBないと聞きとれないことを指している。これでは到底、30dB程度の音量しかないs, f, thの音は聞き取れず、聞き分けも難しい。
この聞き取りにくさを再現するには、聴力図の差分を考慮すればいい。つまり、50–54歳くらいの人にとって4000Hzは10dB程度あれば聞き取れる。しかし80–84歳のグラフでは50dBないと聞き取れない。この差分の40dB分、4000Hzの音を小さくする。そうすると50–54歳くらいの人も、80–84歳の人にとっての4000Hzの聞き取りづらさがわかるわけだ。
上の説明だと抽象的なので、ほかにもいくつか例を見てみよう。図2左の80–84歳の人にとってのhは30dBより小さい音だと聞き取れない。図では28dB程度の位置にありそうだ。対して、50–54歳くらいの人はこの周波数帯の音は10dBあれば聞き取れそうだ。さて、聞き取り能力の差分は図2左①の上下矢印に示す通り20dB程度なので、この周波数帯域の音を図2右②の↑のように20dB小さくしてみよう。そうすると、hの音は8dBほどになってしまい、50–54歳くらいの人にとっても聞き取れない音になる。このように、聞き取りづらさは擬似的に再現できる。
聞き取りづらさのシミュレーションは、単にイヤーマフや耳栓でも再現できるが、この後のノートブックではもうすこしハイテクな方針で進めるとしよう。こうしたシミュレーションにはいくつか意義がある。たとえば、Gagne&Erber(1987)では、幅広い種類の難聴を再現するシステムHELOSの構築や実験が実施された。正常な聴覚を持つ被験者に対して難聴を再現して歪ませた音を提示し、音素の識別テストをおこなった。結果として、難聴者による音素の識別精度を再現することを報告した。
論文の冒頭でも共有されているが、これには意義がある。単純に聞き取りを再現することで臨床的な知見を蓄積できたり手法の有効性を試せたり、ほかにも家族や友人にとって自分の発話がどのように聞こえるかを体験したりできる。相手に伝える工夫をするのもコミュニケーションの楽しさだとすれば、工夫する方法を増やす意義はある。つぎに、聴力図の差から聞き取りづらさを再現するアプローチを体験してみよう。
異なる聴力図を体験する
さて、また実験の時間だ。今回使うのは以下のノートブックになる。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/hearing_loss_simulation.ipynb
まずはデータをさっと作ってみよう。気合いでPanasonicの「聞こえのかんたんチェックと難聴のレベル」を測定するサイト(2)が引用している『よくわかる難聴』 (柏野, 2007)からデータを年代ごとに打ち込む。心を無にすれば5分で終わる。その結果が図3になる。この図を用いて、たとえば30歳にとっての80歳の知覚をシミュレーションする。
さきほど説明した通り、聴力図の聞こえの差を考慮してスペクトログラムを補正する。スクリプトではスペクトログラムを作成した後に、0–125, 125–250, …4000–8000Hzのそれぞれでデシベルを考慮した形で周波数を減衰させている。ただ、これは処理の前後をみた方がわかりやすいと思うので、まずは筆者が「日比谷」と「渋谷」と発した際のスペクトログラムを図4の左右に示す。
見る人が見れば、どちらが渋谷かはすぐにわかる。というのも、渋谷のsの音は右に示してあるように、上下幅広い周波数帯に広がるからだ。それに対して日比谷では広がっていない。ただし似ている点もあって、最後の方はほとんど同じ形に見える。それもそのはずで、その部分は「や」の音を示しているからだ(3)。さて、高周波数の聞こえが減衰するとどうなるのだろうか。
つぎに減衰させたバージョンを図5に示す。確かに、4000–8000Hzのところが大きく減衰してほとんど確認できない。2000–4000Hzの部分も元と比べると薄くなっているし、そもそも全体として色が薄くなっている。これは30歳の人が80歳の人の聴力を体験するために各周波数帯で音を減衰させた結果だ。
さて、この2つを比べてみて何かわかるだろうか。まず1つ、高い周波数の部分が削れたことによって「渋谷」に顕著だった、上下幅広い周波数帯に広がるsの特徴が見えなくなってしまっている。したがって、見た目ほどではないが /s/らしい部分が消えてしまっているので日比谷の/h/や他の子音と区別がしづらくなってしまう。もう1つは下のほうはあまり影響を受けていないことで、母音はそもそも音が大きいのと周波数帯がsと比べると低い位置にあるので、高周波数が聞こえにくくなる影響は比較的少ないと言える。しかし、「フラット型」と呼ばれる全体的に聞こえづらくなるタイプではこれもまた聞きづらくなる。
ノートブックでは、自分の世代とシミュレーションしたい世代を選択することで、音の聞こえの低下を体験できるようにした。ただ注意点として下の世代の聞こえはチェックできなくしている。もともと聞こえやすさの差を正の値でとってその分だけ音を減衰させているのだが、その逆は責任がおえない。というのも、下の世代と比較すると差が負の値になるので音を増幅することになる。ノートブックの仕組み上、音の大きさは制限されるが念の為その比較ができないよう保証(assert)した。
ノートブック上では、年齢を指定して減衰させる元の音も自由に録音できるようにしている。渋谷と日比谷だけでなく、握手や拍手なども実際に録音してみて、どのように聞こえるか試してみてほしい。
それにしても、いろいろと考えたいことは多い。というのも、高周波数帯の聞こえが減衰して渋谷の摩擦音がなくなるのはわかるのだが、それは「渋谷を日比谷と聞き間違える理由」にはなっているが、「日比谷を渋谷と聞き間違える理由」にはなっていないようにも思える。ただ、よく考えてみると高周波数帯が聞こえづらくなった人にとってはすでに渋谷に高周波数帯の音はないのだ。しかし、さまざまな情報をうまく使ってコミュニケーションをとっている。こういうところでも筆者は人間の面白さを感じる。
実際に聞いてみてもらうとわかるのだが、静かな環境では仮に高周波数帯を削っても、意外と聞きとれたのではないだろうか。もちろん、現実では雑音があるのでこううまくはいかないのだが、音だけでも前後の子音や母音の音の情報が残っていたりする。これが音の冗長性だ。冗長性というと、冗長という単語からネガティブな意味を持っているように聞こえるが頑強性とも言える。つまり、雑音に強い仕組みになっているのだ。
いくつか例をみてみると、会話している時に急に大きな雑音(クラクションや蚊を叩く音など)で話していた音声がかき消されても、音の聞き取りには問題がない。これは音自体が前後の音の情報を持っているからだ。実際に誰かが話している声を録音して、ある短い区間をノイズで置き換えたとしてもほとんど問題なく音を聞き取れる。面白いのは、/k/や/t/といった子音を除去したとしても、直後の母音の特徴だけでそれなりにどの調音器官を使ったのかくらいは(つまり軟口蓋の/k/なのか歯茎の/t/や/s/なのか)判定できる。
また、音の知覚が他の感覚も利用しているのも音声知覚の頑強さの助けとなっている。その代表はマガーク効果だろう。田中章浩研究室で作成された『目で聞く音!?マガーク効果』という動画(4)をみると、かなり驚けると思う。これまでマガーク効果の影響を受けなかった人も、ぜひ一度見てほしい。人の音声知覚が不思議に満ちていることを共有できるはずだ。
以上のように、特定の周波数の聞こえが減衰すると摩擦音が聞き取りづらくなることを視覚的にも確かめられた。それでは単語の意味はどう関係しているのだろうか。
「聞き間違えない国語辞典」と戦略
つぎのトピックに移る前に1つ、ここで個人的に面白いと感じた取り組み「聞き間違えない国語辞典」を紹介したい。通常、難聴には補聴器と人工内耳といった聴覚補償機器が用いられる。それに対して、この三省堂とパナソニックの共同プロジェクトには2つの観点から新鮮味がある。まず1つ、なにより目を引くのは図6に示すフォントの開発だ。ひらがなを単位とした異聴を表現しており、冒頭で紹介した渋谷と日比谷の例も取り上げられていている。
もう1つは、周囲の人の理解を促して(あるいは本人も含め)状況を改善するというところだ。これは既存の聴覚補償と競合するアプローチではなく、併用できる点に強く価値を感じる。この点はプロジェクトが“Talking Aid Project”と呼ばれている点からもわかる通り、Hearing aidと呼ばれる補聴器に対する相補的な役割を期待している。補聴ではなく補話とでもいうべきだろうか。例として、渋谷と日比谷のケースで言えば、「ハチ公のある渋谷」や「千代田区の日比谷」などとつけくわえて言い換えると聞き取りやすく、つまり伝えやすいという(5)。
相手に意図を伝えるのが言葉の役割なら、これは話し手にとっても確かに問題であるはずだ。でもこうした問題は問題であることに気づきづらい。もちろん通常の聞き間違いが個人の経験によるので、異聴の個人差の全てがフォントにまとめたようになるわけではない。でも、まず不思議なフォントを公開し、人々が問題を知って対話する機会を生むという点で魅力的な試みだ。
さて、この単語のペアはどのように選ばれたのだろうか。今でも参照できる資料(6)によると、以下の手順により、加齢により聞き取りづらくなる言葉のペアは以下の手順で特定された。
1. 三省堂の大辞林、312億通りの組み合わせを列挙
2. 加齢により聞き取りづらくなる音・科学的に似ている音の組み合わせを解析
3. 1,500,000組の聞き間違えやすい言葉を抽出
4. 聞き間違いのパターンごとに聞く人に優しい話し方を提案
a. 握手と拍手は手を握る・手を叩く
b. 加藤さんと佐藤さんはフルネームで呼ぶ
c. 渋谷と日比谷はランドマークなどと共起させる
これで特定された単語のうち、428語のフォントを作成することで図6に示したような不思議な表現となる。ただ、現状ではプロジェクトにアクセスできないし、実際の細かい手順も公開されていない。魅力的なアプローチなだけに、自分の手でも動かしてみたい。そこで、工夫してつぎに再現してみよう。
参考文献
立木, 孝. (2007). よくわかる難聴. 金原出版.
Gagne, J. P., & Erber, N. P. (1987). Simulation of sensorineural hearing impairment. Ear and hearing, 8(4), 232-243.
(1) https://news.panasonic.com/jp/topics/153219
(2) https://panasonic.jp/hochouki/deafness/check/
(3) ちなみにこういうスペクトログラムから音を推定することを「スペクトログラムリーディング」と呼んだりもする。
(4) https://www.youtube.com/watch?v=gTYzuJ35yBo
(5) 筆者の実家は稲城というエリアなのだが、高確率で「稲毛」と間違えられたし今でも「へー、稲城ってどこあるの?」と聞き返される。これを考えると、最初から「調布の隣の稲城」と言い換えるほうがよいのかもしれない。
(6) https://www.youtube.com/watch?v=eyCqi6q1HH0
-
- 2023年11月07日 『5. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:音脈分凝とフィードバック 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. NTTによるIllusion Forumのページ画面。上で紹介したのは「音階の錯覚」のページだが、「音脈分凝」というキーワードで探すと、いろいろな例を体験できる。
図2. 左と右はともにABAという3音が4回連続している。Aが1000Hz、Bが1100Hzになる。AとBの音の間隔は50ms(0.05秒)になっている。
図3. Aが1000HzでBは2500Hzになっている。音の間隔は図2と同じである。
図4. 「ランタイム」タブから「すべてのセルを実行」を選択する画面
図5. 手順3でピッチの調整をおこなう画面
図6. 手順4で共鳴を操作する画面
ここまで見てきたホーミーに関する情報は3つに分けられる。まずは、ホーミーと呼ばれる喉歌の一種の概要と文化的な背景であり、これは山田 (1996)から引用した。そして喉歌を再現するのに必要な手順(声道の形や音程の調整)を『音のなんでも小事典: 脳が音を聴くしくみから超音波顕微鏡まで(1996)』を編集して共有し、最後に必要な情報として母音やスペクトログラムを示した。
つぎに扱うのは「なぜ音が2つに聞こえるのか」という話と、プログラミングを使った練習方法だ。前回は、最後の部分で筆者の喉歌のスペクトログラムを見た。特定の周波数の共鳴を維持しつつ、他の共鳴する周波数を上下にコントロールしていることがわかった。そしてこれは、ホーミーの手順4である「舌をすこしずつ前後に動かしてメロディー音を変える」に対応している。舌を前後に動かすことで、共鳴する音が部分的に変わっているのだ。その結果が、前回のスペクトログラムになる。
あの音(あるいは他のホーミー、ホーメイ、アンナ歌手の声)を聞いてわかったことは、地声の裏で共鳴する高い音が独立して聞こえるということだ。ここで改めて「独立して聞こえる」という表現の意味を考えてみよう。そのために、音脈分凝(おんみゃくぶんぎょう)という概念をつぎに説明する。
音脈分凝は音脈を分凝することだが、そもそも音脈とは(そして分凝とは)なんだろうか。近い概念に「音源」というものもあるので、それとは区別しなければならない(柏野, 2007)。ホーミーの例で考えると、あの音の音源は振動を生み出している声帯になる。それに対して「音脈」とは、1匹の動物や1つの機械から発せられているように聞こえる(知覚される)音のつながり(=脈)を示す。だから2つの声が聞こえるホーミーでは、1つの声帯から発される音に対して、2つの「音脈」が与えられることになる。
概念をより細かく分けるために、音源と音脈に関する別の例も考えてみよう。この目的にはNTTのIllusion Forum(1)にある「音階の錯覚」のページが面白い。音源と知覚のズレの説明には、左右の音源を分けられるイヤホンが必要になる(1つのスピーカーでやっても意味がない)。ここではダイアナ・ドイチュの発見やチャイコフスキーによる交響曲の一節(交響曲第6番「悲愴」第4楽章)を例に、2つある音源と音脈のズレを体験できる。錯聴を含め、さまざまなモダリティ(感覚器)の錯覚を公開しているので、ぜひ一度体験してみてほしい(図1)。
ここまで文字の説明が多くなってしまったので、図や音による説明に移ろう(2)。前回共有したColabの資料(3)の「音脈分凝」を見てもらうと、図2と図3に示す2つのスペクトログラムがあるのがわかる。両方ともABAという音の組み合わせを4回繰り返している。どちらの図でもAは低い音程でBは高い音程であり、このABAが4連続で提示されるので、低高低、低高低...という音が鳴る。
図2が示す音では、馬が駆ける「ピポパッ、ピポパッ、ピポパッ、ピポパッ」というような音(ギャロップのリズム)を期待するし、実際にそう聞こえる。これが意味するところは、図2に示した音を我々は一連の音脈として知覚するということだ。つまり、音脈は分凝されない。
それに対して図3が示す音は、どうだろうか。Bの音が2500Hzと、先程と比べると高くなっているのがポイントだ。この図が示す音でも、ギャロップのリズムは聞こえるだろうか。
だが、実際に聞いてみると図2の右の図は「ポッポッポッポッポッポッポッポッ」という低い音の裏で「ピッピッピッピッ」という高い音が鳴っているように聞こえる。つまり、2つの音脈があると分凝して知覚する。これが音脈分凝の例になる。
前回の図で示した喉歌のスペクトログラムでも同じメカニズムが機能している。つまり、わたしたちの耳が地声の音と、強調されて独立して動く周波数を別の音脈と知覚した結果、音脈分凝が起きたということになる。
ちなみに、この音脈分凝はBregmanの聴覚情景分析(auditory scene analysis)という用語に関連して出てくる。聴覚情景分析とは、耳から入ってくる音響信号の手がかりから「何がどのように鳴っているか」を群化(grouping)する情報処理過程のことである。その過程で、我々は複数の音脈を分凝している、ということになる。上で紹介したNTTのサイトの他にも、『聴覚の文法』(中島ほか., 2014)ではいろいろな聴覚における現象と解釈を与えられている。
さて、これでだいたいの部分の説明は終わったように思える。喉歌に必要な手順や用語の説明、なぜ音(音脈)が2つ聞こえるのか、そしてこれには音脈分凝という機能が貢献していることを述べた。それでは最後に、リアルタイムにフィードバックを得ながら練習を試みよう。
ホーミーのフィードバック
ここからはGoogle Colabのノートブックを使って練習していこう。可視化をすると練習が容易になると思うので、オンラインで利用可能なアプリケーションも用意した。ぜひ遊んでみてほしい。また、スペクトログラムやHzといった概念に触れて、慣れてほしいという気持ちもある。しかしながら、スマホやタブレットでは動作しない。冒頭でコードを動かせなくても9割楽しめると述べたが、ここがコードを動かせないと楽しめない1割になる。
さて、基本的な方針としては、スペクトログラムをリアルタイムに描画しつつ、その時点の声の高さも表示できればいい。ここでは簡単に、0.5秒ごとに音声を録音し、音の高さとスペクトログラムを描画する機能を作ってみた。最初は空白の音声2秒を解析し、その後ろに録音した0.5秒のスペクトログラムとピッチ、つまり音の高さを描画する。その機能を下のノートブックに作っておいた。この間隔は自由に調整できる。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/khoomii_feedback_minimal.ipynb
上のURLにアクセスすると Open in Colab というボタンがあるのでクリックする。すると「khoomii_feedback_minimal.ipynb」という名前のファイルがColabで開かれる。画面の右上を見てGoogleアカウントにログインしていることを確認した上で、「ランタイム」タブから「すべてのセルを実行」を選択する(図4)。Googleが作ったものではないと警告されるので、筆者を信頼して「このまま実行」を選択する。マイクの許可を求められるので、「許可する」を選ぶ。
すると必要なライブラリをインストールしたり、必要な関数を定義したり、実行したりするスクリプトだ。一番大事なのは、一番下にあるfeedback(dur=2, res=0.5, figsize=(2, 3))
と書かれたコードセルだ。うまく機能している場合、録音した音声を0.5秒分ずつリアルタイムに描画しているのが見えるはずだ。うまく機能しない場合、トラブルシューティングとしてサポートページとコラムを参照してほしい。
さて、機能している場合はリアルタイムといってもすこし遅れ気味ではあるのだが、ともかく何か声をかけてみるとスペクトログラムと青い点が見える(図5)。スペクトログラムの周波数は左側の縦軸、ピッチの周波数は右側の縦軸に示しているので、手順の1と2を実行した後の手順の3は青い点が200Hzのすこし下に来るように調整すればよい。
1. 歯の間を指2本分くらい空け、口先をウの形にする。
2. 舌を立て、 舌を軟口蓋と硬口蓋の間ぐらいの位置に近づける。
3. ピアノの中央ドの音のすぐ下のソ(G3)の音ぐらいの高さで「イ」のつもりで発声する。
個人的に共有したいコツとしては、指2本くらいとあるが、あまり開けても疲れるので1本、あるいは1本半程度でもよいということだ。また、あまり声を大きくしすぎても喉が疲れるし、近隣住民を心配させてしまうので、マイクが拾う程度の声量でよい(隣人が急に195Hzで叫び出したら怖い)。そもそもメカニズムとして声を大きくすればよいという話でないというのも理由の1つだ。もしこの時点で1000Hzから2000Hzの間に共鳴による帯が見えているのなら、手順4に進む。
手順4ではフィードバックを見ながら舌を前に倒してみよう(図6)。舌を前に押し出すと言ってもよいかもしれない。舌は口蓋に触れていなくても問題ない。この時、ピッチのコントロールが外れて195Hz周辺から大きくズレないようにする。前に倒すと、音脈分凝により高くなる音脈を知覚できるはずだ。
4. メロディー音が聞こえたら舌をすこしずつ前後に動かしてメロディー音を変える
これで地声の裏で共鳴するメロディーが聞こえれば完了だ。聞こえない人を励ます目的で怖い話をすると、ホーミーはシャーマニズム的な側面を持つので「間違った方法でホーミーを歌うと、病気になったり、早死にしたりする」そうだ。個人的には今回練習したものは喉歌の一種でありホーミーではないと想定しているので、セーフだと思いたい。
うまくいった人には共鳴をコントロールする楽しさを共有できたのではないだろうか。下から2番目の帯以外が鳴っていたとしても、要は特定の帯のみが動いていれば分凝できるので問題にはならない。口の形を変えて、隣人を怖がらせない程度に試してみてほしい。
ここまでの話で、人が声を発する過程や声道にあるパーツの名前、そしてスペクトログラムといった概念にも慣れていただけたのではないだろうか。つぎにようやく、聞き間違いの話に移る。これまでの話に上がってきた単語を数字で表現する方法や音声、スペクトログラムといった話の組み合わせになるので思い出しながら読み進めてほしい。
コラム:スクリプト作成に関する雑記
今回共有したスクリプトに関して補足する。かなり雑談よりの技術的なメモになるが、トピックとしては、ラグが発生する理由となぜラグが発生しない手法を取らなかったかの2点だ。
まず、ラグが発生する理由はスクリプトの中でJavaScriptを呼んで録音しているのだが、これがボトルネックになっている。Google Colab上ではざっと0.5秒あるかないかのラグがあり、これがリアルタイムの描画を妨げている。非同期で投げればなんとかなるかとも思ったが、コードが複雑になるのとそもそもマイクが一つの状態で録音を複数実行できるかが怪しかったので、ラグを受け入れる方針とした。
実はほかにもラグを発生させそうなポイントはたくさんある。なかでもグラフ描画を真っ先にラグの発生原因として疑った。そこでスペクトログラムのサイズを小さくするようにデータを少なくしたり圧縮したりしたが、描画速度向上への貢献は軽微だった。こちらも共有するコードが複雑になる度合いとのトレードオフを踏まえて、結局は削除した。
一応、別のラグが発生しない手法もあるにはある。Pythonでこうしたアプリケーションのプロトタイプを作るのに向いているライブラリとしてStreamlitやgradioがある。慣れているStreamlitを使ってリアルタイムの描画を実行するアプリケーションを作れるが、今度は共有方法が難しい。というのも、Streamlit Cloudというサービスを使えば共有できるが、こちらは身内への共有向けで大量のアクセスを想定していない。また自分でサーバーを立てるのもいいが、こちらは費用がかさんでしまう。変わり種として、Google Colabからサーバーを立てるというのもありはする。ただこちらにも問題が2つあった。
問題の1つは依存しているライブラリである streamlit_webrtc の挙動が環境によって不安定になることだ。こちらはGoogle Colab上では大した問題にならないかもしれないが、その他のライブラリも安定するとは限らないのでできるだけ依存ライブラリーは減らしたい。もう1つの問題は、Google Colabでサーバーを立てるという方法にハック感があり、いつまで持続できる方法かわからず(トンネルなどの外部の要素に強く依存する。Google Colabだけならまだしも、こちらまでは担保できない)、また手順がすこし多くなるという問題があった。
以上の理由から、今回は多少のラグがあってもGoogle Colab上でカチカチとゆっくりフィードバックを与えるスクリプトでよしとした。正直、スペクトログラムもピッチも既存のアプリケーションがあるにはあるが、なかなか同時に見るという目的を満たせず、また縦軸のスケールで気に入るものがなかった。車輪の再発明は避けたいものの、こうした時にGoogle Colabで共有できるのは便利だ。文明と巨人には足を向けて寝られない。
なんにせよ、喉歌のような技能の習得の際には、実技に対する早いフィードバックがあると修正に役立つ。もし今回の話で喉歌ができた人が増えたなら、またホーミーを通じてモンゴルの文化や歴史に興味を持ってもらえたなら、非常にうれしく思う。
参考文献
柏野牧夫. (2007). 聴覚情景分析の脳内メカニズム. 計測と制御, 46(6), 472–478.
中島祥好., 佐々木隆之., & 上田和夫. (2014). 聴覚の文法. コロナ社
(1) https://illusion-forum.ilab.ntt.co.jp/list-icon-auditory.html
(2) ここでの説明はhttps://illusion-forum.ilab.ntt.co.jp/timing-judgment-and-streaming1/index.htmlでも体感できる。
(3) https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/speech_analysis.ipynb
-
- 2023年10月31日 『4. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:ホーミーから眺める音声と知覚 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. Google Maps 上では「内蒙古自治区」と表示されている。 左上の点線で示しているのはトゥバ共和国(Tuva Republic)になる。
図2. 口の中の図。舌で硬口蓋と軟口蓋の境界を探って欲しい。ホーミーの手順2では、頑張って立てて口腔で二つの部屋を作ることになる。口蓋帆(はん)で声道をコントロールする。
図3. 特定の周波数を聞きたくなった時に筆者が利用するウェブアプリケーション
図4. 筆者による「あい」のスペクトログラム。0.5秒過ぎから2秒まえくらいまでに「あい」と発話した。「あ」の部分では1000Hz周辺の成分が濃くなっている。これは「あ」を調音する際の声道の形が共鳴する周波数を示している。
図5. 筆者による喉歌のスペクトログラム
ここまでは語彙を中心に、聞き間違いの話で必要になる「言語を数字で表現する」という話を共有してきた。ここからは、音にまつわる不思議な話に移りたい。
音といえば、担当している講義で以前「そもそも声とは何か」を説明したい場面があった。でも欲を言えばすこし変わった例を使いたくて、思い切って選んだのが「ホーミー(Xöömij)」だった。まず知っている人が少ないから「なんだそれ」となるし、耳にしても「なんだこれ」となる。さらに、メカニズムを知って、挙げ句の果てに自分もできるようになればテンションが上がること間違いなしだ。言語学を専攻する友人に説明したところ2人とも鳴らせたから、それなりの再現性はある。
変わった例を使いたかった理由は、学生の注意を引きたかったからだ。というのも、いきなり「人が母音を調音する時は声道の形状を変化させて共鳴する周波数を調整して〜」や「軟口蓋破裂音は〜」、さらに「聞き手は蝸牛で周波数を分解して〜」などと言い始めたら、そっぽを向かれてしまうかもしれない。そもそも軟口蓋破裂音なんて名前が物騒で恐ろしいし、破裂させてたまるかと思うだろう。
以下に、ホーミーの概要と背景、そしてメカニズムを説明していく。その過程では、上でまくし立てた「母音」や「硬口蓋」、「破裂音」や「蝸牛」といった用語や、音声の調音や知覚、スペクトログラムという概念も並行して共有できると信じている。その後はもちろん、これを読んでいる方もホーミーが属する喉歌を体得できるようになることを期待して練習パートを用意する。可視化をすると練習が容易になるので、オンラインで利用可能なアプリケーションも用意した。ぜひ遊んでみてほしい。
ホーミーの概要と文化的背景、音声について
さて、ホーミーと呼ばれる歌唱法は、奏でられる不思議な音色で有名だ。まずは動画サイトで“khoomii”と検索して聞いてみてほしい。権利関係がクリアにされている動画が出てくるかはわからないのだが、男性(これには意味がある)がダミ声を発しつつ、その裏で「ヒョロロー」という口笛のような音が聞こえる動画に遭遇すると思う。
筆者がホーミーに出会ったのは、内モンゴル自治区で開かれた先輩の結婚式だった。内モンゴル自治区は図1に示す地図の中央を東西に占めている。牧畜が盛んで、筆者が訪れた際も広大な草原をさまざまな動物が闊歩していた。それまで動物に道を塞がれた経験がなかったので、驚いたのを覚えている。他にもゲルで寝泊まりしたり香辛料の効いた羊肉をいただいたりしたが、その中でもやはりホーミーの音色のメカニズムは言語に興味のある人間として気になって仕方がなかった。
ホーミーは喉歌(のどうた、Throat-singing, Overtone-singing)の一種でありモンゴルを含む国と地域で伝承される。伝承の過程やホーミーの意義については諸説あり、山田(1996)が紹介するところにはシャーマニズムとの結びつきや家畜の授乳などのほか、歌うこと自体の楽しみもあるという(1)。なお、図1の左上に示すトゥバ共和国では「ホーメイ」という名で伝承されている。
民族音楽以外の喉歌としてはアンナ=マリア・ヘーフェレのような歌手によるものもある。こちらは動画サイトで“Anna overtone singing”と検索すればすぐに聞ける。メカニズムのヒントもAnna歌手のMRIバージョン(2)を見るとわかりやすい。MRI(Magnetic Resonance Imaging)とは磁石と電磁波を利用して、人体を断面(縦・横・斜め)で画像表示できる方法だ。断面を見られるから、喉歌が始まる動画の30秒あたりを見ると舌がのけぞっているのがわかる(3)。
なるほど、舌をのけぞらせると同じような音が出るのか。そうと思って自分もやってみた。しかしあまりにも出ないので、口の形を変えてみたり寝っ転がってみたりしたが、再現できず舌の筋肉がつりそうになるだけだった。限界を迎えたところでようやく、どうやら単に舌の形を変えればいいというわけではないらしいことを徒労感とともに察した。
そこで手当たり次第に家にある音声周りの本を探してみたところ、『音のなんでも小事典』という書籍にホーミーの記述があり、手順が書いてあった (音のなんでも小事典: 脳が音を聴くしくみから超音波顕微鏡まで, 1996, p.112)。手順をすこし編集して以下に記述する。
1. 歯の間を指2本分くらい空け、口先をウの形にする。
2. 舌を立て、舌を軟口蓋と硬口蓋の間ぐらいの位置に近づける。
3. ピアノの中央ドの音のすぐ下のソ(G3)の音ぐらいの高さで「イ」のつもりで発声する。
4. メロディー音が聞こえたら舌をすこしずつ前後に動かしてメロディー音を変える。
おそらく「軟口蓋」や「硬口蓋」という用語を初めて目にした読者がほとんどだろう。でも用語を知っている筆者は、実際に上の「メロディー音」が聞くことができ、さらに調整もできて感動した(4)。上で紹介した本では、すでに用語の説明が終わっているページでの共有だった。だからここでも、まずは口の構造から説明しよう。音の研究者や言語聴覚士を目指さないのなら特に覚える必要はないと思うが、すくなくともホーミーのためには必要だ。自分の舌を使って確認してみてほしい。
用語の解説
口の構造を知るにはまず断面図を見なければならない(図2)。筆者が描いたラフなイラストで恐縮だが、まず図の左から唇、歯、歯茎(しけい)、硬口蓋と続く。図のコメントで補足している通り、舌が反る限界の奥に、ブニブニとした部位があり、これが軟口蓋だ。口蓋とは口の蓋で、歯茎よりの硬い部分が硬口蓋、柔らかい部分が軟口蓋になる。がんばって舌を動かして感触を確かめてみてほしい。
ここで1つ、確認のための別のアプローチも共有してみる。ゆっくり、「タ」、「キ」、「ク」と発声しようとしてみてほしい。タ、キ、ク、だ。それぞれを発声しようとする瞬間、舌がヌッと接触する部分があって、それぞれが歯茎、硬口蓋、軟口蓋に対応している。これで先の手順の「1. 歯の間を指2本分くらい空け、口先をウの形にする。」と「2. 舌を立て、 舌を軟口蓋と硬口蓋の間ぐらいの位置に近づける」は理解できそうだ。
手順の3は実際に「G3」か「ソ」、195Hzの音声を聞くと良いだろう。おそらく“online tone generator”と調べると、任意の周波数を設定して再生する機能を持つサイトが出てくるので、つまみを195くらいに設定すればよい(図3)。その音程で、手順の1と2を実行した状態で同じ高さの声を出してみよう。
この急に出てきたHz(ヘルツ)という記号は、音の話をしている文脈なら音の高さを示すと考えてもらって構わない。これを説明するために、まず喉に手を当てて「あ」と言って見てほしい。音が鳴ったとき、みなさんは喉の声帯と呼ばれる部分で1秒間に100から300くらいの振動を発生させた。1秒間に100回振動した場合、その音の高さを「100Hzの音」と表現できる。1秒間に200回なら200Hzだ。この回数が多くなると、私たちは「音が高くなる」と感じる。
音に関連して、浜松にある科学館の「みらい〜ら」で見たおもしろい展示を紹介する(5)。みらい〜らには光ゾーンや力ゾーン、宇宙ゾーンなどがあり、さまざまな現象を科学的に見ることができる(6)。音ゾーンも他のエリアと同様に工夫が凝らしてあり、「ノイズキャンセリング」の説明でも音が振幅を持つ波(つまり音波)であることを体感できる工夫があった。2つのスピーカーから同じ周波数の、ただし真逆の形の波を与えることにより波が打ち消しあって音が聞こえなくなることが直感的にわかる展示だ。原理は知っていたが、これは面白かった。
こうした展示や上の喉に手を当てて振動を感じてみればわかるように、このソの音(G3)はだいたい195Hzくらいの振幅をもつ波だ。手順3で音を出すとメロディー音が聞こえるので、手順4で舌を前後に動かすらしい。ただ個人的に強調したい点は、むしろ聞こえない場合でも舌を前に押し出すと、G3の地声の裏で鳴る高いメロディーの音程が高く変化するのを感じやすくなる気がすることである。
これでできる人もいるかもしれないし、もしできたなら感動してもらえるはずだ。書籍だと手順3は「ダミ声」であることを指定されており、そちらのほうがホーミーに近い。ただ個人的には難易度が高まってしまう気がしたのと、喉を痛めそうな気がしたので、上の手順では省いた。したがって厳密にはホーミーではなく、単に喉歌の一種になる。
できない場合は諦めず、もうすこし音声への理解を座学とプログラミングで深めてみるアプローチをとってみよう。ホーミーと音声のメカニズムを考えるには、上で紹介した調音器官のほかにも母音やスペクトログラムなどの概念があると便利だ。それぞれを順に見ていきたい。
母音とスペクトログラム、喉歌
日本語には「あいうえお」が示す5つの母音があり、実は信じられないくらい高度な操作をみなさんは(というより人間は)している。まず、声を出すときは喉にある「声帯」と呼ばれる2枚のヒダを空気の流れをコントロールして振動させ、上で説明した音(=振動)を発生させている。この音を声道(図2の斜線部分)で「共鳴」させている。
共鳴についてはリコーダーを例に考えてみよう。思い出してみると、リコーダーは指で全ての穴を塞いだ時は低い音が出た。管が長ければ低い音、短ければ高い音になることを意味している。つまり、リコーダーでは指で塞ぐ穴を選択することで菅の長さを調整して、異なる高さの音を出していた。長さだけでなく形でも共鳴の性質は変わり、「あいうえお」で作る声道の形は「あいうえお」と認識される周波数を強めている。
ある音においてどの周波数が強まっているかはサウンドスペクトログラム(声紋)で音を見ればわかる。人によっては「音を見る」という表現に驚くかもしれないが、母音は異なる周波数成分を持っている。ごく短い時間幅における周波数成分を細かい帯域に縦軸に区切り、時間変化を横軸に書き出してみる。下の図は筆者が「あい」と言ったときのスペクトログラムだ(図4)。横軸からわかる通り、「あ」と「い」はそれぞれ0.5秒ずつくらいだが、色が濃くなっている部分が異なることがわかる。これはつまり、縦軸が示す周波数で異なる成分が強いことを示している。
上でつまり「ア」と発声したとき、その音自体は複数の周波数を成分として持つ。声道の形状で含まれる周波数成分は変わる。すなわち、声道の形状を変えると音色が変わる。「イ」や「ウ」も異なる周波数成分を持つ。このコントロールの絶妙さに筆者はいつも「人間ってすごいなぁ」と感動する。なお、この描画もGoogle Colabのノートブック上で実行できる。ノートブックの前半には3秒間の録音と再生、描画を実行できるスクリプトがあるのでぜひ試してみてほしい。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/speech_analysis.ipynb
これが「音をみる」ということだ。異なる周波数の部分の成分が強くなっていることがわかり、これは異なる音が共鳴していることを示している。したがって、ホーミーもスペクトログラムを見れば、どのような成分が混ざっているかが一目瞭然になる。それでは喉歌のときのスペクトログラムはどうなっているのだろうか。筆者のなんちゃってホーミー(喉歌といった方が安全だ)をのケースを見てみよう(図5)。
図4で示した母音の様子とはずいぶんと違っている。図4では周波数の帯が「あ」と「い」で異なっているが、図5では下から2番目の帯だけが独立して動いている。これはつまり、ホーミーの手順3で鳴らしているG3(上の喉歌では力量不足で192Hzくらいになってしまっている)の倍音の共鳴を、手順4により特定の周波数帯を固定したまま操作していることになる。
1番下のバンドは一定なのだが、2番目のバンドだけが上下に動く。つまり、2番目のバンドが示す周波数の部分だけが共鳴するように声道の形を変えてやるのだ。そして共鳴するのは基本周波数の倍音だ。したがって、手順の1と2、4は声道、3が基本周波数の制御になっている。以下の説明、すこしわかりやすくなっただろうか。
1. 歯の間を指2本分くらい空け、口先をウの形にする。
2. 舌を立て、舌を軟口蓋と硬口蓋の間ぐらいの位置に近づける。
3. ピアノの中央ドの音のすぐ下のソ(G3)の音ぐらいの高さで「イ」のつもりで発声する。
4. メロディー音が聞こえたら舌をすこしずつ前後に動かしてメロディー音を変える。
しかし、なぜ音が2つ聞こえるのだろうか。聴覚においてそれぞれが別の音源として解釈されているのだが、これには音脈分凝(auditory stream segregation)という人間の機能が関係している。それではつぎは、音脈分凝の説明とリアルタイムのフィードバックでホーミーを練習する環境を共有しようと思う。
参考文献
音のなんでも小事典: 脳が音を聴くしくみから超音波顕微鏡まで (日本音響学会). (1996). 講談社
山田, 真司. (1996). モンゴルの伝統的歌唱法 「ホーミー」 についての聞き取り調査と知覚実験. 藝術, 19, 133–139.
(1) こちらも大阪藝術大学がオンラインでアクセス可能な状態でアップロードしているので、興味のある読者は読んでみてほしい。https://www.osaka-geidai.ac.jp/assets/files/id/830
(2) https://youtu.be/YIUvX7hebBA?si=TC7CrLaLwvw487e-&t=30
(3) 国立台湾大学とのワークショップに参加したことがあり、その中で超音波を使って口の中を見る手法を経験したことがある。そこで自分が喉歌を調音したときも同じようになっていた。
(4) これらの用語を知っている人向けに補足したい点は、声を出し始めたタイミングより肺の空気が少なくなってきて、音が弱々しくなってきたタイミングの方が、メロディー音がよく聞こえるということだ。また、メロディーを感じるのは舌を前に倒していってメロディー音が変化したときだった。
(5) https://www.mirai-ra.jp/floorguide/sound/2009-info/
(6) 宇宙ゾーンにある「スイングバイ」は星の重力を直感的に理解できる資料であるのだが、ちびっこが独占しているので大抵は寛大な気持ちで歯ぎしりしながら我慢することになる。浜松には楽器博物館もあるので、楽器が好きな人はぜひ足を運んでみてほしい。
-
- 2023年10月24日 『3. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:魔法世界の裏側は博物館? 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. 現在も、筆者が小学生だったころの三軒茶屋駅のホームの雰囲気もすこし残っている。
図2. 渋滞する世界観にたたずむ守護霊
図3. 各文書を5000次元から2次元に変換してプロットした図。この結果は手順の初期値に依存するため安定しないことに注意したい。
図4. 各単語のTF-IDF値に対する係数を示す。
小学生のころに『ハリーポッターと賢者の石』の映画や物販に連れて行ってもらった記憶がある。あの世界観には不思議な現実感があって、9と4分の3番線も世界のどこかにあるんじゃないかと期待していた。なんなら当時、世田谷線の三軒茶屋駅のホームがレンガ造りで雰囲気が似ていて(図1)、壁に突っ込みたくなったこともある。突っ込まなかったことから考えると、小学生のころのほうがまだ自制心があったのかもしれない。
あの魔法の世界に現実感を与えた技術の裏側は、としまえんの跡地にできた施設「スタジオツアー東京」で見ることができる。ハリーポッターの映画を作成する過程を紹介しており、教育的側面とエンターテイメントのさじ加減が絶妙だ。
そんなスタジオツアー東京(以下、ハリポタツアー)、すこしばかりオープン前に議論を呼んだことがある。なにしろとしまえんという遊園地の跡地に建てられる施設だから、遊園地的な性質を持っているのではと考える人も多かった。公式の紹介文でも「エンターテイメント施設」と明言しているので(1)、いかにもディズニーランドのハリーポッター版を想像したくなる。でも、仮にそうだとすると問題になることが前から指摘されていた。
そこで、懸念されていた問題の概要と、実際に筆者が行って感銘を受けた点を共有した後で、「単語の分布で文書を表現・比較する方法」を見ていきたい。きっと多くの言葉に興味を持つ人にとっては新しい話題だし、言葉を数字で扱うと何がうれしいのか、すこしだけ共有できると信じている。
ハリポタツアーで懸念されていた問題には、としまえん跡地が「第二種住居地域」という「用途地域」に該当する点が関係する。用途地域では、何を建ててOKか・NGかが建築基準法で定められている。そして第二種住居地域のNGリストには、劇場や映画館、演芸場、展示場、遊技場が含まれる。ハリポタツアーは「博物館その他これに類する施設」とされているが、としまえんという遊園地の跡地にできる「エンターテイメント施設」がNGリストに該当しないのか、という懸念があった(2)。実際、ハリポタツアーの話をまだ行ってない学生が「開館」ではなく「開園」と表現しているのは耳にしたことがあるし、結構話題になっていた(3)。
この点に関して友人の一級建築士に質問したところ、施設が作られる際は周辺調査業務→依頼→設計→申請→申請許可→着工という段階を踏むところから説明してくれた。この「遊戯場か博物館か」という点は、設計のタイミングで役所に確認するが、もちろん用途地域に適していない遊戯場では通らない。これは施主にも明らかであるため、博物館の用途で申請する施設を建てることを事前に市役所と確認するそうだ。法律は多角的なとらえ方が出来るため、適合する解釈を役所と調整していくことになる。
ほかにも博物館法(4)において芸術や産業の資料の収集や保管、展示を「博物館」の定義に使っているので、映画という芸術・産業の資料の展示を前提として認められたのではないかとも話してくれた。こう言われてみると確かに博物館かもしれない。ただ、言葉として「開園」とか「エンターテイメント施設」と共起、つまり共に使われる概念が「博物館その他これに類する施設」と言われるのは、僕の言葉に対する感覚がもぞもぞした。ということで、予約サイトのチケット争奪戦に勝利し(1勝8敗)、実際に見学してみた。
当日、大江戸線の豊島園駅を降りて、7月の照りつける太陽を日傘で遮りながら、人の流れについていった。やはり第二種住居地域というだけあり、閑静な住宅街とまではいかないが、魔法使いのテーマパークがあるとは全く思えない。標識やベンチなどに残るとしまえんの面影を懐かしみながら歩いていくと、西武豊島線の開けた駅前に着いた。
そこはスタジオツアー東京の入り口に近い場所なのだが、北京料理とシアトル系喫茶を背景に鹿の守護霊がいて世界観が渋滞気味だった。こういうのも形容矛盾っぽくて趣深いが、日差しに耐えられないので写真を1枚とって進む(図2)。敷地内に入っても途中まではチケットは不要だから、魔法世界に関連したオブジェを眺める広場になっていて散歩している人も見える。
入館した第一印象は、思わず「入館」という動詞を使ってしまったことから察せるように「美術館や博物館に近いかもしれない」というものだった。館内左手にはショップがあり、右手ではツアーガイドの受付をしている。すこし早く着いたのでショップを回ってみても、作品に思い入れのある人なら思わず手に取ってしまうものばかりで、危うくツアーをすっぽかすところだった。
参加したツアーの冒頭も声優が挨拶する映像だ。概要としては、ツアーで映画制作の技巧を楽しんでほしいということだった。考えてみれば、この場で声優の顔を初めて見る人もいただろう。魔法の世界は当然フィクションだが、映画自体は現実の人間が作っている。単に映画の世界を体験できる施設だと思って来た人も、改めて気づいた事実にワクワクするのではないだろうか。
ツアーの内容に関して触れると未見の人のよろこびを奪ってしまいかねないので無難な範囲で述べると、映画にある架空の世界が現実から生まれる過程を学んだ。魔法使いが持つ杖の形には意図があり、劇中の大男が住む小屋の脇にある鉢が倒れているのもきっと同じだ。その意図を見せてくれるから、何かを作ることに関わる人間ならば必ず楽しめると思う。
総じて、非常に教育的価値の高い施設だった。映画をみるときに新しい観点を与えてくれるし、きっとほかのドラマやアニメの解釈にも「この食器は登場人物の性格を反映して選ばれたんだな」といった奥行きを与えてくれる。もちろん意味なんてないかもしれないが、消費者としての解像度は間違いなく上がる。少なくとも人の努力にまた1つ気づけるようになったので、それはよろこばしい。
結局、個人的には「博物館」といってまったく違和感を覚えないどころか、博物館にエンタメの要素をうまく混ぜ込んで収益性を確保した企画に脱帽する。でも話はもうすこしだけ続く。つぎにしたいのは言語の話で、人が持った印象や感想を分析して「これは博物館だ」という直感はサポートできるのだろうか。でも、出口で待ってほかの来場者に感想を聞くのも変だ。せっかく実りの多い一日だったのに、最後に挙動不審なメガネに「ア、アノ、フフ、チョットイイデスカ」など声をかけられたのでは台無しだ。大人しくデータを活用しよう。
TF-IDFとロジスティック回帰
さて、人々が持つ感想としてもハリポタツアーは「博物館その他これに類する施設」なのだろうか。この問いを考えるために、感想を数字で表す工夫をしてみよう(5)。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/haripota_museum.ipynb
まずはGoogle Mapsのレビューを眺めて、ハリポタツアーの感想を数十件得た(6)。博物館の例として思い浮かんだのは国立科学博物館や国立民族学博物館、属さない施設の例としては東京ディズニーランドやユニバーサルスタジオジャパン(USJ)がある。美術館などとの中間として思い浮かんだ例には「三鷹の森ジブリ美術館」がある。これらの施設で合計数百件の感想を均等に収集した。
つぎに感想を数字に置き換えるため、「TF-IDF」という表現を紹介したい。このTF-IDFを使うと、文書(ここでは感想)を語彙数の数字で表現できる。もし頻度の高い5000語まで考慮するなら、1つの文書は5000個の数字に置き換えて表現できる。前回は画像を1024個の数字で表現したが、今回は文書を5000個の数字で表現することになる。
ある文書XをTF-IDFに変換する際、まずは5000語のそれぞれで「TF」と「IDF」を計算していく。TF(Term Frequency)は、「この単語は、文書Xの中で何回出てきたか」を数える。もし「展示」が3回出てきたら3になる。IDF(Inverse Document Frequency)は、頻度の逆数なので「が」のような(他の文書も含めて)頻度が高い単語は逆に小さい値をとる。頻度の低い単語では高い値になる。
つまり、TF-IDFとは文書ごとに各単語で「この文書の中に何回出てきたか(TF)」を「この単語はどれくらい珍しいか(IDF)」で重みづけた値になる(表1)。
楽しい 長い 展示 行列 映画 … が 楽しい 展示 が... 1*小 0*中 1*大 0*中 0*大 … 1*小 映画 が... 0*小 0*中 0*大 0*中 1*大 1*小 長い 行列 が... 0*小 1*中 0*大 1*中 0*大 1*小
これで文書(感想)をTF-IDFという5000個の数字に変換できた。一旦ここで、データの様子を見てみよう。ここでもひと工夫する。もしそれぞれのデータが座標(x, y)のように2個で構成されるなら2次元の画面に描画できるが、5000個で構成されるなら5000次元も必要だ。そこで「UMAP(Uniform Manifold Approximation and Projection)」という手法を使う(紹介は門脇ほか(2019)など)。
UMAPは、データ間の「距離」や「関係」を考慮して、似たデータは近く、違うデータは遠くに配置していく。するとデータ間の関係を保持しつつ、2次元や3次元のデータに変換できる(7)。ここで5000次元のTF-IDFを2次元に圧縮すると、各文書を2つの座標で示せるようになる。
そこで作成されたのが以下の図3だ。あくまでもデータ間の距離や関係を保持しているだけなのだが、大事なのは白三角で示している「ハリポタツアー」の位置だ。画面の中央に分布しており、左上には黒四角の科学博物館や黒三角の民族博物館がある。そして右下には白四角のディズニーランドや白丸のUSJがある。
ここから、人々のハリポタツアーに対する感想は博物館(科学博物館や民族博物館)と遊園地(ディズニーランドとUSJ)の中間で、完全に博物館とも遊園地とも言いがたいと解釈できる。でもこれはアドホックで偶然に依存するため危険だ。もう1つ分類という課題を解いて考察をくわえたい。
分類とは、与えられた入力にラベルを与える処理だ。つまり、5000語のTF-IDFを持つ文書にラベル(博物館・遊園地)を貼っていく作業になる。手でやると大変だが数字に変換してあるから、「ロジスティック回帰」という先人の知恵を使える。まずはラベルを貼る。ジブリ美術館やハリポタツアーは博物館か遊園地かが不明なのでラベル貼りはしないで脇に置いておき、その他に博物館なら1、遊園地なら0とラベルをつける。そして5000次元の数字を0か1かに分類させる。
中学生の頃にy=ax+bという式を習ったが、TF-IDFがx1, x2, … x5000と続くと考え、それぞれに対応する係数a1, a2,... a5000も用意する。かけ合わせた和であるa1x1 + a2x2 +... a5000x5000 に「シグモイド関数」という「値を0と1の範囲に収める関数」を適用すると、TF-IDFを0–1の値に収める操作が可能になる。あとは博物館を示すTF-IDFなら1、遊園地なら0に近づくように係数a1, a2, … a5000を調整する。
すこし抽象的だったので、各単語に対応する係数の具体例を見てみよう(図4)。図のx軸は係数の値を示しており、正の係数を持つ「展示」のような単語は博物館らしさを増し、負の係数を持つ「アトラクション」のような単語は遊園地らしさを増すだろう。
ハリポタツアーの感想を示す5000次元のデータにも同様のa1, a2, …a5000をかけてシグモイド関数を適用すれば、0から1の値になる。実際には0.3のような数字になるので、0.5以上は1とする。大量に集めたハリポタツアーの感想は1(博物館)になるだろうか。
係数をかけた結果、博物館と判定されたのは全体の21.8%だった(8)。この結果はなかなか興味深い。というのも、としまえんの跡地に「開園」した「エンターテイメント施設」に対する感想に対して、5分の1程度の人が「博物館」と分類できる感想を述べたのだ。もちろん科学博物館や民族博物館ほど「博物館」らしくはないし、USJやディズニーランド寄りなのかもしれない。でもたしかに、一定数の人は「博物館」とみなす感想を述べており(9)、これはもちろん遊園地ではありえない結果だ。
さて、今回は単語というより文書を数字で表現したが、単語でも似たようなことができる。つまり文脈(どのような単語と共起するのか)を見れば単語の意味はわかる(岡﨑ほか, 2022)。これを分布仮説と呼び、たとえば「日比谷」や「渋谷」が周囲に取りやすい単語は「焼きそば」のそれらに比べればずいぶんと違うだろう。分布仮説により単語を数字で表現する話については、もうすこし先にする。
コラム:クラスタリングと鶏卵
つぎのトピックに移る前に、距離や類似度を扱うとクラスタリングで見たようにカテゴリーの形成が可能になる点を共有したい。書籍『記号創発ロボティクス』 (谷口, 2014)が詳しく、ここでは概要だけ紹介する。人間の知能を理解しようとする際、現象を計算機で構成していく方針で考察する手法がある(10)。例として、「概念形成は可能だろうか」という問いを挙げてみよう。ひらたく言えば、「タヌキ」という概念、つまりカテゴリーの形成は可能だろうか。
「タヌキ」というカテゴリーを形成するために、まずは「ムジナ」や「キツネ」を含まない、純粋な「タヌキ」に属する個体を集めていくとする。しかしこれは最初からおかしい。というのも、「タヌキ」に属する個体を集めるということは、先に「タヌキ」を知っておかねばならない。でも今やろうとしていたことは「タヌキ」というカテゴリーを形成するというタスクだったはずで、どちらが先か分からないニワトリタマゴになってしまう。
この問題を書籍では、K平均法と呼ばれるクラスタリングの手法を使って解決する。前回の話でもクラスタリングを使ったが、タヌキやムジナなどのカテゴリーの情報は知らないものとして使わなかった。むしろ「画像から分かれるのだろうか」という問いがメインで、タヌキとムジナは難しかったがキツネとはカテゴリーが分かれるという結論だった。
なぜ紹介した書籍や前回の話の中で、ニワトリタマゴにならなかったのだろう。それは各画像がお互いに「それっぽさ」を計算できる状態だったからだ。つまり、お互いの距離や類似度を計算できたので、「いくつのカテゴリーに分けるのがよいか」さえわかれば事前にカテゴリーがなくとも似たものグループ(=カテゴリー)を作れた。タヌキとムジナとキツネなら、普通の人なら2つで十分だ。でも、食味や分類に興味のある人にとっては3になるかもしれない。
参考文献
岡﨑直観., 荒瀬由紀., 鈴木潤., 鶴岡慶雅., & 宮尾祐介. (2022). 自然言語処理の基礎. オーム社.
門脇大輔., 阪田隆司., 保坂桂佑., & 平松雄司. (2019). Kaggleで勝つデータ分析の技術. 技術評論社.
谷口忠大. (2014). 記号創発ロボティクス: 知能のメカニズム入門. 講談社.
(1) https://www.wbstudiotour.jp/
(2) https://www.ikejiriseiji.jp/news192/
(3) https://youtu.be/mQuvkCMwKLw?t=1409
(4) https://elaws.e-gov.go.jp/document?lawid=326AC1000000285
(5) 今回も実験のファイルはGoogle Colab からアクセスできる。
(6) HTMLファイルからreview-full-textというクラスのspanタグを抽出して日本語の感想に制限する。手順などは補足資料にまとめてあるので、興味のある方は参考にしてほしい。
(7) 概要の解説動画 https://www.youtube.com/watch?v=eN0wFzBA4Sc
(8) 交差検証の精度は0.94なので分類精度が低いという話ではない。
(9) ハンズオンの資料では好きな文を分類できるのでぜひ遊んでみてほしい。
(10) 「構成論的なアプローチ」と呼ばれる。
-
- 2023年10月17日 『2. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:タヌキと魔法から見る言語表現 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. タヌキ(左)とムジナ(右)
図2. 筆者が取り寄せたアナグマ肉
図3. ムジナとタヌキ、キツネの画像と数字的表現。黒を0、白を255と表現すれば、結局は数列だ。比較対象としてキツネも右に加えている。
図4. 画像の類似度を用いて作成したデンドログラムを示す。 クラスター間の距離が大きく異なる部分で色を分けている。
言語学関連の講義を除いて今でも強く記憶に残っているのは、法学や倫理学の概論だ。毎度の講義では広い教場の最前線を陣取ってノートをカリカリと取っていたので、さぞ教授に圧をかけてしまっていたと思う。けれど、それだけ内容が引き込まれるものだったのだろう。
電気という概念がない時代に法は電気泥棒を裁けるだろうか、「胎児」は人間だろうか。講義はそんな問いを魅力的に導入していた (1)。それぞれに対する答えは日常の感覚と異なり、新鮮な観点を与え、好奇心を強く刺激した。なにより、倫理を法律に委託していた当時の自分に疑問を投げかけるような時間でもあった。
言語とルールに関わる興味深い話も講義では多く紹介された。本題に移る前の前提として、そもそも社会のルールと単語の重要さを感じられる話はたくさんある。数字できっちり定義が決まっている単語もあれば、自然言語に定義を任せている場合もある。前者、つまりキッチリと単語を数字で定める例として、トラックのタイヤの数や船舶の長さ、ロフトの高さの定義に触れてみよう。
高速道路でタイヤを浮かせているトラックを見かけることがあるが、これは走行時の車軸数を減らし車種区分を「特大車」から「大型車」に変えて料金を浮かせるためだ (2)。船舶の全長も199mという妙に半端な長さが目立つが、200mを超えて大型船に分類されると運航上の制約が生じる (3)。他にも、ロフトは高さが1.4mを超えると階になり、耐震基準や固定資産税が変わる。このように数字でカテゴリーを分ける例は多くある。
それに対して、数字で決めずに自然言語のカテゴリーをそのまま持ち込んで解釈が難しくなったケースもある。そんな数字で片付けられないトピックを2つ紹介したい。1つは「たぬき・むじな事件」と呼ばれるもので、もう1つは映画ハリーポッターの舞台裏や世界観を楽しめるエンターテイメント施設、「スタジオツアー東京」だ。まず、タヌキとムジナの話から始めよう。ここでは自然言語のあやふやさを数字に落とし込むことのメリットを共有したい。
タヌキと法の裁き
突然だが、タヌキとムジナの違いをご存知だろうか。この質問をすると大抵の場合は「いや同じでしょ」という、問い自体が誤りであるかのような反応が得られる。たしかに、ことわざの「同じ穴の狢(ムジナ)」は「一見して無関係に見えても実は同類の喩え」だから、その反応はもっともだ。
でも、現代の語彙で「ムジナ」が指すのはタヌキではなくアナグマであり、上に出てきた「同じ穴」もアナグマが掘る穴のことだ。このタヌキとムジナ(アナグマ)は、図1の通り異なる動物だ。
この違い、実は言語・食文化・法律の面でいろいろと深堀りのしがいがある。言語の面から言えば、ムジナという単語はアナグマやタヌキを示す場合もあるのと同時に、タヌキという単語はタヌキだけでなくアナグマを示す場合もある。この混乱は後述する『狸考』という文献で紹介されているが、食文化や法律の面でたびたび議論になってきた。
さきほど挙げた法学の講義でも「たぬき・むじな事件」と呼ばれる事件が扱われた。これは法律と単語を考えるよいきっかけになるがややこしい。だからまずは手頃な食という観点から近づいてみよう。
多くの人はタヌキもムジナも食べた経験がないと思うが、食味の違いは『狸考』という文献に狸汁の記述がある(佐藤1934,pp.24–26)。これはデジタルアーカイブ (4)からもアクセスできるし短いので、ぜひ一読して見て欲しい。当時まとめられた食レポには以下のレビューがある。
其肉臭不可食(本朝食鑑)
みなみな鼻を掩ひて吐き出したり(關の秋風)
それにしても「其肉臭不可食」とは端的ながら、食べログも泣き出すレベルの辛口だ。ここまで書かれると喰われたタヌキがいたたまれない。また現代のレビューでも、野食ハンターの茸本朗 さん (5)は「動物園の臭い」と評している(茸本,2019,p.150)。ここから考えると「タヌキ」は嗅ぐにつらいようだ。
それに対してアナグマの方はというと、同氏のブログ (6)では、油脂は薩摩黒豚と互角に戦える風味だという。また過去の『狸考』では「舌鼓打つ狸汁かな」との絶賛レビューも紹介されている。そこで『狸考』では狸汁にタヌキだけでなくアナグマの場合もあったと想定されており、時代や地域によってタヌキという単語がアナグマを指しえたと推察する。
実のところ、筆者もアナグマ肉を取り寄せて (7)食べたことがある(図2)。油脂が多いという先行研究 (8)があったので、肉より油の方が多い真っ白なアメリカのベーコンくらいを覚悟していた。丁寧に小分けにされて届いたアナグマ肉を見ると、冬と比べて夏の非餌づけ個体だったからだろうが(金子&丸山,2005)、脂と身のバランスはよかった。
解凍したアナグマ肉を野菜とフライパンで炒めると乳成分を感じさせる甘い香りが立つ。自分の嗅覚が壊れたのかと不安になるが、読んだレビューにも甘い香りがするとあったので間違いではなさそうだ。火が通りギリギリを攻めてレモンと塩で食べても、やっぱり油脂の部分からは甘みを感じたし、肉からも強い旨味が伝わってくる。飲み込むときに甘い香りがふっと抜けるのが面白い。
フライパンに残った肉と野菜に手前味噌(文字通り)と、河川敷で採取して冷凍保存しておいた道草(ノビル)を加えて狸汁とした。すでに焼肉で食味を堪能していたので強い感動はなかったが、噂に違わずの肉感と油脂の上品さには驚いた。はたしてこの肉に対し、酷評は得られるだろうか。
たしかに動物に興味のない人が実物を比較せず、あるいは食味の違いを考えずにいたら、間違えるかもしれない。さらに間違えたところで皿の上に楽園がくるか動物園がくるか程度の差だ。でも大正時代では困ったことに、自分が裁かれる側になる可能性もあった。
さきほどのレビューにあった通り、ムジナ(アナグマ)は美味だ。遡って1924年(大正13年)、栃木県のある猟師がムジナと思われる動物を発見し村田銃で狙撃を試みたそうだ。しかし狙いは外れ、ムジナは近くの洞穴に逃げ込んだ。猟師は狩猟に成功したムジナと呼ばれる種がタヌキと別種であることを確信しており(現代でもその通り)、洞穴を岩で塞いで閉じ込め、最終的には2日閉じ込めたのち猟犬に仕留めさせた。
ややこしいのはここからで、実は岩で閉じ込めた時点と仕留めた時点の間に、タヌキの狩猟を禁止する狩猟法が施行された。岩で閉じ込めた時点で狩猟が完了していたからセーフという論点もあるのだが、問題は裁判で「タヌキとムジナは同種だ」と仮定されたことにある。ここでタヌキとムジナが同種という前提をめぐって議論になるが、該当地域だけでなく別種との認識が散見されることや、捕獲のタイミングを考慮して最終的に無罪となった (9)。
ただ、この裁判の前提である「タヌキとムジナは同種」という話も、ことわざや食レポの混乱から考えても強く批判できる自信はないし、法律に必要な抽象性(森田,2020,p.67)の結果だったのかもしれない。というより、そもそも種に名前をつけるというのは、見た目だけでなく生態とその相互作用まで含めなければならない難しい作業だ (10)。
トラックやロフトのように、人間が「AはBとする」と数字で定義するなら簡単だが、生物の名前などは世間の価値観や分類学(taxonomy)に外注することになる。すると上記のような「いやそもそもタヌキってなんですか」という、分類学が抱える問題に衝突することになるのだ。
だから区別をしなかった、裁判に携わった人を責められはしない。でも、見た目だけにヒントを制限した場合、このタヌキとムジナはどれくらい区別がつかないものなのだろうか。可視化もかねて少し検証してみよう。
数字による表現とクラスタリング
タヌキとムジナの近さなんて興味ないかもしれないが、カテゴリーの近さを数字で(つまり定量的に)表現するのは価値がある。今回は画像の近さを比較するが、渋谷–日比谷のように意味の近さを比較できたらなにかと便利だ。言語の距離はのちに考えるとして、まずはわかりやすい画像の比較から入る。
でも、そもそも画像ってなんだろう。人間の目がどう世界を見ているかはさておき、少なくとも白黒画像は「ピクセル」で表現できる。図3下のように白黒画像を拡大してみると、0(黒)から255(白)の輝度を持つピクセルが見える。これが並んでいて32×32ピクセルなら32個目で行替えして次の行だ。この繰り返しだから、サイズが32x32のタヌキやムジナの画像は1024個のピクセルで表現できる。
単純に比較するなら、この1024の画像をそれぞれ比較すれば良い。図3上のムジナとタヌキで言えば、背景の左上はムジナでは明るくタヌキでは暗い。ピクセルごとの差を足し合わるとマイナスとプラスで打ち消しあってしまうので、マイナスをとっぱらってから差を足し合わせる。すると、同じ部分で異なる輝度を持っているほど、距離は遠くなるわけだ (11)。
これで画像間の距離が求められる。そして距離を求められる時にはクラスタリング(clustering)という、似ているもの同士をグループにまとめる手法が使える。データをグループにまとめると、データのパターンや関係を見つけやすくなるのだ。だから気持ちとしては、似ている「タヌキ」と「ムジナ」が先にまとまり、その「タヌキ+ムジナ」と「キツネ」が後でまとまってほしい。後でまとまるということは先に分かれるとも言い換えられる。したがって、「タヌキ+ムジナ」と「キツネ」が先に分かれ、「タヌキ」と「ムジナ」が後で分かれることを期待しているともいえる。
重要なのは、見た目しか使わないということだ。ここでの問いは「見た目だけで区別できるのか」なので、「これはタヌキですよ」とか「これはムジナですよ」というラベルを使うのはルール違反だ。今はそうしたカテゴリーを教えてくれるラベルがない、環境の色や対象の見た目だけで区別できるか、という話だ。
でも、なぜ急に上でキツネが出てきたんだろうか。キツネとタヌキは分かりやすそうだ。それに比べて、タヌキとムジナはどれくらいわかりづらいだろう。このように、キツネvs.タヌキの分かりやすさと比べていると、タヌキvs.ムジナがどれくらい分かりづらいかを考察できるからだ。
まずはデータを集めよう。地道にGoogle画像検索の結果を表示させ、スクリーンショットで動物の顔部分を淡々と保存する。タヌキはTNK、ムジナことアナグマはANG、きつねはKTN…。特に意味はないが48枚ずつ、正面の顔を保存した。するとTNK48.pngのような画像ができる。
先に述べた距離を用いてクラスタリングでグループを作っていく手法を使う。より詳しく知りたい人は『機械学習入門』(高村,2010)を参考にして欲しい。このクラスタリングをすると、デンドログラム(dendrogram)、つまり、木っぽい(dendro-)図(gram)を書ける (12)。
ともかく、作成したデンドログラムを見てみよう(図4)。ひどく分かりづらいが、上から見るとAと書いてある部分から分かれており、つぎにBで右は分かれている。これはAの左右の違いはBの左右の違いより大きかったことを示す。そして3番目に左はCで分かれているので、Bの左右の違いがCの左右の違いより大きかったことを同じく示している。
分かれていった先には画像が本来144枚(3種類×48枚)あって見えないので工夫した。図の左下に示すように、三つの行(上からムジナ、キツネ、タヌキ)で、分かれた先が示す動物を示してみた。例として右下は中央行(キツネ)が密集して重なっており、これは右(B)に分岐したのはキツネが多いことを示す。それに対してCに分岐したグループは、上の行のムジナと下の行のタヌキが多い。Dで右に分岐して、ようやく一番上のムジナが密集して分かれている。
この図の解釈としては、まずAの時点で左と右に分かれる。左のCにはタヌキ・ムジナのグループがあり、右のBはキツネのグループだ。そしてつぎに分かれるのはBだから、同種であるキツネのグループ内の差の方が、ムジナ・タヌキのグループ間の差より大きく先に分かれたと解釈できる。つまり、ムジナとタヌキが分かれるのは、Cを分けた右(D)で、さらに分けた右の部分でようやく、ということになる。
したがって、キツネが一発目で分かれたのと比べると、タヌキとムジナは随分と分かれない。また、分かれた時点もキツネの中の差を分けるよりもわかりづらいと解釈できる。この実験はGoogle Colabに詳細を書いてある (13)。
https://github.com/kishiyamat/la-kentei-yaminabe/blob/main/notebooks/tanuki.ipynb
数字を使った表現にすると、いくつかうれしいことがある。1つは似ている・似ていないという表現に対して、「どれくらい」という尺度をくわえられることである。これを「ちょっと」や「かなり」といった言葉だけで表現するのは骨が折れそうだ。骨を折って表現したとして、他の事例との整合性を保証し続けられるだろうか。たとえば、上の比較にアライグマが参戦したらどうだろうか。
もう少し下心を共有すると、すでに存在する手段を再利用できるのも強い。今回使ったクラスタリングも可視化も、ほんの少しのスクリプトを書くだけで実現できる。もちろん、手法によって満たすべき前提や概要くらいは理解しておきたいが、理論や細かい実装まで追うのは難しい。しかし数字まで抽象度を高めると先人が培った手段も多く使える。これは魅力的だ。
今回はタヌキやムジナに対する画像を引っぱってきて、単語を数字で表現する工夫を共有した。これは単語をデータで表現する1つの手段だ。でも実は、画像がなくても単語は表現できる。だって単語の周りにはたくさん「単語」というデータがあるのだから。つぎに単語の分布で文書を表現、分類する方法を考えてみよう。
参考文献
金子弥生 & 丸山直樹. (2005). 東京都市近郊におけるニホンアナグマ (Meles meles anakuma) の体重及び栄養状態への地域住民の餌づけの影響. 哺乳類科学,45(2),157–164. 日本哺乳類学会.
佐藤隆三. (1934). 狸考. 郷土研究社.
高村大也. (2010). 言語処理のための機械学習入門. コロナ社.
茸本朗. (2019). 野食ハンターの七転八倒日記. 平凡社.
森田果. (2020). 法学を学ぶのはなぜ? 気づいたら法学部、にならないための法学入門. 有斐閣.
(1) 胎児は民法と刑法で定義が異なり、縄張り語と呼ばれる。
(2) https://kuruma-news.jp/post/514285
(3) https://www.data-max.co.jp/article/62839
(4) https://dl.ndl.go.jp/pid/1076759/1/1
(5) そもそも「野食」とは、野にある食材を楽しむ行為のことを指す。茸本朗さんと言えば、野食ハンマープライスというブログを執筆されていて、最近ではYouTubeチャンネルも運営している。漫画『僕は君を太らせたい!』の原著者でもある。狸汁のほかに、アライグマで二郎ラーメンを作るという企画もあって面白く、レビューの観点や表現力が豊かで激推ししている。ちなみに、意外と大学でも食材はあり、たとえば東大の駒場キャンパスでもさまざまなものが楽しめる。界隈で有名な記事に、中澤恒子先生が退官されたときの記事『<駒場をあとに> 駒場の風景』がある。
(6) https://www.outdoorfoodgathering.jp/meat/anaguma/
(7) たとえば「米とサーカス」 https://kometocircus-online.com/がある。実店舗は一般的なジビエにくわえて昆虫食も揃っているので、昆虫食ビギナーの筆者にはなかなか恐れ多くて足を運べない。オンラインでポチれるくらいがちょうど良い。ただしウェブでも食に寛容な人以外は心する必要がある。
(8) https://chikatoshoukai.com/eat-barger/
(9) この裁判は東山動物園や先述した佐藤(1934)でも紹介されている。
(10) ハシブトガラとアメリカコガラは見た目での区別が難しく生態を考慮せねばならず、ノビルとスイセンの球根部、タマゴタケとベニテングタケ、状態によってはぱっと見では区別できない。
(11) 適切に計算すると「ユークリッド距離」と呼ばれる値になる。
(12) 横文字だらけで恐縮だが、"dendro-"は「木」を意味するギリシャ語に由来している。神経細胞の一部に樹状突起というのがあるが、あれもdendriteという。上下ひっくり返すと木に見えるからデンドログラムだ。
(13) 実験に使ったノートブックを配置している。「Open in Colab」というボタンを押すと、Colabが起動してコピーを作成し実行できる。最初の「はじめに」で述べた通りに実行ボタンを押すと「警告: このノートブックは Google が作成したものではありません。」と言われるので、著者を信頼している場合は「このまま実行」を選択してほしい。信頼していない場合は信頼してほしい。
-
- 2023年10月10日 『1. 言語学闇鍋エンジニアリング―プログラミングで探る言語の不思議:はじめに 岸山健(法政大学文学部英文学科ほか非常勤講師)』
-
図1. 姉は日比谷での出来事を話しているのに、父は会話の背景として渋谷を想定して話を進めていた。
図2.「日比谷・渋谷」をアルファベットで比較してみると、四角で囲んだ部分の音色は似ているように思える。
図3. 可愛いタヌキ・ムジナの話や某魔法学校、ホーミーやAIを扱っていく。パソコンを使えると内容をより楽しめるが、なくてもよい。
図4. Colabノートブックの編集画面
この原稿を書いているとき、身の回りにいる好奇心旺盛な友人や研究者、熱心に授業を聞いてくれる学生やお世話になった先生方の顔を思い浮かべている。言語に関心を寄せる人たちに、どんな面白い話を共有できるだろうか。インターネットに広まっている話では退屈させてしまうし、あまり堅苦しい話をしすぎても興味を持ってもらえない。
そこで、これまで出会ってきた少しマニアックな言語に関する話を、エンジニアの角度から伝える方針をとってみたい。いろいろな話を混ぜてはいくけれど、いわゆる単語や音声、文法といった言語の異なる側面を、「え、こんな角度から見るの?」と面白がってもらえたらうれしい。
話の範囲は、動物の名前から法律、耳の聞こえ、カードゲームやAI、ホーミー(モンゴルで奏でられる歌唱法)まで闇鍋状態だ。でも混ぜているのは1人だし、材料も把握しているので味は整うはずだ。そこで、まずは個人的なエピソードから始めたい。
日比谷? 渋谷?
これは数ヶ月前、両親と姉を乗せていた車の中での話だ。不慣れな首都高を緊張して運転しながらも、助手席に座る父と後部座席の姉の会話に違和感を覚えた。というのも、姉は日比谷について語っているのに、父の頭にはどうやら渋谷の風景が浮かんでいるらしかったからだ。
あとから思い出したのだが、過去にもこの手の不一致は何度かあった。すぐ浮かんだのは、大学近くにある中華料理店での会話だ。そこのメニューには「ミソソバ」という、甘辛いひき肉の上にキュウリと椎茸をのせた一杯がある。食べているのを眺めながら、父は「ミートソバ、どう?」と言った。「ミソソバだよ」と訂正したけど、父は「うん、ミートソバおいしい?」と聞き返してきた。何度「ミソソバ」と言っても、父の耳1には「ミートソバ」として届いていたようだ。
これだけだとよくある聞き間違いの話になってしまうが、そうではない。言語の学問に触れた身として、この手の謎は放置しがたい。というのも、仮に耳が遠いだけなら会話の全体が成り立たないはずだ。でも体感で会話は成り立っていて、突如として噛み合わなくなる。だから単純な耳の遠さではないはずだ 2。そこで疑問に思った。日比谷と渋谷、ミソソバとミートソバ、この背後にある誤解の原因があるとするなら、それは一体何だろう。
問い:なぜ「日比谷」と「渋谷」、「ミソソバ」と「ミートソバ」は聞き間違えられたのか。
最初に気づくのは、どちらの事例もカテゴリー的には正しいという点だ。つまり、「Xの公園に行った」にある「X」は、日比谷も渋谷も自然に「場所」として受け入れられる。同様にミソソバもミートソバも「食べ物」らしいから「この店のXは美味しい」という文脈で自然だ。つまり、それぞれがカテゴリー(場所・食べ物)を示す名詞としても適切だ。
カテゴリーや品詞3が適切であるのに加えて、音も似ている。日比谷と渋谷はアルファベットで「hibiya」と「shibuya」と表現できる。市ヶ谷(ichigaya)などと比べれば、この2つは音の振る舞いやリズムが似ている。たしかに異なる音の組み合わせ(h–shとi–u)は存在するが、学術的な厳密さは後述するとして、共通の音色を感じる(図2)。
日々の会話から、iとuの組み合わせを父は聞き分けられていると感じる。それを踏まえて、「原因は、h–shやs–tの聞き分け能力にあるのではないか」という強めな仮説を立ててみよう。この仮説を追求すると、これらの音のペアのどちらか、あるいは両方がhとsh, sといった「摩擦音」を含むことに気づく。
この「摩擦音」とは、日本語の中の「サ行」や「ハ行」にも現れ、静かさを求めるときの「シー」とか、熱い麺を口に運ぶ前の「フー」という音に代表される。これらはまさに、指を摩擦させる際の音に近い。
そこで仮説を「摩擦音が聞き取れていないのではないか」と派生させ、これを試す目的で実際に指を擦り合わせてその音を父に聞かせてみると、驚いたことに、その音をほとんど聞き取れなかった。
理由はともかく、摩擦音が弱いのか。この発見以降、父との会話では意識的に摩擦音を避けるようにした。例えば「指定の」という表現を「特定の」と変えるなど、その音を避けつつ意味の通る表現を選ぶ。すべての音が聞き取れないわけではない。特定の種類の音だけだから、別に大声で話す必要もない。自然と話す速度は遅くなるし、早口な自分にはちょうどよいとすら思う。
幸い父も職業柄、言語に関しては明るいので「摩擦音の聞き取りが苦手だね」という話はスムーズに伝わった。後ほど説明するが、人の知覚を考えれば聞き間違いの要因は複数ある。ただ、ここでの暫定的な答えは以下になる。
暫定的な答え:特定の音(上の場合、摩擦音)の聞き分けが困難であり、さらに単語の品詞やカテゴリーも同じだったから聞き間違えた。
これで少しだけスッキリした。とはいえ日常生活や労働といった場面で、こうしたケースをどれだけ認識してこられただろうか。こういう細かな違いをただの「耳の遠さ」として端折ってしまっていたかもしれない。
音の種類にも、人の感じる強弱には差がある。こうした違いは音以外の感覚にも存在するかもしれない。となると日常で聞き逃していた、見落としていた事や物が多かったのかもしれない。これから聴力や視力を含めた感覚、あるいは認知機能を将来的に失っていく。手放す前に、先人の立場を考えることで何か学べる気もする。
本連載の構成
上述した聞き間違いは個人的な話だったけれど、2つの理由から導入として使った。1つは単に、自分の中で「言語を深く学んでいてよかったな」と感じた瞬間だったからだ。高齢化社会をサバイブする我々も、いずれ行く道であるので他人事ではない。特定の音が将来的に聞き取れなくなる覚悟はしておいてもよいかもしれない。
もう1つは、後続の話に対して適切な導入に思えたからだ。身の回りにある言語のトピック、つまり単語や音、構造を掘りさげていくうえで、単語の聞き取りはよい例となる。というのも、カテゴリー(あるいは単語の意味)の近さや音、品詞(あるいは構造)の話をバランスよく含んでいる。したがって、聞き間違いの話はときおり引き合いに出される。
念のために断っておくと、以降で紹介するトピックは一見すると上の話と関連がない。法律と単語(タヌキ vs. ムジナ)の話であったりホーミーと呼ばれる歌唱法の話であったり、ゲームや法律の構造、AIの話だったりする。でも言語情報の処理という意味で、疎ではあるが結合している。以下、5つのトピックで言語の不思議な部分に焦点を当てていく。
最初に共有するのは単語と法律の話で、個人的にはお気に入りだ。大正のタヌキ・ムジナの例では食や法律で単語を区別する重要性や難しさ、令和の某魔法学校の例では単語や文書を数字で表現する方法を考える。
つぎに、ホーミーと呼ばれる歌唱法や音を可視化する方法を共有する。人がいかに器用に音を聞き取っているかという話を難聴の部分でするが、その前に音とはなにかを基礎から共有したい。教科書的に説明してもよいが、モンゴルに伝わる特殊な歌唱法を題材とする。音とモンゴルへの知識を深めたホーミービギナーになれるだろう。
3番目では単語の聞き間違いの謎に迫る。専門的には「異聴」と呼ばれる聞き間違えの背景やメカニズムを紹介する。この謎に迫るためには人が音声を聞き取る手順から考えた方がよい。人の聴覚をシミュレーションする研究や「聞き間違えない国語辞典」というプロジェクトに言及しつつ、異聴を引き起こしやすい語の候補を考えていく。
4番目の話題は文の構造に関する話題となる。ゲームに出てくる文の読みやすさ(可読性)から、法における言語の多義性について考える。可読性に関しては、マジックザギャザリング、通称MTGというカードゲームがあるのだが、それに関して起きた不思議な出来事の導入から始める。多義性に関しては、横入り、ズル込み、なんでもいいが「列への割り込み」に関する法律の解釈の導入から開始する。どちらの例も文を理解する過程に関して面白い示唆を与えてくれる。
最後のトピックは言語と計算機の関係で、主にAIの活用に焦点を当てる。プログラミング言語を使うと、生成AIの扱いがどう変わるのかを専門家に教えてもらう。詳しくない人でも自由に生成AIを使いこなすコツも共有する。
以上が各トピックの概要になり、大まかには3種類の進め方を取る。1つは著者が身近で触れた言語に関するエピソードや疑問を紹介する。これは世に出回っていない、手や足で稼いだ新鮮なネタを心がけた。近年はYouTubeをはじめとして質の高いコンテンツが出回っており、耳や目の肥えた方にも満足な話を提供したい。
第2は専門家に意見をもらう形式になる。世界には思わず頭を突っ込んでしまいたくなる話が溢れているが、踏み込んだが最後、沼の深さにハマって身動きが取れなくなる場合がある。研究という、知識を生み出す活動をしているからには雑な情報は削減したい。そこで専門家に補足していただく形で、言語の面白い話を掘りさげていく。
最後は、その面白い話をパソコンで確認する作業になる。一見すると、いかにも言語とは文系的で、パソコンはいかにも理系的で相性は悪いように思われるが、そんなことはない。ここでのパソコンは目的ではなく手段であり、少し触れるだけで言語の調理法も増やせる。言語自体に直接は触れられないが、ソフトウェア経由なら触れられる。
そこで、言語の学問である言語学と道具としてのプログラミングを眺める。もちろんパソコンがなくても読み進められる形式にはしているので安心していただきたい4。
言語学とプログラミング
人文科学5としての言語学と、情報処理技術としてのプログラミングの両方を扱う人は珍しいと言われる。自身がプログラミングを始めたのも、偶然アメリカの大学でアカデミック・アドバイザーから「言語学好きならこれも好きかもよ?」と勧められたのがきっかけだった。よく考えると1年きりの留学生の履修科目をマンツーマンで考えてくれたなんて非常に贅沢だが、これがなければ触れなかっただろう。
言語学にはもともと留学前から興味を持っていた。言語学では、言語の普遍的な性質に関して仮説を立て、データで検証する 6。ここでの言語とは、音(あるいは文字や動作)やそれらの規則、単語、文の構造、談話など、分けた範囲を指す場合が多い。でも、範囲の組み合わせを研究する分野もあるし、言語の性質だけでなく、獲得や運用の仮説を検証する分野もある。
対してプログラミングは筆者にとって道具だ。言語学の対象である言語や「人間が言語を理解する処理」は手で触れられない。でもプログラミングを使えば言語だけでなく処理にさえ触れられる。プログラミングを使えば仮説を検証する方法を増やしたり、検証する仮説自体も作れたりするという意味でも有用に思える7。
これから、上に紹介したトピックをさまざまな角度から眺めて触っていく。再三になるが、パソコンを使えなくても手を動かさなくてもよい。でも、もし環境が許すならば一緒に手を動かしてみてほしい。言語や処理に触れられる楽しさを感じてしてもらいたいし、きっと今までとは違う視点を共有できると思う。そこで最後に、プログラミングを使う練習をしてみたい。単に読み物とする場合、ここは一旦飛ばしてもらって、興味が出たら実習に戻ってきてほしい。
今回はGoogleが提供してくれているColab(正式には「Colaboratory」)という環境で、プログラミング言語Pythonを使う。スタートする方法は2種類ある。ここでは、本当に初めてという人向けに説明するので、以前使ったことがある人は途中から合流してほしい。
まず、「Colaboratoryへようこそ」などと検索すると「Colaboratoryへようこそ - Colaboratory」というページが検索結果の最初にでてくるだろう 。クリックすると「ノートブックを開く」と書かれたポップアップが表示されるので、左下にある「+ノートブックを新規作成」と書かれた青いボタンをクリックする。そうすると、上記の手順を終えると図4に示す画面に移る。これで準備は完了だ。
たとえば「コードセル」と呼ばれる図4で灰色がかっている部分(左に1と行数が書いてある)では、インタラクティブに操作できる。つまり、値を計算して変数に保存し、結果を出力するようなPythonスクリプトを記述・実行できる。
試しにコードセルをクリックして半角英数で1+1と記入してみよう 。人によっては初めてのPythonコードを書いたことになる。そしてコードセルの左側にある実行ボタン(再生マーク)をクリックするか、キーボードのショートカット「command+return」または「Ctrl+Enter」を実行する。きっと2と表示されただろう。
もしかしたら「え、だからなに?」と思ったかもしれない。でも、この1+1という計算の瞬間、我々は頭をまったく使っていない。もう少し(場合によってはかなり)頭を使う作業を、外部のパワフルな存在に委託できるとしたら、どうだろうか。
ここでは実行さえできれば十分だ。さらに言うと、実行しなくても9割は読み進められる。でも、最後まで実行してみればきっとプログラミングの力強さや魅力を実感できるはずだ。
(1) この表現が厳密には正しくないことは、おそらく話が進んだ段階で共有できる。
(2) この「AならばBのはずだ。でもBでないならばAでない」という思考回路を多用してしまう。少し冗長で読みづらいかもしれないけど、省くと行間を補わせる役目を押し付けてしまうのでご容赦を。
(3) 品詞には名詞や動詞、形容詞や副詞などがある。本文中の例で言えば、動詞の「笑う」は「今日、Xに行ったんだよね」のXには入らない。仮に「笑う」が入っていたなら、多くの人は動詞ではなく名詞として考え、「あぁ、「笑う」というお店があるのね」と解釈するはずだ。
(4) 近年の環境の改善からプログラミングは本当に簡単になったので、ぜひ身近にいるパソコンに少し詳しい人(GmailやGoogle Driveを開ける程度)に聞きながら挑戦してみてしい。
(5) 政治・経済・社会・歴史・文芸・言語など、人類の文化全般に関する学問の総称。物理学などは自然科学に属し、社会における人間行動を科学的,体系的に研究する経験科学の総称に社会科学がある。
(6) 言語学という字面を分解すると、いかにも言語を学んでいる感じがする。一般的に言語を学ぶというと、日本語とか英語とか、そういう人間が使う言語を勉強しているように聞こえる。僕だって誰かが「言語を勉強してるんです」と言っていたら、「何語を勉強しているんですか?」と聞きたくなる。その相手が仮に日本語母語話者で、さらに「日本語です」と答えようものなら奇妙に思うだろう。
(7) その途中の作業の効率化もできれば、分析の手順を明示的に記述もできて再現性が高くメリットが多い。また、実際に理論を動かして遊べて、新しい発見もあった。
-
- 2023年10月03日 『10月からの新連載』
-
7月から12回にわたり、「ウクライナ・ロシアの源流―スラヴ語の世界」と題して、ウクライナ戦争で世界から注目されるようになったスラブ語圏について言語の観点から迫ってくださった渡部先生、ありがとうございました。来年刊行予定の新書では新たな話題も盛りこまれるとのことです。ぜひ、新書にもご注目ください。
さて、10月10日からの12回の連載は岸山健先生(法政大学文学部英文学科ほか非常勤講師)による「言語学闇鍋エンジニアリング」です。岸山先生は心理言語学や計算言語学の研究をされており、現役のエンジニアとしても活躍されています。また、著書に弊社から出版の『jsPsychによるオンライン音声実験レシピ』があります。この連載では、言語にまつわるネットに出回っていない話を、計算機を使ったシミュレーションと一緒に紹介されます。コンピューターを使えない方も9割は楽しめる内容になるとのことですので、ご期待ください。(野口)