機械学習ソート入門 LTR - 線形モデル

機械学習ソート入門 LTR - 線形モデル

[[207418]]

多くの検索専門家は、「機械学習を通じて最適な重みを取得し」、それを検索クエリに使用したいという欲求を持っています。これは検索におけるモグラ叩きのようなもので、よく言われるように、「タイトル一致またはコンテンツ一致のどちらかを最適化することを選択できれば、間違いなくもっとうまくいくだろう」ということになります。

クエリにどのような重みを適用するかを学習するというこの本能は、最も単純なランク付け学習 (LTR) モデルである線形モデルの基本原理です。はい、伝説の線形回帰です!線形回帰は非常にシンプルで使いやすいです。機械学習のようにはまったく感じません。高校生向けの統計学のようなものです。モデルとその原理を理解するのも非常に簡単です。

このシリーズの記事では、まず線形回帰から始めて、徐々に勾配ブースティング(さまざまな種類のブースティング アルゴリズムを組み合わせたもの)、RankSVM、ランダム フォレストなどのアルゴリズムに移行しながら、LTR の実装を成功に導いた主要なアルゴリズムを紹介したいと思います。

LTRは何よりもまず回帰問題である

このシリーズの記事では、前回の記事とドキュメントで学んだように、LTR をより一般的な問題である回帰にマッピングしたいと思います。回帰問題では、一連の数値特徴を予測値にマッピングするモデルをトレーニングする必要があります。

たとえば、会社の利益を予測するにはどのようなデータが必要ですか? 従業員数、株価、収益、キャッシュフローなど、過去の公開財務データが手元にあるかもしれません。いくつかの企業のデータが既知であると仮定すると、モデルはこれらの変数(またはそのサブセット)の関数として利益を予測するようにトレーニングされます。新興企業の場合、この機能を使用して企業の利益を予測できます。

LTR も回帰問題です。クエリに対するドキュメントの関連性を測定する一連の評価があります。関連性スケールは A から F までで、通常は 0 (まったく関連性がない) から 4 (非常に関連性がある) までです。まず、次に示すようなキーワード検索クエリを考えてみましょう。

  1. グレード、映画、キーワードクエリ
  2. 4. ロッキー、ロッキー
  3. 0、ターナーとフーチ、ロッキー
  4. 3、ロッキー2、ロッキー
  5. 1、ランボー、ロッキー
  6. ...

時間信号の順序付けの関数としてランクを予測するモデルを構築する場合、LTR は回帰問題になります。 関連性検索におけるリコール、つまりシグナルと呼ばれるものは、クエリとドキュメントの関係を測る尺度です。より一般的な名前は機能ですが、私は個人的には長期シグナルと呼ぶことを好みます。理由の 1 つは、シグナルが通常クエリから独立していることです。つまり、結果はキーワード (またはクエリの一部) がドキュメントにどの程度関連しているかを測定することによって取得されます。一部の方法では、それらの関連性を測定します。したがって、記事の公開日やクエリから抽出されたエンティティ (「会社名」など) など、クエリ固有またはドキュメント固有の他のシグナルを導入できます。

上の映画の例を見てみましょう。関連性を予測するのに役立つクエリ依存のシグナルが 2 つあると思われるかもしれません。

  • タイトル属性に検索キーワードが何回出現するか
  • 検索キーワードが要約属性に何回出現するか

上記の評価を拡張すると、次の CSV ファイルに示すように、特定の信号値をレベルにマッピングした回帰トレーニング セットを取得できます。

  1. グレード、タイトル一致数、概要一致数
  2. 4,1,1
  3. 0,0,0
  4. 3,0,3
  5. 1,0,1

線形回帰と同じように回帰プロセスを適用して、他の列を使用して最初の列を予測できます。 Solr や Elasticsearch などの既存の検索エンジン上にこのようなシステムを構築することも可能です。

