ChatGPTのベースになった自然言語処理モデル「Transformer」を調べていたら「Hugging Face」に行き着いた

| 5 min read
Author: shuichi-takatsu shuichi-takatsuの画像

ChatGPT を使ってみる

#

最近「ChatGPT」というワードがSNSを賑わしているようです。
筆者は技術に対しては非常にミーハー(?)なので、ChatGPTが何なのか?また、どれほど凄いのか試してみたくなりました。
さっそく ChatGPT を使ってみたいと思います。
(ChatGPTの利用登録の方法については、解説サイトがたくさんありますのでそちらを参照ください。Googleアカウントを持っていればGoogleアカウントと連携してログインすることも可能です)

ChatGPTに登録してログインすると以下のような画面が表示されます。

Examplesを使って、いくつかの問いかけに対する応答を確認することが出来ます。
試しにExamplesの一番上にある「Explain quantum computing in simple terms」を選択して ChatGPT へ問いかけをしてみます。
(問いかけの内容は「量子コンピュータについて」のようです)

問いかけを実行すると以下のような応答が帰ってきました。

応答文はかなりの長文です。
問いかけの内容が英語だと分かりにくいので(単に筆者の英語力が足りないのですが)、日本語で問いかけてみます。

なんと!
とても自然な日本語で応答が帰ってきました。
出力された文章を読んでもまったく違和感がありません。
Google検索の結果とは違って「どこかで公開されている文書へのリンク」ではなく、いま作成された日本語の文章です。
まるでチャットの向こう側に普通に人間が居て対応しているかのような自然な文章です。

ChatGPT に英語で問い合わせると英語で、中国語で問い合わせると中国語で応答がありました。

次に、ベタな展開ですが ChatGPT に「ChatGPTとは?」と問いかけてみます。
以下のような応答が帰ってきました。

応答文の中に「GPT-3.5アーキテクチャ」という聞き慣れない単語が出てきたので、さらに問いかけてみます。
以下のような応答が帰ってきました。

応答文の中に「トランスフォーマー」という単語が入っています。
「トランスフォーマー」という”カタカナ文字”を見てしまうと、日本でもヒットしたハリウッド映画を連想してしまいそうですが、ここで言っている「トランスフォーマー」は深層学習モデルの「Transformer」のことです。

試しに、少しマイナーな話題を ChatGPT に問いかけてみましょう。
問いかけの内容は、筆者が昔からプレイしているゲームについてです。

ゲーム自体は2014年にリリースされた古参のゲームです。
今ではそれほどユーザ数も多くないと思われるゲームなのですが、しっかりと応答してくれています。
ChatGPT が必ず正解を答えてくれるとは限りませんが、想像していた以上に流暢な日本語で応答することに驚愕です。
他にも色々な質問や感想を尋ねてみましたが、どれもスムーズな会話になりました。

このまま ChatGPT と会話をしているだけで、投稿ネタが出来てしまうんじゃないか?と思うほど自然な日本語で応答が帰ってきます。

トランスフォーマーとは

#

応答文の中にあった「トランスフォーマー(Transformer)」について調べてみます。

トランスフォーマー(Transformer)はGoogleが開発した自然言語処理のための深層学習モデルの一つです。
トランスフォーマーが登場する前の自然言語処理の主流は「再帰型ニューラルネットワーク(RNN)」でしたが、RNNはその名の通り「再帰型」なので、再帰を繰り返すことで学習に必要な「勾配」が消失してしまうなどの欠点がありました。
また長い文章を処理すると爆発的に計算量が増えてしまい処理できなくなることもあります。

それに対してトランスフォーマーは対象全体を一度に処理することが出来る「Attention」という仕組みを採用しており、RNNよりも効率的に処理することが出来ます。

この記事(2017年8月31日)で Transformer が紹介されていて、さらに「Attention Is All You Need」というタイトルの記事が紹介されています。
(このタイトルもちょっぴりハリウッド映画を想像してしまいますね)

「Attention」の英単語の意味は「注意」です。
人間は文章を読むときにすべての文言を均等に意識して読んでいるわけではありません。文章の中の重要な部分に「注意」を払いつつ文章を読んでいるはずです。
Attention は、文章や時系列データなどの連続データの中の「どこに注目すべきか」を機械学習的に特定する仕組みです。

Attension の何がすごいのか

#

