地平線まで行ってくる。

記録あるいは忘備録。時には検討事項。

英辞郎はパソコンのお供

 相当昔に購入したダウンロード版の英辞郎

 実はまだ現役だ。ネットに繋がってなくとも、サクサクと辞書が引けるので英語の文献なんか読むときは便利なのだ。厳密にというより大体の意味がわかればいいものだし、そもそも専門用語は分かっているからだ。

 その英辞郎。もう十版にもなり、いつの間にかテキストデータ自体は付属してないけれども、パソコンのお供的にはまだまだ使える。

 もともとはNiftyで活動していた翻訳関係者によるものだったと記憶している。もう、そういう時代てもなくなっているのだろうか。Webサイトには編集協力者募集のページが無くなっている。

 今だとGitHubとかで作業するのだろうけれども。当時の逸話はどこかに掲載されているのだろうか。

 

英辞郎 第十版 辞書データVer.151[2018年1月18日版] (DVD-ROM2枚付)

英辞郎 第十版 辞書データVer.151[2018年1月18日版] (DVD-ROM2枚付)

 

 

www.eijiro.jp

Raspberry pi SDカードの容量が・・・

 SDカードの容量がダウンロードしてきたRaspbianのイメージよりも微妙に小さい。さっき購入してきたTOSHIBA製の32GB。当然焼けない。メンドイなぁ。

 そうだ、NOOBSがあるじゃないか。

www.raspberrypi.org

 というわけで、フォーマットしたSDカードにダウンロードしたNOOBSのZipファイルを展開してコピー。それをRapberry Piにセットしてセットアップ。画面の指示に従って行くだけで終わり。

 実はNOOBSでインストールしたのは初めて。

 簡単だけれどもダウンロードに時間かかるのが難点。USBメモリとかにダウンロードしたものを簡単に使える仕組みがほしいところ。(もしかしたらあるのかもしれないけど・・・)

Tera Term Menu

 Tera Termは、ずっとお世話になっているターミナルエミュレータ。原作者が開発をやめたのちも、オープンソースで開発が続いている。そのTera Termに(今では)同梱されているランチャーTera Term Menu。登録しておけばさくっと所望のサーバーに接続できるので、長らく常用している。

 レンタルサーバーだったりラズパイで作業したりするときくらいの素人の趣味レベルなものだが、便利なものは便利なのだ。

 

 複数台のPCで使えるようにDropboxやOneDriveで同期させたフォルダで運用したい。ところが、Tera Term Menuの設定データはレジストリに収納されている。困ったなと思って調べていると・・・ttpmenu.iniの空ファイルを生成しておくと、そちらに保存されるようになる、とのこと。早速、試したら成功。

 

 ただし、気になるのがiniファイルに記載されている事項接続先は兎も角もポートとユーザー名はバレバレ。パスワードは平文じゃないけれども、これって暗号化されてるのかなぁ。

 

ttssh2.osdn.jp

 

 

ja.osdn.net

Nextcloud (sakura) のセキュリティ警告が大体解決

 NextcouldはDropboxのような(主にファイルの)クラウド環境を構築できる。とても便利なのだが、さくらではhttpヘッダに関するセキュリティが出て困っていた。

 動作自体には致命的でもないのだけれども、.htaccess にも記載してるし気持ち悪かった。

 と、なんとなく検索していると以下のサイトに遭遇。

www.yujakudo.com

 おぉ、、逆にコメントアウトすでばOKと!

 盲点でした。

 

マルコフ連鎖による文章自動生成 #4 しっかり学習させると。

 pythonのお勉強とおもって「文章自動生成」にチャレンジ中。これまで分かち書きした文章の教師用データを作ってお試しでの文章自動生成に成功しました。今回は「猫」という言葉が入っている応答形式のツイートを一週間かけて集めたデータを使います。

 幾つかのテキストファイルにしちゃっているので、学習データのディレクトリに.txtファイルを置いておくと順に読み込んでくれるようにしました。トラブルで再開しやすいように、学習データは学習したら削除することにしました。

 

 ./corpus_data : 学習ファイル

 tweet_learned_data.json : 学習結果

 

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from glob import iglob
import re
import markovify
import os
import gc

