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
v1Bot_v0.2
Search
y-wat
March 17, 2020
57
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
v1Bot_v0.2
開発終わったので振り返りの資料。
未発表。
y-wat
March 17, 2020
More Decks by y-wat
See All by y-wat
LT_20200215
ywat
0
280
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
270
Crafting Experiences
bethany
1
310
KATA
mclloyd
PRO
35
15k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
260
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.9k
Ruling the World: When Life Gets Gamed
codingconduct
0
330
The SEO identity crisis: Don't let AI make you average
varn
0
550
Transcript
面倒な検索はpythonにやらせよう -開発記録 v0.2- y-wat
お願い スクレイピング・クローリングは用法・容量を守って実行しましょう
connpass: y-wat • 本社に自席がない常駐エンジニア5年目 • 昔: OracleDB担当(バッチ処理、DBA), BIツール導入&保守 • 今:
GCPでログ基盤構築 2018冬から個人的にアプリケーション開発はじめました。 仕事では2019/04から(PLSQLは除く)。
今日の目的 • 3ヶ月開発のまとめ(2020/01 - 2020/03) • 個人開発中の検索botを紹介する • 違和感のある設計・実装を見かけたら指摘してください •
面白そうな追加機能ネタは歓迎 • Garbage in, garbage out
Why 検索bot? →日次情報収集は面倒。 →周辺情報も欲しい。 →Unknown unknowns
検索botの目指すところ • 定期web検索 • 自律追加検索 • 記事推薦 気になるネタのウォッチ + 知らないサイトへの到達
モジュール配置 検索bot (稼働中) View (稼働中) 検索辞書作成(稼働中) Storages (稼働中) Cloud Run
GCS Cloud Tasks BigQuery Firebase Functions PG GCE 記事仕分け (稼働中) GKE
検索 - 新着ページを集める 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 追加検索条件リスト
記事仕分け • やりたいこと ◦ 追加検索結果から絞り込みを行う ◦ ベース検索(n * 5記事) *
追加検索(tfidf(3ワード) * 5記事) = 75n記事(最大) →多すぎるので選別が必要 • 実装方法 ◦ 文書のベクトル作成 i. bert as service (GKE + GCE) ◦ 記事推薦 i. Cosine類似度 (Bigquery) ここまでの実装と評価を 3月中に
Bert as service 記事仕分け①: 文書のベクトル化(稼働中) Bert Server 日次環境構築 日次環境破棄 文書ベクトル
Bert Client Job Initiator Parameter Queue 後続処理起動
記事仕分け②: 類似記事の抽出(稼働中) Cosine Similarity計算(SQL) 日次類似記事テーブル 起動
まとめ: 3ヶ月の振り返り - 勢いで作ったGIGO • プロダクト ◦ 簡易的な文書収集 &仕分けエンジンとして使えそう。 英語なら。
◦ インプットデータの品質問題 (例: ECサイト、出会い系コミュニティサイト ) • bot開発: 前処理が本番 - 無価値な単語をどうやって弾くか ? ◦ 例 - 名詞,固有名詞: EV(電気自動車),新型コロナウイルス ,12月5日,37ドル ◦ 人間にとっての「有意味な単語」と計算結果での「特徴語」は一致しない ◦ 辞書の品質維持 • アーキテクチャ: 軽量なモジュール単位実装 + 疎結合 ◦ 軽量に作る: 素pythonスクリプト、flaskでの簡易実装優先 (大きいFW/ORM使わない) ◦ 小さいAPIをタスクキューで繋げる : モノリシックを避ける + 並列実行リソースの最適化 ◦ プログラミングの学習としては微妙 (Leetcode等の方が良い)
最後に つっこみ歓迎。 • 「アーキテクチャおかしくない??」 • 「実装内容もっと良いやり方が・・・」 直近のissue • メンテナンス負荷の低い分析処理 +基盤
• ストレージレイヤのデータ管理 • テキスト前処理の完成形 • 分かち書きに使う辞書メンテナンス • 自然言語処理なにもわからない
今後の計画 - bot2号機 • 英語を優先対応 - 日本語対応は作業コストに見合わない ◦ 前処理のテンプレ化したい ◦
「分かち書き」処理の廃止による辞書問題からの解放 ◦ bert モデル更新への追従を容易に • 取得元を絞る ◦ 特定ソースに絞る方がデータの品質は揃いそう ◦ 候補①: News APIなどニュース記事 ◦ 候補②: 特定サイトの巡回 • 文書ベクトルのデータベース ◦ 現在: 各バッチ処理内での類似文書検索 ◦ これから: 文書テータベース +レコメンド的なものを目指したい • 発信方法の改良 ◦ リンクを飛び回りたくない ◦ サマリを音声配信する的なことは可能なのか ??