oneWEXの操作メモ_ランカー⑴

#はじめに

こちらは、oneWEXの主要機能の一つ、ランカーについての記事です。

#ランカーとは

ランカーとは、コレクション内で、ある一つの文書に対して、類似文書を検索する機能です。
・文書全体がクエリーとなることが特徴です
・ランカー内では、検索結果のランキング精度向上のために機械学習が使われています

以下は、コレクション内の文書へのランカーの適用手順です。
分析画面において文書表示時に「類似文書」ボタンをクリックすると、選択した文書に対し類似度が高い順に文書がランキング形式で表示され、類似文書検索が可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/df9e84bd-9cba-cbe5-3b86-cfbb4a3ddaf9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/7aa904ea-ad91-1ff8-a140-f243e6b25aac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/983c959e-f788-35fd-6d50-b5fea74d3be6.png)

#ランカー利用の利点
具体例をあげながら、ランカーを使用する利点を説明します。

####保険会社の例
保険金の請求内容を調査し、詳細な支払額を決定する業務にoneWEXのランカーを適用するユースケースを考えます
請求内容には、請求者のプロフィールや医者の診断内容も含まれます
判断のために、過去の支払い事例を調査し参照します
・業務を手作業で行う場合
過去に支払いをした事例に対して、類似文章を検索する場合のクエリー(年齢、症状、添付情報などの検索キーワード)を自分で考えなければならず、多くの試行錯誤を要します
・oneWEXのランカーを使用する場合
検索のためのクエリーを考える必要がないので、検索にかかる時間が削減されます
文書のすべてのデータが過去の事例との類似性の判断に使用されるので、検索の関連性が向上します

####国土交通省のデータへの応用
今回の「ランカーの操作手順」のご説明の際は、国土交通省のオープンデータを用いて類似資料検索するユースケースを考えます

#ランカーの操作概略
1.ランカーの作成
あらかじめユーザーは教師データを用意しランカーに読みこませます。類似度を決定するためには、学習データの各データ項目に対して、重みづけ（どのデータ項目が文書間の類似度を決定するためにより重要なのかを定義すること）が必要です。
ランカー内ではトレーニングが行われ、この重み付けを定義したモデルが作成されます。
このトレーニングはユーザーにはブラックボックスです。

2.ランカーの適用
ユーザーが、類似度検索が必要な新たなデータを読み込ませてコレクションを作成します。
ランカー作成の際に作成されたコレクション・テンプレートを適用させることで、コレクション作成後に類似度検索が可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/adb3a937-1202-577a-e365-b2b4c48c7838.png)

#ランカー内部の学習の仕組み
ランカーの中で行われている学習は本来ブラックボックスですが、以下では学習の仕組みをイメージで説明します。
※あくまでイメージです。

ランカーでは、類似度を決定するために、学習データの各データ項目に対して、重みづけ（どのデータ項目が文書間の類似度を決定するためにより重要なのかを定義すること）が必要です。
本資料では、ある医療カルテデータを教師データとして使用しランカー内部の学習の仕組みをご説明いたします（診断結果を、学習のための正解フィールドとします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/61165f21-a584-623e-b15f-36262cf63d61.png)

1.教師データからある文書を抜き出してクエリー文書として使用します
2.残りのデータから類似文書候補を選択します
どの文書が実際に選択されるのかは内部調査の挙動によって決められ、ユーザーには知らされません
この段階では診断結果の値は学習に使用されません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/6a85700b-a992-4ad8-7c28-3a5ac2ad2c36.png)

3.クエリー文書の診断結果を見て他の類似文書候補の診断結果の値を比較します。もし診断結果の値が合致していれば、その文書はクエリー文書と真に類似する「positive example」と見なされ、それ以外は「negative example」と
見なされます
トレーニング段階では、クエリー文書に対する候補文書が決定された後に正解フィールド（今回の場合、診断結果）の値がトレーニングに使用されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/1ccc6a8f-2bd7-745c-81f4-79b9be726fd3.png)

4.前述までの1~3.と同じステップが、ランカー内部でクエリー文書が変えられながら繰り返されます

5.4.までの全結果を収集しランカーモデルをトレーニングします
positive exampleを参照しながら、学習データの各データ項目に対して、類似度の決定における重要度の重みづけをランカーが行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/75b40a9b-41d3-39bd-5025-5394c7f5f592.png)

※（補足）
用意できる教師データには大きく二種類があります。