私は複雑な問題を回避しました。それは、これらの評価をどのように取得するか、ドキュメントがクエリに対して良いか悪いかをどのように判断するか、ユーザー分析を理解するか、専門家による人間による分析か、という問題です。これは解決するのが最も難しいことが多く、非常にドメイン固有です。モデルを構築するために仮説的なデータを用意するのは良いことですが、時間の無駄です。

線形回帰LTR

統計学を勉強したことがあるなら、線形回帰についてはすでにご存知でしょう。線形回帰は、回帰問題を単純な線形関数として定義します。たとえば、LTR では、最初のシグナル (検索キーワードがタイトル属性に出現する回数) を t と呼び、2 番目のシグナル (検索キーワードがサマリー属性に出現する回数) を o と呼びます。

モデルは次のように関連性をスコアリングする関数 s を生成できます。

最適な係数 c0、c1、c2 などを推定し、最小二乗法を使用してトレーニング データを予測できます。ここでは詳細には触れませんが、ポイントは、実際のグレード g と予測値 s(t, o) の間の誤差を最小限に抑えるために c0、c1、c2 などを見つけることができるということです。線形代数を復習すると、これは単純な行列計算のように見えます。

線形回帰を使用すると、決定が実際に別のランキング シグナル (t*o として定義) であることを含め、より満足できるようになります。または、別の信号 t2 (実際には通常 t^2 または log(t) として定義されます)、または相関予測に最適と思われるその他の式。ここで、これらの値を線形回帰の係数を学習するための追加列として使用する必要があります。

あらゆるモデルの設計、テスト、評価は、より奥の深い技術です。さらに詳しく学びたい場合は、『統計学習入門』を強くお勧めします。

sklearn を使用した線形回帰 LTR の実装

より直感的なエクスペリエンスを得るには、Python の sklearn ライブラリを使用して回帰を実装するのが便利です。上記のデータを使用して線形回帰による単純な LTR トレーニング セットを試したい場合は、予測しようとしている関連性スコアを S として表すことができ、表示される信号はそのスコアを X として予測します。

映画の関連性データを使って、興味深いことを試してみます。こちらは、検索キーワード「Rocky」の関連性評価のデータセットです。上記の判断表を思い出して、それをトレーニング セットに変換します。実際のトレーニング セットを体験してみましょう (注釈は特定のプロセスを理解するのに役立ちます)。私たちが調べる 3 つのランキング シグナルには、タイトルの TF*IDF スコア、説明の TF*IDF スコア、映画の視聴者評価が含まれます。

  1. グレード、タイトルスコア、概要スコア、評価スコア、コメント:# キーワード@映画タイトル
  2. 4,10.65,8.41,7.40,# 1366 ロッキー@ロッキー
  3. 3,0.00,6.75,7.00,# 12412 ロッキー@クリード
  4. 3,8.22,9.72,6.60,# 1246 ロッキー@ロッキー・バルボア
  5. 3,8.22,8.41,0.00,# 1374 ロッキー@ロッキーIV
  6. 3,8.22,7.68,6.90,# 1367 ロッキー@ロッキー II
  7. 3,8.22,7.15,0.00,# 1375 ロッキー@ロッキーV
  8. 3,8.22,5.28,0.00,# 1371 ロッキー@ロッキー3
  9. 2,0.00,0.00,7.60,# 154019 ロッキー@ベラミーノ
  10. 2,0.00,0.00,7.10,# 1368 ロッキー@ファーストブラッド
  11. 2,0.00,0.00,6.70,# 13258 ロッキー@ランボーの息子
  12. 2,0.00,0.00,0.00,# 70808 ロッキー@クリチコ
  13. 2,0.00,0.00,0.00,# 64807 ロッキー@恨み節
  14. 2,0.00,0.00,0.00,# 47059 ロッキー@ボクシングジム
  15. ...

