自然言語処理AIとの接近

画像生成系AIの華やかさに比べると、自然言語系AIは貢献の大きさにも関わらず地味な印象でした。

それが昨年末に登場したChatGPTの登場で注目が集ったのはご承知の通りです。

とはいえ、これまでも、私たちが自然言語処理AIの貢献に「おっ!」と思う機会はありました。2019年頃にGoogleがサービス品質が向上のため導入したAI言語モデル「BERT」がもたらした変化でした。

そのときは、Google翻訳の品質が向上したと話題になりました。もっとも翌2020年にはDeepL翻訳が登場して話題をかっさらっていきましたが、こちらもAI技術が活かされたサービスでした。

ChatGPTは、OpenAIという研究企業が開発したGPT(Generative Pre-trained Transformer)と呼ばれる自然言語処理向け大規模言語モデルの第三世代「GPT-3」を利用したチャット型の応答システムです。

自然言語処理AIをチャットというインタラクティブな形で一般に提供したこと、加えて外部のプログラムからAI機能を利用できるようにするAPIを提供したこと。このことで大注目を集めることになりました。

インターネットやクラウドサービスなどの基盤となる技術が、広く社会に浸透することで日常生活が大きく変化してきました。これと同じレベルで変化を起こすと目されているのがAI技術であり、それが広く浸透するとどうなるかを垣間見せてくれているのが今回のChatGPTの登場とそれに続くMicrosoftの新しいBingです。

Googleも言語モデルBERTを大幅に改良した「LaMDA」をつくっており、これを利用した会話型AIチャットサービス「Bard」の提供を予定しています。


これまで、自然言語処理AIの言語モデルは、主にGoogle翻訳やDeepL翻訳などに代表される言葉を扱うサービスの裏方技術として陰ながら利用されていたので、存在も地味でした。

ChatGPTは、チャットの形でユーザーとの応答に利用したことで、自然言語処理AIの効果をよりインタラクティブに見せられて分かりやすくなっています。

しかし、報道記事では、当初OpenAIの社員はほとんど誰も評価していなかったサービスだったそうです。玄人と素人でウケるポイントが違ったのかも知れません。一般の人々でも、それまでAIチャットに触れたことがある人ほど、今回も大したことないだろうとタカを括っていたところがあったようです。

ところが公開後、質問と回答といった単純なやりとりだけでなく、問いかけ方次第で様々異なる形で返答さられることが伝わってくると、ChatGPTの潜在威力に気づき始める人が増えていきます。

たとえば、テクノロジー系の人々は、ChatGPTがプログラミングコードを書いてくれることに驚きました。目的の処理を明解に記述してから「その処理ができる○○言語のコードを教えて」と書き添えて質問するだけで、サンプルコードを出力してくれるのです。そこから、サンプルデータを生成させたり、プログラムコードを添削させたりできることに驚嘆していきます。

教育関係では、言語教育の先生達がこのChatGPTに最も反応しました。お願いの仕方次第で、英文を生成したり、入力した英文を要約させたり、添削したり、翻訳させたり、単語帳を生成したり、テストの問題を考えさせたりと思いつくことを積極的に投げ掛けて試しています。(報告動画がYouTubeにたくさん上がっています)

2023年の1月は一般メディアもこぞってChatGPTを取り上げて話題にしました。ネット上でも、実に様々な質問を投げ掛けて、多様な返答を誘導しようとする試みが溢れています。

その性能に多くの人々が驚嘆すると同時に、懸念の声も高まりました。

お題をChatGPTに投げ掛けると、簡単なレポートを作成することは朝飯前。

となれば、学校のレポート課題に利用できると誰もが考え、そして実際にそれが起こり、ChatGPTを課題で利用することを禁止するところも出ました。

禁止する流れの一方で容認や可能性の模索も…

これらの記事でも解説されているように、自然言語処理AIは、GPT-3などの大規模言語モデルのおかげで大変自然な文章を生成し返すようになってきましたが、それは「尤もらしく文章生成する」能力に長けているということであって、「正確な内容の文章を生成する」わけではありません。

そのため、ChatGPTは不正確な内容で「息を吐くように嘘をつく」場合もあるのです。

もっとも、ウソというよりもデタラメというのが近いかも知れませんし、もっと言えばデマカセと表現した方がより近いかも知れません。ChatGPTの中のAIは、学習した通りに文章を生成しているだけですから、学習が間違っていたり十分でなかったりすることが、そのまま生成される文章に反映されてしまっているだけ。意図的に嘘をついているわけではないわけです。知ったかぶりを嘘と呼ぶか呼ばないかに近い感じでしょうか。

