今までの苦労は何だったんだろう　GoogleColaboratory版_特許公報類否判断モデルの作成

#1.背景
以前、ubuntu16.04(ローカル環境)で利用したWord2Vecのモデル作成プログラムを、Google Colaboratoryで動かすにあたり、どのような変更を加えたかについてになります。

詳しい感想は、「５．感想」の部分に書きましたが、正直、ここまで簡単に利用できるとは想像もしていませんでした。
ぜひ、最後まで読んでみてください。

なお、ubuntu16.04(ローカル環境)で動かしていた時の記事は、次をご参照ください。
>「特許公報が似ているかどうかDoc2Vecで判断」
https://qiita.com/opankopan/items/ba2c651b8ead348b9386


#2.ubuntu16.04用からGoogleColaboratory用への変更内容
まず簡単に、どのような変更を行ったのかについて、まとめます。

- Colaboratory へのMecabインストール部分の追加。
- ubuntu16.04(ローカル)からCorabolatoryに変更したため、読み込むファイルのパス指定の変更。
- （必要なさそうですが一応やりました）gensimのインストール


#3. ソースコード
ほぼ、以前の記事と同じですが、実際にColaboratory用に書き換えたソースコードを張り付けておきます。

```py3
# MeCab関係インストール
!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.7

import MeCab
from gensim.models.doc2vec import Doc2Vec
from gensim.models.doc2vec import TaggedDocument
from collections import OrderedDict

##どのモジュールがインストールされているのかの確認コマンド
#! pip freeze
###################################

####この部分、必要ないことが判明したので、削除
## gensim関係インストール
## 一応やったけど、いらないのかも
#!pip install gensim
########################################


# （変更1）マウントGoogle Drive
from google.colab import drive
drive.mount('/content/gdrive')

#　(変更2) documents.txtの読込先の変更
#　Colab Notebooksディレクトリの直下に、documents.txtを配置しています。
text = open('/content/gdrive/My Drive/Colab Notebooks/documents.txt','r').read()
documents = text.split("|")

def words(text):
    """
        文章から単語を抽出
    """
    out_words = []
    tagger = MeCab.Tagger('-Ochasen')
    tagger.parse('')
    node = tagger.parseToNode(text)

    while node:
        word_type = node.feature.split(",")[0]
        if word_type in ["名詞"]:
            out_words.append(node.surface)
        node = node.next
    return out_words

# 学習データとなる各文書
training_docs = []
for i, document in enumerate(documents):
    training_docs.append(TaggedDocument(words=words(document), tags=['doc' + str(i + 1)]))


model = Doc2Vec(documents=training_docs, min_count=1, dm=0)
tags = OrderedDict()
tag_list = (('doc1', "本願"), ('doc2', "刊行物１"), ('doc3', "刊行物２"), ('doc4', "刊行物３"), ('doc5', "ランダム１"), ('doc6', "ランダム２"))
dic = OrderedDict(tag_list)
tags.update(dic)

for k, v in tags.items():
    print("[" + v + "]")
    for items in model.docvecs.most_similar(k):
        print("\t" + tags[items[0]] + " : "+ str(items[1]))

```

なお、以前は次のコマンドも実行していましたが、必要ないことが判明しました。
```
```

#4. 出力結果
実行環境をローカルubuntuからColaboratoryに変更しただけなので、結果もそんなに変わらないと思いますが、一応、出力結果も張り付けておきます。

```
[本願]
	刊行物２ : 0.8341944813728333
	刊行物１ : 0.7286394834518433
	刊行物３ : 0.7081090807914734
	ランダム２ : 0.5659282207489014
	ランダム１ : 0.4927440881729126
[刊行物１]
	本願 : 0.7286396026611328
	刊行物２ : 0.45814061164855957
	刊行物３ : 0.43797993659973145
	ランダム１ : 0.35715746879577637
	ランダム２ : 0.27068209648132324
[刊行物２]
	本願 : 0.834194540977478
	刊行物１ : 0.4581405520439148
	刊行物３ : 0.3990183472633362
	ランダム２ : 0.24700888991355896
	ランダム１ : 0.17391134798526764
[刊行物３]
	本願 : 0.7081091403961182
	刊行物１ : 0.43797990679740906
	ランダム２ : 0.41430044174194336
	刊行物２ : 0.39901837706565857
	ランダム１ : 0.18012797832489014
[ランダム１]
	ランダム２ : 0.7375738024711609
	本願 : 0.4927440583705902
	刊行物１ : 0.35715746879577637
	刊行物３ : 0.18012797832489014
	刊行物２ : 0.17391136288642883
[ランダム２]
	ランダム１ : 0.7375738620758057
	本願 : 0.5659283399581909
	刊行物３ : 0.41430044174194336
	刊行物１ : 0.27068212628364563
	刊行物２ : 0.24700891971588135
```
#5. 感想
移植の感想ではなく、Colaboratoryを使ってみての感想になりますが、次のように感じました。

- いままでなんだったんだろう。
- 環境構築に使ってきた無駄な時間を返してくれ。
- 検証してないけど、文字コードについても意識しないのでは良いのではないかな？
- Google、ありがとう。これで、環境構築でなく、言語処理の部分に時間を割くことができそう。

Google Colaboratory、とてもおすすめです！

なお、理解の間違い、誤解を生むような表現がありましたら、教えてください。

以上