我々の生活に関連する様々な分野で機械学習/深層学習が有効に働くことは既に実証されてきましたが、学習が高度になればなるほど「なぜその結果に辿り着いたのか?」を説明することが困難になってきていました。
つまり「推論結果は正しいと思われるが、なぜその推論結果を導き出したのか」を客観的に説明することが困難でした。

例えば以前の投稿で、ある画像を画像認識モデルに入力して、その画像に写っているものは「猫」である可能性が高いと画像認識モデルは推論しました。
しかし、画像認識モデルのどの層がどういう働きをして画像の中に写っているものが猫だと認識するに至ったのかという「判断根拠」を説明することは困難なことでした。(最近は判断根拠の可視化と説明可能性の研究がかなり進んでいると思いますが)

Attention は学習した結果として「どの部分に注意したか」を示すことが出来るので「判断根拠」の可視化という意味で非常に有効な手段になります。
「判断根拠」が可視化されてその根拠に納得できるようになれば、色々な意思決定に役立つと思います。

Transformer の系譜

#

RNN以降のTransformerの系譜を少し調べました。
概略を以下に示します。

Transformerが2017年に発表されて以降、非常に早いペースで開発が進んでいることがわかります。
GPT-1に続き、GPT-2、GPT-3、GPT-4と次々に新しいトランスフォーマー技術が開発されています。
最新の GPT-4 は2023年3月14日に公開されたようです。

ミーハーな筆者としては「とにかく簡単にトランスフォーマーを試してみたい」ということで、色々と調べました。
すると Hugging Face というサイトを見つけました。

Hugging Face を使って事前学習済みモデルで遊ぶ

#

折角なので「Hugging Face」について ChatGPT に問い合わせてみましょう。
以下のような応答がありました。

「Hugging Faceは、自然言語処理(NLP)の分野で活躍する人々のためのオープンソースのライブラリやツールを提供している企業です。Hugging Faceは、トランスフォーマーなどのニューラルネットワークモデルを中心に、NLPの最新の研究成果を共有し、開発者がより簡単にNLPアプリケーションを構築できるように支援しています。Hugging Faceの最も有名な製品は、Transformersと呼ばれるオープンソースのライブラリです。Transformersは、多くの事前学習済み言語モデルを提供し、これらを特定のタスクに微調整することで、高度なNLPアプリケーションを構築できるようになっています。また、Hugging Faceは、多言語対応の機械翻訳、感情分析、テキスト生成など、さまざまなNLPタスクをカバーするライブラリも提供しています。」

Hugging Face では様々な事前学習済みモデルを公開しているようです。

さっそく Hugging Face に登録して使用してみます。
登録画面で「メールアドレス」と「パスワード」を登録すると、確認メールが送信されてくるので確認を実行して登録が完了します。
ログインすると以下のような画面が表示されました。

Hugging Face サイトの中の「models」を選択します。

様々な種類の機械学習モデルが用意されているようです。
今回は文章を生成してみたいので、公開されている機械学習モデルの中の「テキスト生成」を選択します。

画面の右側に利用可能な機械学習モデルのリストが表示されますが、数が非常に多いのでフィルターに「japanese」を設定して日本語用でフィルタリングします。

それでも数が多くて迷うのですが、リストの中に表示された「abeja/gpt2-large-japanese」を選択します。

画面右下の「Text Generation」のテキストボックスの中にサンプル文章が表示されています。
どうやら、このテキストボックスに文字を入力して「Compute」ボタンを押せば、何らかの文章を生成してくれる仕様のようです。

画面右下の「Text Generation」のテキストボックスに以下の文章を記述して「Compute」ボタンを押してみます。
株式会社豆蔵は最先端技術・ノウハウで

結果として次のように文章を続けてくれました。

入力する文章を少し変えてみます。
株式会社豆蔵は最先端技術・ノウハウで社会に

結果が少し変化しました。

入力に使った文章の元ネタは以下です。

出力された内容はそれなりに筋の通った文章になっていることがわかります。
ChatGPT へ続く自然言語処理の一端を見れたように思います。

今後について

#

Hugging Faceで想像以上に遊べることがわかったので、今後は

  • Python(PyTorchやTensorflow)でプログラムから機械学習モデルを呼び出してみる
  • Attensionの可視化をグラフで表現してみる

なども試してみたいと思います。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  7. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  8. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する (2023-01-16)
  10. Nuxt3入門(第7回) - Nuxt3のプラグイン・ミドルウェアを使う (2022-10-23)