【2019/2月 全面更新!】Watson Discovery Serviceが日本語対応したので、触ってみた【SDUやってみた】編

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/57fd205f-d00a-4b87-4c9f-c46c460e78d0.png)

当記事は[Watson Discovery Serviceが日本語対応したので、触ってみた【何、それ？】編](https://qiita.com/ishida330/items/b823d7c5b55806f04242)の続きです。

# え！今後はSmart Document Understanding推しかよ！(Getting Started)

Watson Discoveryのドキュメントのトップの :blue_book: [Getting started](https://console.bluemix.net/docs/services/discovery/getting-started-tool.html)をみたら、内容が最新のSmart Document Understandingのハンズオンになってました。あ、そうなの？ もう？今後はそっちメインで？と、ちと意外でしたが、まあやってみました。

:warning: 日本語のpdf:jp:もやってみたのですが、pdfの作り方の違いでしょうか、SDUエディター上で文字が認識されなかったり、なぜか本文全体がFooterと認識されてしまって直すのがえらく大変なものがあったり、、、とまだちょっと問題ありそうです。SDUは2018/12にベータ公開されて2019/2にGAした「出来立てほやほや」の機能です。日本語もサポートされてますが、個人的には本番利用はすこし様子を見ていただいたほうがいいように感じました。:pensive:

---
:triangular_flag_on_post: 以下、大元のドキュメントと章立て合わせてます

## 0) 事前準備
IBM Cloudにログインし、[カタログ](https://console.bluemix.net/catalog/services/discovery)からWatson Discoveryのインスタンスを作成します

Discoveryのアイコンを選択
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/e781a21e-5133-8520-7625-1b9363dcfd3f.png)

お好きなサービス名とロケーションを選択して「作成」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/ff50da43-89ea-cde3-7844-51072b8346d0.png)
 

## 1) Discovery Toolingの起動

管理コンソールでサービスをクリックし、「ツールの起動」ボタン
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/3c5ea4a5-43c7-1144-f4ae-dbe5e1b436e7.png)

DisciveryのUIツールが起動しました
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/16bbbc3f-6579-dd80-f456-caed4e6fce31.png)

## 2) コレクションの作成

右上でディスクのアイコンをクリックして「Create Environment」
プランどうする？と聞かれるのでとりあえず「Set up with current plan」で無料のLiteプランで進めます

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/37ad54bc-b791-9fa6-1f85-1c63e69938c7.png)

初期パネルで「Upload your own data」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/e2383934-eb3e-9140-b75a-3bf98ea6f891.png)

Collection名を「InstallDoc」として「Create」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/dc2f640c-7b1e-5124-158d-6ceddca16113.png)

:warning: ![image](https://qiita-image-store.s3.amazonaws.com/0/108535/40d62e92-f043-2c69-6b28-d7e09bb6ebd3.png)
:warning: Advancedでの構成はElement Classification用なので**チェックしない**ようお願いします。

コレクションができました。まだ空です。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/99918626-e35b-5020-53d5-0d43067c3502.png)

## 3)サンプル・ドキュメントのダウンロードとコレクションへのアップロード

[Watson Explorer Installation Guide](https://watson-developer-cloud.github.io/doc-tutorial-downloads/discovery/watsonexplorerinstall.pdf)のPDFをPCにダウンロードします。中身は普通の製品マニュアルで98ページあります。目次などの体裁も整ったものです。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/37d975c0-41ad-8ae7-7291-a1f9cd01dd86.png)

このpdfをドラッグ＆ドロップまたは「browse from computer」でアップロードします。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/bfa1d6ce-7616-5eca-9497-d27fdad4b9a7.png)

処理が終わると以下のようになります。この時点で既に索引は作成済みです。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/9c0dfa32-703c-f368-2fad-6f94cf977c59.png)

:one: 文書は１つ
:two: 「text」というフィールドのみ認識されています
:three: デフォルトのエンリッチメントが適用されています
:four: すぐ使える照会が組み立てられています
:five: エラーになった文書があれば、ここに表示されます

