よくわかるGoogleCloud#3_BigQuery remote functionsを使って分かち書きと感情分析する
皆様こんにちは。
本日もカホエンタープライズのnoteをご覧いただきありがとうございます!
4月からお届けしている、Google Cloudの活用方法をお伝えするシリーズ。本日は第3弾となります!
今回使用するツールは、Google BigQueryのremote frunctionsです。
こちらは、Cloud Functions、Cloud Runの関数をBigQueryから呼び出す機能となっております。
Natural Language APIを使用したCloud Functionsを作成し、分かち書きと感情分析を同時にBigQueryから実行してみます。
外部接続の作成
BigQueryとCloud Functionsとをつなぐために外部接続という機能を使います。以下に従って外部接続を作成します。
BigQueryのエクスプローラーのメニューから追加をクリックします。外部データソースへの接続を選択します。
接続タイプを「Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)」にし、接続IDに任意の名前をつけて接続を作成します。
外部接続が作成されました。
サービスアカウントに権限付与
外部接続で作成されたサービスアカウントにCloud Run起動元の権限を付与します。(Cloud Functions第1世代を使用する場合はCloud Functions起動元の権限を付与します。)
Natural Language APIの有効化
Natural Language APIが有効化されていない場合は、以下リンクのAPIを有効にするボタンをクリックしAPIを有効化しておきます。
https://cloud.google.com/natural-language/docs/setup?hl=ja#api
Cloud Functionsの作成
Cloud Functionsを作成します。
任意の関数名をつけ、トリガータイプはHTTPSの認証が必要、ランタイムでメモリ1GB、CPU1に設定して「次へ」をクリックします。
今回はインラインエディタでコードを記載してデプロイします。
ランタイムはPythonで、エントリポイントはnatural_langage_apiにします。
コードの内容は以下です。
requirements.txt
functions-framework==3.*
google-cloud-language==2.12.0
python:main.py
import functions_framework
import json
from flask import Flask, request, jsonify
from google.cloud import language_v1
client = language_v1.LanguageServiceClient()
def get_analyze_results(message):
document = language_v1.Document(
content=message,
type=language_v1.Document.Type.PLAIN_TEXT)
syntax_response = client.analyze_syntax(
document=document,
)
separated_text = [s.text.content for s in syntax_response.tokens]
sentiment_response = client.analyze_sentiment(document=document)
return [{
"separated_text": separated_text,
"magnitude": sentiment_response.document_sentiment.magnitude,
"score": sentiment_response.document_sentiment.score
}]
@functions_framework.http
def natural_language_api(request):
try:
return_value = []
request_json = request.get_json(silent=True)
request_args = request.args
calls = request_json['calls']
for call in calls:
for text in call:
return_value.append(get_analyze_results(text))
return_json = json.dumps( { "replies" : return_value} )
print(return_json)
return return_json
except Exception as e:
return json.dumps( { "errorMessage": e } ), 400
BigQueryにremote funcionsを作成する
以下のSQLを実行します。
<dataset>.<function_name>は任意の値を設定してください。
<connection_name>は作成したロケーション.外部接続の名称を設定します。(例:us.conn_functions)
<cloud_functions_url>は作成したcloud functionsのエンドポイントのURLを設定します。
sql:
CREATE OR REPLACE FUNCTION <dataset>.<function_name>(value STRING)
RETURNS JSON
REMOTE WITH CONNECTION `<connection_name>`
OPTIONS (
endpoint = '<cloud_functions_url>'
)
;
実行
claude 3 Opusに以下の小売店舗のレビューサンプルを作ってもらいました。
以下のSQLを実行します。
(<~>の部分は適切に変換してください。)
sql:
SELECT
text,
res[0].score, -- cloud functionsのリターンに合わせる
res[0].magnitude, -- cloud functionsのリターンに合わせる
REPLACE(JSON_EXTRACT_SCALAR(text_element, '$'), '"', '') AS text_element
FROM (
SELECT
<テキスト列名>,
<dataset>.<remote_functions_name>(<テキスト列名>) AS res
FROM
<dataset>.<table_name>
)
,UNNEST(JSON_EXTRACT_ARRAY(res[0].separated_text)) AS text_element
以下のような結果が返ってきます。
感情分析の値については以下のようです。
- score: -1.0(ネガティブ)~1.0(ポジティブ)のスコアで感情が表されます。これは、テキストの全体的な感情の傾向に相当します。
- magnitude: 指定したテキストの全体的な感情の強度(ポジティブとネガティブの両方)が 0.0~+inf の値で示されます。score と違って、magnitude は documentSentiment に対して正規化されていないため、テキスト内で感情(ポジティブとネガティブの両方)が表現されるたびにテキストの magnitude の値が増加します。そのため、テキスト ブロックが長いほど、値が高くなる傾向があります。
| 感情 | サンプル値 |
|:--|:--|
| 明らかにポジティブ | "score": 0.8, "magnitude": 3.0 |
| 明らかにネガティブ | "score": -0.6, "magnitude": 4.0 |
| ニュートラル | "score": 0.1, "magnitude": 0.0 |
| 混合 | "score": 0.0, "magnitude": 4.0 |
ここまで出来たら、TableauをはじめとするBIツールを使って、色々可視化してみてください!
ワードクラウドの形式が定番だと思いますが、その他にも様々な方法があると思います!
参考資料
[リモート関数を使用する](https://cloud.google.com/bigquery/docs/remote-functions?hl=ja#sample-functions-code)
[文字列の構文の分析](https://cloud.google.com/natural-language/docs/samples/language-syntax-text?hl=ja)
[感情分析のチュートリアル](https://cloud.google.com/natural-language/docs/sentiment-tutorial?hl=ja)
カホエンタープライズについて
当社はホームセンター「グッデイ」におけるDX化の経験をもとに、データ活用に関する実績及び様々な支援メニューを用意しております。
今回ご紹介したTableau関連の御支援はもちろんのこと、他にも様々な知見がございます。
データ活用・管理に関してお困り等ございましたら、是非お気軽にご相談ください!
⇩詳細はホームページをご覧ください!
事業内容:
① データ活用に関する御支援
・ Tableauライセンス提供
・ Tableau導入に関する支援/ダッシュボード画面構築支援
・ データ分析基盤(データウェアハウス)構築及び運用支援
・ Tableau操作トレーニング
・ Tableau内製化に向けた伴走支援
・ AI等最新クラウドサービスの活用支援
② クラウドサービス活用支援
・ Google Workspaceライセンス販売
・ Google Workspace導入支援
・ Google Workspace操作トレーニング
③ クラウド型分析サービス(KOX)導入支援
④ DX人材育成サービスの提供
<問い合わせ先>
株式会社カホエンタープライズ
担当者:湯野 礼之輔(ゆの れいのすけ)
Mail:sales@kaho-enterprise.co.jp
TEL:070-8814-5939
この記事が気に入ったらサポートをしてみませんか?