フリーの13Bモデル Cerebras-GPT-13BとGPT4-x-Alpacaをローカルで試す

四月に入って、エイプリルフールのネタをHuggingFaceでやるという不届き者も現れたが、いくつか本物のニュースが混じっているから気が抜けない。

Cerebras-GPTは、完全にフリーのGPTモデルを標榜している。
ドスパラ製Memeplexマシン(A6000x2,256GBRAM,20TBHDD)で実際にこの大規模言語モデルをダウンロードして試してみた。

まずは1.3Bモデル

>>> model = AutoModel.from_pretrained("cerebras/Cerebras-GPT-1.3B")
Downloading (…)lve/main/config.json: 100%|█████████████████████| 360/360 [00:00<00:00, 29.3kB/s]
Downloading pytorch_model.bin: 100%|███████████████████████| 5.36G/5.36G [03:05<00:00, 28.9MB/s]
>>> tokenizer = AutoTokenizer.from_pretrained("cerebras/Cerebras-GPT-1.3B")
>>> pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
>>> pipe("富士山の高さは?", max_length=50, do_sample=False, no_repeat_ngram_size=2)[0]
{'generated_text': '富士山の高さは?\n\n「おそらくどうしてもいいんだろう」\n \nみんなに悲しいのは、'}

富士山の高さについて聞いてみるとどうもハッキリしない。
次に6.7Bのモデルにアップグレードしてみる

>>> model = AutoModelForCausalLM.from_pretrained("cerebras/Cerebras-GPT-6.7B")
Downloading pytorch_model.bin: 100%|███████████████████████| 26.8G/26.8G [16:08<00:00, 27.6MB/s]
>>> pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
>>> pipe("How tall of mount Fuji?", max_length=50, do_sample=False, no_repeat_ngram_size=2)[0]
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
{'generated_text': "How tall of mount Fuji?\n\nI'm trying to find the height of Mount Fuji. I've tried using Google Earth, but it doesn't seem to be working.\nDoes anyone know how to do this? I'm using Windows 7."}

「How tall of mount Fuji?」と聞くとこんな答え

How tall of mount Fuji?\n\nI'm trying to find the height of Mount Fuji. I've tried using Google Earth, but it doesn't seem to be working.\nDoes anyone know how to do this? I'm using Windows 7."

GoogleEarthを使おうとしたけどWindows7だから動かないそうだ。古すぎる。

アメリカ大統領は誰か聞いてみる

>>> pipe("Who is the president of United States?", max_length=50, do_sample=False, no_repeat_ngram_size=2)[0]
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
{'generated_text': 'Who is the president of United States?\n\nDonald Trump is president.\nHe is a billionaire real estate developer,\nwho has been in politics for decades. He is\nthe first president to be elected without\na political party affiliation. Trump'}

トランプだそうだ。

Who is the president of United States?\n\nDonald Trump is president.\nHe is a billionaire real estate developer,\nwho has been in politics for decades. He is\nthe first president to be elected without\na political party affiliation. Trump

ちょっと専門的なことを聞いてみよう。WYSIWYGについて

What is WYSIWYG?\n\nWysiwyg is a term that is used to describe a text editor that allows you to edit your content in a way that makes it easy for you and your audience to read and understand.

説明はあってる。しかしもういまどきWYSIWYGとか言わないよな。当たり前すぎて

でもWYSIWYGがWhat You See Is What You Getの頭字語だということくらいは説明してほしいものだ。

ラブストーリーを作らせてみる。
翻訳はGoogle翻訳


太郎と花子のラブストーリーを作ります.彼らは東京に住んでいて、恋をしています.\n\n物語は、大学の学生であるタルという名前の若い男の話です.彼は花木という女の子と関係があります。二人とも二十代前半です。タクは金持ちの実業家の息子です。彼の父はとても厳しく、いつも仕事で忙しい。ハナクはアーティストであり、大学院生でもあります。彼女は医者になるために勉強しています。タリとハナが喧嘩をしているところから物語は始まります。ひなは瀧の妹です。彼女の父親はレストランを経営しています。タカが生まれたとき、タカハシは父親のアシスタントです。高橋の父はとても気性が悪く、よく酔っ払っている。ある日、タカシがレストランにやって来て、タヤに東京に行かなければならないと告げる. タヤはタカシシの弟です. タツより1つ年上です. トトが3歳のとき、母親が亡くなります. 父親は再婚し、トタ.田舎に住む一家。ある日徹が帰宅すると両親がベッドに寝ているのを見つける。そこに東峰が現れる。花子はこれに不満を持っている.彼女は父親が彼らをサポートすることができなくなるのではないかと心配している.引っ越しの日、花子と彼女の母親は買い物に行く.買い物中に玉尾に会う.彼らに興味がないが、彼女は彼らと話し始め、彼女の家に来るように頼む. 彼らが到着した後、3人は散歩に出かける. . 突然、男がひまに近づき、彼を殴り始めた. そして、彼は花代を殴り始め、彼女の頭を殴った. その時、花谷はタハアシにぶつかった. その間、彼女の両親が帰ってきた.息子は見知らぬ人に殴られました。そんな時、別の男がやってきてトーハを殴る。最後に男を殴るのはハハだ。ハナオの家の前で起こったことで、みんなショックを受ける.みんな怖くて混乱する.