def main():

learned_data = "tweet_learned_data.json"

if os.path.exists(learned_data):
with open(learned_data) as f:
combined_model = markovify.Text.from_json(f.read())
else:
print("no learned data.")
combined_model = None

#

for (dirpath, _, filenames) in os.walk('./corpus_data'):
for filename in filenames:
with open(os.path.join(dirpath, filename)) as f:
print(filename)
text_model = markovify.NewlineText(f, retain_original=False, state_size=2)

if combined_model:
combined_model = markovify.combine(models=[combined_model, text_model], weights=[1.0,1])
else:
combined_model = text_model

sentence = combined_model.make_sentence()
print(''.join(sentence.split()))
gc.collect()

with open(learned_data, 'w') as f:
f.write(combined_model.to_json())
print("saved")

#remove learned file.
os.remove(os.path.join(dirpath, filename))


if __name__ == '__main__':
main()

  Qiitaを中心に色々と参考にさせていただきました。ありがとうございます。

 

 これで学習させると・・・116Mの学習ファイルが出来上がり。

 

 文章を生成します。

 malkov_sentences.txt に200文例を表示します。単なる単語になりがちなので短い20文字以下は保存しません。

import os
import markovify

def main():

learned_data = "tweet_learned_data.json"

if os.path.exists(learned_data):
with open(learned_data) as f:
text_model = markovify.Text.from_json(f.read())
else:
print("no learned data.")
exit()

#
sentence = text_model.make_short_sentence(130, tries=10, max_overlap_ratio=0.7, max_overlap_total = 10)
print(str(len(sentence)) + ":" + ''.join(sentence.split()))

if len(sentence) > 20:
# save make sentences data
with open('malkov_sentences.txt', 'a', encoding = 'UTF-8') as f:
f.write(''.join(sentence.split()) + "\n")
else:
print("canceled")

if __name__ == '__main__':
for var in range(0,200):
main()

 で結果。

  • 猫を好きになる犬種分からんもんまで買っててドラズの中にはヒトのことなんだけど、野良猫でした。ガルボ食べるのにゃ!
  • 猫のやつをいつでもダンボールの可能性もありませんが可愛いので野良がいたので里親さん募集。Twitterログアウトしちゃった
  • 人慣れしてるんだけど最後らへんですね。️
  • そんで、これはたまらんですが、新猫が飼いたい。とても猫が、馬だけでも癒されます。
  • 1猫みたいにしてればあまり分からないが、神明かけてたら、次のゲーム。⁇何系男子高校生の頃から猫って毛玉ができて綺麗にするのよ。ボランティア減るぜ」→ちゅき。

 

 なんとなく、変な文書の生成に成功!しかし、ツイートの文章だからか、文章らしからないものが多い場合も。

 

 マルコフ連鎖の場合は、前後の言葉の関係性を学習するけれども、それが2つの言葉なのか3つなのか・・・で決定される。ツイートの場合は文書が短いためか、3つ以上にすると学習したデータが似かよることが多い。また、複数学習データをまとめて学習データにするという手法の場合は、それぞれのモデルの weights を調整することもできる。もうちょっと工夫できるところも多い。

 

 データが大きくなるとメモリーをあっという間に食い尽くして慌てたりと勉強しながらなんとか文章の自動生成ができるようになって、ほっとしました。 

 

 と、ここまでで、分かち書きまで前処理したデータを使って学習データを作成し、文章を生成するところまでてきました。初期目標はある程度達成。とりあえず、ツイートまではやってみたいと思います。

 

 つづく

 

 

bwgift.hatenadiary.jp

 

