お客様の課題
科学技術・学術政策研究所様(以下、NISTEP様)は、国の科学技術や学術振興に関する政策立案プロセスの一翼を担うために設置された文部科学省直轄の国立試験研究機関です。
NISTEP様は、科学技術やイノベーション創出の状況変化を把握するために、第一線で研究開発に取り組む研究者や有識者への意識定点調査(NISTEP定点調査)を2011年度から実施されています。
NISTEP定点調査の自由記述群(以下の図は例)は、研究者の率直な意見を聞くことができる重要な項目でありますが、全ての自由記述に対して、手作業で目を通して内容を把握するには時間と労力がかかってしまうという課題がありました。
Deepblueの解決策
Deepblueでは、NISTEP様による自由記述の内容把握が効率的なものになるよう支援することを目的に、自由記述の分類モデルを作成しました。
Deepblueでは、調査研究から得られた自由記述を、機械学習を用いてベクトル化し、質問文との類似度からラベリングする作業や、トピック分析という手法を用いて、自由記述のデータを効率的に分析する手法をご提案させていただきました。
大まかな実装の流れとしては、以下の図を参照してください。
自由記述の分類モデルの作成では、Pythonとオープンソースの自然言語処理ライブラリや公開されている日本語モデルを使用しています。
前処理・形態素解析
1つ目の工程では、文章の前処理と形態素解析を行いました。日本語の文章を分析可能な数値データとして扱うためには、前処理や形態素解析といった処理を事前に行う必要があります。
形態素解析とは、辞書データを用いて文章を形態素という最小単位に分割し、品詞を特定する技術です。
Deepblueでは、自由記述における半角カタカナや句読点などの記号に前処理を施し、表記揺れや固有名詞の置き換えた上で、形態素解析を行いました。
例えば、「若手研究者(博士課程学生は除く)に自立と活躍の機械を与えるための環境の整備は十分だと思いますか。」という自由記述に前処理・形態素解析を施した場合、以下のようになります。
類似度による分類
2つ目の工程では、自由記述の文章と、自由記述の背景となる質問文を単語分散表現を用いてベクトル化し、類似度による分類を行いました。
単語分散表現を用いることで、単語の意味を内包した数値ベクトルを作成することができます。
以下は、自由記述に含まれる単語の単語分散表現を計算し、それらを次元圧縮して可視化したものとなります。
また、単語分散表現は単語同士の演算ができます。
Deepblueでは、1つの自由記述文を文章ベクトルとして表す際、その文章に含まれる単語の単語分散表現を足して文章ベクトルを作成しました。
また、質問文と自由記述の文章ベクトルから、2文間の類似度を計算し、類似度を利用して分類を試みました。
質問文は、質問項目に対応したものであるため、ある質問文と高い類似度を持つ自由記述は、その質問項目に分類されます。
このように、単語分散表現を利用し、2つの文章を比較することで、類似する論点を含む記述群に分類することができます。
トピック分析
3つ目の工程では、2つ目の工程で得たデータを基に、質問項目ごとにトピック分析を行いました。
トピック分析とは、文章に含まれるトピック(話題)を抽出することを目的として、データを分類する手法です。
一般的なトピック分析では、名詞といった特定の品詞のみを利用して分析することが多いですが、この方法では文脈を考慮した分析はできません。
文章の中で同じ単語が出現していても、その単語が含まれる文脈によって意味が異なる場合があるため、文脈を考慮した分析を行う必要があります。
Deepblueでは、新しいトピック分析の手法として、Sentence-Transformerという機械学習の手法と組み合わせたトピック分析を行いました。
この手法は、感情や文脈を考慮した文章ベクトルを作成することができるようになり、文章同士の類似度や意味関係をより正確に捉えられるようになります。
機械学習とトピック分析を組み合わせた手法では、質問項目ごとに集められたデータをさらにいくつかのクラスターに分類します。
そして、それぞれのクラスターを特徴づけるトピックを自動的に抽出することで、質問項目に関するトピックを容易に把握することができます。
分析結果
Deepblueが行った分析の結果、以下のような成果が得られました。
過去の回答データを基にWord2Vecで学習し、それらで2021年度の自由記述を質問との類似度によって分類した結果が以下の図となります。
各プロットは、単語分散表現の合計によって得られた多次元のベクトルを二次元に圧縮して可視化したものとなります。
圧縮したときの軸は、自由記述のデータが持つ情報や構造をできるだけ失わないように選ばれたものであり、それぞれの自由記述の持つ特徴を反映しています。
精度を上げる工夫として、いくつかの方法を試みました。
- ・単語の意味把握をより確実にするために、学習用に過去のデータを使用
- ・自由記述全てに共通して使用されている名詞を除外してベクトルを作成
- ・自由記述によって複数の質問項目への記述と判定された場合は、複数のラベルを付けてカテゴライズ
- ・どの質問項目にも該当しない記述を「その他」として分類
結果として、ほとんどの自由記述が、それぞれの質問項目に割り振られるようになりました。
しかしながら、質問項目間の内容によって、似たベクトルがつくられることがあるため、多少のミスカテゴライズが生じてしまうことがありました。
次に、トピック分析によって得られた成果を解説します。
一例として、「若手研究者」の質問項目に対するトピック分析の結果の図が以下となります。
この図では、トピック分析によって分類されたクラスタごとに、クラスタベースのTf-Idfを計算し、各クラスタに特徴的な単語を抽出し、それらの上位5つを表示したものになります。
これらの単語は、クラスタを特徴づけるトピック(話題)を意味します。
また、今回は形態素分析による分かち書きのデータを用いて行うトピック分析ではなく、Sentence-Transformerという手法を用いてトピック分析を行いました。
以下の図は、Sentence-Transfomerによって得られた文章ベクトルを、二次元に圧縮したものに、クラスタを特徴づける単語の上位3つをラベルとして付与したものになります。
教師なし学習であったため、事前学習済みモデルのみを使用しましたが、ある程度の傾向を示しながら分類されていることが分かります。
また、クラスタに対するトピックの種類も豊富に生成されていることが分かります。
一方、教師なし学習によるSentence-Transfomerの仕様では、本来の実力を発揮しないため、より精度を上げるためには教師あり学習データを用意してモデルを作成する必要があります。
以上のように、トピック分析を用いたことによって、数多くの滞在的なトピックを抽出することができました。
一般的なクラスタリングでは、類似度による分類を目的としているため、クラスタリング後の結果の解釈や要約が難しい反面、トピック分析では文章群のトピックを抽出することを目的としているため、今回のような場合に有効となると考えられます。
まとめ
Deepblueでは、上記のような手法だけで限らず、Tf-IdfやLDA, Bertといった古典的な方法から最新の手法まで取り入れながら、いくつかの手法を検討し、分析させていただきました。
単語分散表現やトピック分析の手法を用いることで、正解ラベルがないような自由記述という教師なしデータからも、様々な情報を得ることができます。