Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LT_20200215
Search
y-wat
February 15, 2020
280
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LT_20200215
開発中の資料です
y-wat
February 15, 2020
More Decks by y-wat
See All by y-wat
v1Bot_v0.2
ywat
0
57
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1369
210k
Designing Experiences People Love
moore
143
24k
Everyday Curiosity
cassininazir
0
310
Git: the NoSQL Database
bkeepers
PRO
432
67k
HDC tutorial
michielstock
2
860
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
480
Un-Boring Meetings
codingconduct
0
410
Optimizing for Happiness
mojombo
378
71k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
WCS-LA-2024
lcolladotor
0
820
Code Review Best Practice
trishagee
74
20k
Transcript
面倒な検索はpythonにやらせよう -開発記録 v0.1- y-wat
お願い スクレイピング・クローリングは用法・容量を守って実行しましょう
connpass: y-wat • 本社に自席がない常駐エンジニア5年目 • 昔: OracleDB担当(バッチ処理、DBA), BIツール導入&保守 • 今:
GCPでログ基盤構築 2018冬から個人的にコーディングはじめました。 仕事では2019/04から(PLSQLは除く)。
今日の目的 • 3ヶ月開発の中間強制LT • 個人開発中の検索botを紹介する(画面ありませんごめんなさい) • デザインパターンの共有枠です • 違和感のある設計・実装を見かけたら指摘してください •
面白そうな追加機能ネタは歓迎
「気になった単語」を覚えてますか?? →無理。 →継続フォローつらい。 →周辺情報も欲しい。
検索botの目指すところ • 定期web検索 • 自律追加検索 • 記事推薦 気になるネタのウォッチ + 知らないサイトへの到達
モジュール配置 検索bot (稼働中) View (稼働中) 検索辞書作成(稼働中) Storages (稼働中) Cloud Run
GCS Cloud Tasks BigQuery Firebase Functions PG GCE 記事推薦 (調査中) ??
検索bot - 新着ページを集める Web Site 検索 task task task task
task task 検索条件リスト
Storages - メタデータ用/集計用/長期保存用 BigQuery GCS Postgres • メタデータ • 履歴データ
• heroku • 文書データ • フルスキャン前提 • 直近3ヶ月のみ保持(予定) • 文書データ • 長期保存用 • 基本的に貯めるだけ ストレージを跨いだデータ整合性管理 • Job_id: 検索ワード+検索オプション => sha256 • Exec_id: searchの起動ごとに => uuid4 • 文書id: テキストのみ抽出した文書 => sha256
検索辞書作成 - tfidf • tfIdfで特徴語を抽出 • 元の検索条件 + tfidf結果で再検索 =
今日の深堀り検索 検索bot 再走行 task 追加検索条件リスト
記事推薦 - 2月中の実装目標 • やりたいこと ◦ 追加検索結果から絞り込みを行う ◦ ベース検索(n *
5記事) * 追加検索(tfidf(3ワード) * 5記事) = 75n記事(最大) →多すぎるので選別が必要 • 実装方法 ◦ 文書のベクトル作成: bert as service (試し中) ◦ 記事推薦 i. Cosine類似度 <- とりあえず単純なコレが有力 ii. Elastic search iii. ほか調査中
まとめ: 前半の振り返り • プロダクトとしての評価 ◦ 新着記事の自動配信としては使えそう。 英語なら。 ◦ 不要な記事への対処が悩み (例:
ECサイト、出会い系コミュニティサイト ) • bot開発: 前処理が本番 - 無価値な単語をどうやって弾くか ? ◦ 名詞,固有名詞: EV(電気自動車),新型コロナウイルス ,12月5日,37ドル ◦ 人間にとっての「有意味な単語」と計算結果での「特徴語」は一致しない ◦ 辞書の品質維持 • アーキテクチャ: 軽量なモジュール単位実装 + 疎結合 ◦ 軽量に作る: 素pythonスクリプト、flaskでの簡易実装優先 (大きいFW/ORM使わない) ◦ 小さいAPIをタスクキューで繋げる : モノリシックを避ける + 並列実行リソースの最適化 ◦ プログラミングの学習としては微妙 (Leetcode等の方が良い)
最後に つっこみ歓迎。 • 「アーキテクチャおかしくない??」 • 「実装内容もっと良いやり方が・・・」 直近のissue • メンテナンス負荷の低い分析処理 +基盤
• ストレージレイヤのデータ管理 • テキスト前処理の完成形 • 分かち書きに使う辞書メンテナンス (最終手段: Natural Language API) • 自然言語処理なにもわからない