
6. Open AI で概念モデリングアシスタントを作ってみる
はじめに
前々から書いている通り、私の最終目的は、
”関連するドキュメント群や絵、データを食わせると、概念モデルを自動生成してくれる AI の構築”
ですが、そこに至る、” A long and winding road” を辿る前に、先ずは、初心者が概念モデリングを習得する時に、その用語や意味、コツなどに関して簡単に得ることができるチャットを作ってみることにします。今回は、Azure Open AI Service を使って、とりあえず作ってみた結果をまとめます。
今回の試みでは、Microsoft Learn にありがちな、全体としては非常に詳しく書かれているんだけれど、シンプルにやりたいことに対する作業手順が一貫して書かれていない、という、いつもの情景にぶつかり、結構な工数がかかったので、”IoT 定期購読マガジン”と同じように途中から有料にさせていただきました。概要が知りたいだけなら無料で十分読めますのでご安心ください。
概念モデリング支援における AI 活用とは
本題に入る前に、概念モデリングに関して AI がどのように活用できるかを考察してみます。
AI 活用で最も理想的なシナリオは、繰り返しになりますが、
”関連するドキュメント群や絵、データを食わせると、概念モデルを自動生成してくれる AI の構築”
だと思われます。これについては、前回の長い長~いコラムで、圏論的な見方をすると、ChatGPT や Open AI の学習済み LLM のニューラルネットのパラメータの値群を、何らかの方法で表現形式を変換してやれば、概念情報モデル的な図(ただし概念インスタンスとリンクの可能性もあり)が取り出せるんではないか、という事を書きました。果たして、これが、AI のユーザーレベルで可能なのか(API を介してのみアクセス可能なブラックボックス的なニューラルネットの場合)は現時点では不明です。もしかすると、ある特殊なクエリを入力して、RDF や JSON 形式の出力を適用すると、(概念情報モデルはできそうだが概念振舞モデルは無理かな…)、生成出来るのかもしれません。このトピックも興味深いので、調査を継続しようと思っていますが…
仮に、概念モデルの自動生成が出来たと仮定します。生成さえすれば、
に書いてある通り、Microsoft Azure を使って実際に動く IT ソリューションを自動生成できます。
それが可能なのは論理的に明白なんですが、概念モデリングの素養があって生成されたモデル群を読み下して理解できなければ、完成した IT ソリューションを正しく使い倒すことはできないでしょう。
つまり、概念モデルの自動生成が出来たとしても、少なくとも、生成された概念モデルを読みこなすことのできるスキルは、ユーザー側に最低限必要という事になります。
概念モデリングのスキル獲得支援
ここで役立ちそうなのは、
概念モデリングの理解を支援する
用語の意味を教えてくれる
モデリングのコツや、モデルのパターン等、概念モデルの作成に役立つ情報を教えてくれる
辺りが役に立つでしょう。
次に、概念モデルの自動生成はある程度まではできるが、”概念振舞モデル” で解説している状態モデルやアクション、”ドメインと IT システム構築”で解説しているドメインの定義等は完全にはできない状況を考えてみます。現実的には、どこぞの大手 IT ベンダーが本気で投資しなければ、完全な自動生成はまず無理でしょう。こんな状況は、ほぼ間違いなく、しばらく続くと予想されます。
概念モデル作成支援
この様な状況では、関連するドキュメントや図を AI に入力して学習させた後に、
概念クラスや Relationship の候補の提示
状態アクションやドメインオペレーションの、テキスト形式による、アクション自動生成
概念モデルチェック用の概念インスタンス・リンク群の自動生成
作業の流れのガイド
を行う AI は十分に役立ちます。
そもそもの開発対象の理解促進
ここでちょっと立ち止まって考えてみます。概念モデリングとは、
”概念モデルを作成しながら、開発対象の理解を深め、標準的な記法で第三者も含め、理解可能な表現形式で、開発対象に関する知識と構造を可視化する事”
なのですが、私が圏論の教科書や書籍群を読み始めた頃の様に、開発対象に関する知識がほとんどなく、コンテンツに出てくる用語も珍紛漢紛な状況から開発を始めるとすれば、概念モデルの読み方、概念モデルの作り方の前に、開発対象に関連する現実世界の理解を深めることの方が重要なはず。
このフェーズでは、チャット形式の AI に開発対象に関わるドキュメント群を使って、このコラムで紹介しているのと同じ方法で学習させると、結構使い勝手の良い AI チャットが作れると考えられます。
概念モデリング学習支援用 AI の構築
以上を踏まえて、今回の試みでは、Azure OpenAI Service を使って、概念モデリング学習支援用 AI 、もっと具体的に言えば、テキスト形式で初学者の概念モデリングに関する質問に答える AI チャットを構築してみることにします。
Azure OpenAI Service とは - Azure AI services | Microsoft Learn
これを読んでも、良く判らないので、実際に作って試して、Azure OpenAI Service に関する知見を獲得しようというのも、目的の一つです。
Microsoft Learn の Azure OpenAI Service に関する一連のドキュメントを読み込んで、今回は、私が作って公開している概念モデリングに関するコンテンツを追加して、カスタマイズされたチャットを作ればいいんだろうなという当たりをつけて、
Azure OpenAI Service で独自のデータを使用する - Azure OpenAI | Microsoft Learn
に従って、カスタマイズされたチャットを作ることにします。
学習用データの準備
今回は、https://note.com/kae_made から公開中の
Art of Conceptual Modeling ‐ 7つの記事
概念モデリングチュートリアル集 ‐ 4つの記事
の計 11 の記事を使う事にします。先ず、これらのコンテンツを、Web ページを PDF 化する|Knowledge & Experience (note.com) で書いた方法で、PDF 化します。この方法を使うのは、活きた URL リンクが埋め込まれた PDF が出来上がるからです。

