見出し画像

M1搭載MacでAnacondaとMeCab。fastTextも

下記の一連の処理を実行した後で、書いています。

結局不具合があり環境の見直しをすることになり、「Anaconda」だけの環境に戻しました。
それでも下記の各コマンドなどは自分の参考になっているので、投稿をそのまま残しています。

Anaoconda & MeCab 整備編

仮想環境を分ける

「TnesorFlow」を使うために「Miniconda」をMacにインストールしています。
なお、Pythonを始めたとき最初に入れた「Anaconda」も動いています。
Window環境では、「Anaconda」の「Jupyter Notebook」上で「MeCab」を使えるようにしているので、Macでも同じ環境を整えようと準備を始めました。
思うように進まなかったのですが、最終的には「Minicoda」と「TensorFlow」をアンインストールし、「Anaconda」とは別の仮想環境を用意することでインストールできました。

※なお、当方Python初めて1ヶ月ちょっとなので、正しい手順でないところもあるかもしれせん。

「Anaconda」と「Miniconda」が共存している環境で「MeCab」インストールしたところ(この手順は後述)、「import MeCab」の実行時にエラーが出てしまいました。
メッセージを見ると、「MeCab」は「Anaconda」ではなく、「/miniconda3/」に入っているようで、状況がわからなくなり、行き詰まりかけました。

