執筆と同時に開発をしているため、投稿頻度が遅くなります。
なお、投稿者は超初心者であるためとてつもなく初歩的なミスや
無知な点があると思います。アドバイスなどよろしくお願いします。
はじめに
この記事は、「LLMを自作できるクソアプリを作る」シリーズの第二弾です。
第一弾から読むことをおすすめします。
ストックリストはこちら↓
前回の最後に、次のような疑問点を上げました。
・LLMがどのように文法を学ぶのか
・LLM自体のシステム(文法の学習システム)はpythonでいいのか
・pythonでいいとしてもどうフロントエンドに表示すればいいのか
この疑問を解消するのが今回の記事です。
具体的に言うと、
・NLP(自然言語処理)の仕組みについて
・AIのプログラミング言語について
・フロントエンドについて です。
今回は説明が中心の記事になります。ミスがあったら教えてほしいです。
知ってる方は復習のつもりで読んでください。
疑問1.LLMはどのように文法を学ぶのか
LLM(大規模言語モデル)やAIは、流暢に日本語を使いこなしますよね。
あれはどのような仕組みなのでしょうか。
その鍵は、NLP(自然言語処理) にあります。
NLPとは、人間が使う話し言葉や書き言葉などの自然言語を
コンピューターに処理・分析させる技術です。
NLPの仕組み
具体的な仕組みを説明していきます。
AIは、以下のような順序で文の意味と意図を把握しています。
①形態素解析
文章の中にある「形態素」 (言葉の意味を損なわない最も小さな単位)を
データとして抽出すること。主な解析ツールではMeCabが有名です。
②構文解析
形態素解析を踏まえ、形態素同士の関係性を確認すること。
例えば以下の文のとき。
「私はAくんとチャーハンを食べた。」
ここで意味的にこの文を分解すると、このようになります。
私/は/A/くん/と/チャーハン/を/食べ/た
この切り方を確認(あくまでも確認です)するのが、構文解析です。
「にわにはにわにわとりがいる」の場合
私達はこの言葉を早口言葉として知っているため
にわ/に/は/にわ/にわとり/が/いる
と分けることができますが、先程の形態素解析ツールのように
にわ/に/はにわ/にわとり/が/いる
と捉えることもできてしまうわけです。(埴輪鶏ってなんだよ)
そこで大切なのが、その区切りが正しいのかを確認する作業、
意味解析です。↓
③意味解析
構文解析で得た解釈から正しいものを探すこと。
先程の例で言うと、2通りの意味で解釈ができます。
「私は」と「Aくんと」の形態素同士の(意味的な)関係が強いならば、
食べたのは「私」と「Aくん」の2人で、食べられたのは「チャーハン」です。
「Aくんと」と「チャーハン」の形態素同士の(意味的な)関係が強いならば、
食べたのは「私」1人で、食べられたのは「Aくん」と「チャーハン」です。
2つ目の解釈は、常識的に考えてありえないですよね。
ですが、人間の一般常識を知らないAIが相手です。
「私」が人食い人種やゾンビ、人外である可能性を考えてしまうわけです。
この、文の意味を読み取る作業が、意味分析です。
「にわにはにわにわとりがいる」と「常識」
「にわにはにわにわとりがいる」を正しく区切れなかったのもこれに通ずる話です。 私達の「常識」として、
にわにはにわにわとりがいる → 早口言葉で、庭/に/は/二羽/鶏/が/いる
と切ることを知っています。
さらに、「埴輪鶏」も(よっぽどのアニメでない限り)いないことを知っています。
AIには、私達の常識が通じないことを、強く感じさせる良い例です。
④文脈解析
最後の解析です。文脈解析は、複数の文に上の①〜③を実行し、
文どうしの関係性を解析する作業です。
先程の「私はAくんとチャーハンを食べた」であれば、前後に
「支払いはAくんがしてくれた」などというAくんの生存を示す文があれば
解釈①が正しいとわかります。
こういった一文だけでは意味の通じない単語は、書き言葉ではよくあります。
「先輩は出かけていなかった」もそうです。
先輩はいますか?いませんか?
これも前後に先輩の存在(もしくは不在)を表す
「そこで僕は先輩に電話した」などという文章があればいいわけです。
疑問2.AIのプログラミング言語について
Pythonを使用します。理由としては、以下のような特徴があるからです。
- ライブラリが豊富であること
- 機械学習などに向いていること
- 読みやすく書きやすいため初学者にもってこいであること
- 電子工作をするうえでいつかは大切になるであろうこと
疑問3.フロントエンドについて
前回、
フロントエンドはhtmlで、githubで公開することが最終目標です。
と言いました。
しかし、pythonの出力結果をhtmlに直接表示させることが難しいようです。
(ただ単に知識不足、リサーチ不足の可能性があります。有識者の方教えてください。)
検索エンジンは「ある」物を探すのにはもってこいだですが
「ない」ものは検索できません。
!!!
初っ端からルール1破ります。ごめんなさい。
まだまだ未熟です。
カンニングによると、
「ローカルHTTPサーバ(Flask / FastAPIなど)を立て、fetchで通信する方式」
が最短ルートであるとのこと。
これにしましょう。フロントエンドをhtmlにしたかった僕の我儘です。ゆるして。
疑問はこれですべて解決ですね。
終わりに
かなり内容の濃い話でしたね。
まさか僕も「にわにはにわにわとりがいる」がこんないい例になるとは
思ってもいませんでした。ちなみに漢字で「庭には二羽鶏がいる」を
形態素解析ツールに通すとしっかり分けてくれました。
次回からはこの知識を活かしての実装編になります。
ハンズオンされる方向けに丁寧に書いていこうと思います。
pythonを自分で書くのはほとんど初めてといっていいほどの経験値であるため、
次回も稚拙が目立つ記事になると思います。
応援お願いします。アドバイスや訂正などありましたら、教えてほしいです。
それではまた次回!
さようなら!
個人的に良かったサイトまとめ
NLPをざっくり理解できるサイト↓
形態素解析ツール
-
前回、生成AIの使用は最小限に抑えること、というルールを定めました。最低限だから今回はOK? ↩