Azure OpenAI Service 利用申請
2023年9月29日現在、Azure OpenAI Service は Azure Subscription を持っていても、Azure IoT Hub や Azure Digital Twins の様に自由に作成する事が出来ず、アクセス申請が必要です。
Azure OpenAI には登録が必要であり、現在、承認されたエンタープライズのお客様とパートナーのみが利用できます。 詳細については、「Azure OpenAI Service への制限付きアクセス」を参照してください。 Azure OpenAI へのアクセスを申請するには、https://aka.ms/oai/access のフォームに入力してください。 問題がある場合は、このリポジトリで問題をオープンしてお問い合わせください。
この記述で紹介されているフォームで、先ずは申請を行います。私の場合は、正に、”概念モデル自動生成”に関するシナリオを実現するためという内容で申請しました。パートナー登録が必要等、書いてあり、そこは省略してしまったので、NG かなと思っていたら、暫くして、”利用 OK ”の旨のメールが送られてきて、使えるようになりました。使いたい人は、とりあえず、申請してみるのが良いと思います。
Azure OpenAI Service 作成
図の様に、Azure Marketplace で、”azure openai” を検索して、作成します。

Azure OpenAI Studio を開く
Azure OpenAI Service のデプロイが完了したら、Azure OpenAI Studio を開きます。

このページで、”Chat playground”を開いて、作業を進めるという事なのですが、”デプロイされたモデルがない”と言われて”?あれ?なんのこっちゃ”って感じになります。
※ こういうとこだよ…
他のページを読みつつ類推するに、
基本になるモデルを選択してデプロイしなさいね
って事なんですね。なので、
Azure OpenAI Service モデル - Azure OpenAI | Microsoft Learn
の記述を参考に、適当と思われるモデルを選択してデプロイすることにします。
モデルのデプロイ
左の”管理”の”デプロイ”をクリックし、

”+新しいデプロイの作成”をクリックして、ベースモデルを選択して名前を決めて、”作成”します。ベースモデルは、良く判らないので、”gpt-35-turbo-instruct”を選択してみました。
※ この選択で嵌まることになるのですが、この時点では露知らず
※ でもさ…とりあえず、使えりゃいいや的な感覚でやっているので、Azure OpenAI Service モデル - Azure OpenAI | Microsoft Learn の説明じゃ良く判らんのよ、実際…

こんな感じでデプロイのリストに、作成したデプロイが表示されます。
データの追加
次は、自分のコンテンツで学習させるためのデータの設定です。これも、
この説明だと、予め Azure Blob Service にデータファイル格納しとけ的な説明がなく、戸惑うのですが、先ずは学習用(カスタマイズ用)のファイルを準備します。
先ず、新しく Azure Storage Account を作成します。

