👓

【GCP】非構造化データの構造化考察メモ

2022/03/20に公開

前提

非構造化データとは

画像、動画、音声、センサーデータなどデータ構造を持たないデータのこと。

補足:構造化データ

RDBに格納できるような表形式の構造を持つデータ

補足:半構造化データ

JSONやXMLなど、表形式ではないもののある程度の構造を有するデータ

目的

非構造化データをそのままGCS等のストレージに配置したのでは
いい感じのメタデータをDataCatalogなどで参照できない。
GCPのAPIの機能を利用して、非構造化データを構造化することで
いい感じのメタデータを作成したい。

利用API

  • 音声:Speech to Text API
  • 画像:Vision API/AutoML Vision
  • 動画:Video Intelligence API/AutoML Video Intelligence
  • 文書:Natural Language API/AutoML Natural Language

音声:Speech to Text API

音声を正確にテキストに変換
https://cloud.google.com/speech-to-text/?hl=ja

利用ケース

  1. 音声データをテキストに変換
  2. 変換後のテキストデータからメタデータ抽出
     →どんな情報をメタデータにするかは決めておく
     →メタデータ抽出には別途アルゴリズムが必要
    Apache tika
    Google Natural Language API
  3. Datacatalogに抽出したメタデータ定義とメタデータのvalueとなる抽出したテキスト、変換後の全文テキストをGCSやBQに入れてDataCatalogで扱う
  4. 最終的にはElasticsearchなどで変換したテキストを検索できるようにすると便利か?
    elasticsearch

画像:Vision API/AutoML Vision

画像ラベリング、顔やランドマークの検出、
光学式文字認識(OCR)、不適切なコンテンツへのタグ付け
https://cloud.google.com/vision/docs/labels?hl=ja

利用ケース

  1. 画像データからラベルを検出
    ラベルは以下のような4つが1セットとしてデータが返ってくる
    ラベルのセットは複数返却可能。返却のmaxセット数は自分で決めることが可能。
"mid": "/m/01c8br",
"description": "Street",
"score": 0.87294734,
"topicality": 0.87294734
  1. 検出されたラベルデータをGCSやBQに入れてDataCatalogで扱う
    メタデータとして扱うのはラベルセットのkeyである以下かな。
"mid"
"description"
"score"
"topicality"

元画像の配置場所等を含む方がいい気もするので
以下のようにデータ格納先のパスを付与して扱うのもありか。

"mid": "/m/01c8br",
"description": "Street",
"score": 0.87294734,
"topicality": 0.87294734
“imagepath“: “gs://aaa//bbb/image01“ ←ここはラベルデータとして返ってこないので、BQやGCSにデータを入れる前に別途データを加工してラベルを自分で付与する必要がある

動画:Video Intelligence API

ローカル、Cloud Storage、ライブ ストリームで保存されている動画に
アノテーションを付けることができる。
コンテキスト情報は、動画単位、セグメント単位、ショット単位、フレーム単位で表示できる。

利用ケース

  1. 動画からラベルを検出

https://cloud.google.com/video-intelligence/docs/analyze-labels?hl=ja
画像と異なり動画のAPIは非同期なのでレスポンスにラベル情報は付与されない。
API発行時に指定したGCSに結果を出力する。
https://cloud.google.com/video-intelligence/docs/analyze-labels?hl=ja
2. 検出されたラベルデータをGCSやBQに入れてDataCatalogで扱う
あとは画像のVision APIのケースと同じ。
ただし、動画は複数のフレームにわけてラベリングすることもできるので
そのような場合は動画のグループを意識できる情報をもたせる必要がある。

文書:Natural Language API

人、場所、イベントに関する情報を抽出し、
ソーシャル メディアに表れる感情や顧客との会話について理解を深めることができる。
また、テキストを分析してCloud Storageのドキュメントストレージと統合することも可能。
https://cloud.google.com/natural-language?hl=ja

利用ケース

  1. テキストからエンティティを抽出

https://cloud.google.com/natural-language/docs/basics?hl=ja
API発行時に対象のテキストをそのままリクエストに乗せるか、
GCSのテキストデータを指定する。
GCSのテキストデータを指定するほうがシンプルでいい。
以下のような形式で返ってくる

ーーーーーーーーーーーーーーーーーー
name            : ダイエット
type            : EVENT
salience        : 0.3420647978782654
wikipedia_url   : -
mid             : -
ーーーーーーーーーーーーーーーーーー
name            : 食事
type            : EVENT
salience        : 0.2548573911190033
wikipedia_url   : -
mid             : -
  1. 検出されたエンティティデータをGCSやBQに入れてDataCatalogで扱う
    メタデータはこんな感じになる。
    画像の場合と同じように元テキストデータのパスは付与したほうがよさそうに思う。
name
type
salience
wikipedia_url
mid
textpath←BQやGCSにデータを入れる前に別途データを加工して付与する必要がある

Discussion