・属性タイプ：正解フィールドが属性で現されているデータタイプです。この場合は同じ属性値を持つ文書が類似文書と見なされます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/4a4f5584-390a-7975-38cd-f0918ac9a388.png)

・IDタイプ：正解フィールドにIDが含まれているタイプです。この場合は同じID値を持つ文書が類似文書と見なされます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/a4c96340-0731-7107-b2cb-8e8e6ac08f2f.png)

#ランカーの操作手順
以下、ランカーの操作手順を説明します。

oneWEXランカーはAdmin Console画面から操作します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/7e1064a7-e762-83f0-a232-62661755ee14.png)

今回、以下のような国土交通省のデータを教師データとして使用します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/6a22f3ec-912a-767d-24ea-af2ca671cf0e.png)

####データ・セットの作成

Admin Console画面からデータ・セットの追加を行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/323d4c96-2e75-3ba7-66f8-a206b4654353.png)

データ・セット名を命名します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/73e3ace9-0278-3fc8-c756-a8c16bb6b6bf.png)

教師データCSVファイルを読み込むためのインポーターを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/479b3330-15dd-e800-f824-487184ee074d.png)

インポーターを命名します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/7dee1c2a-a91e-6a27-7576-aaf0e9f399bf.png)

教師ファイルをアップロードします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/01f275c0-d358-7df0-77f5-8215695daf5e.png)

CSVファイルの解析方法を指定し確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/0851ea30-a4de-81bb-2c39-6105247a2c62.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/ecf35b9f-917b-f9b3-8fb0-365eb9afb91e.png)

インポートする列を選択します（日付に関するデータはタイプを「日付」に指定します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/b7b64193-7942-7c19-152a-8602ccc2ce53.png)

インポートを開始します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/632e9480-f801-78e4-bd71-3a09c961b69a.png)

インポートが完了したことを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/ae0ac2e6-343f-935d-f7fe-a26b791378a2.png)

（参考）日付データがある場合は、ランカーの設定画面において日付形式を指定します。データ内の日付のフォーマットに従って日付フォーマットの形式を設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/7d1a2955-e98c-cb92-4466-0d4eb1a01de6.png)

（参考）日付形式の設定の変更を適用させるために、概説画面に移動しインポートを開始します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/c08d115b-04a4-da8c-9f24-8d4950bbee93.png)

####ランカーの作成

Admin Console画面を開き、リソースタブを選択し、「ランカーの追加」ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/715deca8-6736-1466-609f-372ae10827f6.png)

ランカーの名称を決定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/c9872ee7-6289-38e0-ad7e-0f14656ce264.png)

先ほど作成したデータ・セットをリストに追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/6fe15c57-927b-7b13-1d3c-5f4ac7b8f841.png)

機械学習とランキングに用いるフィールドやコレクション・テンプレート名を設定します。コレクション・テンプレートは後のコレクション作成時に使用します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/dadf4883-d68c-4231-a95f-0f130d17ab11.png)

ランカーのトレーニング用のフィールドを設定・選択します
トレーニングにおいて学習させる必要のないデータはフィールドから外します（ただし、分析に使用するフィールドはのちのコレクション作成時に別途選択します)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/0022e741-3a34-7042-820a-2deee476ed4a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/2ec622e1-e590-7500-9e87-c93a299adbc9.png)

適切な値を設定して進みます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/8cdd70d2-1a0a-73d4-22c5-3a51f8571861.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/a64f0375-d768-fb48-897b-fc592b32afc0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/ea79a71d-1c67-8768-3d01-e6f5cae783b1.png)

学習を開始させ新規モデルを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/79eee1cc-e5a2-4862-5729-3d3388f03a70.png)

データ・セットを比率で分割します。今回はデフォルトの比率を使用します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/75969f1e-dd28-0c50-00e9-add5d81c0c7c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/2a4fefbc-1a73-8f3a-27cf-a5ddb5e4cff0.png)

モデルの作成には数分かかることがあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/eed05d13-6382-5e31-f79b-c930c9bbebfb.png)

モデルが作成されたことを確認し、モデルをデプロイします
デプロイ操作により、作成したモデルがコレクションに適用可能になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/733c405a-6068-93ac-6aa3-a04631b4e76e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/921ae240-6111-945f-9098-aeaf3a1532f0.png)

モデルがデプロイされたのち、Admin Console画面で作成したランカーを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/2b20404a-5c70-42c2-3527-7a57ca0cec17.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/fe245f04-d578-1975-0270-2e7457f39131.png)