まずは文書の照会を試します。右下の「Build your own query」をクリック

自然言語で照会しましょう。照会パネルの「Use natural language」で「What are the minimum hardware requirements」と入力し、「Run Query」ボタンを押すと、右側に照会の結果が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/8e7fa4a9-6883-55ab-0931-6847eea016e4.png)

「JSON」タブでJSON形式でも見られます
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/d365bc28-e4f6-cf1f-cf70-fe3eef2bcca7.png)

左上の「InstallDocs」のリンクをクリックしてOverviewパネルに戻ります
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/d9fe9f00-001a-1086-ddeb-b5ee5c191884.png)

## 4) ドキュメントのアノテーション

今はドキュメント全体が一つの「text」という分類でしか認識されていません。でも実際は目次やヘダー、フッターなどの構造があります。ではPDFマニュアルに「ここはこういう意味だよ！」とアノテーションを付けて文書の構造を教えていきましょう。

右上の「configure Data」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/1c9dcfe4-76a5-1f8c-5d2b-dc822f3a1ebe.png)

タブ「Identify fields」にPDFのドキュメントが表示されています。右側には様々なフィールドの意味が定義されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/655d753d-abb9-7ab0-20c1-d6ae13720753.png)

まずはタイトルです。右のfield labelsからtitileをクリックし、「Installation and Integration Guide」のタイトルに相当する箇所をクリックします。クリックするとフィールドの色がピンクに変わります。この操作で「ここはタイトルだよ！」と教えているわけです。できたら「Submit Page」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/4643e9d5-984c-fea4-f2c0-76a3f9230631.png)

つぎはフッターです。ページ４に進み、右のfield labelsからfooterを選び、該当箇所クリックの上、また「Submit Page」

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/67d9cdee-e937-ed15-08f4-1ee25ffe9686.png)

ページ５とページ６も同様にfooterを定義して各ページで「Submit Page」
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/57f4a00c-3deb-4c51-1151-52ab0586d9d3.png)

この状態でページ7やページ8に進むと、このページでは、何もしていないのにフッターの箇所が認識されているのがわかります。まさにSmart Document Understanding(スマートな文書の理解）ですね！
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/f37af577-580a-901a-ee16-00615fdf818c.png)

【ご参考】イメージはこうすれば拡大表示できます
![sdu-size.gif](https://qiita-image-store.s3.amazonaws.com/0/108535/416762c7-1a05-df0d-5e82-57cd30e3046e.gif)

ページ**7, 9,10**　の**title**と**subtitle**も同様にアノテーションしましょう.各ページで「Submit Page」をお忘れなく。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/b63612fd-81fb-1738-46fc-ad5e1106e108.png)

p11以降も数ページでいいので**title**と**subtitle**も同様にアノテーションしてみてください。

文書は98ページと大きいので、検索用に小さい単位に区切ります。「**Manage Fields**」タブ-右側「**Split Document on each occurence of** 」で「**subtitle**」を指定します。先ほどのアノテーションでsubtitleが出てくる都度、内部的に別の文書に分割するわけです。なぜ分割するかというと、性能面もありますが検索がヒットした箇所の特定を容易にするためです。例えば１文書がマニュアル数百ページで検索ヒットした場合、「これ、この文書（のどこか）にあったよ」といわれただけでは探せません。細かく区切っておけば「この章のこの節」と特定しやすくなりますよね。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/320649a4-6e23-b8ff-06f4-3148e03a03cb.png)

これでひとまずアノテーションは完了です。右上の「Apply Changes to Collection」を押すと、改めて文書をアップロードするパネルがでるので、もう一度同じ文書をアップロードします。要は、文書の解釈ルールが変わったので、もういちど解釈しなおすわけです。同じ名前の文書なら置換されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/6873c86d-b47d-2383-6e8e-dd1e5c85b253.png)

しばらくすると文書が40以上に分割され、**title,subtitle,footer,text**のフィールドが特定されました。フィールドが特定されれば、サブタイトルのみを検索する、footerは検索対象に含めない、など細かい検索結果の調整ができます。
:warning: 何もおきなければ再度ここでupload documentする、ブラウザーをリロードする、など試みてください。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/4455d037-d52a-d1c1-de12-06061f92296a.png)