このような存在しない事実を出力する事態を「ハルシネーション」と呼びます。

いずれにしても、あまりにも「尤もらしく文章を生成する」ことが引き起こす弊害も小さくないわけで、こうした自然言語処理AI技術が生成する成果の利用について、利用者側に相応のリテラシーが求められます。


ChatGPTは公開一週間も経たないうちに登録ユーザーか100万人を超えたとされ、これほど短期間で100万ユーザーを達成したサービスはなかったと話題です。

これに対してGoogleも社内で緊急事態宣言を発したほど衝撃を受けたようです。そもそも自然言語処理AIに関してはGoogleの貢献が大きく、技術的な蓄積も多いと考えられています。そのGoogleが慌てふためいているというのは、技術的な衝撃というよりも、現段階の成熟度で一般公開してしまう無鉄砲さにだろう思います。

玄人であるGoogleにしてみれば、確かに自然言語処理AIによるチャットは尤もらしく返答するし、インパクトはあるのだろうけれど、質問に対する返答の安全性や品質安定をコントロールする最適解が見つかっていない段階で、AIチャットを素のままで提供するリスクは冒せないできたのだと思います。

それを実験サービスとはいえ一般提供してしまったChatGPTの登場は、Googleにしてみれば「おいおい」といった感じだったのでしょう。

その後、ChatGPTをベースとした多様なサービスが雨後の筍のように登場し、2023年2月に入って、いよいよ真打ちが登場するいたって、Googleの焦りはピークに達します。

以前よりOpenAIへの投資や提携を行なっていたMicrosoftが、自社の検索サービス「Bing」にAIチャットを搭載することを発表したのです。

新しいBingは、ChatGPTの言語モデルGPT-3をベースに検索向けに強化された言語モデルPrometheusを採用したと言われています。より賢くなり、検索した最新情報をもとに返答でき、参照した情報のリンクも表示する点がChatGPTと違います。

さらにMicrosoftは、自社のEdgeブラウザやMicrosoft 365等のアプリケーションにもこのAI技術を導入して、様々な場面で自然言語処理AIの助けを借りられるように開発作業を進めています。

一般の人々があらゆる場面でAIチャットを便利に使うことになれば、これまでのネット検索の在り方が変わってしまうわけで、検索サービスの王者Googleにとっては地位が揺らぎかねない事態というわけです。

従来の検索の概念を前提としていた学校教育にとっても、少なからず影響は避けられません。


情報を効率的に扱う方法のひとつとして、自然言語処理AIがもたらす力を利用することは重要です。

その力がもたらす事態をより具体的に体験できるようになったことで、さて、私たちがそもそもやりたかったことは何だろうという根本的な問いに戻らざるを得なくなります。

知識に携わる人々の中では、立ち位置や価値観の違いによって態度の違いが明確になり、より軋轢が増すかも知れません。技術に振り回されることにうんざりする頻度も多くなるかも知れません。

一方で、様々な可能性が拓ける領域も増えていきます。自然言語処理AIは工夫次第で様々な人工物や活動に利便性をもたらします。それを専門家ではない一般の人々が実現できるという点に、いま起こっていることの凄さがあるといえます。

画像生成AIを試す

この年末年始は帰省をしつつ,原稿執筆をしていました。

プログラミング体験・学習に関する原稿でしたが,他と違った角度から照らしたものにしようと悪戦苦闘してました。詳しくはまた機会をあらためて書こうと思います。

締切仕事から解放されて,ようやく画像生成系のAIを自分のパソコン環境に導入してみました。

この記事のアイキャッチ画像はその画像生成AIモデルの一つである「Anything-v4.0」を導入して描画させたものです。

これは「1boy, computer, typing, looking screen, indoor, casual」というプロンプト(画像描画させるためのキーワード群)を指定して,横長サイズに指定した結果です。

同じ条件でも描画させる度に画像が変わるので,今回も3回目に描画させた結果を採用したものです。この辺は導入の仕方によって生成の手順は異なってくるので,1枚1枚描かせるパターンもあれば,自動的に複数枚の画像を生成させるやり方もあります。コマンドラインで済ます人もいれば,WebUIを利用することもできます。

導入手順は簡単で,たとえばWebUIで使いたければ…

  • Python
  • pythonライブラリ
    • torch
    • diffusers
    • gradio
  • 学習モデル
    • Stable Diffusion v2-1
    • Anything-v4.0

