ターミナル上でcurlのパラメータとして制御コードを入力しようとして、どう入力すればいいか忘れたのでメモ。
Macでは「Ctrl+v, Ctrl+a」で入力可能。
Ctrl+a の部分は好きな制御文字をどうぞ。
一覧
https://ja.wikipedia.org/wiki/制御文字
2018年8月3日金曜日
2018年7月25日水曜日
Daily UI #001
UIを勉強したいと思い立ち、友人の勧めで、Daily UIを始めてみる。
続くかわからないけど。
続くかわからないけど。
Sign Up
最初の課題は Sign Up。
どんなサービスかは自分で決めて良いらしい。
今回は自分の研究課題でもある「訳詞サポートシステム」をテーマとする。
システム要件
訳詞サポートシステムの要件を以下に示す。
- 研究目的なので利用料金は無料
- ユーザの実験への協力や簡単なアンケートのために、メールを配信することがある
- ユーザの種別にどのような単語や音楽を好むかを知る必要がある
- 性別
- 年齢
- 音楽歴
- 英語の習熟度
アクティビティシナリオ
こちらを参考にアクティビティシナリオを書いてみる。
対象ペルソナ
自分のPCを持っており、譜面作成ソフト等で楽譜が作れる20代の男女
ペルソナの目標
英語歌詞の楽譜を日本語に翻訳するツールを利用するために、Webサービスに登録する
シーン
自分のお気に入りの英語の譜面を譜面作成ソフトで作成してみたので、これを日本語に翻訳できないかと思い立つ。そこで、訳詞をサポートしてくれるWebサービスに登録してみることにした。
アクティビティシナリオ
ユーザはPC上で英語の譜面を譜面作成ソフトで作成してみた。
これを、日本語の歌詞に翻訳して公開することはできないかと思ったので、訳詞を補助してくれるようなツールがあるかWebで検索してみた。
調べてみたところ、訳詞サポートシステムというWebサービスがあったので、登録してみることにした。
ユーザは、一般的なSNSは利用しているが、専門的なツールの登録をしたことはあまりない。
知名度の低いサービスに登録する際に、利用料金に制限があるのかもわからないし、メールアドレスを抜き取られて迷惑メールが来るようにならないかと不安もある。
けれども、訳詞サポートシステムにアクセスしてみたところ、特に致命的な情報の入力もなく、簡単にシステムが使えるようになった。
未知のサービスに対する不安は解消され、安心して訳詞サポートシステムを使えるようになった。
タスク
- 英語の譜面を作成する
- 訳詞サポートシステムについて検索する
- 訳詞サポートシステムにアクセスする
- サービスに登録する
- システムが利用できるようになる
ワイヤーフレーム
上記のシナリオから、以下の内容が担保されるべきだと考えた。
- 登録する内容は少なめにする
- 情報を多く入力させると、ユーザを不安にさせる、離脱が増える
- 利用料金について明確にする
- メルマガの配信等について明記する
- ユーザの属性がわかれば匿名でも構わない
結果、以下のようなUIになった。
(左)PC、(右)スマホ
楽譜情報が無い場合、性別、年齢、音楽歴、英語の習熟度、全て必要の無いデータである。
そのため、sign upの画面では排除する。
そうすることで、メールアドレス登録のハードルを下げる。
アドレスの登録が終われば、パスワードがメールで送られてくる。
このとき、多くのサービスではパスワードの変更をメールに記載されているURLを踏んだ後に行う。
このときに、改めて性別等について入力してもらうこととした。
メルマガについては、本当は全員に送りたいが、アンケート等のデータについては、協力的な人の回答でないと困る場合がある。
なので、任意での登録とした。
2018年7月6日金曜日
LSTMで文章生成
私が愛してやまない Les Miserables のデータを元に文章生成してみた。
ファンティーヌが病院に入った場面から、サンプリス修道女がバルジャンを逃がすためにジャヴェールに嘘をつく場面の文章を利用。
mecabを使って分かち書きをし、ユニット層8の単語単位でepoch 1500で学習させた。
NLPが専門の友人に聞いたところ、ひらがな文字単位で学習させるのは一般的ではないとのこと。
webで検索すると、文字単位ひらがなで学習させてる記事を見かけるが、自然言語界隈ではやらないらしい。
やるとしたら、漢字まじりの文字単位とのこと。
ファンティーヌが病院に入った場面から、サンプリス修道女がバルジャンを逃がすためにジャヴェールに嘘をつく場面の文章を利用。
mecabを使って分かち書きをし、ユニット層8の単語単位でepoch 1500で学習させた。
NLPが専門の友人に聞いたところ、ひらがな文字単位で学習させるのは一般的ではないとのこと。
webで検索すると、文字単位ひらがなで学習させてる記事を見かけるが、自然言語界隈ではやらないらしい。
やるとしたら、漢字まじりの文字単位とのこと。
結果
単語ごとに都度改行してるけど。
これらはデータの中にはない文章だった。
$ python lstm.py
既に
既に
シャンマティユー
の
処刑
を
持っ
て
い
た
$ python lstm.py
だって
だって
少し
も
変わら
ない
。
キャラクターの名前を先頭に与えてみる
$ python lstm.py
ジャヴェル
は
ジャヴェル
は
答え
なかっ
た
の
です
。
$ python lstm.py
ジャン・ヴァルジャン
は
ジャン・ヴァルジャン
は
はっきり
見
た
の
で
ある
$ python lstm.py
ファンティーヌ
は
ファンティーヌ
は
誓って
申し
候
。
$ python lstm.py
コゼット
が
コゼット
が
しっかり
し
て
い
て
い
た
。
楽しいいい
いい結果のみ抜粋してるので、もちろん、文章になってないような結果もある。
2018年4月25日水曜日
OpenNMTで英日翻訳できるようにする 2
この前のデータではうまくいかなかったので、他のデータで再挑戦。
コーパス:JESC 配布のもの
320万文あるし、データ量としては十二分のはず…。
preprocess.pyの実行で、train.enが大きいためメモリが足りないと怒られるときがある。
-max_shard_size 1000000
を実行ファイル名の後ろにつける。
こんな感じ。
python preprocess.py -max_shard_size 1000000 -train_src data/train.en -train_tgt data/train.ja -valid_src data/val.en -valid_tgt data/val.ja -save_data data/en_ja
実行すると、dataフォルダの中に大量のtrain.ptが作成される。
コーパス:JESC 配布のもの
320万文あるし、データ量としては十二分のはず…。
preprocess.py
分割データを、とりあえずそのまま学習させる。preprocess.pyの実行で、train.enが大きいためメモリが足りないと怒られるときがある。
-max_shard_size 1000000
を実行ファイル名の後ろにつける。
こんな感じ。
python preprocess.py -max_shard_size 1000000 -train_src data/train.en -train_tgt data/train.ja -valid_src data/val.en -valid_tgt data/val.ja -save_data data/en_ja
実行すると、dataフォルダの中に大量のtrain.ptが作成される。
train.py
うまくいくよう祈りながら実行
nohup python3 -u train.py -data data/en_ja -save_model en_ja-model > log.txt &
translate.py
学習が終わったら、動かしてみる。
前回accが29とかだったが、今回は40まで上がっている!!!
いい感じ
SENT 755: ('▁someone', '▁attacked', '▁me', '!')
PRED 755: ▁誰かが 私を 襲 った !
PRED SCORE: -9.0828
SENT 727: ('▁do', '▁it', '▁yourself', '▁from', '▁today', '▁on', '.')
PRED 727: ▁今日 から 自分で やれ
PRED SCORE: -6.6255
ちょっと惜しい
SENT 704: ('▁i', '▁can', '▁raise', '▁the', '▁child', '▁by', '▁myself', '▁without', '▁a', '▁male', '▁figure', '.')
PRED 704: ▁男 が いない と ▁一人で 育て られる
PRED SCORE: -8.9010
SENT 1374: ('▁because', '▁she', '▁can', "'", 't', '▁believe', '▁i', '▁can', "'", 't', '▁eat', '▁this', '▁pen', 'gu', 'in', '.')
PRED 1374: ▁この ペン ギ ンは 食べ られない から
PRED SCORE: -8.6270
ダメダメ
SENT 789: ('▁worst', '▁of', '▁all', ',', '▁he', '▁doesn', "'", 't', '▁have', '▁hair', '...')
PRED 789: ▁ヘ ヘ ヘ ヘ ...。
PRED SCORE: -10.1595
SENT 1569: ('▁hey', ',', '▁l', 'ud', 'l', 'ow', '!', '▁grab', '▁a', '▁light', '▁cann', 'on', '▁and', '▁get', '▁out', '▁here', '▁now', '!')
PRED 1569: ▁ライ ト キャ ノ ン !
PRED SCORE: -9.9253
特にデータのトリミング的なことはせずに、そのまま突っ込んだけど、いい感じに訳せてそうな気がする。
おまけ
遊戯王かな?
SENT 1405: ('▁i', '▁won', "'", 't', '▁let', '▁you', '!', '▁i', '▁activate', '▁a', '▁magic', '▁card', '!')
PRED 1405: ▁マジ ック カード 発動 !
PRED SCORE: -8.2402
SENT 1478: ('▁his', '▁per', 'man', 'ent', '▁trap', ',', '▁dep', 'th', '▁am', 'ul', 'et', '...')
PRED 1478: ▁永 続 トラ ップ ▁ディ ス ・ ア ミュ レット
PRED SCORE: -6.4971
2018年3月13日火曜日
bibtexを使うと著者名が-----になる問題
なんか知らないけど、同じ著者名は-----にされてしまう。
これはバグではなく、仕様らしい。
こちらを参考にさせて頂き、修正したら無事に同名の著者でも表示できた。
http://d.hatena.ne.jp/naga_sawa/20140615/1402841930
IEEEtran.bst のファイルをいじればOK。
FUNCTION {default.is.dash.repeated.names} { #1 }
↓
FUNCTION {default.is.dash.repeated.names} { #0 }
8時間くらい無駄にした。
これはバグではなく、仕様らしい。
こちらを参考にさせて頂き、修正したら無事に同名の著者でも表示できた。
http://d.hatena.ne.jp/naga_sawa/20140615/1402841930
IEEEtran.bst のファイルをいじればOK。
FUNCTION {default.is.dash.repeated.names} { #1 }
↓
FUNCTION {default.is.dash.repeated.names} { #0 }
8時間くらい無駄にした。
2018年2月16日金曜日
AtomにおけるPythonのインデント
プログラムを書くのにインデントはスペース2つに設定しているのだが、AtomでPythonのコードを書いているときに反映されていなかった。
PreferencesからtabTypeはsoft、tabLengthは2に設定しているにもかかわらず、スペース4つでインデントされる。
シェルスクリプトや他の言語では問題ない。
解決策は Atom -> Config... を開いて、config.csonに
".python.source":
editor:
tabLength: 2
を追記。
"*"と同じ階層に書けば、pythonでもインデントが2になる。
PreferencesからtabTypeはsoft、tabLengthは2に設定しているにもかかわらず、スペース4つでインデントされる。
シェルスクリプトや他の言語では問題ない。
解決策は Atom -> Config... を開いて、config.csonに
".python.source":
editor:
tabLength: 2
を追記。
"*"と同じ階層に書けば、pythonでもインデントが2になる。
2017年9月16日土曜日
OpenNMTで英日翻訳できるようにする
OpenNMTをインストールして機械翻訳(英日)を使えるようにする
環境
- Python 3.5.4
- Linux
手順
$ git clone https://github.com/OpenNMT/OpenNMT-py.git
$ pip3 install -r requirements.txt
実行しようとすると、torchがないと怒られる…
実行しようとすると、torchがないと怒られる…
$ python translate.py -model demo-model_epochX_PPL.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose
Traceback (most recent call last):
File "translate.py", line 7, in <module>
import torch
ImportError: No module named torch
torchのインストール
pyTorchを見てみる
- http://pytorch.org
pytthon 3.6.*のときとかは、cp36とかに勝手に変更すると入る
$ sudo pip3 install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl
$ sudo pip3 install torchvision
プログラムの実行
以下のコマンドで実行できるが、これは英独の翻訳
$ python3 preprocess.py -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo
英日にしたいので、新しくディレクトリを作成し、その下に英語と日本語のパラレルコーパスを置いた。
行数は英独のものと同様にしたが、データ量としては少ないことに留意する。
*-train.txtが10000行、*-val.txtが3000行。
日本語のコーパスはmecabを用いて、単語をspace区切りに加工している。
モデルの学習
以下のコマンドでデフォルト設定で動く
$ python3 train.py -data data/demo -save_model demo-model
学習するのに時間がかかるので、nohupで動かすのが良い
$ nohup python3 -u train.py -data data/demo -save_model demo-model > log.txt &
ex. )
SENT 1: please, don't forget me.
PRED 1: 「 それ は どう し た ん です か ? 」
PRED SCORE: -16.1014
ひどさしかない。
gitにも小さいデータでやると恐ろしい結果になると書いてあるので、次は大きいコーパスで試してみる。
なんか見てる人が結構いるっぽいので続きの記事
こちらは大きいコーパスで試してみた
翻訳の実行
モデルのファイルは1番最後に出力されているのを指定した。
src-test.txtは自分で作っても良いかも
$ python3 translate.py -model demo-model_acc_26.58_ppl_194.39_e13.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose
ex. )
SENT 1: please, don't forget me.
PRED 1: 「 それ は どう し た ん です か ? 」
PRED SCORE: -16.1014
ひどさしかない。
gitにも小さいデータでやると恐ろしい結果になると書いてあるので、次は大きいコーパスで試してみる。
なんか見てる人が結構いるっぽいので続きの記事
こちらは大きいコーパスで試してみた
登録:
投稿 (Atom)

