Databricks SQL AI Functions を使ってデータ分析してみる（翻訳・基盤モデルの呼び出し）

# はじめに

株式会社NTTデータ [デジタルサクセスソリューション事業部](https://enterprise-aiiot.nttdata.com/) の [nttd-saitouyun](https://qiita.com/nttd-saitouyun) です。

今回は、DATA + AI Summit 2024 で発表された Databricks SQL の [**AI Functions**](https://docs.databricks.com/ja/large-language-models/ai-functions.html) を使って マーケットプレイスで公開されている TikTok のデータを分析してみようと思います。

# AI for SQL アナリスト
これまでSQLでAIを利用するには、データサイエンティストがAIモデルをAPI化し、データアナリストがSQLのUDFにAPIを登録をして呼び出すなど、一手間かかっており、**データアナリティクス・BIとAIの間には壁がありました**。

Databricksでは、AI Functions を活用することで**シームレスにAIのパワーをデータアナリティクス・BIに活用することができます**。

![ai_functions.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/697ebf46-de02-1be8-205b-23ecb9d0bcc3.jpeg)
[The Best Data Warehouse is a Lakehouse](https://www.youtube.com/watch?v=UcdFPRT_sG8&list=PLTPXxbhUt-YXh57uL3QUQiKLwTf39IoT1&index=4) at DATA+AI Summit 2024






# Databricks SQL AI Fuctions によるデータ分析

## マーケットプレイスからデータの取得

[Databricks Marketplace](https://www.databricks.com/jp/product/marketplace) にアクセスしてみましょう。ここでは様々なデータが公開されており、即座にデータ分析することができます。

![marketplace-header.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/6b44ec24-b42d-a0e2-df2e-ee85b75427bb.jpeg)


今回は、[Bright Data](https://brightdata.com/) 社が提供する TikTok のデータを活用します。Bright Data 社はWeb データ収集およびプロキシ サービスを B2B に提供する企業です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/a85faa83-e424-012f-aa0f-7173c207838d.png)

アクセス権を取得するとカタログの「共有」という領域にデータが追加されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/504806d3-5472-9dfc-8c37-dbee1a463c76.png" width="400">

今回は tik_tok_profiles というテーブルを使って分析を行います。




## データの確認

では、カタログからデータをプレビューしてみます。多言語での記載とニックネームに数字や日付が入っていたりと扱いが難しそうなデータのようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/d5afcb60-0e45-1e5c-705a-f58808d84205.png)

データの品質が怪しいので事前にデータプロファイリングしておきます。ノートブックからSELECT文でデータを表示して、「＋」からデータプロファイルで、簡単にデータ品質を分析できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/aa77dd95-5c75-5d03-201f-99bd0d96d8d6.png)
・・・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/b97529c2-20f5-4839-14a2-a050acd45ef2.png)
・・・・・

missingの列が赤いです・・・ SNSデータの特性なのか値が空のデータが多そうです。
account_idにも空のデータがありそうなので、自分のスキーマにaccount_idにデータが入っているもののみを抽出してテーブル化しておきます。

```sql
CREATE TABLE tik_tok_profile AS
SELECT *
FROM bright_data_tiktok_profiles_posts_comments.datasets.tik_tok_profiles
WHERE account_id IS NOT NULL;
```





## ai_translate function を活用した翻訳

[ai_translate function](https://docs.databricks.com/ja/sql/language-manual/functions/ai_translate.html) を活用して「biography（経歴）」列を翻訳してみます。現在は多言語で何が書いてあるか全く読めませんし、何語かもわかりません。（そもそも言葉でないデータもありそうです。）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/4f049b4a-e5f9-7f99-ca12-627ef8b674a1.png" width="400">

[マニュアルに](https://docs.databricks.com/ja/sql/language-manual/functions/ai_translate.html)よると英語とスペイン語しかサポートされないように見えますが、日本語もチャレンジしてみます。
>The ai_translate() function allows you to invoke a state-of-the-art generative AI model to translate text to a specified target language using SQL. During the preview, the function supports translation between English (en) and Spanish (es) only.

以下のクエリを実行します。翻訳したい列名と言語を指定するだけです。
簡単ですね！

```sql
CREATE TABLE tik_tok_profile_translate AS
SELECT 
  account_id,
  nickname, 
  biography, 
  ai_translate(biography, 'en') AS translated_en, 
  ai_translate(biography, 'ja') AS translated_ja
FROM tik_tok_profile
WHERE biography IS NOT NULL;
```

実行し、結果を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/a9d289e6-641b-4f5f-f1c9-bb8b9178b016.png)



翻訳されました！
やや怪しいところもありますが、日本語も翻訳されています。


## ai_query function を活用した翻訳と言語判別

やや翻訳が安定しなかったので、追加で検証を行います。

AI Functions には、[ai_query function](https://docs.databricks.com/ja/sql/language-manual/functions/ai_query.html) という基盤モデルにプロンプトを与えて回答を得るという汎用的な関数があります。この関数を使って翻訳と言語の判別をやってみようと思います。

基盤モデルは最近リリースされた Meta Llama 3.1 70B Instruct を使ってみます。

### 基盤モデルのサービング

ai_query function を利用するには、基盤モデルをサービングしておく必要があります。
カタログから Meta Llama 3.1 70B Instruct を探して、右上の「このモデルをサービング」をクリック。

![llm_in_catalog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/aa693f90-a3d2-a646-9c9e-e1142e649115.png)

<br>

サービングエンドポイントの名前を入れるだけで基本的な設定は完了です！!

![llm_serving.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/becc8c0b-a79a-843b-3912-756d37f36bdc.png)


<br>

基盤モデルの推論結果（回答結果）をテーブルに保存しておくこともできます。
今回はこの設定も入れておきます。

![inferrence_table.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/0980f6b5-37cc-c05c-9569-bcd333c6bcc9.png)

<br>

「作成」をクリックし、しばらくするとエンドポイントが立ち上がり、基盤モデルを呼び出すことが可能になります。

![create_serving_point.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/ef086f83-13e6-d607-93fb-7fa50f8c8eb4.png)


### ai_query function の実行

それでは ai_query function を使って Meta Llama 3.1 70B Instruct を呼び出してみます。第一引数に先ほど作成したサービングエンドポイントの名前を指定し、第二引数にプロンプトを指定します。

```sql
CREATE TABLE tik_tok_profile_translate2 AS
SELECT 
  account_id,
  nickname, 
  biography, 
  translated_en, 
  translated_ja,
  ai_query(
    "meta_llama_v3_1_70b_instruct",
    CONCAT('日本語に翻訳してください。:\n', biography)) AS translated_ja2,
  ai_query(
    "meta_llama_v3_1_70b_instruct",
    CONCAT('次の文章を何語か判別してください。単語で回答してください。:\n', biography)) AS lang
FROM tik_tok_profile_translate;
```

実行結果は以下の通りになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/d2e3953b-27fc-03c7-4067-002301baf8ed.png)

translated_ja（ai_translate function） と比較して **translated_ja2（ai_query function / Meta Llama 3.1 70B Instruct）の方がやや翻訳の精度が高いように見えます**。（一方で30行目にあるように translated_ja では翻訳ができているが、translated_ja2 で翻訳に失敗するケースもあるようです。）

また、**ai_query の汎用性の高さを活かして lang のように何の言語であるか判別させるような自由度の高いデータ加工処理もできます**。ただ、少し追加で加工が必要のようです。「⚪︎⚪︎語です。」の「です。」を削除します。

```sql
CREATE OR REPLACE TEMPORARY VIEW tempv_lang AS
SELECT REPLACE(lang, 'です。', '') AS lang FROM `tik_tok_profile_translate2`;
```
そして、言語のごとの頻度を調べてみます。
```sql
SELECT 
  lang, 
  count(lang) AS count 
FROM tempv_lang 
GROUP BY lang 
ORDER BY count DESC;
```

言語の判別に失敗しているデータも少しありますが、おおよそ50以上の言語が含まれていたようです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/146b504f-e8c4-81e8-7883-6176b7214608.png" width=500>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118781/addf8005-127f-7968-e9d6-f5b853efd9b8.png" width=500>

**AI Functions を活用するとSQLだけで、50以上の言語について高い精度で翻訳ができ内容を調べることができました！**（そして、biography には意味のないデータが多く、これ以上分析しても不毛であることもわかりました😅）




# おわりに
いかがでしたでしょうか？

使い慣れたSQLからAIの力を利用することで、**高度な分析がこんなに簡単にできる**ことをご理解いただけたのではないかと思います！

# 仲間募集
NTTデータ デザイン＆テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary> 1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア) </summary>
クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。

https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary> 2. データサイエンス領域（データサイエンティスト／データアナリスト） </summary>
データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。

https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary> 3.お客様のAI活用の成功を推進するAIサクセスマネージャー </summary>
DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary> 4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》 </summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>

# ソリューション紹介
<details><summary> Trusted Data Foundationについて </summary>
～データ資産を分析活用するための環境をオールインワンで提供するソリューション～

https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</details>

<details><summary> NTTデータとDatabricksについて </summary>
NTTデータは、お客様企業のデジタル変革・DXの成功に向けて、「databricks」のソリューションの提供に加え、情報活用戦略の立案から、AI技術の活用も含めたアナリティクス、分析基盤構築・運用、分析業務のアウトソースまで、ワンストップの支援を提供いたします。

 https://enterprise-aiiot.nttdata.com/service/databricks

</details>

<details><summary> TDF-AM（Trusted Data Foundation - Analytics Managed Service）について </summary>
～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～

https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDF-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</details>

</details>

<details><summary> NTTデータとSnowflakeについて </summary>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。
NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</details>

</details>

<details><summary> NTTデータとInformaticaについて </summary>
データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。

https://enterprise-aiiot.nttdata.com/service/informatica

</details>

</details>

<details><summary> NTTデータとTableauについて </summary>
ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。

https://enterprise-aiiot.nttdata.com/service/tableau

</details>

</details>

<details><summary> NTTデータとAlteryxについて </summary>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。
Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</details>

</details>

<details><summary> NTTデータとDataRobotについて </summary>
DataRobotは、包括的なAIライフサイクルプラットフォームです。
NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</details>