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
Miniconda