手持ちUSB扇風機

 暑くなると扇子とか団扇とかを持ち歩く季節。オフィスの机の上にはUSB扇風機を持ち込む人もちらほらと。書類が汗を吸うとメンドイし、ノートパソコンって熱を持つので手に汗をかく。

 持ち運び用のUSB扇風機が近所のお店でも見かけるようになったので、いいものがないか、探してみた。

 それがこれ、スマホスタンド付き・・・。

 もしかしたら、スマホ冷却作用も持たせられるのか。夏はスマホが熱持って動作が遅くなったり、カメラが起動しなかったりするから、興味あり。

 まだ、ポチってはない。スマホにも風をあてて冷却させることができれば買いかも。ポケモンGo遊んでいる人とか試してないかな。レビュー見てもそういう視点からのものがない。

 様子見かなぁ・・・。

 

 

マルコフ連鎖による文章自動生成 #3 学習させてテスト文章作る。

 分かち書きにした文章が用意出来たら、あとは簡単。といっても、すでにライブラリーがあるからなんですが・・・。 

 

github.com

 

 とりあえず、以下のサイトを見ながら学習&文章を生成してみます。 

qiita.com

 すでに、分かち書きは出来ているので簡単。

import markovify

# Load file
text_file = open("input.txt", "r")
text = text_file.read()

# Build model
text_model = markovify.Text(parsed_text, state_size=2)

# Output
sentence = text_model.make_short_sentence(140)
print(''.join(sentence.split()))


 とりあえず、何かの文章は出来た。

 

 これで動く目途がついた。モデルでの連鎖数をどうするのか、はたまた、もっと大きな辞書を学習させてみたい、と次のステップに進むのであった。

 

 つづく

 

 

bwgift.hatenadiary.jp

 

 

 

 

 

 

 

SanDisk SDカード128GB が安い・・・。

  並行輸入ものだがSanDiskで1850円(2019/5/31現在)。これは欲しいなぁ。

 

 

 ところがもっと気になったのは「よく一緒に購入されている商品」が容量がことなるもの。

 不思議な買い方だ。今一つ理解できない(笑)

 

f:id:bwgift:20190531214742p:plain

Amazonに・・・

 

ColaboratoryでGoogle Driveに一時退避

 Colaboratory で作業をしていると得られたデータを退避させる必要がある。

 大抵は、GoogleDriveでどうにかなる。

 お約束を唱える。

#Google Driveをマウント

from google.colab import drive
drive.mount('/content/drive')

google_drive_dir = 'drive/'

  大抵は作業フォルダー毎zipで固めて

!cp /content/hogehoge.zip "/content/drive/My Drive/temp/"

  とかでコピー。

 

 あまり多くはないかもしれないけれども、makeしてinstallするような場合は、makeしたあと、make installする前の状態でzipで固めてGoogle Driveに退避。次回からzipをコピーしてきて回答&make installを唱える。

 ちょっとした時間の節約にはなる。

 GoogleDriveの容量オーバーには注意。

 GoogleDriveもフォルダ毎に容量を制限できる機能とか、外部からはアクセスできるフォルダを認証コードで限定できるとか、実装してほしい。こういう実験にも安心して使いたい。

 

 と、Colaboratoryを使うとみんなやってるはずですよねぇ・・・。

 

マルコフ連鎖による文章自動生成 #2 文字列を分かち書き

 ツイートをひたすら収集して600MBくらいのテキストデータが得られました。行数カウントすると、1,965,620 の文を収集できました。どの程度の学習データがあればいいのか分からない。

 

分かち書きとデータ分類

 さて、得られた文章の前処理を進めます。

 単語単位に文章を分解します。せっかく、応答文で集めたデータなので、将来的にそのまま流用できるようにする。

 というわけで、MeCabを使って分かち書きと質問文と返答文を分けて保存の作業を行う。

 こちらのサイトを参考にして、ファイル名とかを適宜変更します。

qiita.com

 少ないデータを使って動作を確認し、あとは一気に処理をさせるだけ。

 でも、ふと困ったことが・・・Colaboratoryだと大量のデータをいちいちアップロードしたりダウンロードしたりするのは、時間も手間もかかる。

 そこで・・・Google Driveをマウントしてみることにした。

 

 つづく

 

 今回の記事は以下の流れの続きです。

bwgift.hatenadiary.jp

bwgift.hatenadiary.jp