Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
730
文章のベクトル化
andmohiko
0
430
kobachi presentation
andmohiko
0
210
project yamcha phase 1
andmohiko
1
110
Other Decks in Technology
See All in Technology
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
460
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
140
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/09 - 2025/11
oracle4engineer
PRO
0
110
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
200
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
150
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
手動から自動へ、そしてその先へ
moritamasami
0
300
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
190
初めてのDatabricks AI/BI Genie
taka_aki
0
140
世界最速級 memcached 互換サーバー作った
yasukata
0
340
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
440
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
740
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Navigating Team Friction
lara
191
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
How to train your dragon (web standard)
notwaldorf
97
6.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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などの技術ももっと勉強したい • フィードのお掃除をしたので今度はパーソナライズやレコメンドにも挑戦し たい 機械学習を使っているプロダクトを開発している企業はぜひ雇ってください。特 に上記の点に挑戦できたり、数学への強みを活かせるとうれしいです。英語も 得意なので論文も読みます。
最後まで読んでいただきありがとうございました!☺ 今後やりたいこと