といったものをインストールして,pythonのスクリプトを起動するとローカルでWeb画面を開くことができます。それらはいろんな方々がネットでやり方をシェアしてくださっているので参考にしました。

ちょっと雑になりますがインストール手順はおおむね以下のような感じです。

(各自の環境によってコマンドは変わってきますので,その辺の説明はごめんなさいします。)

Macであれば,もしPythonが未導入ならHomebrewを使ってPython入れてもいいです。

brew install python@3.10

あとはpipもしくはpip3でライブラリ導入:

pip3 install torch
pip3 install --upgrade diffusers transformers accelerate
pip3 install gradio

それから導入ツールの導入:

brew install git-lfs
git lfs install

(git LFSについてはこちら

そして学習モデルの導入:

git clone https://huggingface.co/stabilityai/stable-diffusion-2-1

あるいは

git clone https://huggingface.co/andite/anything-v4.0

そしたら次のpythonスクリプトをファイルに保存して動かします。(ファイル名は任意で可)

import gradio as gr
import torch
import click
import datetime
import random
from diffusers import StableDiffusionPipeline
import numpy as np

# 学習モデルを選ぶ
ai_model = "./stable-diffusion-2-1"
# ai_model = "./anything-v4.0"

def generate(prompt, nega_prom, height, width, steps, cfg, seed):
    pipe = StableDiffusionPipeline.from_pretrained(
      ai_model,
    )

    pipe.safety_checker = lambda images, **kwargs: (images, [False] * len(images))
    if seed == "":
      seed = int(random.randrange(4294967294))
    else:
      seed = int(seed)
    print(f"Seed value : {seed}")
    latents = torch.tensor(get_latents_from_seed(seed, width, height))

    gen_img = pipe(prompt=prompt, negative_prompt=nega_prom, height=height, width=width, num_inference_steps=steps, guidance_scale=cfg, latents=latents).images[0]
    gen_img.save(f"./any3_step{steps}-cfg{cfg}-{seed}.png")
    return gen_img

def get_latents_from_seed(seed: int, width: int, height:int) -> np.ndarray:
    # 1 is batch size
    latents_shape = (1, 4, height // 8, width // 8)
    # Gotta use numpy instead of torch, because torch's randn() doesn't support DML
    rng = np.random.default_rng(seed)
    image_latents = rng.standard_normal(latents_shape).astype(np.float32)
    return image_latents


webui = gr.Interface(fn=generate,
                     inputs=[
                     gr.Textbox(label = 'Prompt text', value="", lines=2, elem_id="prompt"),
                     gr.Textbox(label = 'Negative Prompt text', value="", lines=2, elem_id="nega_prom"),
                     gr.Slider(minimum=64, maximum=1024, step=64, label="縦サイズ(px)", value=768, elem_id="height"),
                     gr.Slider(minimum=64, maximum=1024, step=64, label="横サイズ(px)", value=512, elem_id="width"),
                     gr.Slider(minimum=10, maximum=150, step=1, label="ステップ数", value=25, elem_id="steps"),
                     gr.Slider(minimum=1, maximum=10, step=0.5, label='CFG', value=7.5, elem_id="cfg"),
                     gr.Textbox(label = 'seed', value=None, placeholder="0 - 4294967294. Blank is random.", elem_id="seed"),
                     ],
                     outputs=gr.Image().style(height=768)
                     )
webui.launch()

Pythonスクリプトについて参考にしたWebページはこちら(感謝感謝)。

本来であれば,画像生成系AIについて整理してから書きたいところですが,それもまた別の機会に。

私自身はまだ生成系AIをどのように自分の生産活動に活かすとよいのか模索中ですが,可能性があることは嫌というほど感じているので,何かしら自分で取り組む糸口を見つけ出してみようと思います。

でも生成した画像をブログ記事のアイキャッチ画像にするのは,地味に実用的かも。

電子決済ごっこ

…と私が名付けたわけではないのですが,今回,徳島県上板町高志幼稚園で,園児の皆さんがお買い物活動をする際のお手伝いをしてきたことがニュースでそう呼ばれました。

JRT四国放送のニュースはYahooニュースでも配信されました。

〈追記20221215〉放送網のNNNニュースでも自動的に配信されていました。

〈/追記〉

NHK徳島でもローカルニュースで取り上げていただきました。

〈追記20221215〉徳島新聞もWebでは閲覧は有償ですが取り上げてくださいました。

〈/追記〉

年少さんたちとちょっと仲良くなって,私も楽しく参観しました。

今回の実践は,開発して提供したシステムを使ったものとしては徳島県内の幼稚園では初めてというのは間違いではありません。正確に言えば,日本の幼稚園で初めてです。ということは世界の幼稚園で初めてです。

ICカードを使った電子決済ごっこの試みということなら,先行した事例があります。

ただし,実際のインターネットクラウドを利用したシステムはこれまでありません(ローカルネットワークで組んだものだけ)。よって,インターネットクラウドを利用した電子決済ごっことしては,幼稚園で初です。

他は,東京学芸大学附属小金井小学校の学級で取り組んだ例が小学校として初です。また単発的なイベントで利用したことは徳島県内ですでに数回あります。

〈追記20221215〉長野県でも中学生向けにICカードの実践をしてくださっている報告いただきました。ありがとうございます。〈/追記〉

というわけで,この子たち,とっても最先端です。


今回,使っていただいたのはビジュアルプログラミング環境のScratch(スクラッチ)とICカードリーダーを組み合わせるツール(PaSoRich)でした。クラウドのデータベースに数値を預けるシステム(NumberBank)と組み合わせて実現しています。

利用前提としていたICカードリーダーがモデルチェンジしてしまい,新モデルの対応が必要になっているため,お試しいただくためのハードルが高くなってしまっています。

けれども,対応するICカードリーダーとFelicaカード(たとえばお古の交通系ICカード)があれば,誰でも試したり,自分たちでプログラミングすることができます。ぜひお試しください。

また追ってご紹介させていただきます。

5年目のマストドン

2016年にリリースされ、2017年には世界中を巻き込んだ盛り上がりを見せていた分散型ソーシャルネットワーキングシステム「Mastodon」(マストドン)。

一時はTwitterを代替するか?!とまで言われましたが,2018年以降は表舞台からフェードアウトして,ニッチな界隈で生き残っている感じでした。マストドンのシステム自体は,いまも着実にバージョンアップを繰り返しています。

2017年4月に日本初の教育系マストドン・インスタンスとして開設された「elict-mastodon」(エリクト・マストドン)は,開設以来ずっと運営を継続してきました。

もっとも利用者が減り,システムの管理も停滞し,マストドンのバージョンも2.7.4でストップ。そのため,周りのインスタンスが3.0などにアップデートする中で,こちらとのフェデレーション(連合)機能も動かなくなっていました。

旧システム(2.7.2)

このブログでも当時のシステム構築について記していますが,マストドン推奨のサーバーOSではないCentOSで運用しようとしていたことも,アップデートが困難だった理由です。

いつかはサーバーそのものを引っ越しし,推奨サーバーOSのUbuntu上で再構築したいと考えて,早5年。

まさかTwitterがイーロン・マスク氏に買収され,Twitterというプラットフォームが揺るがされる日が来るとは思っていませんでした。再び,その代替システムであるMastodonが話題に。

すでに最新バージョンは4.0.2になっています。お引っ越し先のサービスとしてXserver VPSがよさそうだということも見えてきたところだったので,この機会にエイやと再構築することにしました。

というわけで,新生「elict-mastodon」を立ち上げました。

新システム(4.0.2)

すでに時代はGIGAスクール構想で小中学校や都道府県によっては高等学校にも学習者用情報端末が整備された世となりました。大学入試の世界でも情報科目の扱いを本格議論するようになってきています。

そうした話題をメインに扱う情報交換の場があってもよいはずですので,elict-mastodonをいま一度しっかり構築して,引き続き継続できるように整えた次第です。

もちろんTwitterは,運営会社のゴタゴタはあれど,コミュニケーション・プラットフォームとして今後も存続していくでしょうし,マストドンへの関心もまた時間とともに薄れるのだとは思います。それでも,何かあるときの緊急避難場所や選択肢の確保は決して無意味なことではないと考えています。

elict-mastodonは教育学習とICT活用に関心のある皆様の登録をオープンに受付けています。

教育関係者のみならず,お子様が学校に通っているご家族,学校ICT関係の企業に関わられている皆さん,教育と情報に関係することに関心があれば,どなたにも参加資格はあります。

情報交換の場を守るために,ご配慮・ご遠慮いただくこともあるとは思いますが,ゆるやかにコミュニケーションを展開できればと思います。どうぞお気軽にご参加ください。