Discovery Premiumやってみた　〜Classifier編〜

Watson DiscoveryのPremiumプランで提供されている機能を使ってみました。
今回はClassifierという機能です。

#Classifierって何？
分類器です。
ある文章に対して、その文章がどのカテゴリーに該当するかを分類するものです。
サンプル文とそのカテゴリーを紐づけた教師データを準備し、教師データを元に学習させたモデルを使って、新しい文がどのカテゴリーに該当するかを分類するものです。

#Discoveryには2種類のClassifierがある
[マニュアル](https://cloud.ibm.com/docs/discovery-data?topic=discovery-data-domain#classifier)によるとWatson Discoveryには2種類のClassifierがあるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/eff79fe3-acaa-9389-379f-ec3c67e2256f.png)
>- **text classifer**　
  - Discoveryの画面から作った分類器で、品詞のみを使って分類するもの。
>- **document classifier**
  - Content Miningの画面から作った分類器で、品詞情報に加えて他のメタ情報も使って分類するもの。

この記事では、主にText Classifierについて紹介します。
ところで、Discoveryの画面とContent Miningの画面って何？と思われていると思いますので、軽く紹介します。

Discoveryの画面はこれです。
主に検索を目的としたDocument Retrievalプロジェクトで使用する画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/84c7d3f2-db4c-5876-3140-9cdabcb52ac7.png)

Content Miningの画面はこれです。
主にテキストマイニング （データ分析）を目的としたContent Miningプロジェクトで使用する画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/73876504-5fb0-fb76-eb30-8e5ed6a9588b.png)

それぞれの画面からClassifierを作ることができ、
- Discoveryの画面から作るものを **text classifier**
- Content Miningの画面から作るものを **document classifier** 
というみたいです。それぞれ準備する教師データも違いそうですね。

##Text Classifier やってみた
マニュアルの手順は[こちら](https://cloud.ibm.com/docs/discovery-data?topic=discovery-data-domain#classifier)。
今回は英語のサンプルを使いましたが日本語にも対応しています。
###教師データのサンプル
サンプル文と正解ラベルの教師データを準備します。
ここではお客様からのクレームの声に対して、クレームの種類の正解ラベルを作成し、分類を行います。
下はサンプルなので件数少なめですが実施はもっとあります。
1つの正解ラベルに対して少なくとも10個のサンプル文は準備した方が良いとマニュアルに記載がありました。
1つサンプル文に対して複数の正解ラベルをつけることもできるようですが、今回は１つのみです。

| サンプル文 | 正解ラベル |
|:-|:-|
| The straw was peeled off from the juice pack.  | package_container  |
| I got some ice cream for my children, but there was something like a piece of thread inside the cup.  | contamination_tampering  |
| I could only find 11 cups in the 12-pack.  |  amount.shortage |
| There was a stain on the package that seemed to be caused by a leak. Is it safe to drink?  | package_container.leak  |
| I love the ads for the new milk chocolate. Could you tell me the name of the actor in the commercial?  | ads |
|：| ：|

>***注意***
- 教師データはUTF-8のCSV形式
- ヘッダー行は無し
- 1つのラベルに対して少なくとも3つのサンプル文が必要

###Text Classiferの作成
未分類のデータはDiscoveryに投入済みです。
Discoveryの画面から作ります。
「Improvement tools」の「Teach domain concepts」を開き「Classifiers」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/62bea7d2-1fb5-a396-fe09-540bd2d06aea.png)
右上のUploadをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/898bf875-9d5f-8ab1-aaee-c56ad04fc115.png)
適当な名前をつけて、言語を選択して、教師データのcsvをアップロードして、Createをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/8c2e5583-49bf-8898-a11d-f5ed8c20f170.png)
どのコレクションのどのフィールドに対して分類したいかを選びApplyをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/da0520ea-1654-643a-a96b-948075bbeb09.png)
裏で索引付が行われるのでしばらく待ちます。

###Text Classifierの結果確認
準備が整ったらDiscoveryの画面から適当な文書の詳細をみてみましょう。
View passage in documentをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/de1ed1dc-e50b-3589-b0e0-43ccce0bd019.png)
結果の詳細を確認すると、、、
`"I like to buy pastry made by ABCDE confectionery company. Sometimes there is almost no jam at all."`というテキストに対して`amount.shortage`が確信度`0.9187`で分類されました！
うん、うん、ジャムがないと言っているので分類結果として`amount.shortage`はあってそう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148302/a42c591d-49a7-ab88-5c0e-d78c7aa03452.png)

簡単でしたね。

##Document Classifier の紹介
次は、Document Classifierです。
マニュアルの手順は[こちら](https://cloud.ibm.com/docs/discovery-data?topic=discovery-data-contentminerapp#create-doc-classifier)。
今回は英語のサンプルを使いましたが日本語にも対応しています。

###教師データ
Document Classifierはメタデータも学習に使ってくれるということなのでこんなサンプルを準備しました。

このようなデータを使って`label`を予測する分類器を作るわけですが、`id`や`date`などは学習データに使ってもあまり意味なさそうですねぇ。
でも大丈夫です！Document Classifierを作るときにどの項目を学習に使うか使わないなの取捨選択ができます！
重要なことは、Discoveryに投入する項目と教師データで投入する項目が同じである必要があります。
https://cloud.ibm.com/docs/discovery-data?topic=discovery-data-contentminerapp&locale=ja#create-doc-classifier

| id | date | productLine | product | membership | location | gender | age | text | label |
|:-|:-|:-|:-|:-|:-|:-|:-|:-|:-|
| 0 | 2016/1/1 | Tea | lemon tea  | Not Member | Manhattan | Male | 20 | The straw was peeled off from the juice pack. | package_container |
| 1 | 2016/1/2 | Ice cream | vanilla ice cream | Silver Card Member | Queens | Female | 40 | The cup looked like it was already opened. Is it safe? | prank |
| 2 | 2016/1/3 | Jelly | apple jelly | Gold Card Member | Brooklyn | Male | 50 | I could only find 11 cups in the 12-pack. | amount.shortage |
| ： | ： | ： | ： | ： | ： | ： | ： | ： | ： |


###Document Classifierの作成
Document Classifierの作成手順についてはちょっと長くなりそうなので別の記事で改めて書きたいと思っています。
参考資料として、別製品で実施した手順が既にQiitaで公開されており、大体手順は同じですので今はそちらをご参照ください :bow_tone1:。

oneWEXの操作メモ_分類器⑴
https://qiita.com/sawa7/items/2ee71d3ac34231daf2ac

###Document Classifierの結果確認

結果についてもこちらをご参照ください :bow_tone1:。

oneWEXの操作メモ_分類器⑴
https://qiita.com/sawa7/items/2ee71d3ac34231daf2ac

##まとめ
- Discovery Premiumには、2つの分類器がある。
- それぞれ準備する教師データや作成画面が違う。
- 自然文のみから分類をしたい場合は、text classifier。
- メタデータも含めて分類をしたい場合は、document classifier。
- 教師データの正解ラベルには複数の分類を指定することができる。
- ちなみに、Document Retrievalプロジェクトで作った text classifier をContent Miningプロジェクトに適用したり、その逆、Content Miningプロジェクトで作ったdocument classifierをDocument Retrievalプロジェクトに適用することができるそうです。


##お断り
このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。自己責任で実行してください。