SPSS Modeler で テキストマイニングをしてみる その1 準備編

# SPSS Modelerでのテキストマイニング
みなさん、こんにちは。
今回は、SPSS Modelerでv18.1以降は日本語を解析するノードがサポート対象外となってしまったテキストマイニングをテーマにしています。下記URLの最後の方に記載されていますが、
「IBM SPSS Modeler Text Analytics の日本語アダプターは、バージョン 18.1以降非推奨になりました。」
とても、悲しいです。

https://www.ibm.com/docs/ja/spss-modeler/18.5.0?topic=help-about-spss-modeler-text-analytics

※.2024/12月追記
SPSS Modeler v18.6で日本語サポートが復活しました。紹介記事も書いてみました。

https://qiita.com/harrowharrow16/items/5e948f828c555fdeda0b


SPSS Modeler Premiumライセンスを追加で購入しなくても、SPSS Modelerでテキストマイニングをしてみたい!、もしくは出来ますか？というユーザーの声や質問も多い状況です。
なので、「拡張ノード」 + 「Python」の組み合わせで実現してみようと思います。

**※ 2025/03/11 記事で使用したストリームとデータをアップロードしました。**

https://github.com/harrow16/Qiita/tree/main/TextMining_Part1_0925/stream



## 1.感情分析と形態素解析をやってみる
テキストマイニングといっても何をしましょう？となりますが、ここでは、感情分析と形態素解析をやってみようと思います。また、その結果を使ってSPSS Modelerでワードクラウドやアソシエーションモデルを作ってみます。

あと、できるだけ拡張ノードでの実装部分は最小限にして、標準ノードで実装可能な部分は標準ノードの機能を使っていきます。

今回の環境は以下の通りです。

|項目    |内容               |
|----------|--------------------------|
|SPSS Modeler  | v18.5（IF01 & IF06 適用）       |
|OS|Windows 10（64bit） |
|Python  | 3.10.7(デフォルト)        |



## 2. まずは準備が必要
 テキストマイニングをするために、前提となる設定やライブラリの導入を実施します。

### ①. 拡張ノードのネイティブPythonを利用するために
　クラスター分析の記事では、拡張ノードのシンタックスは、「Python for Spark」を使用していました。今回は、v18.5から追加されたネイティブPythonを使用してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/feca3f2b-e59f-75a9-5b64-d033ae5ac8b0.png)

 
  少しだけ面倒なのは、ネイティブPythonで追加ライブラリを導入して使用する場合は、SPSS ModelerのPython環境へのアクセス権が必要になることです。デフォルトだと"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv"になります。
  ライブラリなど導入する際にアクセス権がないとエラーになってしまいます。そのため、管理者権限のあるユーザーでの利用もしくは、自身のユーザーアカウントでのアクセス権を付与しておいてください。
  
下記URL参考にして準備をしてください。

https://qiita.com/spssfun2017/items/9252f93cf59948dd2810

  
  ※ユーザーの環境によってはセキュリティ上難しい場合があると思います。その場合は、「Python for Spark」を利用することをお勧めします。こちらは、コンフィグファイルでPythonの環境を切り替えることができるので、アクセス権を付与できるフォルダにPythonの環境を構築しましょう。
  以下のURLを参考してみてください。

  https://qiita.com/spssfun2017/items/d8f7db0cb1d15c1f47f4


 
### ②. 感情分析用モデルの準備 
　感情分析用のモデルは、「Huggingface Transformers」にある学習済みモデルを使用します。まずは、Transformersをpipでインストールしましょう。
 下記例は、コマンドプロンプトからインストールする際の一例です。
デフォルトだと「 C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts」にPython.exeがあります。
 
 ```
 C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts>python -m pip install transformers
 ```

 「Huggingface Transformers」には、「自然言語理解」と「自然言語生成」の最先端の汎用アーキテクチャ（BERT、GPT-2など）と何千もの事前学習済みモデルを提供するライブラリです。下記URLの記事を参考にさせていただきました。

https://note.com/npaka/n/n5bb043191cc9#xiqw5


また、Pytorchも必要なため、Pytorchも導入します。

