Slide 1

Slide 1 text

Synapse Analytics Serviceから Cognitive Servicesの 感情分析を使ってみた 2022/08/06 鍋島 千夏

Slide 2

Slide 2 text

目的 • Synapse Analytics ServiceのノートブックからCognitive Serviceの感情分析機能を呼び出した時に、Cognitive Serviceが どのように呼び出されるのかを観察する。 • 前提条件 • 用意するAzureリソース • Synapse Analytics Serivce • Spark pool • Cognitive Service (Freeプラン) • KeyVault • ADLS gen2 参照:チュートリアル:Cognitive Services を使用した感情分析 https://docs.microsoft.com/ja-jp/azure/synapse-analytics/machine-learning/tutorial-cognitive-services-sentiment

Slide 3

Slide 3 text

F0 Freeプランは30日あたり5千回に制限

Slide 4

Slide 4 text

元データは ライブドアニュース7369記事をCSVにしたもの 参照 livedoorニュースコーパスをcsvファイル形式で取得する https://nxdataka.netlify.app/ldncsv/

Slide 5

Slide 5 text

元データは ライブドアニュース7369記事をCSVにしたもの 参照 livedoorニュースコーパスをcsvファイル形式で取得する https://nxdataka.netlify.app/ldncsv/

Slide 6

Slide 6 text

元データは ライブドアニュース7369記事をCSVにしたもの

Slide 7

Slide 7 text

レイク データベースから感情分析のPythonコードを生成する手順

Slide 8

Slide 8 text

レイク データベースから感情分析のPythonコードを生成する手順

Slide 9

Slide 9 text

① 感情分析の解析結果データフレームの上位10行だけ表示 ① 感情分析の解析結果データフレームの 上位10行だけ表示

Slide 10

Slide 10 text

②感情分析の解析結果データフレーム全件を レイク データベースに格納 ② 感情分析の解析結果データフレーム全件を レイク データベースに格納

Slide 11

Slide 11 text

結果:Cognitive Serviceがフリープランの場合、1分あたり100~140件しか処理できない ① 感情分析の解析結果データフレームの 上位10行だけ表示 ② 感情分析の解析結果データフレーム全件を レイク データベースに格納 → 1分当たり約100~140件のペースで APIが呼ばれ続ける・・・ display(results¥ .select("body", explode("output").alias("exploded"), "error")¥ .select("body", "exploded.*", "error")¥ .limit(10)) results.write.mode('overwrite').saveAsTable("LivedoorNewsResult") 結果を出力するタイミングでCognitive ServivceのText Analytics のAPIが呼ばれる

Slide 12

Slide 12 text

APIトータル呼び出し回数は11.19K回

Slide 13

Slide 13 text

処理されたテキストレコードの総量は9.16K件

Slide 14

Slide 14 text

結果:Cognitive Serviceがフリープランの場合、1分あたり100~140件しか処理できない 解析結果をレイク データベースに格納する1行のコードが 1時間回りっぱなし。終わらない・・・。 最終的には1.5時間で終わった。

Slide 15

Slide 15 text

感情分析の結果:解析結果 sentences列を見ると1記事に対して、複数の感情分析の結果が返されている。(想定外!!!!) 「。」や「?」などの句点で記事が複数の文に分割され、文ごとに感情分析される。

Slide 16

Slide 16 text

補足:元の記事 もうすぐジューン・ブライドと呼ばれる6月。独女の中には自分の式はまだなのに呼ばれてばかり……という「お祝い貧乏」状態の人も多いのではないだろうか? さらに出席回数を重ねていくと、こん なお願いごとをされることも少なくない。 「お願いがあるんだけど……友人代表のスピーチ、やってくれないかな?」 さてそんなとき、独女はどう対応したらいいか? 最近だとインターネット等で検索すれば友人代表スピーチ用の例文サイトがたくさん出てくるので、それらを参考にすれば、無難なものは誰でも作成できる。しかし由利さん(33歳)はネットを参考に して作成したものの「これで本当にいいのか不安でした。一人暮らしなので聞かせて感想をいってくれる人もいないし、かといって他の友人にわざわざ聞かせるのもどうかと思うし……」ということで活 用したのが、なんとインターネットの悩み相談サイトに。そこに作成したスピーチ文を掲載し「これで大丈夫か添削してください」とメッセージを送ったというのである。 「一晩で3人位の人が添削してくれましたよ。ちなみに自分以外にもそういう人はたくさんいて、その相談サイトには同じように添削をお願いする投稿がいっぱいありました」(由利さん)。ためしに 教えてもらったそのサイトをみてみると、確かに「結婚式のスピーチの添削お願いします」という投稿が1000件を超えるくらいあった。めでたい結婚式の影でこんなネットコミュニティがあったとは知 らなかった。 しかし「事前にお願いされるスピーチなら準備ができるしまだいいですよ。一番嫌なのは何といってもサプライズスピーチ!」と語るのは昨年だけで10万以上お祝いにかかったというお祝い貧乏独女の 薫さん(35歳) 「私は基本的に人前で話すのが苦手なんですよ。だからいきなり指名されるとしどろもどろになって何もいえなくなる。そうすると自己嫌悪に陥って終わった後でもまったく楽しめなくなりますね」 サプライズスピーチのメリットとしては、準備していない状態なので、フランクな本音をしゃべってもらえるという楽しさがあるようだ。しかしそれも上手に対応できる人ならいいが、苦手な人の場合 だと「フランク」ではなく「しどろもどろ」になる危険性大。ちなみにプロの司会者の場合、本当のサプライズではなく式の最中に「のちほどサプライズスピーチとしてご指名させていただきます」と いう一言があることも多いようだが、薫さん曰く「そんな何分前に言われても無理!」らしい。要は「サプライズを楽しめる」というタイプの人選が大切ということか。 一方「ありきたりじゃつまらないし、ネットで例文を検索している際に『こんな方法もあるのか!』って思って取り入れました」という幸恵さん(30歳)が行ったスピーチは「手紙形式のスピーチ」と いうもの。 「○○ちゃんへ みたいな感じで新婦の友人にお手紙を書いて読み上げるやり方です。これなら多少フランクな書き方でも大丈夫だし、何より暗記しないで堂々と読み上げることができますよね。読ん だものはそのまま友人にあげれば一応記念にもなります」(幸恵さん) なるほど、確かにこれなら読みあげればいいだけなので、人前で話すのが苦手な人でも失敗しないかもしれない。 主役はあくまで新郎新婦ながらも、いざとなると緊張し、内容もあれこれ考えて、こっそりリハーサル……そんな人知れず頑張るスピーチ担当独女たちにも幸あれ(高山惠)

