Free Trial

ブログ - 日本語

アナリティクスに関する聡明な考えに触れ、インサイトとアイデアが得られます。
AkimasaKajitani
16 - Nebula
16 - Nebula

はじめに - テキストマイニングとは?

 

テキストマイニングとは、文章(テキスト)を分析することで何かしらの知見を得るということです。このテキストというのは、自由記述文章のことを意味し、アンケートやコールセンターの問い合わせなどはもちろん、特に最近ではSNSが発達したおかげでSNSの口コミなど非常に多くのデータが生成されるようになりました。

 

テキストデータはAlteryxで普段多くのみなさんが分析している構造化データとは異なり、非構造化データですので分析の難易度はグッとあがります。この特殊性により、テキストマイニングの分野は構造化データとは異なる手法で行う必要があります。

 

 

Alteryxのテキストマイニング機能について

 

Alteryxは標準の機能でテキストマイニング機能は持っていませんが、オプションのインテリジェンススイートでテキストマイニング機能が提供されるようになりました。提供されているテキストマイニング機能は以下の通りです。

 

  • 品詞タグ付け(構文解析)
  • 感情分析(センチメント分析)
  • トピックモデリング
  • 固有表現抽出(エンティティ分析)
  • ワードクラウド

※カッコ内は一般的に使われる用語です

 

しかしながら、対応言語を見ていくと残念ながら日本語は現時点(20225月)では未対応となっています。

※トピックモデリングのみ前処理を行うことで日本語でも使えます

 

 

Alteryxを使って日本語でテキストマイニングをするには

 

日本語でテキストマイニングを行うには、日本語の言語の特殊性というのが影響し、英語などに比べると前処理が必要となってきます。文章を分析する場合、まずは単語を分割する必要がありますが、英語などの言語であれば単語が空白で区切られているため難しいことを考える必要なく空白で分割が可能です。一方、日本語など単語の区切りがわかりにくい言語であればまず単語に分割するという一手間がかかってしまいます。これにより、テキストマイニングを行うにあたり、単なるローカライズというわけにはいかないのです。

 

ところで、このように単語に分割するような処理を形態素解析と言います。

 

形態素解析用のツールは様々なものが存在しますが、Alteryxで行う場合はRもしくはPython上で動作するパッケージを利用することができます。

 

また、多くのクラウドプラットフォームでは自然言語処理用のAPIが準備されており、AlteryxではこのようなAPIを利用することができます。この中に構文解析(Syntax Analysis)の機能が含まれており、これもAlteryxからはダウンロードツールを用いて利用することが可能です。

 

ノンプログラミングの観点からはクラウドプラットフォームの構文解析機能を使うのが最も簡単かと思います。有料であることは考慮しなければなりませんが、テスト的に使う分であれば無料枠に収まるかと思います。料金が気になるような場合は、何度も実行しないように一度処理を行った結果をローカルファイルとして保存しておく、という工夫も可能です。

 

また、各種クラウドプラットフォームの自然言語処理は、構文解析だけではなく事前に学習済みのモデルを使った感情分析、エンティティ分析などが手軽に利用可能です。

 

 

テキスト分析手法について

 

それでは、テキストマイニングで代表的な手法を解説していきたいと思います。

 

  • 形態素解析
  • 構文解析
  • エンティティ分析(固有表現抽出)
  • センチメント解析(感情分析・評判分析)
  • トピックモデリング
  • テキスト分類

それぞれの概要、Alteryxでの対応状況、Pythonでの実装などについて解説していきます。

 

形態素解析

 

日本語など空白間の区切りがない言語ではまずこの形態素解析を行い、単語レベルに「分かち書き」をする必要があります。

 

例えば、「私はAlteryxでデータ分析を行うのが好きです。」という文章があれば、分かち書きをすることで、「私//Alteryx//データ/分析//行う///好き/です/。」と単語レベルに分解することが可能です。

 

Alteryxでは残念ながら標準のツールではサポートしておらず、インテリジェンススイートの品詞タグ付けツールがこの機能を持っていますが、残念ながら日本語未対応のため、RツールやPythonツールで実装する必要があります。

 