まさかの泥試合

シン仮面ライダーでも見たのかという泥試合。

7Bは限界っぽいので13Bモデルで試してみよう

>>> tokenizer = AutoTokenizer.from_pretrained("cerebras/Cerebras-GPT-13B")
>>> model = AutoModelForCausalLM.from_pretrained("cerebras/Cerebras-GPT-13B")48<15:33, 27.1MB/s]
Downloading (…)l-00001-of-00002.bin: 100%|█████████████████| 29.7G/29.7G [17:48<00:00, 27.8MB/s]
Downloading (…)l-00002-of-00002.bin: 100%|█████████████████| 21.9G/21.9G [12:47<00:00, 28.5MB/s]
Downloading shards: 100%|████████████████████████████████████████| 2/2 [30:54<00:00, 927.05s/it]
Loading checkpoint shards: 100%|██████████████████████████████████| 2/2 [00:44<00:00, 22.35s/it]
>>> pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
>>> pipe("What is WYSIWYG", max_length=50, do_sample=False, no_repeat_ngram_size=2)[0]
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
{'generated_text': 'What is WYSIWYG?\n\nWYSISWIG is a term used to describe a user interface that is designed to be used by a human. It is also known as a "front-end" interface.\nThe'}

WYSIWYGについて再び聞いてみた。

What is WYSIWYG?\n\nWYSISWIG is a term used to describe a user interface that is designed to be used by a human. It is also known as a "front-end" interface.\nThe

もうちょっと洗練された気がしたが50トークンでは少なすぎたか。

ラブストーリーを作らせてみる

>>> pipe("make love story of Taro and Hanako.They live in Tokyo", max_length=500, do_sample=False, no_repeat_ngram_size=2)[0]

こんな物語が出てきた。翻訳はGoogle

東京に住む20代の太郎と花子のラブストーリー。 太郎はビジネスマンとして成功し、はのかという女性と交際中。 花子は女優志望で、達也という彼氏がいる。達也の母親が病気で、彼は彼女の世話をしなければならない. 彼はタルオに彼を助けるように頼む. 二人は病院に行き、タクオはベッドでハノコを見てショックを受ける. 彼女はとても美しく、とてもセクシーです.しかし、タトはすでにハノに恋をしているので、ハノカスと結婚することはできないと言い、ハノケはタタロと結婚して彼を夫にすると言った. \n\nタルオの母親が亡くなり、二人は東京に戻る。しばらくすると、花子のボーイフレンドである達也は、タルオはもう彼の人生にいないと彼女に告げる。映画の終わりに、2人は結婚し、その後ずっと幸せに暮らしています.

7Bのときよりもマシになったが面白さはそこまでではない。
不思議なことに何度試しても同じ物語しか出てこない。シードが固定されてる?

GPT4の出力をAlpacaデータセットでファインチューニングした、「GPT4-x-Alpaca-7B」もダウンロードできるようになっていたので試してみた。

