Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
文書分類をやってみた
Search
Kenichi Ito
February 09, 2019
Technology
0
1k
文書分類をやってみた
PyData.Fukuoka Meetup #2 - ハンズオン & LT大会 での発表資料
Kenichi Ito
February 09, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
「守る」から「進化させる」セキュリティへ ~AWS re:Inforce 2025参加報告~ / AWS re:Inforce 2025 Participation Report
yuj1osm
1
150
自社製CMSからmicroCMSへのリプレースがプロダクトグロースを加速させた話
nextbeatdev
0
240
現場が抱える様々な問題は “組織設計上” の問題によって生じていることがある / Team-oriented Organization Design 20250827
mtx2s
6
4.6k
Oracle Base Database Service:サービス概要のご紹介
oracle4engineer
PRO
2
20k
KiroでGameDay開催してみよう(準備編)
yuuuuuuu168
1
150
我々は雰囲気で仕事をしている / How can we do vibe coding as well
naospon
2
220
株式会社ARAV 採用案内
maqui
0
380
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
1
310
Vault meets Kubernetes
mochizuki875
0
100
小さなチーム 大きな仕事 - 個人開発でAIをフル活用する
himaratsu
0
130
モバイルアプリ研修
recruitengineers
PRO
4
900
ZOZOTOWNフロントエンドにおけるディレクトリの分割戦略
zozotech
PRO
18
5.7k
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
780
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Visualization
eitanlees
147
16k
Why Our Code Smells
bkeepers
PRO
338
57k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
4 Signs Your Business is Dying
shpigford
184
22k
BBQ
matthewcrist
89
9.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Automating Front-end Workflow
addyosmani
1370
200k
Statistics for Hackers
jakevdp
799
220k
Transcript
1 文書分類をやってみた 伊藤 健一
2 自己紹介 • 伊藤 健一 ( いとう けんいち ) •
工学部電子情報工学科 3 年 • 自然言語処理の研究室に所属 • Python 歴は 5 ヶ月 • 機械学習歴は 2 ヶ月
3 文書分類タスク概要 • IT 系総合ニュースサイトから記事を 5 つのカテゴリのみスクレイピング カテゴリ : pc,
game, travel, car, dc • 与えられたニュース記事に対して、カテゴリを推定 • 学習用データ : 約 15MB の JSON ファイル • 評価用データ : 約 2MB の JSON ファイル
4 試した手法 • 文章ベクトル化手法 – Bag of Words – TF-IDF
(Term Frequency-Inverse Document Frequency) – Doc2Vec – SCDV (Sparse Composite Document Vectors) • 分類器 – SVM (Support Vector Machine)
5 Support Vector Machine (SVM) • 教師あり機械学習方法 • 認識性能の優れた学習モデルの一つ •
各データ点との距離が最大となる マージン最大化超平面を求める • 未学習データに対する高い汎化性能 • モデルを人が解釈することはできない • 今回用いたのは線形 SVM https://home.hiroshima-u.ac.jp/tkurita/lecture/svm.pdf
6 https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
7 Bag of Wards 法とは? • 文章に単語が含まれているかどうかのみを考え、 単語の並び方などは考慮しない • 文書中にある単語が含まれている回数を値として用いる
• 例 : すもももももももものうち [ すもも , も , もも , も , もも , の , うち ] { すもも : 1, も :2, もも : 2, の : 1, うち :1} [1, 2, 2, 1, 1] • 日本語の場合、 MeCab などで分かち書きにする必要が ある
8 TF-IDF とは ? • TF (Term Frequency): 文書内における単語の出現頻度 1
つの文書に多く出現する単語ほど重要度が高くなる • IDF (Inverse Document Frequency): ある単語が含まれている文書数を全ての文書数で割った ものの逆数 多数の文書に出現する単語ほど重要度が低くなる • TF-IDF は TF と IDF を掛けあわせたもの
9 Doc2Vec とは? • Word2Vec を単語レベルではなく、文や文書といった任 意の長さを扱えるように拡張したもの • Word2Vec とは?
– 単語のベクトル表現を得る方法 – 入力層、隠れ層、出力層からなる単純なニューラルネット ワーク – 単語同士の意味の近さが計算できる – 意味を足し引きできるようなベクトル表現が得られる “King” – “Man” + “Woman” = “Queen” “Tokyo” – “Japan” + “China” = “Beijing”
10 Sparse Composite Document Vectors (SCDV) • 文章データから得られる全単語について、 Word2Vec ベク
トルと idf 値を計算しておく。 • この単語ベクトルについて、混合ガウスモデルで K クラス分 類に学習し、一つ一つの単語ベクトルが各クラスに属する予測 確率を単語ベクトルにかけて連結して、単語ベクトル数 * クラ スタ数に次元を広げる。 • これに idf 値をかけたものが、単語ベクトル Word-topics vector 。 • これを、文章の構成単語について平均をとって、スパースさせ たものを、文章ベクトルとして扱う。 • 今回試した文章ベクトル化手法の中では一番精度が出るはず http://www.ie110704.net/2018/10/12/文書分散表現scdvと他の分散表現を 比較してみた/
11 評価用データに対する成績 • Bag of Words: 正解率 97.61% (693 /
710) • TF-IDF: 正解率 98.31% (698 / 710) • Doc2Vec: 正解率 94.08% (668 / 710) • SCDV: 正解率 96.48% (685 / 710) ()内は文書数 • TF-IDF が一番正解率が高かった • Doc2Vec 、 SCDV はパラメータチューニング不足の可能性 も • データの性質的に TF-IDF で十分だった?
12 t-SNE による可視化 • T-distributed Stochastic Neighbor Embedding (t-SNE) とは
? 元のデータの一部の特徴量を保持したまま、 2 次元や 3 次元への圧縮を行い高次元データを可視化する方法 • 非線形な構造にも対応 • より計算量の少ない UMAP という手法が 2018 年 2 月に出ました 最新の次元圧縮法"UMAP"について - Qiita
13 BoW( 左 ) と TF-IDF (右)の可視化
14 Doc2Vec( 左 ) と SCDV( 右 ) の可視化
15 使用した主なライブラリ • MeCab の python wrapper: mecab-python3 – MeCab:
形態素解析エンジン – 日本語を分かち書きにするために使用 • トピックモデリングライブラリ : gensim – Word2Vec 、 Doc2Vec のために使用 • 機械学習ライブラリ : scikit-learn – BoW 、 TF-IDF 、 SVM 、 t-SNE のために使用 • グラフ描画 : seaborn
16 Pickle • Python の標準ライブラリにあるモジュール • オブジェクトをバイト列などの表現に変換する ( 直列化 ,
Serialize という ) • オブジェクトの状態を保存したり読み込んだりできる import pickle data = {'a': [1, 2.0, 3, 4 + 6j]} # 保存 with open('data.pickle', 'wb') as f: pickle.dump(data, f) # 読込み with open('data.pickle', 'rb') as f: data = pickle.load(f)
17 参考サイト • 【特別連載】 さぁ、自然言語処理を始めよう!(第2回: 単純 集計によるテキストマイニング) | DATUM STUDIO株式会
社 • scikit-learnでsvm 基本的な使い方 - 備忘録とか日常とか • 文書分散表現SCDVと他の分散表現を比較してみた - 戦 略コンサルで働くデータサイエンティストのブログ • SCDVを使ったテキスト分類をしてみる - どん底から這い上 がるまでの記録 • t-SNEを使った文書ベクトルの可視化 - どん底から這い上 がるまでの記録 • 高次元のデータを可視化するt-SNEの効果的な使い方 - D eepAge
18 参考サイト • Bag of Wordsについて書いてみる - どん底から這い上が るまでの記録 •
Doc2Vec を使って日本語の Wikipedia を学習する|ofx mp3|note • Doc2Vecの仕組みとgensimを使った文書類似度算出チ ュートリアル - DeepAge • 文章をよしなに分散表現しよう | 東京工業大学デジタル創 作同好会traP