筆者もマクロを提供していますので、そちらをお使い頂けると簡単に実行することが可能です。

 

MeCab-Python3 Macro

https://community.alteryx.com/t5/Public-Community-Gallery/MeCab-Python3-Macro/ta-p/933344

Microsoft Visual C++ Redistributableのインストールが必要

 

Janome Macro

https://community.alteryx.com/t5/Public-Community-Gallery/Janome-Macro/ta-p/930505

Alteryx Designer 2020.4以降

 

 

構文解析

 

構文解析は、文法の規則に則り、文の構造を句・文節単位で解析することです。つまり、係り受けの構造などを分析するものです。

先ほどの例文「私はAlteryxでデータ分析を行うのが好きです。」を構文解析すると以下のようになります(Googleの構文解析機能の結果です)。

 

ブログ202205_1_テキストマイニング.png

Alteryxでは、標準のツールではこの機能を持っているものはなく、インテリジェンススイートの品詞タグ付けツールがこの機能を持っていますが、残念ながら日本語未対応となるため、Rツール、Pythonツールで実装する必要があります。もしくは、ダウンロードツールで各種クラウドプラットフォームが提供している構文解析の機能を使うこともできます。

 

筆者もGoogleの構文解析APIを利用できるツールを公開していますので、ご利用ください。

 

Google NLP Syntax Analysis API Tool

https://community.alteryx.com/t5/Public-Community-Gallery/Google-NLP-Syntax-Analysis-API-Tool/ta-p/9...

 

 

エンティティ分析(固有表現抽出)

 

エンティティという言葉は聞きなれないかと思いますが、エンティティとは固有名詞(場所、物)や日付などです。これらのエンティティを文章から抜き出すのがエンティティ分析です。

 

Alteryxでは、標準のツールではこの機能を持っているものはなく、インテリジェンススイートの固有表現抽出ツールがこの機能を持っていますが、残念ながら日本語未対応となるため、Rツール、Pythonツールで実装する必要があります。もしくは、ダウンロードツールで各種クラウドプラットフォームが提供しているエンティティ分析の機能を使うこともできます。手軽さとしては、各種クラウドプラットフォームが持つAPIを使うのが一番お手軽ではないかと思います。Googleの場合はまさに「エンティティ分析API」となります。

 

Pythonでの実装は、GINZA/spaCyが利用できるかと思います。GINZA/spaCyは日本語にも対応した自然言語処理ライブラリで、形態素解析などの機能も持っています。

 

筆者もマクロを提供していますので、ご利用ください。

 

Entity Analysis for Japanese(固有表現抽出)

https://community.alteryx.com/t5/Public-Community-Gallery/Entity-Analysis-for-Japanese/ta-p/948236

 

 

センチメント解析(感情分析)

文章が肯定的なのか、否定的なのかを分析します。これにより、アンケートや商品の口コミ等の分析が可能になります。否定的な口コミなどがあれば今後の商品の開発にフィードバックするなどの対応を行うことができるようになります。

 

感情分析の手法としては様々ありますが、各単語が肯定的なのか、否定的なのかという辞書を持っておき、これをベースで分析するような感情辞書ベースのものや、ディープラーニングベースのものなどもあります。

 

Alteryxでは、標準のツールにこの機能を持っているものはなく、インテリジェンススイートの感情分析ツールがこの機能を持っていますが、残念ながら日本語未対応となるため、Rツール、Pythonツールで実装する必要があります。もしくは、ダウンロードツールで各種クラウドプラットフォームが提供している感情分析の機能を使うこともできます。

なお、Alteryxの感情分析ツールは、VADERという「辞書」と「ルール」の組み合わせで感情値を求めるタイプのアルゴリズムを採用しています(このVADERというアルゴリズムが日本語対応していないという状況です)。

 

Pythonツールでの実装は、osetiasariML-ASKなどのライブラリがありますが、パッケージの依存関係の問題や、バージョン不一致の問題などがあり、ソースコードの修正などが必要な状況です(今後の改善を望みたいと思います)。そのため、現状ではクラウドプラットフォームが提供しているものが一番使いやすいかと思います。

