WSL ( Windows Subsystem for Linux )で Linux 開発環境作る

まずはWSLとディストリビューションをインストール
https://www.atmarkit.co.jp/ait/articles/1903/18/news031.html

WSLのインストール(1)
[コントロールパネル]-[プログラムと機能]-[Windowsの機能]ダイアログを開き、[Windowsの機能の有効化または無効化]をクリックしてダイアログを開き、そこで「Windows Subsystem for Linux」にチェックを入れる。再起動が要求されるので、再起動を実行すること。

WSLのインストール(2)
Microsoft Storeを起動し、検索ボックスに「WSL」と入力して、検索結果から「Ubuntu」を選択する。

WSLのインストール(3)
Ubuntuのページで[入手]ボタンをクリックして、インストールを行う。

複数のデバイスで使用する : 必要ありません
Ubuntuインストールが完了しました
「起動」

WSLのインストール(4)
Ubuntuを起動すると、コマンドプロンプトのようなウィンドウが表示される。インストールが行われるため、数分間待つ(PCの性能によっては十数分かかる)。

WSLのインストール(5)
ユーザー名とパスワードを入力する。Windows 10のユーザー名とパスワードと一致させる必要はない。


chmod

sudo vi /etc/wsl.conf ← ファイルは存在していない
[automount]
options = "metadata"
Ubuntu 再起動 ← PC再起動で


日本語化

https://www.atmarkit.co.jp/ait/articles/1904/05/news027.html
sudo apt update
sudo apt -y install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8
sudo apt -y install manpages-ja manpages-ja-dev ← 日本語マニュアル8GBなので入れないのもあり


sshd

https://qiita.com/ezmscrap/items/30eaf9531e240c992cf1
sudo vi /etc/ssh/sshd_config
  PasswordAuthentication yes
sudo ssh-keygen -A
sudo /etc/init.d/ssh start
sudo systemctl enable ssh ← 自動起動

※ ) TeraTerm からログインする場合は localhost ではなく IPアドレスを指定すること


Anaconda

mkdir Download
cd Download
wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
bash Anaconda3-2019.07-Linux-x86_64.sh
yes
Enter

bert-japanese 試してみた

github.com

事前学習タイプのBERTを日本語向けにチューンした bert-japanese を試してみた
上のページのサンプルを実際に Google Colaboratory で実行してみた


結論
Bag of Words + ロジスティック回帰と比較して
良いところ
平均で precision +2ポイント、recall +1ポイント、f1-score +2ポイント
分類性能が上がった

困ったところ
計算リソースが非常に多く必要になる。CPUだと全然ムリ。TPU等が必須だった
当たり前の話だけど、TPUで数分の処理がCPUだと何時間もかかる

その他
bert-japanese ではクラス毎の分類性能差が少ない


f:id:knaka20blue:20190814113530j:plain
precision


f:id:knaka20blue:20190814113551j:plain
recall


f:id:knaka20blue:20190814113606j:plain
f1-score

ライブドアコーパスの記事分類を トークナイザーを変更しながらやってみる その2 SentencePieceでもやってみた

github.com


github.com


ライブドアコーパスの記事分類性能がトークナイザーの種類によって変わるのか試す実験の続き。今回は SentencePiece でやってみた
SentencePiece はディープラーニングでの利用を前提に作られているのだけれど、ロジスティック回帰等の伝統的な機械学習でも利用することはできるので、どんな感じになるのか試してみた


今回から、bert-japanese とも比較できるように、教師データの作り方はbert-japanese と全く同じにした。ただしディープラーニングではないので評価データ (dev.tsv)は使わないないため 訓練データ(train.tsv) + 評価データ(dev.tsv )を訓練データとした。test.tsvはともに検証データ
これにより前回より精度が少し良くなっているがロジック部分は全く変わっていない。Bag of Words+ ロジスティック回帰


結論 : SentencePiece をトークナイザーとして使うと MeCab、GiNZA、SudachiIに比べると若干分類性が落ちる。しかし、PADICや NEologd等の事前に準備された辞書は全く使わず、ライブドアコーパスの教師データだけで学習して分類していることを考慮すると、想像以上の性能が出ると感じた。ネットニュースやSNSネットスラングが多用される文章ではNEologd等を使った方が良い性能が出るだろうが、お堅い専門用語が頻出するような文書ドメインではもっと差がなくなる、あるいは逆転するという可能性もあるかもしれない