####ランカーを適用させたコレクションの作成
Admin Console画面でコレクションを作成します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/143204ea-9b31-a958-f4ec-c994ae3d2ee4.png)

ランカー作成時に作成されたコレクション・テンプレートを適用します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/6010d287-dce2-1871-02c1-da0dfe2baac8.png)

コレクション名を命名します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/0bc7ffde-6ed1-8634-f5de-9d8f73d89f22.png)

データ・セットを選択します（ランカーの作成時と同じデータ・セットを使用しても問題ありません）
コレクション・フィールドの各項目を適切な値に設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/14ade874-9b2d-0f13-9d1a-945fb11064b2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/b28588ba-83d3-a5f8-d76c-34843440cbaa.png)

以下の設定も適切な値を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/7326bd23-38db-c366-da77-6847e7ce8fbb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/4b1bc4d9-ada2-a5e7-50af-834cfc1673f4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/9c83fdf7-9a65-5d0a-0699-280f0b36f87a.png)

「今すぐ索引付けを実行」を選択し、コレクションを保存します（索引付けには数分かかることがあります）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/21bde493-da3c-89c0-f46c-5a5ca9560c57.png)

索引付けが完了するまで表示画面には「0%索引付き」と表示されますが、内部で索引付けは進んでいます。完了したら「100%索引付き」と表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/fe8cf0ce-4c45-a14e-9e6e-554f18cb98fd.png)


索引付け完了後、コレクション一覧に作成したコレクションが表示されていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/9a2a3e49-0c8a-1b05-4242-ff0b28d1d7b2.png)

ランカーを適用させたコレクションで分析を行います。Content Miner画面で作成したコレクションを選択し分析を実行します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/be36e674-3a7f-3d1e-0b55-2d1148505084.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/cd0a0aa8-9af9-478f-4f45-09508bb7e904.png)

任意の文書を指定し「類似文書」ボタンを選択します。結果、指定した文書に類似度が高い順に文書がランキングされます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/510ae063-ead4-6f66-0a6d-7c20dc89d24b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/33743567-718b-e361-5955-8f80e4ed5cb6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/29de50ab-c264-0a64-45fc-5eb7516121c3.png)

ランカー適用前後で文書の類似検索ランキングが変化していることがわかります

適用前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/4ab8432e-2c6d-455c-785a-b841623632b4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/321ea931-08a1-7f27-c664-342745eeb425.png)
適用後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/e9344d38-6d97-01b2-8cd2-d297b445c1c3.png)

####ランカーの精度の向上

ランカーの精度向上を行います。学習に意味のある教師データを用意します
Admin Console画面のリソース画面からすでに作成されているランカーを選択し、詳細画面の右下の「学習データ・セットの更新」欄の「CSVのアップロード」から用意した教師データを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/4b58a295-7ac6-722a-6786-c5e69e4d9da2.png)

追加教師データをインポートしファイルが追加されたことを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/52879e54-f6d9-966e-39ef-f6a95db799a3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/d9e6045d-d310-a6dc-a126-ec12eb54ccc2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/d94b4c85-8ee3-3c3d-75b8-4d87dba06d94.png)

新規モデルを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/346e9a72-8d25-9a84-14f5-3665f7ca04ff.png)

学習セットを更新します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/20fd6890-18cc-2541-6a0c-4f99ed0650cf.png)

新規モデルの作成を実施します（完了まで数分かかることがあります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/2665f613-5e48-57cb-2aff-6de44aa2b8d7.png)

新規モデル作成後、精度が向上したことを確認しデプロイします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/23b2b88b-a822-2810-7f76-f65adb9ad7dd.png)

新規モデルがデプロイされたことを確認します
ランカーをコレクションに適用する際、現在デプロイされているモデルのバージョンだけが適用可能です
ただし古いバージョンのモデルでも、再デプロイすることで適用可能になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/c5fa440d-4db8-282c-510c-1efc16af0bed.png)

デプロイした新規モデルを既存のコレクションに適用するため、コレクションで索引の再作成を行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529440/de61ba8d-7d78-1904-ba7e-5234e7c39bf0.png)

#最後に
oneWEXの主要機能の一つ、ランカーの概要や操作方法について書きました。

[(oneWEXの操作メモ_ランカー⑵)](https://qiita.com/sawa7/items/c25d4267122b7094152c)では、ランカー操作時の考慮点をお伝えします。