ターゲット:何を開発するか
文章題チャットボットの開発を中断してから、5年ほどは名刺OCRや相続税路線価図のデジタル化(矢線のベクトル情報や路線価の文字認識の結果をリンクしたデータベースの作成)を行っていて、チャットボット開発は中断していた。Transformerから、BERT、GPTに至る自然言語処理AIの急激な進化には置いてけぼりである。
2022年になって、二つのきっかけによって算数文章題の開発を再開することになった。
- 最初の一つのきっかけは、2022年に出た以下の、四則演算レベルの文章題を解く自然言語処理AI(以降"Chain of Tought"と呼ぶ)についての論文である Jason Wei et al. 2022 Chain of Thought Prompting Elicits Reasoning in Large Language Models. 36th Conference on Neural Information Processing Systems (NeurIPS 2022)
- 二つ目のきっかけは、文字認識ライブラリの深層学習化に並行して実施した、文字認識後の言語処理の深層学習化である。 2013年に公開されたword2vecを、日本語の文字を対象に適用(便宜的にchar2vecと呼ぶ)することで言語処理を実現している。
詳しくは後述する。
word2vecにより生成される単語の分散表現は、Transformerのベースにもなっている。BERTやGPTはTransformerを重層的に使ったモデルである。word2vecと"Chain of Thougnt"はつながっているのである。
入力文 | 目的出力文 | |
---|---|---|
英語 | A robe takes 2 bolts of blue fiber and half that much white fiber. How many bolts in total does it take? | It takes 2/2=<<2/2=1>>1 bolt of white fiber So the total amount of fabric is 2+1=<<2+1=3>>3 bolts of fabric #### 3 |
日本語 | ローブには青いファイバーが 2 本と白いファイバーがその半分必要です。 全部で何本のボルトが必要ですか? | 2/2=<<2/2=1>>1ボルトの白い繊維が必要なので、生地の総量は2+1=<<2+1=3>>3ボルトの生地です #### 3 |
英語 | James decides to run 3 sprints 3 times a week. He runs 60 meters each sprint. How many total meters does he run a week? | He sprints 3*3=<<3*3=9>>9 times So he runs 9*60=<<9*60=540>>540 meters #### 540 |
日本語 | James は、週に 3 回、3 つのスプリントを実行することにしました。 彼は各スプリントで 60 メートルを走ります。 彼は週に合計何メートル走りますか? | 彼は 3*3=<<3*3=9>>9 回全力疾走するので、彼は 9*60=<<9*60=540>>540 メートル走ります #### 3 |
英語 | Every day, Wendi feeds each of her chickens three cups of mixed chicken feed, containing seeds, mealworms and vegetables to help keep them healthy. She gives the chickens their feed in three separate meals. In the morning, she gives her flock of chickens 15 cups of feed. In the afternoon, she gives her chickens another 25 cups of feed. How many cups of feed does she need to give her chickens in the final meal of the day if the size of Wendi's flock is 20 chickens? | If each chicken eats 3 cups of feed per day, then for 20 chickens they would need 3*20=<<3*20=60>>60 cups of feed per day. If she feeds the flock 15 cups of feed in the morning, and 25 cups in the afternoon, then the final meal would require 60-15-25=<<60-15-25=20>>20 cups of chicken feed. #### 20 |
日本語 | ウェンディは毎日、鶏の健康を維持するために、種、ミルワーム、野菜を含む混合鶏飼料を 3 カップずつ、それぞれの鶏に与えています。 彼女はニワトリに3回に分けて餌を与えます。 朝、彼女は鶏の群れに 15 カップの飼料を与えます。 午後には、鶏にさらに 25 カップの飼料を与えます。 ウェンディの鶏の群れのサイズが 20 羽の場合、1 日の最後の食事に何カップの餌を与える必要がありますか? | 各ニワトリが 1 日に 3 カップの飼料を食べる場合、20 羽のニワトリの場合、1 日に 3*20=<<3*20=60>>60 カップの飼料が必要になります。 彼女が群れに朝に 15 カップ、午後に 25 カップの飼料を与えた場合、最終的な食事には 60-15-25=<<60-15-25=20>>20 カップの鶏の飼料が必要になります。 #### 20 |
英語 | Cars have lined up on the motorway. Some of the cars drive through in the first 15 minutes of the traffic jam, then 20 more cars drive through in the remaining 15 minutes of the jam. 5 cars from the line take an exit so they don't have to drive through the traffic jam. If there were originally 30 cars on the motorway, how many cars drove through the traffic jam in the first 15 minutes? | The cars that exited do not need to be included so there were 30 original cars – 5 cars that exited = <<30-5=25>>25 cars that drove through the traffic jam. Most of the cars exited in the final 15 minutes so in the first 15 minutes, there must have been 25 total cars – 20 cars that drove through in the final 15 minutes = 5 cars that drove through the traffic jam. #### 5 |
日本語 | 高速道路に車が並んでいます。 渋滞の最初の 15 分間に数台の車が通り抜け、残りの 15 分間にさらに 20 台の車が通り抜けます。 列から 5 台の車が出口を出るので、渋滞を通り抜ける必要はありません。 高速道路に元々 30 台の車があった場合、最初の 15 分間に何台の車が渋滞を抜けましたか? | 出た車を含める必要はないので、元の車は 30 台でした – 出た 5 台 = <<30-5=25>>25 台の車が渋滞を抜けました。 ほとんどの車は最後の 15 分間で出て行ったので、 最初の 15 分間では、合計 25 台の車から最後の 15 分間に通過した 20 台の車を引いたもの = 5 台の車が交通渋滞を通過したことになります。 #### 5 |
あらかじめ学習した深層学習言語モデルに後続する1層から数層のネットワークで、目標とする入力と出力のペアを何件か学習することによって、同じようなパターンの入力文に対応する出力文を生成する変換器ができてしまう。
例えば、英日翻訳システムだったら数件の英語と日本語のペアを学習するだけで変換器ができる。
チャットボットも、会話のやりとりを数十件学習することで、ある程度のものができてしまう。
"Chain of Thought"のような文章題を解くチャットボットだと、さすがに7500件のペアを学習する必要があるが、それでも追加学習(ファインチューン)だけで文章題を解くQAシステムができてしまう。
GPT-3を使ったモデルの文章理解力は人間以上のパフォーマンスを示すことができる。
分野により魔法のように強力なGPT-3であるが、最初に述べたような弱点がある。最大の弱点はシステムが巨大すぎてクラウド上でしか動作しないという弱点である。
そのほかに、ブラックボックス問題、事前学習テキストのバイアスがそのまま反映されるという弱点もある。
また、よくよく見ると、数千件の学習用の文章題は全て"加減乗除"を当てはめるだけで解ける数学(算数)的には簡単な物ばかりである。中学の"一元一次方程式"レベルということである。
さすがに文章は非常に高い読解力を必要とするものもあり、上の表の最後の例など、英語のヒアリングで出題されたら、私だったらあっさり間違えると思う。
ただし文章題を理解した上に「解く」というオプションが付くと、GPT-3ベース(1750億パラメータ)のファインチューンでの正答率は33%となってしまう。GPT-3の3倍(5400億)のパラメータだと正答率56%に上がる。
トレーニングデータセットの内容を見てみると、"Chain of Thought"の解くことのできる文章題は、算数問題としては加減乗除レベルで、文章題と言うよりも読解問題と分類した方が良い。 算数的には小学校中学年レベルで、国語的には大人でも難しいレベルである。算数的に、日本の中学受験レベルの文章題に対応することは当面は難しそうである。
"Chain of Thought"で現状では解けそうもない問題は以下のように予想できる。一部はトレーニングパターンの追加で対応できると思われる。
- つるかめ算、和差算、年齢算 中学の"二元一次方程式"、"三元一次方程式"レベルの問題はトレーニングデータセットの問題文-解答ペアには含まれていないので解くことはできないと予想できる。
- どっかい算 日本の算数には"どっかい算"という意地の悪い文章題がある。
- 周期算・数列 その場限りの文字の規則性を問うケース。事前学習したテキストには含まれていないので"Chain of Thought"では対応しようがない。
- 植木算・通過算・流水算 問題文に含まれない知識「電柱のところには木を植えない」「出入り口にはベンチを置かない」が必要となる。
- 数の問題 何段階にも論理を展開して推理するような問題は、学習テキストに問題がそのまま載っていない限りは難しいと思われる
ただ、つるかめ算の場合は、トレーニングデータセットにいくつか追加すれば学習できる可能性が高いと思われる。
Googleで「ツルの足は何本」と尋ねると「ツルは2本、カメは4本」と返すくらいである。
私は犬の小梅と散歩に行きました。 河原へは13時17分に着きました。 私は10分走って20分休みましたが、小梅は途中で6分間休んだだけで、河原を出発する14時38分までの間ずっと走り続けていました。 14時16分に川にかかっている鉄橋の上を電車が渡り始めました。 鉄橋の長さは800mで、電車の長さは200mでした。 小梅は電車を追いかけて2分間走りましたが、小梅が400m走ったところで電車は鉄橋を通り過ぎました。 ちょうど13時47分でした。 その後私は10分走った後30分休んで、小梅をつかまえた後に河原を出ました。 小梅をつかまえるには何分もかかりました。 私と小梅が河原にいたのは何時間何分ですか?"Chain of Thought"のトレーニングパターンを見る限り、問題文には必要十分な数値情報のみが含まれている。トレーニングデータセットの問題文には不要な数値情報などは含まれていないので、現状では解けない可能性が高い。
Transformer系の自然言語処理モデルではワードの共起情報が重要となっている。つまり"Chain of Thought"は数理的に解いているのではなく確率的に解いている。
そのため無関係な情報(特に数値情報)がたくさん含まれていると重大な解釈ミスの確率が高くなると思われる。
確率的に解いているにもかかわらず、45兆バイトの膨大なテキストで5400億のパラメータを学習すると、四則演算レベルの文章題には対応できてしまう点は驚異である。
「かかあいうけこかかかあいうけこかかかあいうけこか」と文字が並んでいるときに100個目の文字は何ですか 等差数列「い 18 ろ 32 は に ほ」「ほ」はいくつ?
つるかめ算と同様に、トレーニングデータセットに典型的なパターンを追加すれば、同様のパターンには対応できる可能性もある。
電柱と電柱との間に、どこも5mの間隔になるように木を植えると、木は全部で6本になりました。電柱と電柱との距離は何mでしょうか A地点とB地点との間に、どこも5mの間隔になるように木を植えると、木は全部で6本になりました。A地点とB地点との距離は何mでしょうか 公園の入り口と出口の相田に、ベンチを30mおきに設置します。出口と入り口との距離が300mの場合、ベンチは何台必要でしょうか 長さ100m秒速20mの普通電車と、長さ150m秒速30mの快速電車がすれちがいました。すれちがっていた時間は何秒ですか? 静水時の速さが分速30mの船が、川の下流のB町から、2km離れた上流のA町まで上ると、1時間40分かかりました。川の流れの速さは分速何mでしょうか
もっとも深層学習以外の方法を使っても対応することは困難と思われる。特に偏差値の高い中学入試レベルの問題に対応することは当面は難しいと思われる。
9÷10=1/□+1/○+1/△ □と○と△は、全て異なる整数とすると、それぞれいくつか?□<○<△とする。
さて、今回開発する算数チャットボットで、どこまで対応するかの目標を設定する。
- Windowsマシン1台でローカルに実行できるようにする
- GPT-3レベルの文章理解力(人間の大人以上)は求めない。文章題の読解レベルを小学生レベルに設定する "Chain of Thought"の文章題データセットのような、相当な読解力が求められる文章題までは対応しない。
- 自然言語処理AIで対応するのは、入力の文章題を、文章題専用の中間表現に変換する部分だけ。文章題専用の中間表現から「解答に至る説明+解答」を生成する部分は、ルールベースのプログラムで対応。 人工知能の研究ではないので、工学的に取れる方法は取る。AIの出力を「解答に至る説明+解答」とするとゴールが遠く、それこそGPT-3が必要となる。
- "Chain of Thought"が対応していない、つるかめ算、和差算、年齢算のような二元一次方程式、三元一次方程式を算数で解くような問題にも対応する また、"植木算"、"つるかめ算"、"通過算"のような問題文に無い知識を必要とする文章題に対応するために知識ベースを参照することも行う。
小学校6年生レベルの読解力で足りる問題をデータセットとする。
文章題専用のシステムとなってしまうが自然言語処理AI部分の負担は激減する。
文章題専用の中間表現をいったん生成するので、その先(ルールベースのプログラム)で知識ベースを参照するのは簡単にできる。
"周期算"や"数列"のように、GPT-3やBERTの学習テキストには存在しないようなワードの並びにも、典型的なパターンであれば対応する。
以下のような問題には対応することはできない
- 図形問題や表を使う問題
- レベルの高い"数の問題"
- 集合問題
- 定型的でない"周期算"、"数列"
上に戻る