```
C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts>python -m pip install torch torchvision torchaudio
```

　モデルは、Huggingfaceに公開されている、"koheiduck/bert-japanese-finetuned-sentiment"を利用しようと思います。
"daigo/bert-base-japanese-sentiment"を利用して分析している例もあったのですが、こちらは、現在非公開となっているので利用できませんでした。

https://huggingface.co/koheiduck/bert-japanese-finetuned-sentiment

　トークナイザーはcl-tohoku/bert-base-japanese-whole-word-maskingを使用します。

https://huggingface.co/tohoku-nlp/bert-base-japanese-whole-word-masking

　※2025/1/29追記
 v18.6で実行していた時にunidic_liteが導入されていない場合にエラーが発生したため、unidic_liteも導入する手順を追記します。

``` 
     C:\Program Files\IBM\SPSS\Modeler\18.6\python_venv\Scripts>python.exe -m pip install unidic_lite
```
 
### ③. 形態素解析エンジン
 本記事では、「MeCab」を使って形態素解析をしてみます。janomeが扱いやすいと思いますが、すでに下記のブログで「Python for Spark」を利用した例で記載されていますのでぜひ参考にしてください。

https://www.ibm.com/blogs/solutions/jp-ja/spssmodeler-push-node-22/

MeCabは、下記URLから「mecab-64-0.996.2.exe」をダウンロードしてインストールしてください。(2024/09 時点のバージョンです。)


https://github.com/ikegami-yukino/mecab/releases


辞書をビルドする時の文字コードは、「UTF-8」を選んでください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/5b6ee3bc-d0bd-a373-3741-ab7bea5bb472.png)

インストールが完了したら、システム環境変数「Path」にMeCabの実行パスを設定します。
例では、「C:\Program Files\MeCab\bin」を指定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/3441bcb4-4344-b64b-7b0b-4c684d8a585e.png)


続いて、Python環境にMeCab用のライブラリを導入します。

 ```
 C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts>python -m pip install mecab-python3
 ```

 
### ⑤. mecab用ライブラリ
その他、必要となるライブラリを導入します。
※. もしかすると必要ないかもしれませんが、念のため追記しました。

protobuf、fugashi、ipadicを導入します。

 ```
 C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts>python -m pip install protobuf fugashi ipadic
 ```

 
### ⑤. Pandas
Pandasも使うため、導入をします。※.デフォルトで導入されているかもしれません。

 ```
 C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts>python -m pip install pandas
 ```

## 3. 動作確認
準備ができたら、SPSS Modelerで動作確認をしてみましょう。

以下のような簡単なストリームで拡張の出力ノードを使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/24516e81-73be-5f1b-3f11-8d7a6ecab656.png)

ユーザー入力ノードでは、適当な値を入れているだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/9127d43e-911c-bd22-a5d9-567a17c7db6d.png)



### ①.形態素解析
形態素解析からいきましょう。
拡張の出力ノードでは、シンタックスタブでPythonを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/d2d41596-41dd-8382-4525-e5bb5f087ebb.png)

そして、以下のコードを貼り付けして、実行してください。

```python
###Use this code to import data from Modeler to Python
#import modelerpy
#modelerData = modelerpy.readPandasDataframe()
#modelerDataModel = modelerpy.getDataModel()

import MeCab
 
mecab = MeCab.Tagger()
sample = "私は幸せです。"
print(mecab.parse(sample ))
```

実行結果は文字化けしますが、気にしないでください。

Python環境は、文字コードが"UTF-8"なんですが、Modelerの出力画面が"Shift-JIS"なので、文字化けしているようです。
標準出力の文字コードを変更しようとしても"IbmSpssModelerOutputCatcher"というライブラリを使っているらしく、エンコードが行えませんでした。解決策が見つかったら更新します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/9d8d14f2-dbc9-0501-e553-0c4f7ec9155b.png)


また、今までのエラーや標準出力などが一緒に表示される場合がありますが、気にせず無視しましょう。これも解決策が見つかったら更新します。


