gensim3.8をpython3.9以降で動かす2024年夏
1. この記事は
gensim3.8(古い)をpython3.9以降(新しい)で動かす方法について記載しています。
インストール直後は動かそうとするとエラーが出ます。それら1つずつ調べると出てきますが、まとまっている情報を見つけられなかったので記事にしました。(スクラップでも良いのかもしれませんが)
なお、動機は次の記事にある楽しそうな内容を試してみたかったからです。
2. インストールと編集作業
イレギュラーな操作をするので仮想環境を作った方が良いです。
仮想環境の例:
python3 -m venv gensim38
source ./gensim38/bin/acitvate
インストールは次のように行います。(一旦requirements.txtを作る方法でも良いと思います)
python3 -m pip install gensim==3.8 scipy==1.10.1
ポイントは、scipyも古いものを指定して入れる点です。
そして、インストールしたgensimに手を加えます。一部分をcollections.abc
のように.abc
を追記します。
(パスの./gensim38/lib/python3.10
はご自身の環境で読み替えてください。)
ファイル:./gensim38/lib/python3.10/site-packages/gensim/corpora/dictionary.py
旧
from collections import Mapping, defaultdict
新
from collections.abc import Mapping
from collections import defaultdict
ファイル:./gensim38/lib/python3.10/site-packages/gensim/models/doc2vec.py
旧
from collections import namedtuple, defaultdict, Iterable
新
from collections import namedtuple, defaultdict
from collections.abc import Iterable
ファイル:./gensim38/lib/python3.10/site-packages/gensim/models/fasttext.py
旧
from collections import Iterable
新
from collections.abc import Iterable
3. 確認方法
pythonにて
import gensim
を行ってエラーが出なければ成功です。
エラーが出た場合は、1つずつ調べていくか、諦めてpython3.8の環境にgensim3.8を入れるとか、
学習済みデータの方を諦めてhuggingfaceなどから持ってきて最新のgensimで試す、という方が早いかもしれません。
なお、他の学習済みデータで試してもそれはそれで面白い結果が出ました。
A. 参考
"ImportError: cannot import name 'triu' from 'scipy.linalg'" when importing Gensim
Attrdictをimportする時に、 ImportError: cannot import name 'Mapping' from 'collections'
ImportError: cannot import name '...' from 'collections' using Python 3.10
ImportError: cannot import name 'Iterable' from 'collections' in Python
Discussion