自動解答系の作り方(1)
突然(でもない?)ですが,日本語混じりの LaTeX の問題文を入力とする自動解答システムを試作しました.扱い易い問題ならそれなりに処理できるようになりましたので,これについて書いていこうと思います.
自動解答といっても QE を含めた数式処理は Mathematica に丸投げしており,行うのは
問題文からの Mathematica コマンドの生成
です.具体的には,キーワードから問題のタイプ(分野)を識別し,形やキーワードとの関係から問題文中の項,論理式を整形の上,適当なコマンドへ埋め込むといった処理で,極言すれば形式的な変換に過ぎません.今の所,2次試験では
・値域(最大値,最小値,それらに対応する定義域内の要素)を求める問題
・不等式系で表された座標平面・空間内の図形の面積・体積を求める問題
センター試験では
・式の値を求める問題
・方程式・不等式の解集合を求める問題
に対応しています.入力と出力の例を挙げます.
東京大学2011文科第1問
$x$の3次関数$f(x)=ax^3+bx^2+cx+d$が,3つの条件 \[ f(1)=1,\ f(-1)=-1,\ \int_{-1}^{1}(bx^2+cx+d)d{x}=1 \] を全て満たしているとする.このような$f(x)$の中で定積分 \[ I=\int_{-1}^{\frac{1}{2}} \{f''(x)\}^2 d{x} \] を最小にするものを求め,そのときの$I$の値を求めよ. ただし,$f''(x)$は$f'(x)$の導関数を表す.
を入力すると
min == 81/32 d == 3/4 && c == 5/4 && b == -3/4 && a == -1/4
と出力されます.独立変数(束縛変数)がa,b,c,dであることの明示がない問題です.また一応,ax とあれば aとxとの積として扱うようにしましたが,インテグラルと対の積分変数には { } が必須です.
センター試験2011数学1第1問〔2〕
$n$を自然数とし $$A=n^4-2n^3+3n^2-2n+2$$ とおく. $$n^4+3n^2+2=(n^2+ans[1]) (n^2+ans[2])$$ であるから $$A=(n^2+ans[3]) (n^2-ans[4] n+ans[5])$$ となる.さらに $$n^2-ans[4] n+ans[5]=(n-ans[6])^2+ans[7]$$ である.したがって,$A<1000$を満たす最大の$n$は$ans[8]$であり,このときの$A$の素因数分解は $$A=ans[9] \times (ans[10] ans[11]) \times (ans[12] ans[13])$$ となる.
を入力すると
{ans[1] -> 2, ans[2] -> 1, ans[3] -> 1, ans[4] -> 2, ans[5] -> 2, ans[6] -> 1, ans[7] -> 1, ans[8] -> 6, ans[9] -> 1, ans[10] -> 7, ans[11] -> 4, ans[12] -> 1, ans[13] -> 3}
と出力されます.この問題のポイントは
・ans[6],ans[7] を得るには ans[4],ans[5] が必要である点
・$n$は$ans[8]$のように論理式ではなく項と日本語で書かれている点
・ans[10] ans[11],ans[12] ans[13] のような連続した空欄がある点
です.なお,素因数という条件が反映されていないので ans[9],ans[10],ans[11] は間違っています.