Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Synapse Analytics Service から Cognitive Services の 感情分析を使ってみた

Synapse Analytics Service から Cognitive Services の 感情分析を使ってみた

Synapse Analytics Serviceのノートブックから Cognitive Service の感情分析機能を呼び出した時に、 Cognitive Service がどのように呼び出されるのかを観察してみました。

鍋島千夏

August 07, 2022
Tweet

More Decks by 鍋島千夏

Other Decks in Technology

Transcript

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

    View Slide

  2. 目的
    • 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 結果: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が呼ばれる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 補足:感情分析は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

    View Slide

  18. 補足:感情分析は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文書

    View Slide

  19. 補足:感情分析は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文書の解析を要求

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. 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円ぐらい。

    View Slide

  28. 以下、追記

    View Slide

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

    View Slide