はじめに
OCI Languageは、Oracle Cloud Infrastructure(OCI)が提供する、機械学習の専門知識なしで高度な自然言語処理(NLP)を利用できるフルマネージドのクラウドAIサービスです。
OCI Languageが提供する事前学習済モデルは、バージョン1(v1) と バージョン2(v2) があります。v1とv2でサポートされる言語は以下の表のとおりです。
最新の情報は、製品ドキュメントをご確認ください
https://docs.oracle.com/en-us/iaas/Content/language/using/pretrain-models.htm
感情分析(Sentiment Analysis)を確認すると、v1のサポート言語は英語とスペイン語の2言語のみですが、 v2は英語、スペイン語、アラビア語、ドイツ語、フランス語、イタリア語の6言語をサポートし、さらに
And 100+ languages by design
とあります。このAnd 100+ languages by designの100+ languagesには日本語も含まれます。
ちなみに、この他の違いとしては、v1は事前準備作業が不要(OCIコンソールのテキスト・アナリティックスよりすぐに試すことができる)、v2は後述の事前準備作業が必要(モデルおよびエンドポイントの作成)、などがあります。
感情分析(センチメント分析)
OCI Languageの感情分析(センチメント分析)は、入力テキストの主観的情報(気分、トーン)を分析し、それぞれをポジティブ、ネガティブ、ニュートラル、ミックスを信頼度スコア付きで分類します。
この記事でやること
この記事では、事前学習済モデルv2 を利用して、日本語テキストの感情分析を試します。
1. 事前準備
OCI Languagesの事前学習済モデルのバージョン2(v2)の利用には、以下の準備作業が必要です。
- ポリシーの設定
- プロジェクトの作成
- モデルの作成
- モデル・エンドポイントの作成
1.1 ポリシーの追加
以下ドキュメントを参考にポリシーを追加します。
以下設定例です。
allow group <group-name> to manage ai-service-language-family in tenancy
allow group <group-name> to manage ai-service-language-family in compartment <compartment-name>
1.2 プロジェクトの作成
プロジェクトを作成します。プロジェクトは、OCI Language のアセットを整理・管理し、ドキュメント化するための共同作業用コンテナです。
-
OCIコンソールを開きます
-
左上のナビゲーション・メニューをクリックし、アナリティックスとAI > AIサービス > 言語 を選択します
1.3 モデルの作成
感情分析のための事前学習済モデル(v2)を作成します。
-
モデル・タイプの選択で、事前トレーニング済センチメント分析 を選択します。必要であればモデルの説明を入力します。次をクリックします

-
モデルが作成されます(時間がかかる場合もあります)。モデル情報を確認し、モデル・タイプが事前トレーニング済センチメント分析、モデル・バージョンがV2.0であることを確認します

1.4 モデル・エンドポイントの作成
前の手順で作成した事前トレーニング済センチメント分析モデル(V2)にアクセスするためのモデル・エンドポイントを作成します。
-
画面左下のリソース・セクションのモデル・エンドポイントをクリックします(もしくはモデル・エンドポイントの作成をクリックします)

-
コンパートメントを確認し、<コンパートメント名>のモデルに前の手順で作成した事前トレーニング済センチメント分析モデル(V2)が選択されていることを確認します。必要であれば名前とAliasと説明と推論ユニット数を入力(変更)します。モデル・エンドポイントの作成をクリックします

-
エンドポイントの作成が開始されます(時間がかかります)。作成状況を確認する場合は、作業リクエストのエンドポイントの作成をクリックします

2. 動作確認
作成した事前学習済センチメント分析モデル(V2)を利用して、日本語テキストの感情分析をします。今回用意したのは、ECサイトの商品レビューを想定した以下3つのテキスト(サンプル)です。
ずっと欲しかったこの炊飯器、思い切って買って大正解でした!
デザインがスタイリッシュでキッチンに馴染むし、何よりお米がツヤツヤに炊き上がって本当に美味しいです。
操作も直感的で分かりやすく、発送も迅速で梱包も丁寧でした。
友人にも自信を持っておすすめしたい逸品です。
商品写真と実物の色が全然違います。
もっと高級感があるかと思いましたが、実物はプラスチックのようで安っぽいです。
さらに、使い始めて3日でボタンが反応しなくなりました。
カスタマーサポートに連絡しても対応が遅く、非常に不愉快な思いをしました。
返品の手間もかかるし、本当に最悪です。
商品自体のクオリティは非常に高く、肌触りも抜群で大変気に入っています。サイズ感もぴったりでした。
ただ、配送トラブルのせいで予定より1週間も遅れて届いたのが残念でなりません。
お詫びのメールも定型文だけで、誠意を感じませんでした。
モノが良いだけに、この対応の悪さは非常に勿体ないと感じます。
-
高評価コメント(サンプル)を利用して感情分析を実行します。前の手順で作成した事前トレーニング済センチメント分析(V2)モデルを開きます。分析するテキストを入力し、分析をクリックします

