リーナー開発者ブログ

リーナー開発者の今を発信するブログです。

英語登壇の準備でやったこと

リーナー技術基盤チームの黒曜(@kokuyouwind)です。

この記事は Leaner Technologies Advent Calendar 2024 の 11 日目の記事です。

以前レポート記事を書きましたが、先月に開催された RubyConf Chicago に参加 & 登壇してきました。

developer.leaner.co.jp

人生で初めての英語発表だったため、発表準備にめちゃくちゃ苦戦しました。

今回はどうやって発表準備をしたか、我流にはなりますがまとめておきたいと思います。

準備1. 日本語で発表アウトラインを作る

まず初めに、発表全体のアウトラインを箇条書きで作っていきます。これは日本語発表時も同じようにしています。

自分の発表は「発表全体の導入」「前提知識の共有」「発表主題の解説」「実験結果・評価」「今後の展望とまとめ」で構成することが多いのですが、アウトラインの時点でそれぞれ大まかに話す内容と時間配分を固めるようにしています。

例えば、導入部は以下のようなアウトラインを作りました。*1

- 導入(5min)
    - 挨拶
    - 自己紹介
    - Why Type Inference with LLMs
        - DuckとGooseを使った例で、従来手法だと理想的な型が推論されないケースを示す
        - LLMでこうしたケースを解決できないか、と提案
    - LLMは型推論の夢を見るか?
        - 実際にLLMで型を推論できるのか?
        - Python だが論文「The Emergence of Large Language Models in Static Analysis: A First Look through Micro-Benchmarks」では、LLMが従来手法より高いベンチマークスコアを示している
        - 自作ツールのRBS Gooseで一定の推論ができている
        - 性能を指標化し改善していけるよう、型推論のマイクロベンチマーク評価ツールが必要

日本語発表の場合は、このレベルのアウトラインができたらスライドを作り始めています。

今回は英語発表なのでスライド作りに AI のサポートが欲しいのですが、この粗さだと漏れが多いため、アウトライン時点でもう少し精緻化をしていきます。

準備2. 仮のトークスクリプトを日本語で書く

アウトラインに沿って、トークスクリプトを日本語で書いていきます。

トークスクリプトはスライドを作っている途中で変えたくなることが多く事前に作るのは無駄が多いのですが、英語スライドを作る際に全体の仮訳があったほうが作りやすいので、仮訳のための仮トークスクリプトという位置づけで作っています。

導入部では以下のようにトークスクリプトを書き起こしました。*2

### タイトル

みなさん、おはようございます! それでは私のセッション、「Do LLMs dream of Type Inference?」の発表を始めていきましょう。

### 自己紹介

まずは簡単に自己紹介をさせてください。森俊介といいます。ハンドルネームの黒曜と呼んでください。私は日本から来ました。実は、今回が初めてのアメリカ、初めてのRubyConf、そして初めての英語登壇です。
私はLeaner Technologiesという日本の会社で働いていて、普段はRailsエンジニアやSREとして働いています。趣味でChatGPTなどの大規模言語モデル、LLMを使った型推論ツールを作っていて、今日はこれに関連する話をします。

### Why Type Inference with LLMs

なぜ型推論にLLMが必要なのか疑問に思う方も多いと思います。
まずはこれを説明するために、簡単な例を見ていきましょう。

このように、cryを呼び出すだけのmake_soundメソッドがあって、DuckとGooseを引数に呼び出されているとします。
このとき、make_soundの引数はどのような型になるべきでしょうか?

一般的な手法では、メソッド呼び出しで使われている型を集めて、それらのUnionを作ります。この例では、 Duck | Goose になるでしょう。
では、人間が判断するならどのような型になるでしょう? おそらく、DuckとGooseの共通の親であるBirdクラスとするのではないでしょうか。
ですがちょっと待ってください、BirdがAnimalを継承していたらどうでしょう?
この場合は、より広いAnimalクラスにしたくなるかもしれません。

本当に?

Animalの中にはFishがいるかもしれません。Fishは鳴きませんよね。
そうなると、 _Cryableインターフェイスを実装しているものなら何でも受け取れるほうが自然なのかもしれません。
もしくは、「鳴ける動物」や、もっと範囲の狭い「鳴ける鳥」を意図している可能性もあります。

もちろん、どれが正解かは設計方針に依存します。
重要なのは、このように「人間の意図」を踏まえることでより望ましい型を導けるだろうケースがあることです。
これは、決定論的なアルゴリズムでは解決が難しいのではないでしょうか。

他にも、Rubyには動的なメソッド定義や既存クラスの拡張など、従来の静的解析で型を推論するのが難しいケースが存在します。
ですが、我々人間が見たときには直感的に型を推測しているはずです。
この直感的な型の推論をLLMで実現できないか? というのが、LLMでの型推論を試すモチベーションです。

