登壇者の自己紹介

岡崎直観氏:東京工業大学の岡崎と申します。うちの研究室は東京工業大学情報理工学院というところにありまして、大学の研究室になります。専門は自然言語処理や人工知能で、主に研究をやっている組織です。

私自身は、自然言語処理の教育とかもやっており、教科書を書いたり、「言語処理100本ノック」とか、「機械学習帳」を作ったり公開したりしています。大規模言語モデルとの関わりですが、大規模言語モデルを使われているアーキテクチャなどは、ふだん研究で詳しくやっているのでその解説を書いたり、(スライドの)右側の資料は、ある学会でのチュートリアル資料なのですが、3時間ぐらいの発表になっているので、がっつり勉強したい方はこちらを見ていただければと思います。

共同開発した大規模言語モデル「Swallow」

今日は、大規模言語モデルで最近どのようなことに取り組んでいるかという話をしたいと思いますが、けっこうELYZAさんとやっていることが被っているので、一応経緯を説明します。

もともとフルスクラッチと継続学習の両方に興味があったのですが、時期的な問題がありました。フルスクラッチのLLMが続々と発表された時期があったんですね。なので、これからそういう同じものを作ってもしょうがないよねという話になり、継続学習に前から興味があったのでやってみようかということで、そっちに注力することになりました。それで東工大のうちの研究室と横田研究室、産総研が共同で開発したLLMが「Swallow」という名前で公開されています。

Swallowは4つぐらいキーポイントがあって、継続事前学習というELYZAさんがされていることとほぼ同じですが、Llama2の7B、13B、70Bの日本語能力を高めるということを目的に継続事前学習をやりました。そのために100Billionトークン以上の大規模な日本語Webコーパスを研究室で開発しました。

あとは、語彙拡張というテクニックを使って、大規模言語モデルの学習・推論効率を改善しています。これもELYZAさんの説明に含まれていた内容です。ほかには継続事前学習において対訳コーパスを入れたらどうなるのかという、その有効性を検証しています。

ちょっとここは飛ばしちゃっていましたが、(スライドを示して)開発メンバーはこのようになっています。うちの研究室のメンバーと、横田研のメンバーが中心になっていて、特に横田研の学生さんですね。藤井さん(藤井一喜氏)と中村さん(中村泰士氏)がモデルの開発、学習などをがんばっていて、うちの研究室のメンバーが、評価と学習コーパスの構築をいろいろお手伝いしたという構図になっています。

継続事前学習によって日本語能力を大幅に改善

継続事前学習ですが、ABCIのAノードを最大32ノード・16日間使って学習しています。Megatron-LMに実装されたデータ並列、テンソル並列、パイプライン並列で高い計算効率とメモリ効率を実現しています。この内容は、来月(※登壇当時)神戸で開催される言語処理学会で藤井さんがトークをしてくれると思うので、もし興味がありましたら、そちらをご覧いただければと思います。

(スライドを示して)継続事前学習により、性能がどうなったのかを示しているのがこの表なのですが、この各線の下から2番目にあるLlama2-7bというのが、もともとのLlamaのモデルになっていて、これに日本語のデータを追加することによって、性能を上げています。ここが7Bで、真ん中が13B、一番下が70Bですが、主に質問応答と算術推論の伸びが大きいです。

入れている学習データの話を次にしますが、なぜ算術推論が上がっているのかは、実は我々もあまりよくわかっていなくて、数学のことを教えたりとかはしていません。

このモデルの開発で意識していたことの1つとして、あまり味付けのないモデルを作ろうと思っていまして、日本語に強い大規模言語モデルがまだあまりないという時期だったので、オープンで使えて、いろいろな目的だったり、アプリケーションにチューンできるような、その土台となるようなモデルを作りたいということで、あまり味付けをしていないモデルを作っています。なので、このくらいの性能がダウンストリームタスクでも出るというのが、我々にとっても驚きでした。

コーパスは何を使っているかですが、うちの研究室で開発したコーパスがあってて、これは「Common Crawl」をフィルタリングしたものになっています。その当時では最大規模、フリーで使えるものとしては最大規模のコーパスを自分たちで作って継続学習に使っています。

どうやって作っているのか

作り方ですが、Common CrawlというWebのページをクローリングしてデータベース化しているサイトがあるので、そこからデータを取ってきています。その中にはいろいろな言語のテキストが混ざっているので、日本語のテキストだけを抽出して、日本語の品質に関するフィルタリングというのをやっていて、この詳細もこちらの言語処理学会で発表される予定です。

文字数がどのくらいあるのかとか、ひらがなと漢字の割合がどのくらいなのかというのを見て、きちんと日本語として読めるテキストなのかを検証しています。そのあと、重複文章の除去、デデュプリケーションという処理をして、似ているページを省いて過学習を防いでいます。

先ほどのELYZAさんのモデルには、fastという名前がついていましたが、語彙拡張をやっています。語彙拡張というのは何かというと、Llama2は学習データに日本語のテキストがあまり入っていないので、日本語の文字に関する知識をあまり持っていないんですね。なので「吾輩は猫である」という文をLlama2のトークナイザに入れると、バイトフォールバックといって、それぞれの漢字のUTF-8の文字コードレベルまで分割されちゃいます。

「吾輩は猫である」というのは短い文字列ですが、それがさらに長くなってトークナイズされて入っているという問題になります。これが起こると、コンテキストに入れられる情報が短くなってしまうので、これをきちんと日本語として扱いたいということで、日本語のトークンを1.1万件追加して学習しています。

日本語のトークンを追加すると、その新しく追加されたトークンは真っ新な状態から学習するので、日本語の性能は下がりやすいですが、その下がり幅をできるだけ下げるようにがんばって学習しています。

その下がり幅がどのくらいだったかなのですが、7Bと70Bの両方である程度下がっていて、特に要約の性能が低下しているのですが、それでも大半のタスクでは性能に違いがないというレベルを維持しています。

継続事前学習における対訳コーパスの活用

最後に、これは公開しているモデルには入っていない内容ですが、英語を出発したモデルから日本語を注入するということを考えた時に、やはり学術的な興味としては、例えば英語と日本語をつなぐようなコーパスを優先的に入れていったほうが学習がしやすいのかどうかを調べたくなるわけです。

例えば対訳コーパスというのは、英語と日本語が混ざったもの、これとこれが翻訳の関係にありますというコーパスなのですが、そこで次の単語を予測してから学習したり、対訳コーパスと日本語のコーパスを単純に結合してから次の単語を予測するような継続学習をしたり、対訳コーパスを使ってインストラクション・チューニング。つまり、この次の日本語の文を英語に訳してくださいみたいな、そういう学習データに変換したものを入れてから、言語モデルを学習するとどうなるのかということを調べています。

効果がありそうなパターンは見られて、特に翻訳の性能を上げることには成功したものの、それ以外のタスクへの波及効果がちょっと認められなかったのでそこは断念なのですが、アカデミックの研究としては、そういう取り組まれていないことに取り組んで、それがどういう結果になるのかという知見を共有するようなことも我々は取り組んでいます。自己紹介としては以上になります。