左の「**View Metadata Schema**」ではCollectionレベルで認識されたフィールドが見られます。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/bc072738-cba9-8ccb-c24c-a22d380e57c7.png)

**Document View**タブでは個別のドキュメントで認識された内容が見られます。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/b4183989-bb9b-0fd3-7f18-beeaa9a57a65.png)

## 5) 再度、照会します
では改めて「Build your query」で冒頭と同じ自然言語照会「What are the minimum hardware requirements」を実行してみましょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/67214ae2-816d-f576-c94a-521afad1cc93.png)

下記はアノテーション実施前後の検索結果の比較です。初期状態よりSDU&分離を適用した後の検索結果のほうが、最小ハードウエア要件の結果としては、よさげにみえます。

【Passage】
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/64456ee7-ca57-a83e-d2bc-d4c5d37f4aaf.png)

【Query Results】
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/188a9213-50a5-6f48-3053-c1578579e83a.png)

# 照会(Query)のチュートリアル
以下2つのTutorialもありました

- :blue_book: [Getting started with the API](https://cloud.ibm.com/docs/services/discovery/getting-started.html#gs-api)
- :blue_book: [Getting started with querying](https://cloud.ibm.com/docs/services/discovery/getting-started-query.html#getting-started-with-querying)

前者はプログラムでAPIを使って照会を実行するものです。ここでは後者のDiscovery Toolingで照会を実行する方をやってみます。

## 0) 事前準備
「IBM Press Release」という名前の新しいコレクションを作ります
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/53f0bc1b-d0f5-6f98-6a66-ae8adebea259.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/07503315-a7c0-1433-b84a-829efcea0a9d.png)

この[ページ]()から上記test-doc1.html～test-doc4.htmlをPCにダウンロードし、上記コレクションにアップロードします。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/7dd4da88-8c72-c8df-e166-7e450dee56f7.png)

4件登録できたら準備完了です
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/aaf0fabd-b77c-1dad-e25e-0584a701b1c8.png)

## 1) データ・スキーマをサクッと見ておく

「View data schema」でCollection/Documentのタブにて、元のhtmlからどんな情報が抽出されているのか（エンリッチ）、さらっとみておきましょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/d74aebfe-e807-0e7b-a244-80ab94fbfb9f.png)

## 2) ベーシックな照会(Query)を実行する

デフォルトで適用されたエンリッチメントのうち、Concept Expansionが付与したメタデータのうち「**Cloud computing**」という概念(Concept)をもつ文書を照会してみましょう。単に文書全体を全文検索でサーチするのではなく、特定のエンリッチされたフィールドを照会の対象にするのがキモです。たとえば目次や索引で単語がヒットしても、有意義な結果は得られませんよね。適切なものだけ検索の対象とする＝余計なヒットが減ることで、検索結果の品質が上がることが期待できます。今回は自然言語検索ではなく、Discovery特有の検索言語である[DQL(Discovery Query Language)](https://qiita.com/ishida330/items/b823d7c5b55806f04242#discovery-query-languagedql)を使います。

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/cf56b962-5050-37bc-0b71-8cb51f3f5236.png)

1.「Build Queries」で「Use the Discovery Query Language」タブ
2. 以下を入力
    - field: **enriched_text.concept.text**
    - Operator:**contains**
    - Value: **Cloud Comuting**
     
    :triangular_flag_on_post: 組み立てられたDQL　enriched_text.concepts.text:"Cloud computing"が表示されます
3. Run Query
4. 右側に一件ヒットで結果が表示されます。Query URLはそのままアプリで利用できます。
5. 右上の「Edit in query language」で入力モードを切り替えて、直接以下のようにDQLを書くこともできます。![image](https://qiita-image-store.s3.amazonaws.com/0/108535/1bc80592-3f7a-33d9-5e43-00b9e5fff390.png)

:triangular_flag_on_post: 畳まれている「**>More Options**」を展開すると、色々な検索オプションがあることがわかります。
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/092c86b6-3d2d-d8fe-45b4-70bb53f2cefc.png)

