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
Predicting categories of news articles
Search
andmohiko
September 10, 2019
Technology
0
120
Predicting categories of news articles
機械学習(自然言語処理)を使ってニュース記事のカテゴリー分類に挑戦した話。
andmohiko
September 10, 2019
Tweet
Share
More Decks by andmohiko
See All by andmohiko
Mantine + React Hook Form + Zod でフォームをつくる
andmohiko
0
720
文章のベクトル化
andmohiko
0
420
kobachi presentation
andmohiko
0
210
project yamcha phase 1
andmohiko
1
110
Other Decks in Technology
See All in Technology
.NET 10のBlazorの期待の新機能
htkym
0
150
ラスベガスの歩き方 2025年版(re:Invent 事前勉強会)
junjikoide
0
430
MCP ✖️ Apps SDKを触ってみた
hisuzuya
0
390
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
220
webpack依存からの脱却!快適フロントエンド開発をViteで実現する #vuefes
bengo4com
4
3.6k
re:Inventに行くまでにやっておきたいこと
nagisa53
0
600
頭部ふわふわ浄酔器
uyupun
0
230
様々なファイルシステム
sat
PRO
0
260
知覚とデザイン
rinchoku
1
610
CNCFの視点で捉えるPlatform Engineering - 最新動向と展望 / Platform Engineering from the CNCF Perspective
hhiroshell
0
140
IoTLT@ストラタシスジャパン_20251021
norioikedo
0
140
OPENLOGI Company Profile for engineer
hr01
1
45k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
We Have a Design System, Now What?
morganepeng
53
7.8k
Statistics for Hackers
jakevdp
799
220k
Building an army of robots
kneath
305
46k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Done Done
chrislema
185
16k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
640
Build your cross-platform service in a week with App Engine
jlugia
233
18k
Visualization
eitanlees
149
16k
Transcript
ニュース記事の カテゴリー分類 JX通信社 機械学習エンジニアインターン 伊藤智彦
ニュースアプリを作っているベンチャー企業でインターンしています。 今回はそのニュースアプリ内で機械学習を使っている機能の改修をしました。 実際にプロダクトで使われているので具体的な数字や、非公開な部分はふわっ と書いています。数式もなるべく避けているので人事のみなさんもぜひ読んでく ださい。 読んでみて良いなと思ったらスカウトください。 カジュアル面談したいです。あとご飯食べたいです。 よろしくお願いします 概要
• 目的 • 手法 • 学習結果と分析 • 原因と解決策 • 最終的な結果
• さいごに - 今後やりたいこと お品書き
目的
様々なメディアが毎日ネットに記事を投稿し、 ニュースアプリはそれらを適切なカテゴリーに自動で分類している。 既に動いてるモデルはニュース記事のタイトルからニュースのカテゴリーを分類 しているが、精度が低いためこれを改善したい。 つまり短文(30字前後)の多クラス分類問題を機械学習(自然言語処理)を使って 解きたい。 UX的には見ているタブとは関係のないジャンルの記事が流れてくることが特に 良くないので、今回はprecisionを重視していきたい。 目的
手法
既存のモデル • BoWに変換し、アルゴリズムにはNaive Bayesを採用している。 BoW: 学習データに出現する全単語にIDを振り、文章をどの単語が何回出現し たか(単語1が2回, 単語2が1回...という形)によって表現する手法 Naive Bayes:
ベイズの定理を元にしたアルゴリズム。出現する単語の組み合わ せによって確率を計算する。式を見たら挙動がわかるとてもシンプルな手法。以 降NBと表記する。 手法
NBが良さそうだが、結果を比較するために次の3つの手法を試した。 • NB • Random Forest • LSTM(ディープラーニング) 手法
学習結果と分析
Naive Bayes → 学習も早く、精度もそこそこ出る 特定のカテゴリーの精度がとても低い Random Forest → 全体的な精度がNBより低い
LSTM → 短文は文脈依存が薄いため今回は向いていなさそう 最初の結果
学習結果を分析すると特定のカテゴリーに弱い。 具体的には • 芸能ニュースやスポーツニュースの精度(F-measure)は高い • グルメの精度だけやたら低い • 政治と経済と国際ニュースが混ざり合う 結果の分析
原因と解決策
1. グルメの精度が低い問題 学習データの偏りからスムージングが悪影響を及ぼしている。 → 学習データを増やしつつ、スムージングの影響を小さくしたい。 2. 政治と経済と国際ニュースが混ざり合う問題 混ざり合ってる記事を見てみると「国際的な経済ニュース」など、実際に人 間が読んでもどのカテゴリーに分類すべきかわからない。 →
ユーザーからすると経済タブと国際タブのどちらにいても違和感はない ため、この問題は気にしなくても良い。 原因の分析
sklearnの内部のプログラムとNBの数式を行き来しながら分析しました。 簡単に言うと • スムージングが大きすぎるとそのカテゴリーの学習データ内に無い単語ほ どそのカテゴリーへの尤度が高くなる • 逆に小さすぎるとそのカテゴリーの学習データ内に無い単語が1つでも出 現すると一気に尤度が下がる 詳しい解説はqiitaに書きました。なるべく数式を出さないようにがんばったらわ かりにくくなりました→
https://qiita.com/andmohiko/items/7dcb8a4882835a0b0001 より深い原因の分析(数学の話)
1. まずは学習データの偏りが無くなるように少ないカテゴリーは増やし、多い カテゴリーは削る。 2. スムージングが大きすぎても小さすぎても予測結果が暴れ出すのでちょう ど良い値になるようにチューニングする。 3. 弱いカテゴリーには専用のモデルを作り、複数のモデルの予測結果の投 票によって最終的な予測結果を出力する。投票の重み付けもチューニング する。
解決策
最終的な結果
既存のモデルよりも十分に予測精度が改善(10%くらい改善)された。 プロダクトに投入する前に、最後のステップとして • あまりにも予測精度が低い記事はそもそも流さないことでprecisionをさらに 上げる • 危うい記事を削った結果、アプリ全体の記事の流量が減りすぎないかを検 証する PMからGoサインが出たので作成したモデルをFlaskを使ってAPI化し、Docker化 したものをAWSにデプロイしました。
最終的な結果
さいごに
• 初めて自分が作ったモデルがデプロイされてエモかった。 • 機械学習のモデル作成からプロダクトへの導入までの流れを学べて良 かった。 • 機械学習プロジェクトの難しさ、特に結果を確証できない・見通しが立てに くいことを身をもって体験した(最初の予定より大幅に時間がかかってしまっ た)。 •
数式とコードの行き来をできて良かった。 • 自分は数学的な原因を探っている時間が楽しいことがわかった。 学びと感想
• 自然言語処理が楽しいので引き続きやっていきたい • FlaskやDockerなどの技術ももっと勉強したい • フィードのお掃除をしたので今度はパーソナライズやレコメンドにも挑戦し たい 機械学習を使っているプロダクトを開発している企業はぜひ雇ってください。特 に上記の点に挑戦できたり、数学への強みを活かせるとうれしいです。英語も 得意なので論文も読みます。
最後まで読んでいただきありがとうございました!☺ 今後やりたいこと