適用対象:✅ Microsoft Fabric の SQL 分析エンドポイントおよびウェアハウス
Important
この機能は プレビュー段階です。
Fabric Data Warehouse と SQL 分析エンドポイントには、SQL クエリ内でテキストを直接分析、分類、集計、変換するために使用できる組み込みの AI 関数が用意されています。 これらの関数を使用すると、データ環境を離れることなく高度なテキスト処理を実行できます。 このチュートリアルでは、AI 関数を使用してテキストを変換する方法について説明します。
| Function | Purpose | 構文の例 |
|---|---|---|
ai_analyze_sentiment |
入力テキストのセンチメントを検出する | ai_analyze_sentiment(<text>) |
ai_classify |
指定されたラベルに基づいてテキストを分類する | ai_classify(<text>, <class1>, <class2>, ...) |
ai_extract |
エンティティを JSON プロパティとして抽出する | ai_extract(<text>, <class1>, <class2>, ...) |
ai_summarize |
テキストを要約する | ai_summarize(<text>) |
ai_generate_response |
プロンプトに基づいて応答を生成する | ai_generate_response(<prompt>, <data>) |
ai_translate |
入力テキストを指定したターゲット言語に翻訳する | ai_translate(<text>, <lang>) |
ai_fix_grammar |
テキスト内の文法を修正する | ai_fix_grammar(<text>) |
これらの関数は、外部 AI API を呼び出してテキストを処理します。これはクエリのパフォーマンスに影響を与える可能性があります。 効率を最適化するには、同じデータセットに対する SELECT クエリ内で繰り返しテキスト変換を適用しないようにします。 代わりに、AI 関数の結果を個別の列またはステージング テーブルとして事前計算して具体化します。
Warnung
AI モデルがテキストを処理できない場合、関数は NULL を返します。 よくあるのは次のような理由です。
- 責任ある AI ルールは、入力テキスト内の不適切なコンテンツをブロックします。
- 入力テキストがトークンの制限を超えています。 現在のモデルでは、最大 15 KB のテキストがサポートされています。
AI 関数の一般的な処理速度は、1 秒あたり 20 から 100 行です。 パフォーマンスが低下する場合は、問題のあるクエリを問題として報告してください。
ワークスペースで AI 関数を 有効にするための AI 関数の前提条件を確認します。 Azure OpenAI Service の AI 関数は、一部のリージョンで利用できます。
センチメントの分析
ai_analyze_sentiment(text)関数は、入力textからのセンチメントを分析し、positive、negative、mixed、またはneutralのいずれかの値を返します。
Example:
SELECT ai_analyze_sentiment('This hotel was great!') AS sentiment;
予想される結果:positive
テキストを分類する
ai_classify(text, class1, class2, ...)関数は、入力textを指定されたカテゴリのいずれかに分類します。
Example:
SELECT ai_classify('Room was dirty', 'service','dirt','food') AS classification;
予想される結果:dirt
テキストからエンティティを抽出する
ai_extract(text, class1, class2, ...)関数は、指定したクラスに基づいて入力textからエンティティを抽出します。
Example:
SELECT ai_extract('Check-in was late and room dirty', 'sentiment','problem') AS extraction;
予想される結果:{"sentiment":"Negative","problem":"Dirty room"}
応答の生成
ai_generate_response(prompt, data)関数は、指定されたpromptと省略可能なdataに基づいて応答を生成します。
Example:
SELECT ai_generate_response('Reply in 20 words:', 'The room was noisy.') AS response;
予想される結果: 「騒音によるご不便をおかけして誠に申し訳ございません。防音対策の強化に努めます。
テキストを要約する
ai_summarize(text)関数は、入力textを簡潔なバージョンにまとめます。
Example:
SELECT ai_summarize('The hotel was clean and staff were friendly.') AS summary;
予想される結果: 「清潔なホテル、親切なスタッフ。」
テキストを翻訳する
ai_translate(text, lang_code)関数は、textを使用してlang_codeを指定された言語に変換します。
サポートされている言語コードは、 de (ドイツ語)、 en (英語)、 fr (フランス語)、 it (イタリア語)、 es (スペイン語)、 el (ギリシャ語)、 pl (ポーランド語)、 sv (スウェーデン語)、 fi (フィンランド語)、 cs (チェコ語) です。
Example:
SELECT ai_translate('The hotel was great','de') AS translation_de;
予想される結果: 'Das Hotel war großartig.'
文法を修正する
ai_fix_grammar(text)関数は、入力textの文法を修正します。
Example:
SELECT ai_fix_grammar('Th room are clean and staff were nice') AS fixed_text;
予想される結果: 「部屋がきれいで、スタッフの対応が良かった。」
例示
A. AI 関数を使用してデータをインポートし、テキスト列を変換する
このサンプルでは、Lakehouse ファイルからウェアハウス内の hotel_reviews テーブルにデータを読み込みます。
/Files セクションのファイルから選択し、AI 関数を適用してデータを強化します。
CREATE TABLE HotelDW.dbo.hotel_reviews
AS
SELECT
city, latitude, longitude, name, reviews_rating, reviews_text,
ai_summarize(reviews_text) AS reviews_summary,
ai_classify( reviews_text, 'service', 'dirt', 'food', 'air conditioning', 'other') AS reviews_classification,
ai_analyze_sentiment(reviews_text) AS reviews_sentiment,
ai_translate(reviews_text, 'de') AS reviews_text_de,
ai_translate(reviews_text, 'es') AS reviews_text_es,
ai_translate(reviews_text, 'fr') AS reviews_text_fr,
ai_translate(reviews_text, 'it') AS reviews_text_it
FROM OPENROWSET( BULK '/Files/csv/hotel_reviews_demo.csv', DATA_SOURCE = 'TextLakehouse', HEADER_ROW = TRUE);
B. AI 関数を使用してテキスト列を更新する
次の例では、 reviews_text 列の文法エラーを修正します。
UPDATE HotelDW.dbo.hotel_reviews
SET reviews_text = ISNULL(ai_fix_grammar(reviews_text), reviews_text);
エラーが発生した場合、AI 関数は NULL を返す可能性があるため、既存の値を NULL で上書きしないようにします。
ISNULL(<ai function>, <original value>) パターンを使用して、AI 関数が結果を返さない場合に元のテキストを保持します。
C. テキストから値を抽出する
この例では、 ai_extract 関数はレビュー テキストを分析し、 sentiment、 time_reported、および problemのプロパティを含む JSON オブジェクトを返します。 次に、 OPENJSON 関数はこの JSON を解析し、これらのプロパティを個別の列にマップして、クエリと分析を容易にします。
このサンプル スクリプトでは、抽出された値をターゲット テーブルに個別の列として挿入します。
INSERT INTO gold.hotel_reviews
SELECT sentiment, time_reported, problem
FROM hotel_reviews
CROSS APPLY
OPENJSON(
ai_extract(reviews_text, 'sentiment', 'time_reported', 'problem')
) WITH ( sentiment VARCHAR(1000), time_reported VARCHAR(100), problem VARCHAR(1000) );
ai_extract関数は、あいまいコンテキスト ルールを適用して、手動の解析や複雑な正規表現を必要とせずに、テキストからトピックを識別して抽出します。 このアプローチでは、厳密なパターン マッチングではなく AI 主導のセマンティック理解を使用してテキスト分析を簡略化し、自然言語のバリエーションにより堅牢で適応性を高めます。