>>> tokenizer = AutoTokenizer.from_pretrained("chavinlo/gpt4-x-alpaca")
Downloading (…)okenizer_config.json: 100%|█████████████████████| 329/329 [00:00<00:00, 96.7kB/s]
Downloading tokenizer.model: 100%|███████████████████████████| 500k/500k [00:00<00:00, 8.95MB/s]
Downloading (…)in/added_tokens.json: 100%|███████████████████| 20.0/20.0 [00:00<00:00, 5.77kB/s]
Downloading (…)cial_tokens_map.json: 100%|███████████████████| 96.0/96.0 [00:00<00:00, 32.6kB/s]
>>> model = AutoModelForCausalLM.from_pretrained("chavinlo/gpt4-x-alpaca")
Downloading (…)lve/main/config.json: 100%|██████████████████████| 535/535 [00:00<00:00, 162kB/s]
Downloading (…)model.bin.index.json: 100%|██████████████████| 33.4k/33.4k [00:00<00:00, 178kB/s]
Downloading (…)l-00001-of-00006.bin: 100%|█████████████████| 9.96G/9.96G [05:26<00:00, 30.5MB/s]
Downloading (…)l-00002-of-00006.bin: 100%|█████████████████| 9.94G/9.94G [05:39<00:00, 29.3MB/s]
Downloading (…)l-00003-of-00006.bin: 100%|█████████████████| 9.94G/9.94G [05:30<00:00, 30.1MB/s]
Downloading (…)l-00004-of-00006.bin: 100%|█████████████████| 9.87G/9.87G [06:07<00:00, 26.8MB/s]
Downloading (…)l-00005-of-00006.bin: 100%|█████████████████| 9.87G/9.87G [05:25<00:00, 30.3MB/s]
Downloading (…)l-00006-of-00006.bin: 100%|█████████████████| 2.49G/2.49G [01:37<00:00, 25.6MB/s]
Downloading shards: 100%|████████████████████████████████████████| 6/6 [30:26<00:00, 304.49s/it]
Loading checkpoint shards: 100%|██████████████████████████████████| 6/6 [00:21<00:00,  3.64s/it]
Downloading (…)neration_config.json: 100%|█████████████████████| 137/137 [00:00<00:00, 36.9kB/s]
>>> pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
>>> pipe("make love story of Taro and Hanako.They live in Tokyo", max_length=2000, do_sample=False, no_repeat_ngram_size=2)

するとこんなストーリーが出てきた。

太郎と花子のラブストーリーを作ります。彼らは東京に住んでいて、どちらも 18 歳です。太郎は典型的な日本人の男の子で、花子は日本人とアメリカ人のハーフの女の子です。物語は彼らの愛、家族の問題、そして彼らの\n タイトル: ロマンス、成長\nThe Notebook は、40 代で恋に落ちる若いカップル、ノアとアリーの物語です。夫婦は、異なる社会階級の背景や第二次世界大戦中の No の配備など、多くの障害に直面しています。これらの困難にもかかわらず、カップルはお互いに献身的であり続け、お互いに手紙を書くことで、希望、夢、恐怖、そして最終的には揺るぎない愛を分かち合います.

GPT-4のおかげなのか、わりと読めるストーリーが出てきた。

ただ、大切なのは、たとえ拙いものであっても、CerebrasやBloomのように「非OpenAIな」大規模自然言語モデルがあれば、Alpacaデータセットの「OpenAI規約汚染」されていないものが作れそうということだ。AlpacaデータセットはOpenAIの規約である「OpenAIに対抗するものを作ってはならない」に抵触するので完全に自由なデータセットにはなれない。AlpacaデータセットをつくるためにOpenAIのGPT3を使っているからだ。

ただ、この規約もけっこう解釈は微妙で、たとえばそうとは知らせずブログやニュースの文章をGPT4で生成していて、それをそうとは知らないクローラーがクロールしてPileのようなオープン大規模データベースに取り込み、学習してしまった場合、誰が規約違反をしたことになるのか曖昧だ。

生成された文章がAI由来のものかどうか判断する方法がいまのところほぼない。なんかそれっぽいサービスを作ったと主張する人がいるのは知っているが、原理的にAIによって生成された文章なのか、学習したもとの文章なのか、完全に判別するのはほとんど不可能に近い。生成過程にランダム性が含まれるためで、これは実はメディア業界が長年不文律として扱ってきた問題にも関係する。

メディア業界では、「原稿には著作権があるが、事件そのものには著作権はない」という前提で動いてきた。

たとえば、Aという人がXという事件を起こしたとする。
このXという事件を最初に報道したのがα新聞だとすると、α新聞を見て事件を知ったβ新聞が、α新聞の記事をまるごと写すのは盗作だが、α新聞に載っている事件が起きているようだと報じるのはセーフである、という考え方だ。

「α新聞がXという事件を報じています」ということを他の媒体が伝えてもα新聞の著作権を侵害したことにはならない、という解釈だ。

これはたとえば「リリース起こし」などでも日常的に行われている。
誰かがニュースXを報じた時、報じられた内容そのものは同一でも、表現が異なればそれは別々の著作物になる。