(base) % python
Python 3.9.12 (main, Apr  5 2022, 01:52:34) 
[Clang 12.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/username/miniconda3/lib/python3.9/site-packages/MeCab/__init__.py", line 10, in <module> 
    from . import _MeCab
ImportError  <略>

「Anaconda」のバージョンを確認しても、「Miniconda」。

(base) %  conda list anaconda$
# packages in environment at /Users/username/miniconda3:
#
# Name                    Version                   Build  Channel

作成した環境の一覧を見ても、「Miniconda」。
「Anaconda」は動いているのですが、見つからない状態になってしまいました。

(base) % conda deactivate
% conda info -e
# conda environments:
#
base                     /Users/username/miniconda3

いくつかのサイトを参考に、「Anaconda」と「Miniconda」の環境を分けてやり直すことにしました。

Minicondaをアンインストール

まず「Miniconda」をアンインストールします。
「Anaconda」を見えるようにしてから、そこに「MeCab」を入れようと思ったのです。

# miicondaディレクトリ削除
(base) % rm -rf ~/miniconda3

# minicondaの記述を削除
(base) %nano ~/.zshrc

# 関連ファイルの削除
(base) % rm -rf ~/.condarc ~/.conda ~/.continuum

「Minconda」の記述については、「.zshrc」に以下の記述があれば削除します。

# nanoエディタで以下を削除

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/username/opt/miniconda3/bin/conda'
# (略)・・・
# <<< conda initialize <<<

「TensorFlow」もアンインストールします。

# tensorflowをアンインストール
(base)  % python -m pip uninstall tensorflow-macos
(base)  % python -m pip uninstall tensorflow-metal

「conda env list」を実行したところ、「Anaconda」が見えました。

# conda env listで仮想環境一覧
(base)  % conda deactivate
% conda env list
# conda environments:
#
base                     /opt/anaconda3

MeCab 強化編

MeCabをインストール

「base」環境に「MeCab」をインストールします。

# MeCabをインストール
% conda activate base 
(base)  % cd {git_repo_path}
(base)  % git clone https://github.com/taku910/mecab.git
(base)  % cd mecab/mecab
(base) mecab % ./configure  --enable-utf8-only
(base) mecab % make
(base) mecab % make check
(base) mecab % sudo make install

「MeCab」を「Anaconda」(Juypter)で使えるようにするには「SWIG」というパッケージも入れます。
SWIGは、C/C++で書かれたプログラムなどのラッパーで、Pythonなどの他の言語で使えるようにするツールです。

# ラッパー「SWIG」をインストール
 (base) mecab % conda install -c anaconda swig

ただ、これ(だけ)ではうまくいきませんでした。
「import MeCab」を実行すると「ModuleNotFoundError: No module named 'MeCab'」というエラーが出ます。

# 「MeCab」が正常にインストールされているか確認
(base) % python

Python 3.9.13 (main, Aug 25 2022, 18:29:29) 
[Clang 12.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'MeCab'

これまでの手順が違っていたのかわかりませんでしたが、「MeCab」のPythonラッパー「mecab-python3」をインストールすることでエラーは出なくなりました。

# mecab-python3をインストール
(base)  % cd mecab/mecab
(base) mecab % pip install mecab-python3

Collecting mecab-python3
  Downloading mecab_python3-1.0.6-cp39-cp39-macosx_10_15_x86_64.whl (274 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 274.3/274.3 kB 8.4 MB/s eta 0:00:00
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.6

#再度「 import MeCab」実行
(base) % python
Python 3.9.13 (main, Aug 25 2022, 18:29:29) 
[Clang 12.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MeCab
>>>

標準とNEologd辞書セットアップ

「MeCab」をインストールしたので、次に辞書を組み込みます。
まず標準辞書の「ipadic」をインストール。

# 標準辞書をインストール
(base) mecab % cd ../mecab-ipadic
(base) mecab-ipadic ./configure --with-charset=utf8
(base) mecab-ipadic make
(base) mecab-ipadic sudo make install

今回試していませんが、「pip」を使って「ipadic」をインストールすることも可能になったようです。

pip install ipadic

標準辞書より新語に強い「NEologd」も使えるようにします。

# NEologdをインストール
(base) % git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
(base) % cd mecab-ipadic-neologd/
(base) mecab-ipadic-neologd % ./bin/install-mecab-ipadic-neologd -a

# 以下のコマンドでディレクトリのパスを確認
(base) mecab-ipadic-neologd % echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
/usr/local/lib/mecab/dic/mecab-ipadic-neologd

Jupyter Notebookで確認

「Jupyter Notebook」を使い、「NEologd」を使った形態素解析の動作を確認します。
ただ、「Jupyter Notebook」で「import MeCab」を実行すると

ModuleNotFoundError: No module named 'MeCab'

というエラーが出ました。
ネットで調べたところ、「Jupyter Notebook」上で!「pip install mecab-python3」(MeCabラッパーのインストール)を実行した方がよいようです(上述の通りすでにMeCabは入っています。その上でラッパーが必要なのか、ラッパーだけで十分なのかは調べられませんでした)。

# MeCabラッパーをインストール
!pip install mecab-python3

まず「NEologd」を使わず標準辞書を使った場合です。
結果は改行が「\n」と表示されわかりにくいですが、「宿儺」が「宿」と「儺」別れるなど、1つの品詞として認識されてないことがわかります。

# MeCab & 標準辞書
import MeCab
mecab = MeCab.Tagger()
mecab.parse("両面宿儺と虎杖悠仁")

'両面\t名詞,一般,*,*,*,*,両面,リョウメン,リョーメン\n宿\t名詞,一般,*,*,*,*,宿,ヤド,ヤド\n儺\t名詞,一般,*,*,*,*,*\nと\t助詞,並立助詞,*,*,*,*,と,ト,ト\n虎杖\t名詞,一般,*,*,*,*,虎杖,イタドリ,イタドリ\n悠\t名詞,固有名詞,人名,名,*,*,悠,ユウ,ユー\n仁\t名詞,固有名詞,人名,名,*,*,仁,ヒトシ,ヒトシ\nEOS\n'

次に「NEologd」を使います。
「両面宿儺」と「虎杖悠仁」をそれぞれ固有名詞として認識しています。
「R言語」で「NEologd」を使った場合も、同様の結果を得られたので、「NEologd」が正常に動いていることを確認できました。

# MeCab & NEologd
import MeCab
tagger = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
tagger.parse("両面宿儺と虎杖悠仁")

'両面宿儺\t名詞,固有名詞,人名,一般,*,*,両面宿儺,リョウメンスクナ,リョーメンスクナ\nと\t助詞,並立助詞,*,*,*,*,と,ト,ト\n虎杖悠仁\t名詞,固有名詞,人名,一般,*,*,虎杖悠仁,イタドリユウジ,イタドリユージ\nEOS\n'

fastTextをインストール

「base」環境の下準備の最後に、Facebook(現Meta Platforms)が公開している自然言語処理ライブラリ「fastText」をインストールします。
文章を「MeCab」で形態素解析し、そのデータを元に「fastText」を使って分類できる環境を整えるのが目的です。

# fastTextをインストール
(mini_conda) % conda deactivate
% conda activate base                         
(base) % git clone https://github.com/facebookresearch/fastText.git
(base) % cd fastText
(base) % fastText % pip3 install .

Processing /Users/hiro_ogawa/fastText
  Preparing metadata (setup.py) ... done
Collecting pybind11>=2.2
  Using cached pybind11-2.10.1-py3-none-any.whl (216 kB)
Requirement already satisfied: setuptools>=0.7.0 in /opt/anaconda3/lib/python3.9/site-packages (from fasttext==0.9.2) (63.4.1)
Requirement already satisfied: numpy in /opt/anaconda3/lib/python3.9/site-packages (from fasttext==0.9.2) (1.21.5)
Building wheels for collected packages: fasttext
  Building wheel for fasttext (setup.py) ... done
  Created wheel for fasttext: filename=fasttext-0.9.2-cp39-cp39-macosx_10_16_x86_64.whl size=303573 sha256=bcaa64c6a7bd3e17c82712131437f3bffaa768bbd5618cc04c8cb591c5c97d34
  Stored in directory: /private/var/folders/b2/7zhxp26s60s3875vcfz_qyw00000gn/T/pip-ephem-wheel-cache-1f_zavek/wheels/d1/54/4d/6bc2dd1d6cead1483401c5d78ffad509e761ae5eb9b8bfd52c
Successfully built fasttext
Installing collected packages: pybind11, fasttext
Installing collected packages: pybind11, fasttext
Successfully installed fasttext-0.9.2 pybind11-2.10.1

「import fasttext」を実行して、「fastText」が正常に入ったか確認します。
エラーメッセージが出ず「>>> 」が表示されればOKとします。

(base) fastText % python
Python 3.9.13 (main, Aug 25 2022, 18:29:29) 
[Clang 12.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import fasttext
>>> 

Miniconda & TensorFlow 環境準備編

MiniとTFを再インストール

今回、最初に「Miniconda」(Mini)を削除する際、「TensorFlow」(TF)もアンインストールしています。
「Miniconda」と「TensorFlow」を再インストールしたので、その手順もメモとして残しておきます。
まず、仮想環境を分けたいので、「conda create」コマンドで「mini_conda」という名称の管渠を用意します。

# conda createで仮想環境作成
% conda create -n mini_conda

仮想環境の一覧を確認すると、MeCabのインストールに利用した「base」環境と、今回作った「mini_conda」環境を確認できます。

% conda env list
# conda environments:
#
base                     /opt/anaconda3
mini_conda               /opt/anaconda3/envs/mini_conda

「mini_conda」環境に「Miniconda」をインストールします。
「Miniconda」のインストーラは「conda」のサイトからダウンロードしておきます。

# 今回構築したmini_conda環境をアクティブ
% conda activate mini_conda

# ファイルのパーミッションを変更
(mini_conda) % chmod +x ~/Downloads/Miniconda3-py39_4.12.0-MacOSX-arm64.sh

# Mnicondaのインストール
(mini_conda) % sh ~/Downloads/Miniconda3-py39_4.12.0-MacOSX-arm64.sh

「TensorFlow」をインストールします。

# TensorFlowをインストール
(mini_conda) % conda install -c apple tensorflow-deps==2.8.0
(mini_conda) % python -m pip install tensorflow-macos==2.8.0
(mini_conda) % python -m pip install tensorflow-metal

ところが、「mport tensorflow」を実行すると、以前は出なかったエラーが出ました。

(mini_conda) hiro_ogawa@hogawanoMacBook-Pro ~ % python
Python 3.9.6 (default, Sep 26 2022, 11:37:49) 
[Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
Traceback (most recent call last):
 (略)
1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

protobuf package?

「protobuf」パッケージを3.20.xにダウングレード、というメッセージです。
Protocol Buffers(プロトコルバッファー)を扱うためのPythonライブラリのことだそうです。
(なぜここで引っかかったのかわかりませんでした)

# protobufをダウングレード
(mini_conda) % pip install -U protobuf~=3.20.0
Defaulting to user installation because normal site-packages is not writeable
Collecting protobuf~=3.20.0
  Downloading protobuf-3.20.3-py2.py3-none-any.whl (162 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.1/162.1 kB 5.0 MB/s eta 0:00:00
Installing collected packages: protobuf
  Attempting uninstall: protobuf
    Found existing installation: protobuf 4.21.11
    Uninstalling protobuf-4.21.11:
      Successfully uninstalled protobuf-4.21.11
Successfully installed protobuf-3.20.3

「3.20.3」を指定してインストールされたのは「3.20.3」でした。

続くエラー、TensorFlowのVerか?

それでもまだ「import tensorflow」を実行するとエラーが出ます。

>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/username/Library/Python/3.9/lib/python/site-packages/tensorflow/__init__.py", line 443, in <module>
    _ll.load_library(_plugin_dir)
  File "/Users/username/Library/Python/3.9/lib/python/site-packages/tensorflow/python/framework/load_library.py", line 151, in load_library
    py_tf.TF_LoadLibrary(lib)
tensorflow.python.framework.errors_impl.NotFoundError: dlopen(/Users/username/Library/Python/3.9/lib/python/site-packages/tensorflow-plugins/libmetal_plugin.dylib, 0x0006): symbol not found in flat namespace '__ZN3tsl8internal10LogMessage16VmoduleActivatedEPKci'

ふと、「TensorFlowのバージョンが違う?」と思い、

(mini_conda) % conda install -c apple tensorflow-deps
(mini_conda) % python -m pip install tensorflow-macos
(mini_conda) % python -m pip install tensorflow-metal

と実行しました。

Successfully installed gast-0.4.0 keras-2.11.0 packaging-22.0 protobuf-3.19.6 tensorboard-2.11.0 tensorflow-estimator-2.11.0 tensorflow-macos-2.11.0

と、「2.11.0」がインストールされました。
結果、「import tensorflow」実行してもエラーが出なくなりました。

(mini_conda) @hogawanoMacBook-Pro ~ % python
Python 3.9.6 (default, Sep 26 2022, 11:37:49) 
[Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>> 

以上で準備がひと段落です。
今後、ワードクラウドや文章分類などを試したと思います。

参考サイト

conda

Anaconda

MeCab

NEologd

https://nrblog.flier.jp/2020/08/30/mecabneologd%E3%81%A7%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90/

Miniconda

fastText

TensorFlow


この記事が気に入ったらサポートをしてみませんか?