ガジェット通信 GetNews

見たことのないものを見に行こう

体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

CODE.SCOREと産総研が「スキル測定」の試験時間短縮に機械学習の非負行列分解を採用

CODE.SCOREの試験時間短縮に機械学習のテクノロジーを応用

兼村厚範氏は産総研の研究者だが、ご本人曰く「科学者(Scientist)というより、工学者(Engineer)」だ。

興味を持っている分野は、ヒトから得られたデータの解析、ヒトの情報処理。ヒトとカタカナで表記をしているのは、ヒトを生物の1つとみているため。つまり生物学で人間は「ヒト」と表されるということだ。

一方、「CODE.SCORE」の開発に携わっているチームでは、受検者の負担を減らしたいという企業からの要望を受け、より少ない問題数で分析精度が下がらないようなテストの仕組みを模索していた。

CODE.SCOREは、エンジニアの実務スキルを可視化するサービスとして、2015年4月にローンチした。Webアプリケーション開発(Java)試験や、組み込みソフトウェア開発(C/C++)試験、スマホアプリ開発(iOS)試験、インフラ(LAMP)試験、ITアーキテクトサービス・マネジメント試験など11種類の試験を用意(2016年1月時点)。

CODE.SCOREが提供する試験の大きな特長の一つとして、開発の現場で必要とされるスキルをまるっと計測する試験構成となっていることが挙げられる。

例えば、Javaを使ったWebアプリケーション開発の現場では、Javaのプログラミング能力の他に、設計力やプロジェクトマネジメント力といったことも必要である。この試験構成の特長から、幅広く能力を問うていることから、問題数を削減することが難しい。

では、60問すべての問題を解いてもらう必要がある試験に対して、いかにして試験時間短縮の課題に取り組んだのか。

「60問の問題を例えば半分の30問にしたとしても、うまい方法を使うことで、60問すべてに答えたときよりは少し精度は劣るものの、それなりに高い精度で残りの30問を正解・不正解を予測することができれば、試験時間の短縮につながります。この発想から私の専門の1つである機械学習が使えるのではないかという話になったんです」と、兼村氏は語る。

こうしてリクルートキャリアとの共同研究が始まったという。

行列分解は因数分解のようなもの

ではどんな機械学習のテクノロジーを使ったのか。それが行列分解である。

行列分解とはある行列U(大きさI × J)を2つの行列W(大きさI × K)、H(大きさK × J)の積に分解する(U=WH)というもので、「行列因子分解や行列因子化とも言われている。因数分解のようなもの」と兼村氏は説明する。

例えば、10=5・2、最近の年月日で面白い数字は20151121=674と因数分解できるというようなことだ。整数の10は5と2から構成されており、整数20151121は674が4つ含まれていると解釈できる。

同様に、行列Uを2つの行列WとHに分解するということは、Hで表される成分とWで表される重みの2つの要素から構成されているとみなすということだ(HやWの詳しい意味については後述)。

因子化は隠れた構造を推定するのに使われる。例えばトピックモデルや独立成分分析、スパース辞書学習などである。またデータの構成要素としてどんな成分がどれだけ入っているかを推定し、可視化することもできる。

「例として、文書解析や画像解析、脳活動の解析などがある。文書解析の例でいうと、ハト派、票というワードが出てくれば、政治に関連したトピックであると推定できるし、登板やヒットといったワードがあれば、スポーツに関連したトピックであると推定できる。

同じように画像解析においても、画像の成分を解析することで、木や花の成分が多いから公園の画像ですねとか、あるいはビル成分ばかりだから街の画像といったようなことを推定することができる」と兼村氏は言う。

また因子化は「予測に生かすこともできる」と兼村氏は説明する。例えば今ではセキュリティの必須の技術となったベイジアンスパムフィルタも、メールデータセットを解析して、スパムトピック成分をどれだけ多く含むか否かで分類するように発展させることができる。広告やリコメンデーションも同様だ。

「脳活動解析については実用化への道のりはまだ遠いが、脳のどの部分がいつ活動しているが分かってくると、医療やリハビリなどに役立つほか、将来的にはヒトの脳や知性の理解につながっていくと思う」と兼村氏は説明する。

因子化の解析フローは次のような図で表すことができる。

「なんらかのデータセットがあり、それを成分推定する。成分推定の方法は行列分解を使う方法もあるが、トピック推定であれば、LDAやLSIという方法もある。そしてその結果を使って可視化したり、予測したりするという流れになる」(兼村氏)

続いて行列分解の説明が行われた。

行列分解はデータを行列として表現するところから始まる。

次にデータを分解する、つまりU=WHという因子分解をする。

行列U=WHは縦がI行、横がJ列の大きさ。Iはテストデータに例えると受検者数。Jはテストで言うと問題の数となる。

行列Uの第1行目であるu1はHの各行であるh1からhKまでの(重み付きの)足し算となっており、その重みがWの第1行であるw1である。

第i行目についても同様に、h1からhKまでを重みwiで足し合わせたものとなっている。

非負行列分解で「欠測推定」と「適応出題」が可能に

CODE.SCOREの実際に解答する問題数削減に使った技術が、行列分解にテストデータの性質に応じた要素を入れた「非負行列分解です」と兼村氏は言う。W、Hの各要素を0以上、つまり非負に制約するという行列分解法である。

この技術を使った理由は、実際のテストデータは正か誤、つまり0か1しかないので、非負であることが一つ。もう一つは非負にすると部分ごとの表現が得られることだ。部分ごとの表現とは一部の要素のみに値を持ち、ほかは全部ゼロというものである。ほぼ同じことを別の言葉で「スパース」ともいう。

1 2次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。