Docsからrasa_coreサンプルを実行する
› python3 -m rasa_core.run -d models/dialogue -u models/nlu/default/current
ダイアログの各メッセージの後にこのエラー出力を取得します。
.../sklearn/...: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.
Numpyの問題ですが、修正されていますが、最新リリースでは公開されていません: https://github.com/scikit-learn/scikit-learn/issues/10449
以下は、一時的に警告を黙らせるためにnot workを持っています:
-W ignore
を追加していますpython3 -W ignore -m rasa_core.run -d models/dialogue -u models/nlu/default/current
warnings.simplefilter
python3
>>> warnings.simplefilter('ignore', DeprecationWarning)
>>> exit()
python3 -m rasa_core.run -d models/dialogue -u models/nlu/default/current
この警告は、 空の配列の真の値のチェック を廃止したnumpyが原因です。
この変更の理由は
配列は他の理由でFalseになる可能性があるため、空の配列がFalseであるという事実を利用することは不可能です。
次の例を確認してください。
>>> import numpy as np
>>> bool(np.array([]))
False
>>> # but this is not a good way to test for emptiness, because...
>>> bool(np.array([0]))
False
Scikit-learnライブラリの issue 10449 に従って、これはライブラリのmasterブランチで修正されました。しかし、それは2018年8月頃に利用可能になるので、可能な代替案の1つは、この問題のないnumpyライブラリのより低いバージョン、つまり1.13.3を使用することです。これは、デフォルトでscikit-libraryがnumpyの最新バージョンを参照するためです(これは1.14.2ですこの回答を書いた時間)
Sudo pip install numpy==1.13.3
または次のようにpip3で
Sudo pip3 install numpy==1.13.3
非推奨の警告を出しているライブラリの最新バージョン(この場合はnumpy)を使用し、非推奨の警告を黙らせたい場合、 filterwarnings pythonのメソッドを使用して- 警告 モジュール
以下の例に従うと、上記の質問で言及された非推奨の警告が生成されます。
from sklearn import preprocessing
if __name__ == '__main__':
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.transform([1, 1, 2, 6])
le.inverse_transform([0, 0, 1, 2])
生産する
/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/label.py:151:DeprecationWarning:空の配列の真理値はあいまいです。 Falseを返しますが、将来的にはエラーになります。つかいます
array.size > 0
配列が空でないことを確認します。
そして、それを処理するために、DeprecationWarningにフィルター警告を追加します
from sklearn import preprocessing
import warnings
if __name__ == '__main__':
warnings.filterwarnings(action='ignore', category=DeprecationWarning)
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.transform([1, 1, 2, 6])
le.inverse_transform([0, 0, 1, 2])
警告を与えるモジュールが複数あり、警告を選択的にサイレントにしたい場合は、module属性を使用します。例えばscikit学習モジュールからの非推奨のサイレント警告へ
warnings.filterwarnings(module='sklearn*', action='ignore', category=DeprecationWarning)