### ②.感情分析
つづいて、感情分析のサンプルを実行してみましょう。
形態素解析と同じように、拡張の出力ノードに以下のコードを貼り付けてください。
もちろん、シンタックスは"Python"を選択していください。


```python
###Use this code to import data from Modeler to Python
#import modelerpy
#modelerData = modelerpy.readPandasDataframe()
#modelerDataModel = modelerpy.getDataModel()

#-------------------------------------------------------
# ライブラリインポート
#-------------------------------------------------------
# Modeler用ライブラリ
import modelerpy

# モデル構築用 Piplineタスク
from transformers import pipeline 
# モデルロード用
from transformers import AutoModelForSequenceClassification 
# Bert Tokenizer
from transformers import BertJapaneseTokenizer

#-------------------------------------------------------
# 感情分析モデル前処理
#-------------------------------------------------------
# daigo/bert-base-japanese-sentiment は非公開になっている
# koheiduck/bert-japanese-finetuned-sentimentを使います
model = AutoModelForSequenceClassification.from_pretrained('koheiduck/bert-japanese-finetuned-sentiment') 

# 東北大学の乾研究室が作成したtokenizerを使いますす
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking') 

# 感情分析のPipline定義
nlp = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer) 

sample = "私は、幸せです。"
result = nlp(sample)

# 結果を出力
print(result)

```

"私は、幸せです。"の感情分析の結果は、"POSITIVE"となりました。
下の方にでているメッセージは無視してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/7efda0f0-b480-9bad-9bf5-d7b8d69ce0b9.png)


以上で動作確認は終わりです。


## 4. 動作させるまでに発生したあれこれ その1
さて、ここまでの簡単な内容でも初めて触ると結構苦労しました。
いろいろ動作させるまでに苦労した点の第1弾を以下に参考までに記載します。

### ①. アクセス権の問題
準備の項でも説明していますが、アクセス権はきちんと設定しましょう。最初は結構エラーになることが多いと思います。


https://qiita.com/spssfun2017/items/9252f93cf59948dd2810

### ②. iFixの適用問題
2024年9月現在、SPSS Modeler v18.5にはIF022までiFixが公開されています。
（すべてのiFixが公開されてはいません。)
ここで、著者は最新のiFixまですべて適用して動作確認していたのですが、拡張ノードのPythonが全く動かない状態でした。過去にv18.5で作成したコードも動かなくなっていて、？？？？と当初理由がわかりませんでした。
再インストールからiFixの適用を順番にやっていき、動作確認していく上でiFix07を適用するとPythonが動かなくると分かりました。(uiclient.jarがあやしいと思っています。)
環境に依存するかもしれませんので、参考までに書いておきます。著者は、IF001とIF006のみ適用した状態です。


### ③. Numpyの問題
2024年9月現在、Numpyは2.10がリリースされています。
著者の環境で2.X系のNumpyを使うと以下のようなエラーが発生して動きませんでした。
調べると、v2.0系で多く発生していそうだったので、v1.26.4にしたところ問題なく動きました。

```
ValueError: numpy.dtype size changed, may indicate binary incompatibility. 
```

### ④. エラーはコンソール出力タブでみましょう
拡張ノードでエラーになると、下記画像のようなエラーメッセージがでます。
ここのメッセージからは、エラーの内容はわかりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/2c033552-7e28-eb2e-d74a-73f78961823b.png)

かならず、各ノードのコンソール出力タブを確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839172/3151004b-cb68-4b5f-d927-7ca318b4b6d2.png)


 # 次回
 次回は、サンプルデータを使った感情分析を紹介します。

https://qiita.com/harrowharrow16/items/a3ac51a91080c21da87d

 # 参考
SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/items/503037195081d3323eee

SPSS Modeler 逆引きストリーム集

https://qiita.com/416nishimaki/items/4bf813e6cba84b2a1008

SPSS funさん記事集

https://qiita.com/spssfun2017

SPSS連載ブログバックナンバー

https://qiita.com/416nishimaki/items/24c054defbe7280bcf0e

SPSSヒモトクブログ

https://www.ibm.com/blogs/solutions/jp-ja/category/bigdata-analytics/spss-modeler-himotoku/