作成の際の設定はデフォルトのままで構いません。名前は、”kaesaopenai” としました。”出来上がった Azure Storage Account に、”contents” という名前でコンテナを一つ作ります。

作成した contents を選択して、”アップロード”をクリックし、開いたダイアログで、アップロードするファイル群を選択し、”contents” コンテナに、PDF 化したファイル群を、アップロードします。

ちょっと寄り道
Azure OpenAI Studio のページに戻ります。DALL-E という項目が気になるので開いてみます。試しにプロンプトに、”夏の終わりの高原の風景”と入力してみると、

おー!
じゃあ、”晩夏のアンニュイなビーチで…”などと入力していくと、

こんな感じでどんどん画像が生成されました。
…等と遊んでいたら、Bing の Image Creator が使えるようになり、そちらも試してみました。

参考までに。。。
Chat にデータを追加する
閑話休題。
左のタブで”チャット”を選択して、データの追加を行うために、”アシスタントのセットアップ” の ”Add your data(preview)”を選択します。

おや?エラーが発生しました。どうやらブラウザで開きっぱなしのページでやっていたせいで、裏側で何かのセッションが切れていたようです。
このエラーは、ブラウザで別のタブで portal.azure.com にサインインして再び表示したところ、解決しました。”Add a data source feature is not supprted”…なかなかに刺激的なメッセージですが、こんな表示がでたら、慌てず、再度サインインして試してみてください。
気を取り直して、エラーが解決した画面で、”+ Add a data source”をクリックし、PDF のコンテンツ群をアップロードした Azure Blob Storage を設定します。

PDF ファイルのアップロード先は、”kaesaopenai” の ”contents” なので、それを指定したわけです。
ちなみに、Bring your own Data to Azure OpenAI: Step-by-Step Guide (microsoft.com) の様に、”Upload files”を選択しても構いませんが、この場合は、PDF ファイル群をアップロードする為の Azure Blob Storage を一から作成する事も可能です。
Azure Cognitive Search サービスを追加する
データの追加では、単に、追加するコンテンツ群の格納場所を設定するだけでなく、Azure Cognitive Search サービスの設定も必要です。

”Create a new Azure Cognitive Search service” をクリックして、作成を開始します。名前は、”kaecs4openai” とし、作成するロケーションは、 動かせるリージョンは限られているっぽいので、そのまま、”West US 2”を使う事にします。”次:スケール” ボタンをクリックしてスケールを設定するのですが、

デフォルトでは、”S:Standard”が選択されています。
う…月あたり31,998円…なかなかに良いお値段ですね…
Azure の最新機能で IoT を改めてやってみる|Knowledge & Experience|note の読者約160人分の購読料かぁ…
無料の Free もあるのですが、結論から言うと、このレベルは、Azure OpenAI Service のチャットでは選択できません。

恐る恐る、”B:基本”を選択してやってみると、ちゃんと動いたので、資金に余裕が無い、あるいは、とりあえず試したいだけの方は、”B:基本”を選択するとよいです。

”B:基本” で Azure Cognitive Search サービスを作成したら、Azure OpenAI Studio の ”Select or add data source” ダイアログに戻ります。
そもそも、”Azure Cognitive Search”って何?という方、セマンティック検索 - Azure Cognitive Search | Microsoft Learn を読むとよいです。

更に、”index” の項目に、適当な名前を入力します。今回は、”aocm” としました。
勢いあまって、次の ”Vector search” もチェックを入れてしまいがちですが、

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/use-your-data-quickstart?tabs=command-line&pivots=programming-language-studio#add-your-data-using-azure-openai-studio によれば、text-embedding-ada-002 デプロイが必要とのことなので、✓を入れずに設定を進めることにします。
Azure Cognitive Search サービスについては、Microsoft Learn の説明に、
情報取得とモデル応答の品質を向上させるために、英語、フランス語、スペイン語、ポルトガル語、イタリア語、ドイツ語、中国語 (Zh)、日本語、韓国語、ロシア語、アラビア語のセマンティック検索を有効にすることをお勧めします。
と書いてあり、Azure Cognitive Search サービス の設定で、日本語のセマンティック検索を有効にすると、更に品質の良いチャットが出来上がるようです。。。と思いきや、これは日本語訳が微妙でした。その話は、”セマンティック検索” を有効にする方法を紹介してから書くことにします。
Azure OpenAI Service 用に作成した Azure Cognitive Search サービスを Azure Portal で開き、

