問い合わせの本文やニュース記事のように、値がほとんど重複しない文章列は、値の出現頻度だけでは内容の違いを表しにくいものです。Fioneの開発版では、文章に含まれる単語の使われ方を数値に変換し、分類や回帰に使う派生特徴量の候補に加えます。あわせて、短い学習でも候補を評価する時間を確保するようになりました。
文章列を最大32個の数値に変換する
対象は、内部の順位付けで上位6つに入る文字列列です。各列の欠損を除いた先頭最大1,000件で語数を数え、その中央値が5語以上の列を文章と判定します。学習側の入力から最大2万行を使い、3文書以上に現れる語を最大3万語までTF-IDFで重み付けします。その行列を打ち切りSVDで最大32成分に圧縮します。語彙や行列のサイズが足りないと成分数が減り、候補の特徴量が生成されない場合もあります。元の値が欠損なら、生成した値も欠損のままです。
成分は単語の出現傾向を表す数値です。学習データに話題名を用意する必要はありません。日本語など単語境界が空白で区切られない文章では、内蔵の語判定やベクトル化で意図した単語に分かれるかを手元のデータで確認してください。
学習画面で派生特徴量を有効にする
開発版の学習画面で派生特徴量を有効にし、本文の列を入力、分類ラベルなどを目的列にして学習します。設定名は feature_engineering で、初期値は true です。無効にすると文章由来の成分も含めて派生特徴量の選別を省きます。文章列が条件を満たすとこの候補を先に評価しますが、採用は他の候補と同じく損失の比較で決まります。成分数や語数のしきい値は実装上の固定値です。
短時間の学習では選別の時間配分が変わる
従来は候補の選別に残り時間の10%を割り当てていました。変更後は、残り時間の10%と「30秒または残り時間の30%の短い方」を比べ、長い方を使います。選別開始時に60秒残っていれば18秒、180秒なら30秒、600秒なら60秒です。基準は学習画面に指定した総時間ではなく、選別を始める時点の残り時間です。
時間切れで最後の確認まで進めない場合は、それまでの判定で採用され、損失が5%以上減った候補群を残します。この割合は選別中の損失で測り、精度の上昇幅とは別です。選別に時間を割くと後続のモデル探索に使える時間も変わります。PRではニュース分類などで精度が改善した例があります。実際の効果は、同じ学習時間で有効・無効を切り替え、学習から分けたテストデータで比較できます。
この開発版で学習したモデルは、学習と予測で同じコミットの環境を使って検証してください。以前の実装で読み込めても、予測や説明が正しく動くとは限りません。