毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018-09-01から1ヶ月間の記事一覧

2018/09/21【90日目】自然言語処理100本ノック、その8

26問目です。 25問目の結果からマークダウンの強調を表す''' を消す問題です。 取り敢えず、replaceをしてみます。 import json import json import re from pprint import pprint def extract_base_info(text): m = re.search("{{基礎情報[^|]+\|(?P<info_body>.+?)\n}</info_body>…

2018/09/20【89日目】自然言語処理100本ノック、その7

25問目からです。 よくよく調べて見たら、?P< a >というのはグループ名の指定だったんですね。 (?P...) 正規表現の丸括弧に似ていますが、グループによってマッチした部分文字列はシンボリックグループ名 name によってアクセス可能になります。グループ名は…

2018/09/19【88日目】自然言語処理100本ノック、その6

この頃仕事が終電になることが多く、全然時間が取れませんが、せめて1時間だけでも。 24の続きからです。 正規表現の中に?Pというのがあって、これを指定すれば良さそうです。 〜〜までというのは、このよう([^=]\=)に書くみたいなので、|までを指定してあげ…

2018/09/18【87日目】自然言語処理100本ノック、その5

この時間まで仕事が終わらず、日をまたいでしまったのですが、1問だけ解きたいと思います。 22問目の続きです。 次のようにタプルに追加しようと思ったのですが、タプルって追加できないんですね。 import re result = () section_reg = re.compile(r'(==+)(…

2018/09/17【86日目】自然言語処理100本ノック、その4

さて JSON形式でテキストを取得できましたので問題に戻ります。 021 次のようなカテゴリー名を取得する問題です。 {{デフォルトソート:いきりす}} [[Category:イギリス|*]] [[Category:英連邦王国|*]] [[Category:G8加盟国]] [[Category:欧州連合加盟国]] [[…

2018/09/16【85日目】pythonでのJsonコードの取り扱い

一昨日くらいからJSONにどっぷりはまっていますので、今回調べてみました。 JSON(ジェイソン:JavaScriptオブジェクト記法)は人間が読めるようにデータを整形した形でこんな感じのものだそうです。 {“name”:”hogehoge”, “day”:”2019-09-23”, “money””100^Y…

2018/09/15【84日目】自然言語処理100本ノック、その3

JSONファイルの扱いが全くわからない。 21問目。 moji20[(moji20['text'].str.contains('Category'))] 206行中、202行出てきた。本当にこれでいいのか謎です。正規表現と言うよりif文に近い気がする。 22問目 ここから今の読み込み方だと全く歯が立たないの…

2018/09/15【84日目】自然言語処理100本ノック、その3

16 若干16番目が全然わからなかったのですが、ググってみたら結構コピペで出回っていますね。math.ceilで割る数を作るのがやたらと多かったのですが、もっといい方法があるだろうと思ってらNumPyにありました。こんな感じです。 import numpy as np n = int(…

2018/09/15【84日目】自然言語処理100本ノック、その3

やっと2章へ行きます。 10番からです。 with open("hightemp.txt") as f: text = f.readlines() print(len(text)) Pythonはこうですね。Unixはどうなんでしょう。今回はちょっとパスで。そういえば、pythonでpassって処理があるんですね。今日知りました。 1…

2018/09/15【84日目】自然言語処理100本ノック、その3

やっと2章へ行きます。 10番からです。 with open("hightemp.txt") as f: text = f.readlines() print(len(text)) Pythonはこうですね。Unixはどうなんでしょう。今回はちょっとパスで。そういえば、pythonでpassって処理があるんですね。今日知りました。 1…

2018/09/14【83日目】自然言語処理100本ノック、その2

006の続きからです。 和集合、積集合が何だかわからなかったレベルなのですが、以下のようですね。 2つの集合に対して、「少なくとも片方に入っているもの」を集めた集合を和集合と言う。「両方ともに入っているもの」を集めた集合を積集合と言う。 それで、…

2018/09/13【82日目】自然言語処理100本ノック、その1

次にやることが思いつかないので、ひとまず自然言語処理100本ノックをやって行きたいと思います。 www.cl.ecei.tohoku.ac.jp まずは000番目からです。 000 文字列を逆に表示する問題です。はいはい.reverse()を使えばいいんでしょ?と思いましたらは.reverse…

2018/09/13【82日目】chatbotで使ったコードを見直していく(後半)

後半の最初はピックルの読み込みから。 dataset = load_clean_sentences('both.pkl') dataset1 = dataset.reshape(-1,1) train = load_clean_sentences('train.pkl') test = load_clean_sentences('test.pkl') それから定義したモデルの読み込み。 model = d…

2018/09/12【81日目】chatbotで使ったコードを見直していく(前編)

ちょっと前から作り続けているchatbotをこのまま続けるにしろ、この辺で終わるにしろ、取り敢えずコードを見直していきたいと思います(自分で書いた訳ではないので)。 コードを見直していく まず、真っ先に見る必要があるのはここのデータの保存というです…

2018/09/11【80日目】会話のデータを増やしてみる

昨日の段階でなんとなくやりたいことが見えてきましたが、同じことしか話していなかったので、学習データが足りないのかと思って、会話データを300パターン用意してみました。 ちょっとやっていきましょう。 YOU: おつかれ ANSWER: 今日から7月です YOU: も…

2018/09/10【79日目】LSTMでbotをいじってみる

会話データをひとまず100個作りましたので、実装していきたいと思います。 コードはGithub上のものを参考にしています(というよりそのまま) github.com 01_preprocessing.pyの場所 from pickle import load from pickle import dump from numpy.random imp…

2018/09/09【78日目】会話データについて調べてみた

今回は簡単に会話データに関して調べました。 会話データを探す 英語の会話データはたくさんあるみたいですけどね。日本語だとなかなかないみたいですね。 機械学習に使えるチャットボットデータセット・ベスト15 gengo.ai この間リリースされたばかりのGoog…

2018/09/09【78日目】会話データを(手動で)作っていく

昨日の段階で、ある程度kerasの仕組みはわかってきましたので、そろそろ本格的に手を動かしていきたいと思います。 その前に、いちおうtweetのデータ5265件を使ってテキスト生成はしてみました。3世代目でこんな感じです。temperature: 0.5がギリギリ良さげ…

2018/09/08【77日目】ソフトマックスの温度を調整してみる

ディープラーニング関連の話が続いて申し訳ないですが、今日もその続きです。 テキストを生成する際に、次に来る確率が一番高い単語を選ぶのが貪欲的サンプリング(greedy sampling)という。 ただし、毎回確率が高い単語だけを選んでいても、変わり映えがし…

2018/09/07【76日目】RNNのリカレント層を見ていく

なんだかんだ、ここ1ヶ月くらい追っているRNNの実装のところをみていきます。 すごい単純にいうとRNNは下記のことをやっているだけらしいです。 state_t = 0 #時間Tのすべて0の状態 for input_t in input_sequence: output_t = f(input_t, state_t) satate_t…

2018/09/06【75日目】Kerasでワンホットコーディングを行う

まだしばらく勉強メモが続きますが、今日はkerasでのワンホットエンコーディングの実装のところです。 以下、勉強メモ。 テキストは最も広く使用されているシーケンスデータ。単語レベルで処理するのが普通。テキストのベクトル化は複数の方法がある。 テキ…

2018/09/05【73日目】畳み込みニューラルネットワークの勉強していく

この頃完全にニューラルネットワークについて調べている感じですが、今日もその続きです。 以下、勉強メモです。 畳み込みニューラルネットワーク(CNN)はconventと呼ばれている。 基本的なインスタンス化 model = models.Sequential() model.add(layers.Co…

2018/09/03【72日目】Pythonとkerasによるディープラーニングを学んでいく

ディープラーニングの勉強メモ 機械学習は明示的にプログラムされているのではなく、訓練されている。 機械学習モデルの本質は入力データに適した有益な表現を見つけだすこと。 機械学習のアルゴリズムは、あらかじめ定義された演算の集まり(仮説空間)に入…

2018/09/03【72日目】結局LSTMがよくわからないので、日本語の本を読んでいく

昨日のコードを40世代まで実行していましたら、下記のようになりました。 Epoch 40. Loss: 2.09404529274 こんにち を し た 今日 は 握手会 ありがとう ござい まし た ? 今日 は 1 日 で は、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、…

2018/09/02【71日目】よくわからないけどLSTMをみていく

それほどよく分かってもいませんが、続けていきます。 言語モデルを作っていく上で通常のRNNではできなかった長期依存をできるようにした、Long short-term memory (LSTM) と言うモデルがあるらしいです。 今日はこれをみていこうと思います。 引続き、MXnet…

2018/09/01【70日目】昨日のRNNのコードを読み込んでいく

昨日のコピペしていったコードを見ていきたいと思います。 前処理 まずは必要なライブラリのimportとテキストの読み込みから。 from __future__ import print_function import mxnet as mx from mxnet import nd, autograd import numpy as np mx.random.see…

2018/8/31【69日目】MXNetでRNNを実装して言葉を学習させていく

昨日の意味がわからない会話の中を繰り広げる中で、下記のことができていないのではないかと思いました。 会話データがないと意味がない 結局RNNを実装していない こっちの言っていることに反応しない できる限り1個ずつ解決していきたいと思います。 RNNの…

2018/8/30【68日目】マルコフ連鎖で謎の会話ができるようになった

3グラムの方がいいという情報があったので、ただ単にMeCabで単語に分けたものよりも3グラムを学習させてみます。 3グラムはこちらで勉強したコードから。 dailytextmining.hatenablog.com def text2threegram(text): kaisekiyou = text.read().split('¥n') s…

2018/8/27【65日目】繰り返しオウム返しする関数まで作った

色々な情報を探していますが、slackやtwitterでのチャットを使ったコードが多いですね。やはりチャットの部分は自分で作るしかないのかなと思います。 とりあえず、バイバイを入力するまで永遠とオウム返しをするbotまで完成しました。 def main(): while Tr…