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
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
6
200
Claude Codeから我々が学ぶべきこと
s4yuba
6
1k
Mambaで物体検出 完全に理解した
shirarei24
2
200
MCP認可の現在地と自律型エージェント対応に向けた課題 / MCP Authorization Today and Challenges to Support Autonomous Agents
yokawasa
3
1k
AI によるドキュメント処理を加速するためのOCR 結果の永続化と再利用戦略
tomoaki25
0
350
[TechNight #91] Oracle Database 最新パフォーマンス分析手法
oracle4engineer
PRO
4
370
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
230
経験がないことを言い訳にしない、 AI時代の他領域への染み出し方
parayama0625
0
300
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
240
マルチモーダル基盤モデルに基づく動画と音の解析技術
lycorptech_jp
PRO
4
470
株式会社島津製作所_研究開発(集団協業と知的生産)の現場を支える、OSS知識基盤システムの導入
akahane92
1
1.3k
Claude Codeが働くAI中心の業務システム構築の挑戦―AIエージェント中心の働き方を目指して
os1ma
9
1.5k
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
The Invisible Side of Design
smashingmag
301
51k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.5k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Fireside Chat
paigeccino
37
3.6k
Code Reviewing Like a Champion
maltzj
524
40k
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