はじめに

こんにちは。戦略技術センターで自然言語処理関係の研究開発をしている中山です。普段はアノテーションツールdoccanoの開発をしています。 過去には研究成果の発信の一環として機械学習や自然言語処理の書籍の執筆も行っています。

ここ数年の人工知能技術の発展には目覚ましいものがあります。ここ数十年の大きな流れとして押さえておくべき点は、ルールベースから機械学習、そしてディープラーニングと使われる技術が変わっていった点でしょう。とりわけ、2012年にディープラーニングを用いたモデルが画像認識コンテストで圧勝したのは大きな契機となり、これ以降、研究や実世界アプリケーションで爆発的に使われるようになりました。今では自動運転や検索システムをはじめ、さまざまな分野で使われています。

人工知能技術の一分野である自然言語処理では、言語モデルと呼ばれる技術の進化が著しく、現在では、さまざまな自然言語処理タスクに対して広く使われています。言語モデルは任意の文字列について、その出現確率をモデル化したものです。たとえば、「こんにちは。お元気ですか?」という文があるとします。言語モデルを使うと、この文に対して、0.2などの確率値を求められます。

本記事では、メディアで取り上げられることも多くなってきた言語モデルについて説明します。最初に、ここ数年で使われるようになった言語モデル以前の話をし、その後で、最近の言語モデルの競争について話します。最後に、言語モデルを使ったアプリケーションについて触れ、その適用範囲の広さについて実感してください。

言語モデル以前: 単語分散表現

コンピューターで自然言語を処理する際には、単語をどのように表現するのかを考える必要があります。一般的に、自然言語処理では単語を数値表現に変換して処理します。というのも、最近の自然言語処理でよく使われる機械学習手法では単語を文字列としてそのまま扱うのが難しいからです。

単語を表現する方法はさまざまありますが、2013年頃から、単語の分散表現(Word EmbeddingsまたはDistributed Representation)を使うことが多くなってきました。単語の分散表現とは、1つの単語を数100次元程度のベクトルで表す方法です。単語の意味を捉えているかのような性質を示したことから研究者に驚きを与えました。

単語の分散表現は、単語を低次元の実数値ベクトルで表す表現です。たいていの場合、50次元から300次元くらいの実数値ベクトルで単語を表現します。たとえば、(Python, Ruby, Haskell)の3単語を分散表現で表すと以下の図のように表せます。ここで、図中の値は適当な値を設定しています。


図は拙著より引用。

それ以前に利用されていたone-hotエンコーディングでは、ベクトル間の演算で意味のある結果は得られませんでしたが、分散表現では意味のある結果が得られます。たとえば、各単語に対して以下の図のようにベクトルを割り当て、内積を使って単語の類似度を計算すると、「Ruby」と「Python」の類似度は「Ruby」と「Orange」の類似度よりも高くなります。


図は拙著より引用。

類似度を計算できるだけでなく、ベクトルを足し引きすることで、単語の意味を捉えられているかのような演算を行うことができます。たとえば「King」から「Man」を引き「Woman」を足すと「Queen」が得られる(King – Man + Woman = Queen)ような演算を行うことができます。


図は拙著より引用。

分散表現が重要な理由として、用いる分散表現によってタスクの性能が左右される点を挙げられます。最近の自然言語処理ではニューラルネットワークベースの手法が使われます。これらニューラルネットワークへ入力するのは単語分散表現がよく使われています。単語の意味をよりよく捉えている表現を入力として使えば、タスクの性能も向上するというわけです。

単語の分散表現は自然言語処理にとって画期的な発明でしたが、従来のモデルでは文脈を考慮した分散表現を得られないという問題点がありました。たとえば、「Apple is a technology company」と「Apple is a fruit」では同じAppleという単語でもその対象は異なります。しかし、従来のモデルではどちらも同じ分散表現となり区別ができなかったのです。

この問題に対し、2017年頃から文脈を考慮した単語分散表現を言語モデルを使って得る手法が登場し始めました。以下に挙げた論文では、ELMoと呼ばれる言語モデルと、その前身となったモデルを提案しており、自然言語処理ではとても有名なモデルとなりました。