それでは、早速コードを見てみましょう。次のコードは、CSV ファイルからデータを numpy 配列に読み込みます。配列は 2 次元で、最初の次元が行、2 番目の次元が列です。以下のコメントで、非常に現代的な配列スライスがどのように行われるかがわかります。

  1. sklearn.linear_model から LinearRegression をインポートします
  2. 数学からインポートsin
  3. numpyをnpとしてインポートする
  4. csvをインポート
  5.  
  6. rockyData = np .genfromtxt('rocky.csv', delimiter = ',' )[1:] # CSVヘッダーを削除する
  7.  
  8. rockyGrades = rockyData [:,0] # 成績が記録されている列0を切り出す
  9. rockySignals = rockyData [:,1:-1] # 列 1 の特徴...最後の列 (コメント) を除くすべての列

素晴らしい!単純な線形回帰を実行する準備ができました。ここでは、古典的な判断方法を使用します。つまり、未知数よりも方程式の数が多いのです。したがって、通常の最小二乗法を使用して、特徴 rockySignals とグレード rockyGrades の関係を推定する必要があります。簡単に言えば、NumPy 線形回帰は次のことを行います。

  1. しかし、IRegress = LinearRegression ()
  2. butIRegress.fit(rockySignals、rockyGrades)

ランキング シグナルに使用される係数 (または「重み」) は次のとおりです。

  1. butIRegress.coef_ #タイトルのブースト、概要のブースト、評価のブースト
  2.  
  3. 配列([ 0.04999419, 0.22958357, 0.00573909])
  4.  
  5. しかしIRegress.intercept_
  6.  
  7. 0.97040804634516986

素晴らしい! 関連性が解決されました! (本当ですか?) これを使用してランキング機能を構築できます。タイトル属性と説明属性にそれぞれどの程度の重みを与えるべきかを学びました。

これまで私が見落としていたことの 1 つは、モデルとデータの適合性を評価する方法を考慮する必要があるということです。この記事の最後では、これらのモデルが一般的にどのように機能するかを確認したいと思います。しかし、モデルがトレーニング セット データに適合していると単純に想定するのではなく、必ず何らかのデータに対してモデルをテストすることをお勧めします。次のブログ投稿では、これらのトピックを個別に紹介します。

モデルを使用してクエリにスコアを付ける

これらの係数を使用して、独自のソート関数を構築できます。これは説明目的のみで、sk-learn の線形回帰には入力を与えられたモデルを評価する予測メソッドが付属していますが、独自のメソッドを構築する方が楽しいです。

  1. def relevanceScore(intercept、titleCoef、overviewCoef、ratingCoef、titleScore、overviewScore、movieRating):
  2. インターセプト + (titleCoef * titleScore) + (overviewCoef * summaryScore) + (ratingCoef * movieRating) を返します。

この関数を使用すると、「Rambo」を検索したときに、次の 2 つの候補映画の関連性スコアを取得できます。

  1. タイトルスコア、概要スコア、映画評価、コメント
  2. 12.28,9.82,6.40,# 7555 ランボー@ランボー
  3. 0.00,10.76,7.10,# 1368 ランボー@ファースト・ブラッド

では、Rambo と First Blood にスコアを付けて、どちらがクエリ「Rambo」との関連性が高いか見てみましょう。

  1. # スコア ランボー
  2. 関連性スコア(butIRegress.intercept_、butIRegress.coef_[0]、butIRegress.coef_[1]、butIRegress.coef_[2]、タイトルスコア= 12.28 概要スコア= 9.82 映画評価= 6.40 )
  1. # ファーストブラッドを獲得
  2. 関連性スコア(butIRegress.intercept_、butIRegress.coef_[0]、butIRegress.coef_[1]、butIRegress.coef_[2]、タイトルスコア= 0.00 概要スコア= 10.76 映画評価= 7.10 )

結果スコアはランボーが3.670、ランボー・​​ファースト・ブラッドが3.671でした。

非常に僅差です!『ファースト・ブラッド』が『ランボー』に僅差で勝利しました。理由はこうです - ランボーは完全に一致しており、ランボー映画の前編はファースト・ブラッドです!したがって、モデルをそれほど信憑性のあるものにするべきではありません。そのレベルに達する例はそれほど多くありません。さらに興味深いのは、紹介スコアの係数がタイトルスコアの係数よりも大きいことです。したがって、少なくともこの例では、モデルは、プロフィールに記載されているキーワードが多いほど、最終的な関連性が高くなる傾向があることを示しています。これまで、ユーザーの視点から見た関連性の問題を解決するための優れた戦略を学びました。

