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
コールドスタンバイ構成でCDは可能か
hiramax
0
130
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
430
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
580
旬のブリと旬の技術で楽しむ AI エージェント設計開発レシピ
chack411
1
130
AI with TiDD
shiraji
1
340
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
1
620
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
380
Data Hubグループ 紹介資料
sansan33
PRO
0
2.5k
AIと融ける人間の冒険
pujisi
0
110
Next.js 16の新機能 Cache Components について
sutetotanuki
0
210
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
4
35k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
31
How to build a perfect <img>
jonoalderson
1
4.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
The Pragmatic Product Professional
lauravandoore
37
7.1k
How to Talk to Developers About Accessibility
jct
1
94
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
76
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
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