準備3: トークスクリプトを英語に翻訳する

トークスクリプトができたところから、英語の仮訳を作っていきます。

ここは筆者の英語力が全くないため、LLMに頼ります。今回は Claude を使いました。

翻訳ツールである DeepL などもありますが、以下の点で会話型の LLM を利用するのが良いと思います。

  • 日本語は主語の抜けた文が多いが、翻訳ツールは適切に主語を補ってくれず不自然な英文になることがある
  • 英語登壇原稿という前提や、平易な英語にして欲しいという追加のインストラクションを与えられる

今回は以下のインストラクションを使って日本語のトークスクリプトを英語に翻訳しました。

以下は、「Do LLMs dream of Type Inference?」というセッションの導入部の日本語原稿です。
このセッションは英語での発表なので、全文を英語に翻訳してください。
このとき、自然な英語の発表になるよう表現を直したり、文意を大幅に変えない範囲で改変しても構いません。
登壇者は英語が得意ではないため、なるべく喋りやすく平易な英語を用いるようにしてください。

Claude では Artifacts 機能があるため、以下のように右カラムが開き翻訳文が表示されます。

Claudeにトークスクリプトを翻訳させる

翻訳文はだいぶ平易になっていますが、それでも自分の知らない単語や複雑な文法が入っていることもあります。

こういう箇所は DeepL を使って再翻訳しつつ、日本語文を調整したり代替案を使ったりして話しやすい文に変えていきます。

DeepL で一度和文に戻して…

再度英文に翻訳。ここで代案から使いやすい語を選んだり、和文を調整する

準備4: 英語スライドを作る

英語のトークスクリプトができたので、これに合わせて英語スライドを作っていきます。

このとき、トークスクリプトからキーワードを拾ってスライドを構成していくことで、要点を抑えたスライドになる…はずです。

重要なワード以外は矢印やイラストでなんとかする

英語だと思った以上に文字数が入らないため、日本語でのスライドよりも箇条書きが使いづらいです。*3

どうしても箇条書きが必要な箇所では、各項目を名詞形にしたり形容詞を極力削るなどして頑張って収めます。

Need to ... のあたりに文法的な怪しさがあるが、スライドに収まらないよりはマシ

準備5: スライドの校正

これで一旦英語スライドが出来上がりましたが、スペルミスや冠詞・数詞の不一致など諸々の問題が発生しがちです。

この辺は LLM の得意分野なので Claude にお願いして校正してもらいました。

Claude によるダメ出し

またトークスクリプトもスライド作りと平行して手直ししているため、このタイミングでもう一度校正してもらいました。

準備6: 発表練習

ここまでで英語スライドとトークスクリプトが仕上がったので、あとは発表練習をしていきます。

まずスライドを流しつつトークスクリプトを読み上げ、スライドとトークの流れが噛み合っていなかったり、英語表現が一致していないところを修正していきます。

概ね修正が終わったら、セクションごとに何度かトークスクリプトを読み上げてほぼ丸暗記します。これは本番スピーカーノートが見やすい配置とは限らないことと、極力聴衆の方を見て喋れるようにするためです。

暗記できたらスライドを流しながらリハーサルを行い、発表時間に収まるよう発話速度の調整や、細かいスクリプトの調整をしていきます。

最終的に、通しリハーサルは10回近くやったはずです。*4

発表!

十分にリハーサルをしたら、あとは当日発表するだけです。

日本語発表と違ってアドリブを挟むのは難易度が高いですが、なるべく視線を観客の方に向ける、会場の反応がいいところでタメを作る、などは気をつけました。

まとめ

以上、初めての英語登壇準備でやったことのまとめでした。

英語翻訳に関してはほとんど LLM の力に頼ったためなんとかなったという感じで、 LLM が出る前だったら全然間に合ってないだろうな… という実感がありました。

逆に英語力がそんなになくても発表だけなら事前準備でなんとかなるな、ということもわかったので、海外登壇に興味がある方は思い切って CfP を出してみると良いと思います。*5

*1:後工程で削っていたり内容が変わった部分もあるため、実際の発表内容とはちょっと違う部分があります。

*2:これもやはり、準備の中でだいぶ構成が変わったため、実際の発表内容とはだいぶ違います。あくまでこのぐらいの粒度で作っているよ、という例として見ていただければ。

*3:日本語でスライドを作ってから英訳すると全然文字が収まらなくなりがちなので、最初から英語でスライドを作るほうが楽だと思います。

*4:リハーサルのたびに手直ししたくなって直しているので、完成稿でリハーサルをしたのは当日朝だったと思います…

*5:なお質疑応答や懇親会は英語力がないと絶望します。存在意識せずに使えるリアルタイム翻訳機早く実現してくれ〜!