と、”セマンティック検索”の設定を今回は無料の Free を選択しています。ちなみに、Azure Cognitive Search サービス自体のスケール設定を Free にすると、この”セマンティック検索”は有効にできません。
しかし、言語の設定が見当たらず、これは、”Standared”を選択しないと設定できないのか?と思いつつ、月あたり約6万4千円かぁ…ということで、今回は、そのまま Free の設定でトライを続けることにします。
これについても但し書きが書いてありました。
セマンティック検索とベクトル検索は、追加価格の対象となります。 セマンティック検索またはベクター検索を有効にするには、 Basic 以上の SKU を選択する必要があります。 詳細については、価格レベルの違いとサービスの制限 を参照してください。
Microsoft Learn の記述を見る限り、Free でも良いようです。
先ほどの日本語翻訳の問題についてですが、原文の英語を確認すると、
To help improve the quality of the information retrieval and model response, we recommend enabling semantic search for the following languages: English, French, Spanish, Portuguese, Italian, Germany, Chinese(Zh), Japanese, Korean, Russian, Arabic
と書いてあり、要するに日本語を含む、リスト化された言語は全て対応しているので、”semantic search(セマンティック検索)”を有効化するだけで、特に言語設定は必要ないという事でした。
日本語のドキュメントは判りやすいように思えますが、誤訳とは言えないまでもミスリードする様な翻訳になっている場合もあるので、可能な限り原文にも目を通すことをお勧めします。内容はほぼ一緒なはずなので、ロゼッタストーンでも見る心持でいるとよいでしょう。
”次へ”が有効にならない!
さて、一通り、”Select or add data source” の設定は終わったのですが、

おや?”次へ”のボタンが有効にならず、先に進めません。色々調べると解決策が判りました。
具体的な解決策は、後述の説明を参照してください。
対策を講じて、設定を続けていきます。

”保存して閉じる” をクリックすると、読込が始まります。

この工程は暫く時間がかかります。終わるまで静かに待ちましょう。
質問してみた
どうやら学習が終わったようなので、早速チャットを試してみることにします。

