🐡

gensim3.8をpython3.9以降で動かす2024年夏

2024/08/20に公開

1. この記事は

gensim3.8(古い)をpython3.9以降(新しい)で動かす方法について記載しています。
インストール直後は動かそうとするとエラーが出ます。それら1つずつ調べると出てきますが、まとまっている情報を見つけられなかったので記事にしました。(スクラップでも良いのかもしれませんが)

なお、動機は次の記事にある楽しそうな内容を試してみたかったからです。
https://zenn.dev/robes/articles/c251dd89a0e47f

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
https://stackoverflow.com/questions/78279136/importerror-cannot-import-name-triu-from-scipy-linalg-when-importing-gens

Attrdictをimportする時に、 ImportError: cannot import name 'Mapping' from 'collections'
https://qiita.com/doreen43/items/eb62a9c8674b7a88d1ea

ImportError: cannot import name '...' from 'collections' using Python 3.10
https://stackoverflow.com/questions/69381312/importerror-cannot-import-name-from-collections-using-python-3-10

ImportError: cannot import name 'Iterable' from 'collections' in Python
https://stackoverflow.com/questions/72032032/importerror-cannot-import-name-iterable-from-collections-in-python

Discussion