きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × SIer

COTOHA API × Azure Cognitive Service × キーワード抽出APIの結果比較

この記事の目的

この記事は、
NTTグループによる「COTOHA API」と
AzureのCognitive Service「Text Analytics」
のキーワード抽出機能の出力結果の比較まとめ

を目的としています。

本題

やりたいこと

プレゼンテーションの音声をテキスト化したものがあるので、そのテキストを解析したいというところが事の始まりです。

解析の手始めに、話した内容の中に聞き手に伝えたい情報がキーワードとしてどれだけ含まれているか、という点について解析を始めました。
例えば、ラーメンのおいしさを伝えるプレゼンの音声をテキスト化したものがあったとき、キーワードに、ラーメンや、おいしさについてのキーワードなどが含まれていることを確認したいというイメージです。
(副次的な効果として、「あー」「えー」などのつなぎ言葉や、口癖なども見える化できないかな・・・ということも考えています!)
口癖って、本人からしたらわからないですもんね・・・



日本語の解析ということになるので、日本語解析に強いCOTOHA APIを利用しようと考えました。1つだけでは、不安なので、比較対象として、AzureのText Analyticsも使って解析結果を比較してみました。Azureのほうは、日本語に対応しているか不安でしたが、対応していました(よかったw)

それぞれのサービスについて

COTOHA API

api.ce-cotoha.com

キーワード抽出に関してみれば、以下のようなやり取りになります。

#リクエスト
{
 "document":"レストランで昼食を食べた。",
 "type": "default","do_segment":true,"max_keyword_num":2
}
#レスポンス
{
  "result" : [ {
    "form" : "レストラン",
    "score" : 14.144054
  }, {
    "form" : "昼食",
    "score" : 12.1121
  } ],
  "status" : 0,
  "message" : ""
}
Text Analytics

azure.microsoft.com

キーワード抽出に関してみれば、以下のようなやり取りになります。

#リクエスト
{
  "documents": [
    {
      "language": "ja",
      "id": "1",
      "text": "レストランで昼食を食べた。"
    }
  ]
}
#レスポンス
{
  "documents": [
    {
      "id": "1",
      "keyPhrases": [
        "レストラン",
        "昼食"
      ]
    }
  ],
  "errors": []
}

比較実施

短い文での比較

短い文「レストランで昼食を食べた。」でも比較してみましたが、同じ抽出結果となりました。
※Azureのほうは、それぞれのキーワードごとにScoreが表示されません。順番的に、Scoreが高い順番になっているのでしょうか・・・



長文での比較①

COTOHA APIの概要説明文を利用します。(178文字)

あなたのアプリケーションの日本語理解の高度化をサポート。日本語テキストを扱うさまざまなビジネスシーンに活用可能。高精度な日本語文章解析が実現可能。NTTグループの40年にわたる研究成果、世界最大級の日本語辞書を活用。テキストアナリティクスやバーチャルアシスタントへのAPIの適用が可能。非構造ビッグデータマーケティング活用やアプリの日本語化対応を実現。

COTOHA APIの出力結果

{
  "result": {},
  "message": "An error has occurred.",
  "status": 11801
}

☆Azure Text Analyticsの出力結果☆

{
  "documents": [
    {
      "id": "1",
      "keyPhrases": [
        "日本語辞書",
        "日本語理解",
        "日本語テキスト",
        "日本語化対応",
        "日本語文章解析",
        "マーケティング活用",
        "実現",
        "バーチャルアシスタントへ",
        "世界最大級",
        "わたる研究成果"
      ]
    }
  ],
  "errors": []
}
長文での比較②

たまたま開いていたMSDNのサイトの説明文に、「きな粉餅」キーワードをちりばめた文を利用。(259文字)

階層的な行セット、つまり、きな粉餅とチャプター(OLE DB 型DBTYPE_HCHAPTER、ADO 型adChapter) を使用して取得できます、OleDbDataReaderします。 きな粉餅とチャプターを含むクエリとして返される場合、 きな粉餅、DataReader、章を内の列として返されますDataReaderとして公開されると、 きな粉餅のDataReaderオブジェクト。ADO.NETデータセットテーブルときな粉餅との間の親子リレーションシップを使用して階層的な行セットを表すためも使用できます。

