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
コンテンツ制作支援サービスの紹介:共同編集と自動文字起こしで業務改革
Search
Media R&D Center, The Asahi Shimbun
November 17, 2024
Technology
0
130
コンテンツ制作支援サービスの紹介:共同編集と自動文字起こしで業務改革
2024/11/15に開催されたMedia-JAWSで朝日新聞社の嘉田・松山が発表したスライドを一部修正してアップロードしています。
Media R&D Center, The Asahi Shimbun
November 17, 2024
Tweet
Share
More Decks by Media R&D Center, The Asahi Shimbun
See All by Media R&D Center, The Asahi Shimbun
人工知能学会インダストリアルセッション-朝日新聞の事例紹介-
asahimrdc
0
400
文字起こしサービスの開発-第69回新聞製作講座上流コース-
asahimrdc
1
190
LLMによる日本語ニュース記事の平易化 / Japanese News Articles Simplification via Large Language Models
asahimrdc
1
2.3k
LLM Write - LLMで記事の自動執筆CLIを作ってみた話
asahimrdc
0
2.1k
ChatGPTを活用した見出し作成支援の検証 / Verification of Headline Creation Support System Using ChatGPT
asahimrdc
3
25k
Other Decks in Technology
See All in Technology
AI時代のデータセンターネットワーク
lycorptech_jp
PRO
1
280
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
120
Opcodeを読んでいたら何故かphp-srcを読んでいた話
murashotaro
0
180
フロントエンド設計にモブ設計を導入してみた / 20241212_cloudsign_TechFrontMeetup
bengo4com
0
1.9k
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
260
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
720
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
120
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
280
Storage Browser for Amazon S3
miu_crescent
1
140
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
27
12k
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
180
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
GitHub's CSS Performance
jonrohan
1030
460k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The World Runs on Bad Software
bkeepers
PRO
65
11k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Transcript
コンテンツ制作⽀援サービスの紹介: 共同編集と⾃動⽂字起こしで業務改⾰ Copyright 2024 The Asahi Shimbun Company. 朝⽇新聞社メディア事業本部 嘉⽥紗世・松⼭莞太
・メディア研究開発センター所属 ・⼊社4年⽬ ・⾳声・画像に関するR&DやSaaSの バックエンド・インフラ開発に従事 嘉⽥紗世 ・サービス開発部所属 ・⼊社3年⽬ ・⾃然⾔語処理のR&Dや、テキスト エディタの開発等に従事 松⼭莞太
⾃⼰紹介 Copyright 2024 The Asahi Shimbun Company. 02
None
サーバーレスで共同編集機能 を作ったよ という話をします サーバーレスで共同編集機能 を作ったよ という話をします
アジェンダ 会社・組織について 1. ALOFAについて 2. 共同編集機能の開発 3. Copyright 2024 The
Asahi Shimbun Company. 05
会社・組織に ついて Copyright 2024 The Asahi Shimbun Company. 06
国内有数の歴史を持つメディア企業 ジャーナリズムを中⼼に「暮らしに役⽴つ総合メディア企業」を⽬指す 会社概要 Copyright 2024 The Asahi Shimbun Company.
07
朝デジ事業センター メディア事業本部 コーポレート本部 組織概要 Copyright 2024 The Asahi Shimbun Company.
08 開発部 システム部 ICT企画部 サービス開発部 メディア研究開発 センター ⼈⼯知能などの先端テクノロジー に関する研究開発、調査 フロントエンドを中⼼とした プロダクト開発
社内外に提供しているプロダクトの ⼤半でAWSを利⽤中 ⽂章校正:Typoless クイズ作成:QuzillA ⾃動要約⽣成API:TSUNA プロダクト紹介 Copyright 2024 The Asahi
Shimbun Company. 09
過去にはAWSテックブログ・オンラインセミナーでの発表も 余談ですが AWSSummit2024 AWSVillageに出展 Copyright 2024 The Asahi Shimbun Company.
10
ALOFAについて Copyright 2024 The Asahi Shimbun Company. 11
⾼精度 ⽂字起こしで 制作時間短縮 使いたい ファイルが すぐに⾒つかる クラウド管理で 制作を シームレスに 書き起こしを
ファイルごとに カスタマイズ Copyright 2024 The Asahi Shimbun Company. AssistedLaborOptimizationForContentAuthoring “⽂字起こし だけじゃない! コンテンツ制作⽀援サービス 12
・AmazonAPIGateway+AWSLambdaのサーバーレス構成 コスト最適化、運⽤監視の負担軽減 ・AWSCDKで構築、管理 ※フロントエンドは Vercelでホスティング システム構成 Copyright 2024 The Asahi
Shimbun Company. 13
AWSStepFunctions+AWSLambda/AWSFargateで⾼速な⾳声認識、 話者分離のパイプラインを構築 システム構成 独⾃の機械学習モデルを運⽤中 モデルの軽量化・⾼速化の取り 組みも 1時間のファイルの処理が約4分 Copyright 2024 The
Asahi Shimbun Company. 14
共同編集機能の 開発 Copyright 2024 The Asahi Shimbun Company. 15
テキストエディタにおける共同編集 ⼀つのファイルに複数⼈が同時にアクセスできる 1. 共同で同じファイルを編集できる 2. 編集したファイルが逐⼀サーバーに保存される 3. 3つの機能を備えてたもの Copyright 2024
The Asahi Shimbun Company. 16
CRDTという技術で共同編集を実現できる ロード時 Gitのようなイメージ ユーザーがテキスト編集すると、編集差分が他者に共有される 他者が編集差分を受け取ると、⾃動的にマージされ、変更が反映される 変更がDBにも逐⼀保存される 編集時 テキスト編集 ロード コミット
マージ マージ ⽂書全体を 読み込み Copyright 2024 The Asahi Shimbun Company. 17
共同編集をよしなにやってくれるYjs テキスト編集 コミット マージ マージ CRDTを実装したYjsというライブラリがある ⾃動マージの仕組みを実装 AWSSageMakerやEvernoteでも利⽤されており、 実績のあるライブラリである Copyright
2024 The Asahi Shimbun Company. 18
AWS Lambda AWS EC2 今回のチャレンジ Yjsの標準的な構成では、コミットの中継に中央集権的なバックエンドサーバーを⽤意する しかし、サーバーを⽤意せず、Lambdaを⽤いてスケーラブルにしたいと考えた Copyright 2024 The
Asahi Shimbun Company. 19
AWS Lambda 最終的な⼤まかな構成 Copyright 2024 The Asahi Shimbun Company.
20 WebSocket WebSocket Amazon DocumentDB
こんな感じでいけそう!? 「サーバーレスで作る共同編集サービス」を参考にした Copyright 2024 The Asahi Shimbun Company. 21
今回のケースに対処するには様々な⼯夫が必要だった (茨の道) Copyright 2024 The Asahi Shimbun Company. 22
DynamoDBのアイテムサイズ制限 DBパフォーマンス APIGatewayのペイロードサイズ制限 異なるインスタンスでの同時処理によるデータの不整合 どこで躓いた? Copyright 2024 The Asahi Shimbun
Company. 23
各アイテムのサイズは最⼤で400KB →テキスト以外にも再⽣時間やメタデータを含んでいるためデータ サイズが⼤きく、⻑時間の⾳声を扱うこともあるためDynamoDBでは ※1時間の⾳声の書き起こしで2MB程度 ➡MongoDB/AmazonDocumentDBを導⼊ (最⼤ドキュメントサイズは16MB) DynamoDBの制限 Copyright 2024 The
Asahi Shimbun Company. 24 テキスト編集
参考)Yjsが対応するDB https://docs.yjs.dev/ecosystem/database-provider さまざまなDBに対応可能 OSSでさまざまなDBに対応するプロバイダーが開発されている Copyright 2024 The Asahi Shimbun Company.
25
DBパフォーマンス Copyright 2024 The Asahi Shimbun Company. 26 開発
テスト リリース 1ヶ⽉後... DocumentDBの事例が ないから⼼配だったけ ど、なんとかできそう みんなで負荷かけて... ⼤丈夫だ! 安定稼働してるし、 やりきったね! エラーとデータが⾶んだ という問い合わせが多発 してるんだが...
事象:DBの負荷が上昇し、処理失敗が発⽣ 直接原因:データ取得時にフルスキャンが⾏われていた 書き込み時にも読み込みが発⽣するので、かなり頻繁にフルスキャンしていた 解決策:インデックスの設定→無事解決 DBパフォーマンス Copyright 2024 The Asahi Shimbun
Company. 27 根本原因: ・MongoDB/DocumentDBの知識不⾜ ・データ構造を意識していなかった ・どんなクエリが発⾏されているかしっかり確認し ていなかった
AWS Lambda AWS Lambda APIGatewayの容量制限 Copyright 2024 The Asahi Shimbun
Company. 28 WebSocketのメッセージペイロードサイズは最⼤で128kB データサイズが⼤きいので、通信が収まらない ➡分割送信、受信時に統合する処理を追加し、128kB以内に収めた バックエンドではDynamoDBにバッファリング、フロントでは変数でバッファリング WebSocket WebSocket WebSocket WebSocket { "group_id": "item1", "index": 0, "total": 3, "data": "AAHWkgEADI6ucCwHcE.." }
Amazon DocumentDB コミット1 コミット2 コミット3 コミット4 ... データの不整合でエディタが真っ⽩になる Copyright 2024
The Asahi Shimbun Company. 29 Flushという操作に時間がかかりすぎていたのが原因 ・Flushタイミングをファイルを閉じた時に変更 ・書き込みをキューで管理 DB上で更新差分をまとめる作業 =Flush 200⾏のFlushに30秒ほど かかるケースがあった Flush中の動作で問題が発⽣ (サーバレス特有の問題) ・書き込み →同期が遅延 ・初回読み込み →データが破損するケース有 コミット1
DBの排他制御 Copyright 2024 The Asahi Shimbun Company. 30 SQSFIFOキューを利⽤して書き込み処理の排他制御
同時に2台以上のLambdaで処理が⾏われないようにする サーバレスでありながら、DBへの排他制御ができる ※メッセージが特定のメッセージグループに属することを指定するID(メッセージグループID)を各アイテムに設定する ことで、同じメッセージグループに属するメッセージは厳密な順序で処理される FIFOQueue メッセージグループID:アイテムA FIFOQueue メッセージグループID:アイテムA メッセージグループID:アイテムB Lambda 2 Lambda 1 同時実⾏可能なLambda数<=メッセージグループIDの数 Lambda 2 Lambda 1 ※
AWS Lambda お は よ う う 直列処理 直列処理 Amazon
SQS Amazon SQS 遅延があり、コストも⾼かった Copyright 2024 The Asahi Shimbun Company. 31 1⽂字ごとにコミットしてたので、 LambdaやDBの処理数が増えたり、キューが詰まって書き込みが遅延したりした フロントエンドからのコミットを5秒に⼀度に抑制することで低減した 5秒以内の⼊⼒は まとめる お お お お は は は よ よ 넝鹼䒀 넝؝أز ⡚鹼䒀 ⡚؝أز AWS Lambda Amazon DocumentDB Amazon DocumentDB
完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 32 Amazon
API Gateway WebSocket API AWS Lambda AWS Lambda AWS Lambda $connect $disconnect $default $decode Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service Client1 Client2
Amazon API Gateway WebSocket API AWS Lambda AWS Lambda AWS
Lambda 完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 33 $connect $disconnect $default $decode Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service アイテム・ユーザー単位で コネクション確⽴ DynamoDBに保存 Client1 Client2
Amazon API Gateway WebSocket API AWS Lambda AWS Lambda AWS
Lambda $connect Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service 完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 34 $disconnect $default $decode DocumentDBから該当アイテム のデータを取得し、128KBに分割 して送信 Client1 Client2 幕張に来たよ! 幕張に来たよ! 幕張に来たよ!
Amazon API Gateway WebSocket API AWS Lambda AWS Lambda AWS
Lambda Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service Client1 Client2 完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 35 $connect $disconnect $default $decode 幕張に来たよ! 遠かった... 幕張に来たよ! 遠かった... 遠かった... 編集差分を保存(分割受信時には統 合) 該当アイテムに接続しているコネク ションを取得し、ブロードキャスト
Amazon API Gateway WebSocket API AWS Lambda AWS Lambda AWS
Lambda Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service Client1 Client2 $connect interbeeだ $disconnect 完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 36 $default $decode 幕張に来たよ! 遠かった... interbeeだ 幕張に来たよ! 遠かった... FIFOQueue メッセージグループID:アイテムA 1:interbeeだ 2:
完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 37 Amazon
API Gateway WebSocket API AWS Lambda AWS Lambda AWS Lambda $connect $disconnect $default $decode Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service Client1 Client2 decode リクエスト 幕張に来たよ! 遠かった... interbeeだ 幕張に来たよ! 遠かった... interbeeだ BinData(0, AeUFzt HymgufHYjOsfb8B ux3AXc...) 幕張に来たよ! 遠かった... interbeeだ 全⽂検索⽤にテキストデータへの 変換を定期的に実施(20秒) Flush制御のためにドキュメント数 を格納(Flush実⾏は$defalutで)
Amazon API Gateway WebSocket API AWS Lambda AWS Lambda AWS
Lambda Amazon SQS Amazon SQS AWS Lambda Amazon DynamoDB Amazon DocumentDB Amazon OpenSearch Service Client1 Client2 完成したのがこちら Copyright 2024 The Asahi Shimbun Company. 38 $connect $disconnect $default $decode 幕張に来たよ! 遠かった... interbeeだ 幕張に来たよ! 遠かった... interbeeだ 全員切断時にドキュメント数が 閾値以上ならFlush実⾏
本番運⽤中です Copyright 2024 The Asahi Shimbun Company. 39 今の所、ちゃんと動いています!
対応の結果、エラー率が0%台に低下しました Lambdaエラー率 DocumentDB CPU利⽤率
ご清聴ありがとうございました! Copyright 2024 The Asahi Shimbun Company. 40