f:id:knaka20blue:20190814103159j:plain
precision
f:id:knaka20blue:20190813145312j:plain
recall
f:id:knaka20blue:20190813145330j:plain
f1-score

ライブドアコーパスの記事分類を トークナイザー を変更しながらやってみた

ライブドアコーパスの記事分類で、トークナイザー をGiNZA、Sudachi、MeCab+NEologdで変更しながら分類精度の差を調べてみた
結論 : 多少の凸凹はあるものの有意な差はなさそう


分類方法は Bag of Words + ロジスティック回帰
GiNZA、Sudachi、NEologdのバージョンは 2019/7/23 時点の最新版を使用
Sudachiは差が出たら面白いかなと思ってmode C でやってみた。結果、差が出なかったけど

f:id:knaka20blue:20190724150251p:plain
precision


f:id:knaka20blue:20190724150325p:plain
recall


f:id:knaka20blue:20190724150348p:plain
f1-score

Sudachi インストール メモ

ohke.hateblo.jp


上記ページを参考に Sudachi をインストール

$ cd /home/ec2-user/work ← このディレクトリのsrc以下にインストールされる
$ pip install -e git+git://github.com/WorksApplications/SudachiPy@develop#egg=SudachiPy
$ pip list | grep sudachipy
SudachiPy                          0.3.6    /home/ec2-user/work/src/sudachipy

$ wget https://object-storage.tyo2.conoha.io/v1/nc_2520839e1f9641b08211a5c85243124a/sudachi/sudachi-dictionary-20190718-core.zip
$ unzip sudachi-dictionary-20190718-core.zip
$ mv sudachi-dictionary-20190718/system_core.dic /home/ec2-user/work/src/sudachipy/sudachipy/resources/system.dic
$ ls /home/ec2-user/work/src/sudachipy/resources/

$ mv sudachi-dictionary-20190718/system_core.dic /home/ec2-user/work/src/sudachipy/sudachipy/resources/system.dic
$ ls  /home/ec2-user/work/src/sudachipy/sudachipy/resources/
char.def  rewrite.def  sudachi.json  system.dic  unk.def

$ sudachipy
左翼ポピュリズム
左翼    名詞,普通名詞,一般,*,*,*        左翼
ポピュリズム    名詞,普通名詞,一般,*,*,*        ポピュリスム
EOS

新語の登録は NEologd とどのぐらいタイムラグがあるのか
MeCab では7秒の処理が 15分。Java版はもっとはやいのだろう

GinZA インストール メモ

AWS の EC2 の場合はインスタンスタイプを medium (4GB) 以上で実行する
こちらも NEologd 同様 small (2GB) だとメモリ不足でエラーになった

$ pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
$ ginza
mode is C
disabling sentence separator
左派ポピュリズム
# text = 左派ポピュリズム
1       左派    左派    NOUN    名詞-普通名詞-一般      _       2       compound        _       BunsetuBILabel=B|BunsetuPositionType=CONT|SpaceAfter=No|NP_B
2       ポピュリズム    ポピュリスム    NOUN    名詞-普通名詞-一般      _       0       root    _       BunsetuBILabel=I|BunsetuPositionType=ROOT|SpaceAfter=No|NP_I


まだ 「左派ポピュリズム」は登録されてないみたい。NEologd にはあったけど
あと、Pythonだから仕方がないのかもしれないけど、処理が遅い...
MeCab では 7秒で 終わった処理に23分かかった。大量の文章を処理するときには厳しいかな

NEologd アップデート メモ

AWS の EC2 の場合はインスタンスタイプを medium (4GB) 以上で実行する
small (2GB) だとメモリ不足でエラーになった

sudo su -
cd /usr/local/src/
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n ←実行中に新語が表示される

mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
左派ポピュリズム
左派ポピュリズム        名詞,固有名詞,一般,*,*,*,左派ポピュリズム,サハポピュリズム,サハポピュリズム
EOS