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
130
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
740
文章のベクトル化
andmohiko
0
440
kobachi presentation
andmohiko
0
210
project yamcha phase 1
andmohiko
1
120
Other Decks in Technology
See All in Technology
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
540
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
180
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
130
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
400
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
200
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
480
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
550
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
150
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
240
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Docker and Python
trallard
47
3.7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
130
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
How GitHub (no longer) Works
holman
316
140k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
100
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Code Reviewing Like a Champion
maltzj
527
40k
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などの技術ももっと勉強したい • フィードのお掃除をしたので今度はパーソナライズやレコメンドにも挑戦し たい 機械学習を使っているプロダクトを開発している企業はぜひ雇ってください。特 に上記の点に挑戦できたり、数学への強みを活かせるとうれしいです。英語も 得意なので論文も読みます。
最後まで読んでいただきありがとうございました!☺ 今後やりたいこと