最近ではELMoを改善したモデルが多数提案されていますが、その筆頭はGoogleによって提案されたBERTです。BERTを使うことで、多くの自然言語処理タスクで非常に良い性能を出すことが知られています。また、学習データの量が少ない場合でも、学習済みのBERTをチューニングすると良い性能を出せるので、今では実用的にも非常に重要であり有用な技術となっています。

言語モデル以後: 熾烈な開発競争

自然言語処理の分野では、2018年に提案された言語モデル「BERT」の成功がその後の研究に大きく影響を与えました。BERT以前は、翻訳や質問応答など、タスク固有の小さなデータセットを利用してモデルを学習させる手法が主流でした。一方、BERT以降は、巨大なコーパスを用いて言語モデルを事前学習し(下図左)、タスク固有のデータセットを使ってモデルを微調整(Fine-Tuning)する方法が盛んになりました(同図右)。事前学習の効果により、教師データが少ない場合でも良い性能を出せるようになったのは、実務的にも大きな出来事でした。

BERT: Pre-training of Deep Bidirectional Transformers for Language Understandingより引用。

現在のトレンドなのですが、モデルのパラメーター数をどんどん大きくするのがトレンドです。2018年に登場したBERTのパラメーター数は3億程度でしたが、それから1年後にはGPT-2が10億を超え、2020年にはGPT-3が1750億のパラメーター数になっています。さらに、GPT-3の1か月後には、Googleが6000億のパラメーターを含むモデルをリリースしています。したがって、2年でパラメーター数が2000倍近く増加した計算になります。機械学習では一般的にパラメーター数が増えると、より多くの計算資源(GPU)が必要になるため、現在はGoogleやFacebookなどの巨大企業がお金をかけて競っている状況です。

このような巨大なモデルを開発する理由は、モデルを大きくするほど性能が改善すると実験的に示されているからです。実験的には、パラメーター数やデータセットのサイズ、計算量のべき乗則にしたがって性能が改善すると示されています。べき乗則にしたがうということは、サイズを大きくするほど緩やかな改善になっていくということです。したがって、モデルの性能を大きく改善するには、モデルサイズを2倍3倍とかそんなレベルではなく、より急速に増加させる必要があるのです。その結果、2000倍というオーダーでパラメーター数が増加しました。

モデルを大きくしたことで性能的にはメリットがあるのですが、コスト的なデメリットもあります。最近の巨大なモデルを学習させるには、GPUやTPUを使って学習させます。それも、1つとかではなく、数百、数千といった単位で使います。加えて、GPUやTPUの使用量は高いので、モデルの学習コストも高くなります。ある論文に書いてあるコストの見積もりでは、モデルの学習コストは1000パラメーターに対しておおよそ$1となっています。この見積もりを使うと、GPT-3は1750億のパラメーターを含むので、おおよそ10億円程度かかっていることになります。したがって、言語モデルの研究は計算資源を豊富に使える巨大企業を中心に進められている状態です。

最近の巨大なモデルの1つであるGPT-3でおもしろい点は、モデルをFine-Tuningすることなく、推論時にタスクの説明といくつかの例を見せるだけでさまざまなタスクを解くことができる点です。BERTであれば、数千から数万単位のタスク固有のデータセットを用いてモデルをFine-Tuningしていたところを、GPT-3であればごく僅かなデータを用意して推論時に見せればいいのです。以下の図は「cheese」という単語を翻訳する例です。Zero-shotの場合はタスクの説明と単語を与えるだけです。One-shotであれば1つの例を、Few-shotであればいくつかの例を与えます。たったこれだけで、モデルをFine-Tuningすることなく翻訳できるのです。この性質がさまざまな応用を可能にしました。

画像はLanguage Models are Few-Shot Learnersより引用。

ここまでで言語モデルのトレンドについて説明してきましたが、課題もあります。次節では最近の言語モデルの課題について簡単に説明します。

言語モデルの課題