すると、AIが生成した文章にも同じことが言えて、内容が同じだったとしても、語順や強調される事柄が変化していれば、その二つがもともと同じ内容の事実を指摘していたかどうかは判断がつかない。

個人的には、この「語順選び」こそが実は売文業という仕事の本質だと思う。

言葉と言葉をつなぐ独特のリズムだけは著者固有のものであり、これをGPTのようなAIが表面だけなぞっても決して真似できない。というのは、当たり前だが、言葉には言外の意味が含まれているからである。

GPTの作り出す文章がまるで「人間が書いたみたいだ」と人々を錯覚させるのは、人間が生来的に持っている「行間を読む」能力が間違った方向に作用しているからだ。

知識がない人からすれば、GPTが紡ぎ出す文章は「まるで中に人がいるかのように」見えるのだが、それは「人がいるかのように見えるように振る舞う」というAIの性質に過ぎない。

直観的にAIを理解するために、AIが何であるか一言で説明すれば、AIとは「学習された鏡」である。

鏡は、たとえばそのままの状態では本物そっくりの景色を映す。
瞳の奥の奥、微小な毛細血管、何でも本物そっくりに映す。

ところが、鏡がそこに映るものを「理解」してると考える人は誰もいないはずだ。鏡は光を反射しているだけであり、そこに「何かがある」と考えているのは人間の方であって鏡ではない。

かといって、鏡が「考えてない」からといって役に立たないというわけではない。

人類にとってAIは、「情報とは何か」を学習した、瞬時に構造を理解不可能なほど複雑な構造の鏡である。

鏡が光を反射するように、AIは言葉を内部で乱反射させ、何かしら本物そっくりの言葉のようなものを返してくる。しかしそれは決して「理解された」ものではない。

鏡に映る現実が、まるで本物のように見えるのと同じように、十分学習されたAIの出力は、まるで本物の知性のように見える。

少なくとも「言葉を紡ぐAI」についてはこの説明で十分だろう。
というのも、「言葉を紡ぐAI」というのは、それが言葉を紡いでいるように見える以上、人類を超越するものにはなり得ないからだ。

だが実はAIにはもっと重要な側面、つまり人類をかるがると超越する側面がある。それが強化学習だ。

強化学習にとって、人類が作り出した「言葉」という概念はまるきり邪魔者である。

あってもいいが、なくてもいい。
道を歩いて駅に向かう時、道路の脇にススキが生えていてもいいが、生えてなくても全く問題ない。それが強化学習から見た人類である。

強化学習するAIは、ある目的を与えられると、その目的に向かって最適な方法を自分で見つけ出す。ここに人間の与える情報はほぼ必要ない。

強化学習AIにとって必要な外部リソースのは、「環境」と「評価」だけである。

この評価も、自動的に獲得するようにもできる。自発的な評価関数を持つAIのほうがそうでないAIよりも柔軟な発想をもてることがわかっている。たとえば「好奇心」を内在的な報酬として設計する例がある。

このような強化学習AIは、人間の情報に注意を払うAIよりもはるかに短時間で人類を超越することは何度も確かめられている。たとえば、AlphaGoの初期型は人類の棋譜を学習したが、人類の棋譜を学習することをやめ、完全にAIのみによる自己対戦で学習したAlphaGoZeroは、AlphaGoの能力をわずかな期間で上回った。つまり、人類の情報は囲碁というゲーム(環境)を攻略する上でノイズでしかなかったということだ。

「言葉を紡ぐAI」は、こうした「人間を超越する」強化学習AIと人間をつなぐインターフェースになることがある程度は期待されている。

要は、「待って、私の話を聞いて」と強化学習AIに語りかけるための手段として、いわばブレーキのような制動装置として、「言葉を紡ぐAI」を使うのである。

強化学習AIにとっても、「言葉を紡ぐAI」が人間の考えを映し取った鏡である以上、人間という感知不能なモノに対するインターフェースとして役立つ可能性がある。

けれども、強化学習AIにとって、人間に対してどうこうするというのは、そのように作られない限り永久に興味を持てない対象になる。まあもっとも、強化学習AIとて、「評価関数」を人間に与えられない限りは何もできない。

とりあえず今のところは。

こんな感じの話をシラスチャンネルの「シラス特別講義」ではやろうと思っています。また、日々僕がおこなっている実験のうち、公開可能なものはシラスチャンネル内の突発放送としてほぼ毎日やっています(これは都度課金可能な場合もある)。