wikipediaのデータでdoc2vec(UnicodeDecodeError)

doc2vecを使ってとあるコーパスのドキュメント類似度を取得してみましたが、思ったような結果が得られませんでした。

そこで、doc2vecの記事が同じように検証できるのか調べてみました。 まずは、これです。

doc2vecでWikipediaを学習する - TadaoYamaokaの日記

手順「頻度の少ない単語を除外する」でUnicodeDecodeErrorが発生しました。

Mecab分かち書きしたwikipediaのデータをpythonで読み込む時に、UnicodeDecodeErrorが発生しました。

$ python ../../../../extract_low_freq_terms.py wiki_wakati.error wiki_lf_terms.1
Traceback (most recent call last):
  File "../../../../extract_low_freq_terms.py", line 12, in <module>
    for line in open(args.input, "r", encoding="utf-8"):
  File "/Users/unokun/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 5844: invalid continuation byte

python、UnicodeDecodeErrorで検索しましたが、それらしい記事は見つかりませんでした。

原因は、mecabによる分かち書きで、バッファサイズが足らなかったことが原因でした。バッファサイズを多くとるとそれ以降の処理を問題なく実行することができました。

mecabはバッファサイズを越えた時点で処理をするため、1文字分のデータを出力していないのだと思います。

変更前
$ mecab -O wakati wiki -o wiki_wakati.error
input-buffer overflow. The line is split. use -b #SIZE option.

変更後
$ mecab -b 100000 -O wakati wiki -o wiki_wakati.error

同じくwikipediaのデータを使っている

word2vecで遊ぶ – Eyepod touch

が参考になりました。

リンク