「概念モデリングとは何ですか?”と質問してみたところ、エラーが発生してしまいました。
解決策は、後述の説明を参考にしてください。
なんやかんやらやって、問題を解決し、質問を続けると、
”概念クラスを抽出する方法を教えてください?”の質問に対して、
概念クラスを抽出する方法は、概念モデリングの一環として行われます。概念クラスは、類似した特性や属性を持つエンティティのグループです。概念クラスを抽出するためには、以下の手順を実行することが一般的です:
1. ドメインの理解:対象となる領域やシステムの特性を理解し、概念クラスを抽出するための基準を確立します。
2. データ収集:関連する情報やデータを収集し、分析のための準備をします。
3. 概念の特定:収集したデータを分析し、共通の特性や属性を持つエンティティを特定します。これらのエンティティが概念クラスとなります。
4. 概念クラスの定義:特定した概念クラスについて、適切な定義を作成します。これにより、概念クラスの範囲や関連性が明確化されます。
5. 概念クラスの関係の定義:概念クラス間の関係を定義し、概念モデルを構築します。これにより、エンティティ間の関連性や依存関係が表現されます。
概念クラスの抽出は、概念モデリングの重要なステップであり、システムやプロセスの理解と設計に役立ちます。
う~む。。。学習の効果があるのか良く判らない。。。
続けて、”概念モデリングの”ドメイン”とは何ですか?”と質問すると、
ドメインは、特定の領域や範囲を指す概念です。概念モデリングにおいて、ドメインはモデル化の対象となる領域やシステムの範囲を表します。例えば、ビジネスプロセスのドメインは特定の業界や業務領域を指し、情報システムのドメインは特定のシステムやアプリケーションの範囲を指します。ドメインを明確にすることで、概念モデリングの対象や目的を明確化し、モデルの精度と有用性を向上させることができます。
う~む。。。なんとなく、一般的なドメインの意味の様な気が。。。
めげずに、”概念モデリングにおける概念振舞モデルで使うモデルは何ですか?”という質問を続けると、
概念振舞モデルでは、以下のモデルが使用されることがあります:
1. クラス図(Class Diagram):概念クラスやそれらの間の関係を視覚的に表現するために使用されます。クラス図は、概念クラスの属性や操作、クラス間の関連性や依存関係を示すことができます。
2. シーケンス図(Sequence Diagram):概念クラス間の相互作用やメッセージの流れを示すために使用されます。シーケンス図は、概念クラスの振る舞いや操作の順序を明確にすることができます。
3. アクティビティ図(Activity Diagram):概念クラスの振る舞いやプロセスのフローを表現するために使用されます。アクティビティ図は、概念クラスの状態遷移やアクションの流れを示すことができます。
4. 状態遷移図(State Transition Diagram):概念クラスの状態とその遷移を表現するために使用されます。状態遷移図は、概念クラスの状態変化やイベントによる遷移を明示的に示すことができます。
これらのモデルは、概念モデリングにおいて概念クラスの振舞いや相互作用を明確化するために使用されます。ただし、具体的なモデルの選択は、モデリングの目的や要件によって異なる場合があります。
おいおい、これ、一般的な UML のモデリングなら間違ってないけど、ちゃうやろ!
更に、めげずに、もうすこしスペシフィックな質問をしてみました。
”概念情報モデルとは何ですか?”
概念情報モデルは、概念モデリングにおいて使用されるモデルの一つです。概念情報モデルは、システムやドメイン内の概念や情報の構造を表現するために使用されます。具体的には、概念クラスや属性、関係、制約などを含むモデルです。
概念情報モデルは、概念モデリングのプロセスで概念クラスやその他の要素を定義し、それらの間の関係や制約を明確にするために使用されます。このモデルは、システムやドメインの理解を深め、要件の把握や設計の基盤となる重要なツールです。
具体的な概念情報モデルの表現方法は、様々なモデリング言語やツールによって異なる場合があります。一般的には、クラス図や属性図、関係図、制約図などが使用されます。これらの図や表現方法を活用して、概念情報モデルを作成し、システムやドメインの概念を明確化することができます。
参考文献:
- [doc1] [Art of Conceptual Modeling](https://github.com/xtuml/bridgepoint)
- [doc2] [Azure Digital Twins - Overview](https://docs.microsoft.com/azure/digital-twins/overview)
- [doc2] [Azure Digital Twins - Concepts and Models](https://docs.microsoft.com/azure/digital-twins/concepts-models)
微妙にかすった答えが返ってきました。
じゃぁということで、もっとスペシフィックな質問をしてみることにしました。
”BridgePoint で書いた概念モデルから DTDL を生成する具体的な方法を教えてください”
BridgePointで作成した概念モデルからDTDL(Digital Twins Definition Language)を生成する方法について具体的な手順を説明します。
1. BridgePointで概念モデルを作成します。BridgePointは、概念モデリングのための統合開発環境(IDE)であり、UML(Unified Modeling Language)をベースにしたモデリングツールです。
2. 概念モデルをAzure Digital Twinsに適した形式に変換します。Azure Digital Twinsは、IoT(Internet of Things)ソリューションのためのプラットフォームであり、DTDLを使用してデバイスやリソースのモデルを定義します。
3. BridgePointの概念モデルをDTDLに変換するための手順を実行します。具体的な手順は、BridgePointのドキュメントや関連するリソースを参照してください。
4. DTDLの生成が完了したら、生成されたDTDLをAzure Digital Twinsにインポートします。これにより、Azure Digital Twinsで定義された概念モデルが利用可能になります。
上記の手順に従うことで、BridgePointで作成した概念モデルからDTDLを生成し、Azure Digital Twinsで利用できるようにすることができます。
参考文献:
- [doc1] [Art of Conceptual Modeling](https://github.com/xtuml/bridgepoint)
- [doc2] [Azure Digital Twins - Overview](https://docs.microsoft.com/azure/digital-twins/overview)
- [doc3] [Azure Digital Twins - Concepts and Models](https://docs.microsoft.com/azure/digital-twins/concepts-models)
この文面自体が生成できるという事はある程度は、読み込ませたドキュメントの内容が反映されているようですが、リンクの URL が適切ではないのが問題です。
BridgePoint で作成した概念モデルから DTDL 定義を自動生成する|Knowledge & Experience (note.com)
とかを回答してくれないとね。
ここから先は
¥ 1,200
この記事が気に入ったらチップで応援してみませんか?