## 3) 様々な照会(Query)を実行する
もっとエンリッチメントでの検索をやってみます。

#### a) 条件：センチメントが"positive"

**enriched_text.sentiment.document.label:"positive"**

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/26023551-e967-4fbf-ac67-1febbdf3a07a.png)

#### b) 条件：カテゴリーが"/health and fitness/men's health"

**enriched_text.categories.label::"/health and fitness/men's health[^1]"**

[^1]: ドキュメントでは"health_and_fitness"で検索するようになっていましたが、記述が古いようです。 

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/e7724975-100b-b26b-c06b-8103102c91c5.png)
- isは完全一致でDQLでは　::　(コロン２つ）で表現

#### c) 条件：エンティティが"IBM"
**enriched_text.entities.text:"IBM",enriched_text.entities.text:!"Watson"**

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/227b5528-542c-2c39-186d-677785a98140.png)

DQLの完全な構文は　:blue_book: [Query Reference](https://cloud.ibm.com/docs/services/discovery/query-reference.html#query-reference)をご参照ください

## 4) 連結照会(Combined Query)

**filter**と**query**を連結した書き方をしましょう。filter=IBMで絞り込んだ結果を更にquery="World Wide Web"で絞り込みます
ご参考) :newspaper:[QueryとFilterはどう違う?](https://qiita.com/ishida330/items/b823d7c5b55806f04242#query%E3%81%A8filter%E3%81%AF%E3%81%A9%E3%81%86%E9%81%95%E3%81%86)

Serch for documentsとFilter which documents you queryの両方を指定します
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/505f1b18-9a84-c5db-2002-8a20f2e25981.png)


## 5) 集約(Aggregation)

カウントやトップ10、センチメントの概要など、複数のデータを集約する照会です

コンセプトのトップ10を照会します。

** term(enriched_text.concepts.text,count:10)**
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/957b7a4e-3a50-fbd7-3bd4-a96da4bb533f.png)

## 6) Watson Discovery News

Watson Discovery Newsでフットボール・チーム ”Pittsburgh Steelers”に対して"positive"センチメントを有する記事トップ10件を照会します

Watson Discovery News(English)のコレクションを開きます
![image](https://qiita-image-store.s3.amazonaws.com/0/108535/d0473283-20c1-01fa-eb4f-a32b470a7dad.png)
以下の条件を入力します
** text:"Pittsburgh Steelers",enriched_text.sentiment.document.label:"positive"**

Number of documents t returnは10件にします(デフォルト)

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/3ee8661b-d0cc-69e5-8440-75a53efbab38.png)

照会の結果、記事が10件返りました

![image](https://qiita-image-store.s3.amazonaws.com/0/108535/5ef808e9-3ada-2eaa-b5bc-71180fd0d7d8.png)
以上です。

# 「Connector使ってみた」記事
 
:newspaper: 「[Watson DiscoveryのConnectorを使ってみた( ICOS/Webクロール )](https://qiita.com/ishida330/items/a6bf1ff1a39ab0f15f7b)」

---
# クローラーでMySQLをクロールしてみる

:warning: (2019/2/15) 現時点でクローラーの利用は非推奨ですが、DBに対する利用はOKなので昔の記事をご紹介します。

:newspaper: 「[Watson Discovery ServiceのData Crawlerでデータベース(MySQL)をクロールしてみた](https://qiita.com/ishida330/items/f7cc6d2ea0439fa67b10)」

# 改訂履歴

|Release Notes日付|記事更新日 |内容 |
|:---|:---|:---|
| 2017/10/16|2017/10/18 |Discovery Toolingが機能強化され画面が変更になったので一部画面を取り直しました |
| - |2018/02/15 |SDUのGAに伴い、Getting Startedが全面的に変わっていたので、全面的に書き換え。 |
| - |2018/02/19 |Connector使ってみた記事へのリンク追加 |


以上です。