☆COTOHA APIの出力結果☆

{
  "result": {},
  "message": "An error has occurred.",
  "status": 11801
}

☆Azure Text Analyticsの出力結果☆

{
  "documents": [
    {
      "id": "1",
      "keyPhrases": [
        "粉餅",
        "使用",
        "行セット",
        "チャプター",
        "階層",
        "DataReaderオブジェクト",
        "データセットテーブルとき",
        "ADO 型adChapter",
        "OLE DB 型DBTYPE_HCHAPTER",
        "親子リレーションシップ"
      ]
    }
  ],
  "errors": []
}
長文での比較③

Amazonの商品レビューを一部改変したもの(77文字)

キッチンが低く、手で洗うと腰が痛くなるのが嫌で。洗い物を貯め込むことが多く、それがまた悪循環に……。今は、全くそんなことがなくなったので、重宝してます。

☆COTOHA APIの出力結果☆

{
  "result": [
    {
      "form": "嫌",
      "score": 23.5874
    },
    {
      "form": "悪循環",
      "score": 17.997868
    },
    {
      "form": "キッチン",
      "score": 10.554
    },
    {
      "form": "腰",
      "score": 10.2597
    },
    {
      "form": "重宝",
      "score": 8.074734
    },
    {
      "form": "手",
      "score": 7.59032
    },
    {
      "form": "洗い物",
      "score": 6.666667
    },
    {
      "form": "多く",
      "score": 4.6435604
    }
  ],
  "status": 0,
  "message": ""
}

☆Azure Text Analyticsの出力結果☆

{
  "documents": [
    {
      "id": "1",
      "keyPhrases": [
        "こと",
        "キッチン",
        "洗い物",
        "悪循環",
        "重宝"
      ]
    }
  ],
  "errors": []
}

比較結果

解析結果の観点

長文①、②では、想定外にCOTOHA APIでエラーとなってしまいました。
別の時間にやったときは、成功していたのですが・・・
COOTHA APIについては、開発者用アカウントを利用しているので、その制限があるのかもしれません。

一方、Azureのほうは、すべての文章で解析ができました。
解析結果をよくみると、「こと」のようなそれだけではキーワードとして利用できなさそうなものや、あえて埋め込んだ「きな粉餅」というキーワードが「粉餅」として抽出されていたりと、もう一歩のような結果になっています。
※COTOHA APIで成功したときは、「きな粉餅」がキーワードとして抽出されていました。(エビデンス取っておけばよかった・・・)


どちらのサービスでも解析が成功した長文③では、
「キッチン」「洗い物」「悪循環」「重宝」という特徴的なキーワードの抽出をどちらも成功しています。
ただ、前述したとおり、Azureでは「こと」を検出しています。
COTOHA APIのほうは、「嫌」などのAzureでは検出できなかったキーワードも抽出できています。

これはCOTOHA APIのほうが精度がいいということなのでしょうか・・・




解析速度の観点

レスポンスが返ってくるまでの時間としては、

COTOHA APIは、おおよそ4~6秒程度
Azureは、3~5ミリ秒程度

となりました。
APIを投げる実装にもよりますが、結果は早く帰ってくるほうが嬉しいですね(´▽`)



料金的な観点

COTOHA APIは1リクエスト毎にいくらかかっているかがわかる利用状況ページが提供されています。以前はここで、いくらかかっているかを確認することができたのですが、ここ最近は、以下のようなエラーが出てみることができませんでした(=_=)

f:id:kinakomotitti:20190720002209p:plain
エラーメッセージ


Azureについては、F0を利用しています。

f:id:kinakomotitti:20190720002434p:plain
Azure料金



まとめ

もっと内容面で比較をしてみたかったですが、うまく解析結果を得ることができていないので、正確な比較ができていないです。

今回の結果だけだと、料金、解析速度の面からは、Azureが優位だと感じています。<\b>

ただ、解析の精度が最重要なので、そこはないがしろにしたくないです( ゚Д゚)。ということで、どちらを利用するかの結論をだすまでには、もう少し時間がかかりそうです。