さて、fasttext の単語をベクトル表現を触っていたのだが、エラーがでた。
解決したので書いてみる。
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x82 in position 0: invalid start byte
fasttext の使用法を検索していると、バイナリファイルは使うなとの記載をよく見かけた。
問題があるらしい。
ベクトルのテキストファイルを使えとの事だった。
自分の開発環境は、Windows、python、PyCharmの利用だ。
コマンドラインで作れば、バイナリとベクトルファイルが吐き出されるらしいが。
自分の環境にはないんだが……
やり方を知らないだけなのかな?
独学だしね。
素直に分かち書きをして、pythonでベクトル表現を作成した。
fasttext.train_unsupervised(‘All.txt’, model=’skipgram’,thread=8,dim=300)
こんな感じ。
model.save_model(“All.bin”)
で保存した。
vec = model.get_word_vector('未練') でベクトルは取れるのだが。 model.get_nearest_neighbors('未練') で、 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 0: invalid start byte が発生。
うーん。
検索しても解決方法が見つからない。
model.words
でベクトルを取れば?
みたいな事が書いてあったが、同じエラーが出る。
自分は、英語はさっぱり読めないんだがなぁ。
Unicode の DecodeError…… で……?
‘utf-8’に変換できなかった……と?
エラー内容が書いてあるのだろうか?
うーん。
この状況、覚えがあるな。
昔、web関係の仕事をしていた時だ。
文字コードで苦労した覚えがある。
はっ!
これは、もう、解決じゃないか!
はい!
作り直し。
model.get_nearest_neighbors(‘未練’)がきちんと動きました。
原因は、一番初めの食わせたファイル。
の文字コード。
でした。
iso-2022-jp 日本語(シフトJIS)
utf-8じゃない。
シフトJIS ー> utf-8 へ
UTF は、8、16、32とありますが。
utf-8へと変換しました。
文字コードを正しく直して、fasttextに入力すれば問題なく使えます。
文字コードの問題に気付かない人は、バイナリを使うな!
問題があるよ!
と書いているのだろう。
fasttextは、utf-8でないと正しく動作しないようです。
文字コードにはお気を付けください。
まぁ、よくわからないけど。
責任も持ちませんが、何か?