ML-ASKは普通に利用できますが、結果が出ない文章が多く利用できるケースが限られる印象です(通常のネガポジ分析より高度なことを行っているためかと思います)。

 

 

トピックモデリング

各文章が何について書かれているかというトピック(話題)を分類するものです。機械学習で言うところの事前学習のない「教師なし学習」タイプの手法(いわゆるクラスタリング)となります。

 

Alteryxでは、標準のツールではこの機能を持っているものはなく、インテリジェンススイートのトピックモデリングツールがLDAを用いた教師なし学習タイプのアルゴリズムで分類する機能を持っています。LDA自体はインプットの文章において単語が空白で区切られていれば言語は問いませんので、先に形態素解析を行い、集計ツールを使って空白文字区切りで結合しておけば日本語でも利用可能です。

 

トピックモデリングの場合、結果に対して自動的にラベルがつくものではないため、分類された結果は人間が見て考える必要があります。この際よく使われるのがワードクラウドです。

 

また、ダウンロードツールで各種クラウドプラットフォームが提供しているトピックモデリングの機能を使うこともできますが、Googleのコンテンツ分類のAPIも日本語未対応となっています。Googleのコンテンツ分類機能は汎用的なものになるので、例えばITの話題、ビジネスの話題、といった形での分類となります。

 

 

テキスト分類

 

テキスト分類は、あらかじめラベリングされた文章を学習し、新しい文章が来た際にどのグループの文章か予測するものです。いわゆる機械学習の「分類」にあたるものです。

 

手法としては、テキストのベクトル化を行い、その後SVM(サポートベクターマシン)等の機械学習モデルで学習、予測するという形になります。このテキストのベクトル化というのはその後の機械学習モデルで学習させるために構造化データの場合の特徴量を作っているようなイメージとなります。

ベクトル化には様々な手法があり、単語のカウントベースのもの(Bag of WordsTF-IDF)と、推論ベースのもの(word2vecBERT)がよく使われています。カウントベースの手法であれば、形態素解析さえ行ってしまえばAlteryxの標準の準備ツールなどで実装可能です。

 

Alteryxでは、この機能を持っているものはないため、Rツール、Pythonツールで実装する必要があります。Pythonで実装する場合も、複数のパッケージを組み合わせるか、自然言語処理のパッケージを用いて実装するのが一般的かと思います。

 

 

おわりに

 

テキストマイニングはSNSの発展とともに大量にデータが生成され、社会的な影響力も大きくなっているため非常に重要となっています。また、以前ではアンケートデータなど入手できるテキスト自体少ないものでしたが、大量にデータが生成される分、取り組みやすくなってきている分野だと思います。それにより、現在進行系で様々な手法やライブラリが出てきており、このブログもすぐに情報が古くなってしまうかもしれませんので、常に最新情報を拾っていただければと思います。

 

このブログを書く過程で、日本語のテキストマイニング向けのPythonパッケージを色々と試しましたが、パッケージ依存関係の問題やPythonのバージョンの問題など色々と問題があるものが多く、すんなりと動かないといった状況であり、MeCabJanome以外のパッケージについてはソースの修正が必要だったりするためAlteryxのマクロにするのは現状難しく感じました。

そのため、感情分析、テキスト分類については単一のライブラリでサクッとできる状況ではなかったため、自然言語処理用のPythonパッケージなどで実装していく必要があります。また機会があれば実際に実装してみてブログなどで紹介できればと思います。

 

 

Alteryxはテキストマイニング向けの機能はデフォルトでは持っておらず、部分的にPythonツールを使わざるを得ない状況ではありますが、すべてをPythonツール内で完結するよりもAlteryxのツールを使って処理を行っていくことはやはりわかりやすさの点などでメリットがあると改めて感じましたので、みなさん積極的にテキストマイニングでもAlteryxを使っていただければと思います。

 

Akimasa Kajitani
Manager, Carrier Solution Dept.

I like to help people who are having trouble using Alteryx and focusing on improving the everyone's Alteryx skill. And I’m exploring how far we can go with no code or with code using Alteryx.

I like to help people who are having trouble using Alteryx and focusing on improving the everyone's Alteryx skill. And I’m exploring how far we can go with no code or with code using Alteryx.