-
最後に高評価と低評価の両方を含むコメント(サンプル)を分析します。アスペクト・ベースもセンテンス・レベルも、PositiveとNegativeが混在し、全体としてはMixedと評価されました。これを活用すると「商品品質」はPositive、「配送」「トラブル発生時の対応」はNegative、といった要素単位での分析もできそうです。

(参考)REST APIで事前学習済モデルv2の感情分析を実行する
参考までに、OCI Languageの感情分析をREST APIで実行した例を紹介します。なお、RESTクライアントはPostmanを利用し、リクエストのBodyでは分析テキストやその言語コードに加えて、コンパートメントとモデル・エンドポイントのそれぞれのOCIDを指定します(もしくは、コンパートメントのOCIDとモデル・エンドポイントのエイリアス名を指定)
Language API - BatchDetectLanguageSentiments
https://docs.oracle.com/en-us/iaas/api/#/en/language/20221001/BatchDetectLanguageSentiments/BatchDetectLanguageSentiments
レスポンス
{
"documents": [
{
"key": "doc1",
"documentSentiment": "Negative",
"documentScores": {
"Positive": 0.03166045736847299,
"Negative": 0.9888149109873315,
"Neutral": 0.024765941287914876,
"Mixed": 0.9316169539400594
},
"sentences": [
{
"text": "商品写真と実物の色が全然違います。",
"offset": 0,
"length": 17,
"sentiment": "Neutral",
"scores": {
"Positive": 0.003826144712995705,
"Negative": 0.003826144712995705,
"Neutral": 0.9940162897109985,
"Mixed": 0.0021036032315074273
}
},
{
"text": "もっと高級感があるかと思いましたが、実物はプラスチック感が強くて安っぽいです。",
"offset": 17,
"length": 39,
"sentiment": "Positive",
"scores": {
"Positive": 0.9325296878814697,
"Negative": 0.04314232566890597,
"Neutral": 6.084613141519115E-4,
"Mixed": 0.023719525135472395
}
},
{
"text": "さらに、使い始めて3日でボタンが反応しなくなりました。",
"offset": 56,
"length": 27,
"sentiment": "Negative",
"scores": {
"Positive": 0.0014538130299553856,
"Negative": 0.9977263808250427,
"Neutral": 2.0503970822680462E-5,
"Mixed": 7.993021741792094E-4
}
},
{
"text": "カスタマーサポートに連絡しても対応が遅く、非常に不愉快な思いをしました。",
"offset": 83,
"length": 36,
"sentiment": "Negative",
"scores": {
"Positive": 7.407986331955127E-4,
"Negative": 0.9988414645195007,
"Neutral": 1.0447914035402808E-5,
"Mixed": 4.0728893326835204E-4
}
},
{
"text": "返品の手間もかかるし、本当に最悪です。",
"offset": 119,
"length": 19,
"sentiment": "Negative",
"scores": {
"Positive": 9.060176523292549E-4,
"Negative": 0.9985830783843994,
"Neutral": 1.2778093967669678E-5,
"Mixed": 4.981258693036614E-4
}
}
],
"aspects": [
{
"offset": 83,
"length": 20,
"text": "カスタマーサポートに連絡しても対応が遅く",
"sentiment": "Negative",
"scores": {
"Positive": 0.014604065455978626,
"Negative": 0.9771606922149658,
"Neutral": 2.05969630091354E-4,
"Mixed": 0.0080292726989642
}
},
{
"offset": 119,
"length": 10,
"text": "返品の手間もかかるし",
"sentiment": "Negative",
"scores": {
"Positive": 0.047436266977252894,
"Negative": 0.9258143901824951,
"Neutral": 6.690212661447408E-4,
"Mixed": 0.026080321574107248
}
}
],
"languageCode": "ja"
}
],
"errors": []
}
まとめ
OCI Languageの事前学習済モデル(v2)を利用して、日本語テキストの感情分析を試しました。おおむね期待通りの分析結果が得られたと思いますが、いかがでしょうか?
OCI Languageの具体的なユースケースとしては、アンケートのコメントや商品レビューの分析、ソーシャル・メディア上の自社および自社製品に関する投稿の分析、などが考えられます
なお、冒頭で説明したとおり、事前学習済モデル(v2)の感情分析(Sentiment Analysis)の日本語を含む多言語対応は
English, Spanish, Arabic, German, French, Italian
And 100+ languages by design
です。利用検討時は事前検証等で十分にご確認いただき、適用可否をご判断いただければ幸いです
参考ドキュメント