Slide 17

Slide 17 text

補足:感情分析は1記事に対して 応答は1件だが、文ごとに感情分析の結果が返される。 参照: Docs Cognitive Services - Text Analytics センチメント > Sentiment - Sentiment https://docs.microsoft.com/ja-jp/rest/api/cognitiveservices-textanalytics/3.0/sentiment/sentiment?tabs=HTTP#successful-sentiment-request

Slide 18

Slide 18 text

補足:感情分析は1度に10文書要求できる。 Docs Cognitive Services - Text Analytics センチメント > Successful Sentiment request https://docs.microsoft.com/ja-jp/rest/api/cognitiveservices-textanalytics/3.0/sentiment/sentiment?tabs=HTTP#successful-sentiment-request 1回のリクエストにつき10文書

Slide 19

Slide 19 text

補足:感情分析は1度に10文書要求できる。 Docs Cognitive Services - Text Analytics センチメント > Successful Sentiment request https://docs.microsoft.com/ja-jp/rest/api/cognitiveservices-textanalytics/3.0/sentiment/sentiment?tabs=HTTP#successful-sentiment-request サンプルでは3文書の解析を要求

Slide 20

Slide 20 text

補足:1つ文書の文字数は最大5,120文字

Slide 21

Slide 21 text

補足:Cognitive Service側の転送率の制限 Azure Cognitive Service for Language のサービスの制限 > 転送率の制限 https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/concepts/data-limits

Slide 22

Slide 22 text

補足:要求あたりのドキュメント数は10 参照 Azure Cognitive Service for Language のサービスの制限 https://docs.microsoft.com/ja-jp/azure/cognitive-services/language-service/concepts/data-limits#maximum-documents-per-request

Slide 23

Slide 23 text

補足:Freeプランの制限を越えても課金 されない。 参照:Cognitive Service for Language の価格> よく寄せられる質問 https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/language-service/#faq

Slide 24

Slide 24 text

エラーになる場合: TextAnalytics機能の文字制限5120文字を超えた場合 5120文字を超えた文書を渡 すと、本来解析結果が入る output列に、エラーメッ セージが書き込まれる。 しかも、error列は undefined。

Slide 25

Slide 25 text

エラーになる場合: F0の転送率の制限(1秒当たりの要求数100件)を超えた F0のクウォータ(1カ月5,000件)を超えた F0の制限値を超えたから1秒後にアクセスしてね(ステータスコード429) F0のクウォータ(1カ月5000件)を超えたから18日後にアクセスしてね(ステータスコード 403) 511件 1,667件

Slide 26

Slide 26 text

感情分析の結果データフレームのレコー ド数が10122件に増えている。 • 7,369件になる予定が10,122 件に増えている • 2753件増えた。 • 10,122件 - 7,369件= 2753件

Slide 27

Slide 27 text

7369記事の感情分析の結果から見えたこと • 実測値。Cognitive Serviceがフリープランだと1分あたり約100~140件処理可能。 • 7369記事を感情分析するには1時間ぐらいと予想したが、実際には90分かかった。 • 記事数文だけAPIがコールされる予定が、API呼び出しが11190件あった原因は今のことろ原因不明。 (→ 2022/08/07追記:原因調査おわったので、後ろにページを追記しました。データのクレンジング不足でした。) • APIコールのタイミングはSynapse.MLライブラリがよろしく制御してくれる。 してくれないことがある。 • 1秒当たりのコール数の制限こえたから1秒後にアクセスしなさいというエラーを確認。ステータスコード:429 • フリープランの5000件の制限超えたから、18日後にアクセスしなさいというエラーを確認。ステータスコード:403 • Coginitive Service の Standardプランだと転送率の制限が10倍なので、10倍速いのではないか? • 大規模データを一度に感情分析しようとすると時間がかかる。 • 課金 • Cognitive Serviceは0円で試すことができる。 • Spark Poolは1.5時間なので300円ぐらい。

Slide 28

Slide 28 text

以下、追記

Slide 29

Slide 29 text

追記: 11,190件APIが呼ばれた原因 1つの記事が別のレコードに登録されてしまった箇所を複数発見。URL列がおかしい。 CSVをデータフレームにしたタイミングでデータが壊れてしまっていた。 その影響で、2,747行追加。 データクレンジング不足だったようです。トホホ。 2753