CNNについて話してきた。Osakaで登壇して来ました。osaka.pycon.jp前日から大阪に乗り込んでました。(久しぶりに弊社の大阪オフィスに行った。)スライド発表内容は以下のスライドになります。CNNについて話しました。CNNのところを説明します。CNNとは文書を文字(Character)単位で区切ってそれをCNNに通してテキスト分類します。今回やること今回は、テキストからネガティブかポジティブかを判断するタスク(いわゆる感情分析のネガポジ)をこなす分類器を作ることを考えます。結果から言うと、オリジナル論文*1では上手く行かずに、違うアーキテクチャで上手く行きました。プログラミングコードなど)などが挙げられます。Keys(https://arxiv.org/abs/1702.08568)を参考にしました。CNNを使って悪意あるURLやファイルパスを検出するという内容です。丁寧に書かれていてわかりやすい論文でした。全結合層に通して分類です。埋め込み次元)行列を埋め込み層として用意して、対応する文字の行ベクトルだけを更新します。図1.埋め込み層2については論文に書いてる図を借りると次のようになります。図2.CNNの処理1×2,1×3,1×4,1×5というサイズのフィルターにそれぞれ通します。様々なWindowで文字のCooccurrence(共起性)を学習してると考えられます。図3.CNN部分の解釈3.特徴を一つに結合、4.全結合層に通して分類はそのままの意味です。TensorFlowで実装してTensorboardのグラフに書くと以下のようになります。図4.アーキテクチャ日本語のデータセット日本語のデータセットとして最近公表されたばかりのchABSA-dataset*2を使いました。上場企業の有価証券報告書をベースに作成されたデータセットで、特徴としては「何が」ポジティブ/ネガティブだったのかと言う情報を含んでいます。これで、「何が」のネガティブとポジティブの数を比べて多い方を文書全体の感情としました。その結果、訓練データとテストデータを合わせて2830文書が対象となりました。結果は以下のようになりました。図6.loss図7.accuracyデータセットが少ないので不安でしたがaccuracyも0.9程度にはなりました。誤字・脱字に対する強さ面白いのがここからで、わざと誤字・脱字をしてちゃんとネガポジを判定できるか試してみました。「増加傾向」を「加向」とか、「減少傾向」を「減向」にしても問題なく判定できています。ここでテストデータの文書の文字を適当な文字に変換した際にどのくらい精度が下がるのかグラフを書いてみました。図8.変えた文字数と精度(character-level)50文字をランダムな文字に置き換えても精度が8割以上あるのは驚きです。CNNでも試しました。図9.変えた文字数と精度(word-level)50文字も変えると精度は0.5なので全く判別出来てないことになります。CNNは誤字・脱字に強すぎなんじゃwwwwSNSメッセージ、チャット、レビューなど最適と言える。日本語だと分かち書きが不要と言うのも魅力的。単語で区切ったりしないので辞書が要らず、この実装だけであらゆる言語に対応可能。終わりにカンファレンスで発表するのは初めてでしたが、発表練習をするのを忘れていたので時間配分がちょっと不安でしたが、まあまあ時間ぴったりに終わったのでよかったです。カンファレンスは楽しかった。コードはここに置いてます。CNNツイッターやっているのでフォローお願いします。@tdualdirじゃあの。CNNについて話してきた。終わりに追記(2018-5-9)はじめにGW中にツイッターで「虚数はあるのか?」という話をタイムラインでよく見かけたので自分なりの回答をしようと思います。やってきた理論物理徒なので物理的な観点から回答します。※虚数はiで表現します。物理で初めて虚数を使うのはおそらく電磁気学か波動・振動論でしょう。オイラーの公式という形で出て来ると思います。虚数によって指数関数と三角関数が関係付くという美しい公式です。振動を表現しています。振動とはどう言う運動かというと、遠くに行こうとするものを中心に引き戻す力が働くので物体は振動してるわけです。遠くに行けば行くほど強い力で引き戻す必要があるので、引き戻す力は距離に比例してるとすると振動は次の運動方程式でかけます。m:振動してる物体の質量x:位置t:時間k:定数(バネ定数)左辺は質量かける加速度、右辺は中心に引き戻す力です。この式を満たしています。(2)式に代入してみてください。(Cは定数)ちゃんと等式が成立していることがわかると思います。振動を表しているということです。代わりに時間に依存しない項をeの肩に追加しても式を満たします。位相(phase)と呼ばれいてtが0の時の値なのでどのような状態で振動が始まったのかを表現しています。物理では様々な分野で出てきます。みたら「振動だ!」と思うように訓練されています。抵抗とコイルが直列につながっている回路に交流電流を流すことを考えます。V:電圧I:電流R:抵抗L:インダクタンスt:時間とすると、電位差の和は0になるというキルヒホッフの第二法則よりとなります。1項目は起電力で、2項目は抵抗にかかる電圧(オームの法則)、3項目はコイルにかかる電圧です。定数)これを代入すると、になることがわかります。抵抗がかかっているように見えます。インピーダンスと呼びます。以後、インピーダンスをZと表記します。(5)式を複素平面で表すで表現すると様々なことがわかります。