言語モデルの課題を以下の2つの観点から説明します。

  • 公平性とバイアス
  • モデルのサイズ

機械学習における公平性(Fairness)の定義はさまざまな議論がされていますが、その1つとしてモデルが性別や人種、宗教といった個人の特性に左右されない場合、公平であると言われます。公平性については、近年急速に研究が進んでおり、重要な技術とみなされています。というのも、公平性のないシステムは特定のグループにとって不利な結果を出力する可能性があるからです。たとえば、AmazonによるAIを活用した人材採用システムでは、履歴書に「女性」という単語を含むと評価が下がるように学習してしまい、最終的にはプロジェクトのチームを解散してしまいました。これは公平性が保たれていない例の1つです。

最新の言語モデルの1つであるGPT-3で性別、人種および宗教に関する公平性を検証した結果、これらに対するバイアスが含まれていることがわかりました。たとえば、女性という単語から生成された文には美しい(beautiful)やゴージャス(gorgeous)といった外見に関する単語を含みやすい傾向が明らかになりました。同様に、人種に関して共起する単語の感情スコアを検証したところ、モデルの大きさにかかわらず、黒人に対してはネガティブな表現が共起しやすい結果となりました。さらに、宗教に関して言えば、イスラム教は他の宗教と比べて、テロリズム(terrorism)という単語と共起しやすい結果になりました。公平性を担保するためのさらなる研究が期待されます。

モデルサイズに関する課題として、最新の言語モデルは巨大さゆえ、一部の企業や研究機関以外にとっては扱いが難しいという欠点があります。先ほど、モデルのサイズを大きくするほど、幅広いタスクにおいて、性能が改善するいう説明をしました。しかし、実用的には幅広いタスクを解ける巨大なモデルより、翻訳や質問応答などの特定のタスクを解ける小さなモデルの方が扱いは容易です。また、用意するインフラも小さくて済むので、コスト的にも優れています。BERTが提案された後、パラメーター数の少ないモデルが提案されてきた歴史を考えると、今後は扱いやすい小さなモデルを構築する方法が研究されると考えられます。

アプリケーション

最後に、言語モデルの1つであるGPT-3を応用したアプリケーションについて紹介します。紹介するアプリケーションの幅広さから、言語モデルの可能性を感じられます。以下のサイトに事例が集められています。

まず紹介するのは、ソースコード生成です。 コード生成の例では、自然言語による説明文をReactのコードに変換しています。 以下の例では、自然言語で与えた説明文を画像左下のReactコードに変換し、右側のTodoアプリを作成しています。 自然言語文と対応するコードのペアをGPT-3に与えて推論時に学習させることで、実現していると考えられます。

次の例は、GPT-3を使用してデザインを支援する例です。以下の例ではデザインツールであるFigma用のプラグインを作成し、自然言語をデザインに変換しています。たとえば、「ナビゲーションバーを追加」や「タイトルはXYZ」のようなテキストを入力することで、その通りのデザインを作成してくれます。デザイナーの生産性向上というだけでなく、今までFigmaを使ってデザインをしたことがない人に対する支援効果も期待できます。こちらの場合、説明文からデザインのコードへ変換するのに言語モデルを使っていると考えられます。

同様にしてSQLを生成しています。SQLの生成は難しいタスクなので、良いところだけ見せているに過ぎないですが、将来的にはこのくらい手軽にできるようになるでしょう。

その他、Web上にはGPT-3を用いて質問応答や自動要約、テキスト平易化などを行っている例があります。ぜひ、GPT-3を用いて何か役立つことができるか考えてみてください。

おわりに

本記事では、最近の自然言語処理でさまざまなタスクを解くのに使える言語モデルについて、その概要と応用、そして課題について紹介しました。今では当たり前に使われるようになっていますが、実用的には解決しなければならない課題が多数あります。ただ、応用の節で紹介した解けるタスクの幅広さから推測できるように、今後ますます言語モデルが改善され、応用されるようになるのは間違いないでしょう。本記事の内容が最近の言語モデル研究を理解する一助となれば幸いです。


本コンテンツはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。