このモデルを追加すると、理解しやすく、妥当な結果が得られるため、さらに興味深いものになります。ただし、適用された相関関係のため、通常、特徴の直接的な線形結合は期待を満たしません。フラックス氏の同僚が主張しているように、そのような正当性がなければ、直接加重ブースティングも期待に応えられないことになる。

なぜでしょうか? 細部が成功と失敗を決定します。

上記の例から、関連性の高い映画の中には確かに高い TF*IDF 関連性スコアを持つものがあることがわかりますが、モデルは関連性よりも要約フィールドを優先する傾向があります。タイトルが実際に一致するタイミングと概要が一致するタイミングは、他の要因によっても異なります。

多くの問題では、関連性の評価はタイトル属性と概要属性のスコアとの単純な線形関係ではなく、コンテキストに依存します。タイトルを直接検索したいだけなら、タイトルの方が間違いなくマッチしますが、タイトル、カテゴリ、映画の俳優、あるいはその他の属性を検索するかどうかがわからない場合は、対処が難しくなります。

言い換えれば、関連性の問題は純粋な最適化問題ではないようです。

実際の関連性はより複雑です。魔法のような最適解は存在しませんが、他の多くの要因に依存する多くの局所最適解が存在します。なぜでしょうか? 言い換えると、相関関係は次のようになります。

これらのグラフ (Andrew Ng の機械学習コースから) は、「関連性エラー」、つまり学習しているスコアからどれだけ離れているかを示すために使用されると考えられます。 2 つの θ 変数のマッピングは、タイトルと概要の関連性スコアを表します。最初のグラフには、「関連性エラー」が最小となる単一の最適値、つまり両方のクエリに適用する理想的な重み設定があります。 2 つ目はもう少し実用的です。つまり、起伏のある、コンテキストに依存する局所最小値です。非常に高いタイトル ウェイト値に関連付けられる場合もあれば、非常に低いタイトル ウェイト値に関連付けられる場合もあります。

<<:  2018年のAIトレンドはこちら

>>:  機械学習について誰もが知っておくべきこと

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

ニューラルネットワークの内部はどのようになっているのでしょうか?

ニューラル ネットワークは錬金術の炉のようなものです。大量のデータを入力すると、魔法のような結果が生...

対話 | QingCloud CTO: AI が到来し、基本的なクラウド サービス プロバイダーもそれに備える必要があります。

[51CTO記者の李玲玲が北京からレポート] 真夏が到来し、人工知能も北京の天気のように、より暑い...

...

...

...

武有雄が人工知能について語る

7月9日、世界人工知能会議クラウドサミットが正式に開幕しました!アマゾン ウェブ サービスは、202...

...

Python の顔認識の優れた教育例、顔認識システムを構築するための 40 行のコード!

[[229034]] Face Id は、高性能な顔認証ソフトウェアです。公式の主張は、「100 ...

エイリアンがトレンド検索リストのトップに!米国が初のUFO公聴会を開催

昨日、米国議会の公聴会が中国国内の複数のメディアのトレンド検索のトップに躍り出た。 これを一言でまと...

...

大企業面接のための iAsk の「スケジュール アルゴリズム」、写真 20 枚が当たる

[[341122]]この記事はWeChatの公開アカウント「Xiao Lin Coding」から転載...

...

2024年のビッグデータの不完全な予測

人工知能の進歩は2024年まで大きな原動力となる可能性が高く、ビッグデータの課題、つまりそれをどのよ...

Alimama は曲率空間学習フレームワークと連合学習ソリューションをオープンソース化し、共通の進歩のために AI 技術を一般に公開します。

9月15日、Alimamaは、曲率空間学習フレームワークと連合学習ソリューションという2つのAI技...