見出し画像

【エンジニア長期インターン報告】#01デジ缶CMS開発&公文書スクープ抽出

2022年夏、共同通信メディア・エンジニア長期インターンが始動しました。成果発表会を終えたインターン生による、レポートをお届けします!

エンジニアとしてどんなプロジェクトにアサインされ、課題にどうアプローチしたか?インターンの雰囲気は?生の声をぜひお読みください。

自己紹介

所属:静岡大学総合科学技術研究科情報学専攻
名前:青木洋繁
研究テーマ:自然言語処理の研究室に所属し、嘘つき検出をテーマに研究を進めています。
趣味:サイクリング、カラオケ、海外サッカー観戦
参加期間:約3ヶ月間
 (8月末から10月末までは週1~2回のペース、11月は週3回)

応募のきっかけ

正しい情報を伝える報道の仕事は、SNSで誰もが情報を発信できるようになり、情報が錯綜する現代ではとても重要です。
記者がより素早く正確に報道する助けとなる、共同通信のメディア・エンジニアの仕事は、やりがいを持って働けそうだと考えました。また、自然言語処理の技術を用いて、スクープ抽出をやってみたいと思い応募しました。

取り組んだテーマ

今回のインターンでは、主に2つのテーマに取り組みました。

  1. デジ缶CMSをWordPressに置き換える業務(8月末〜10月末)

  2. アメリカ海軍公文書スクープ抽出(10月末〜11月末)

1. デジ缶CMSをWordPressに置き換える業務

背景

共同通信には、加盟社にインターネット記事をHTMLパーツとして
提供するデジ缶というサービスがあります。

このデジ缶で元々使われていたCMSの改善をユーザーが求めていたため、
代わりにWordPressが導入されることになり、最初の2ヶ月はこの業務に
携わりました。

業務内容

具体的に行った業務は、以下の通りです。

WordPressの改善

  • 画像のメタデータが文字化けしないように対策。

  • カテゴリーに画像を紐付けられるように設定。

  • 複数カテゴリーを指定できないようにするプラグインの調査。

  • 画像が3つのサイズのバリエーションでS3にアップロードされる原因調査。

  • 本文の最大文字数の確認と最大文字数の設定。

  • WordPressの更新で変更内容が消えないように対策。

WordPressとデジ缶との連携関連

  • WordPressで作成した記事とデジ缶の記事を同期するための処理。

    • WordPressの記事の状態遷移(公開・下書き・公開予約・公開期限切れ・ゴミ箱・カテゴリー変更)に応じて、デジ缶で提供するHTMLを保存・更新・移動・削除する処理を実装。

  • WordPressの編集画面で記事のプレビューを押した時、デジ缶の疑似加盟店のデモページが表示されるように変更。

感想

実際に使われていて、自分も使う可能性があるサービスの改善に携われ、
とてもやりがいがありました。
また、この業務を通じて、これまで触れたことがなかったWordPressを自分でカスタマイズ出来るようになりました。


2. アメリカ海軍公文書スクープ抽出

背景

アメリカ海軍は公文書をインターネット上にPDFで公開しており、
この中からスクープが見つかることがあります。

ただ、記者の方にお話を伺うと、

「調べたら何かありそう、というアイデアがあっても、スクープを発見するためには膨大な文書を読む必要がある。他の仕事で忙しくて探せていない」

ということでした。

そこで、PDF検索エンジンを作れば、スクープになりそうなネタのアイデアがあった際、膨大な文書を全て読まずに、キーワード検索で簡単にスクープを発見できるようになると考えました。

計画

検索エンジンを作成するにあたって、以下のように計画を立てました。
インターン期間の関係上、全公文書を収集し、記者の方がありそうだと仰っていたスクープ該当箇所を発見できるか検証をするところまでできなかったのが心残りでしたが、
既存のスクープのキーワードで該当箇所を見つけられるかの検証と、フロントエンドの実装まで終わらせ、最低限形にすることは出来ました。

終わったこと

  • PDFに埋め込まれた文字情報の改善

  • 検索エンジン(バックエンド)の実装

  • 既存のスクープのキーワードで該当箇所を見つけられるか検証

  • フロントエンドの実装

  • クローラーの作成

やり残したこと

  • 全公文書の収集

  • インデックスの作成

  • 記者の方がありそうだと言っていたスクープを発見できるか検証

  • デプロイ


成果物1. PDFに埋め込まれた文字列の改善

公開されている公式文書には文字情報が埋め込まれていましたが、中にはOCRの精度がかなり低くく、そのままでは検索できない物がありました。

そこで、まずGoogle Cloud Vision APIを用いてOCRをやり直し、PDFに埋め込まれた文字情報を置き換え、Ctr+Fでキーワード検索を出来るようにしました。


成果物2: 検索エンジン

検索エンジンの構成

オープンソースニューラル検索プラットフォームのJina.aiを用いて、
セマンティック検索エンジンを作成しました。

セマンティック検索では、従来のキーワード検索と比べて、
表記ゆれに頑強で、クエリーに意味的に近い箇所を柔軟に検索ができるなどのメリットがあります。

今回作成した検索エンジンの構成図は以下の通りです。

PDFから、ベクトルの類似度比較を高速で行えるように、インデックスを作成します。

まず、Google Cloud Vision APIの結果では、一つのブロックに複数文がまとまって入っていることがあります。今回は文単位で検索したいため、文に分割しました。

次に、大規模テキストデータセットで事前学習をされたモデルを使って、
文を適切にベクトル化するためのライブラリであるSentence Transformersを用いて文をベクトル化してインデックスを作成します。

インデックス作成が終わった後、検索ワードを同様にベクトル化し、作成したインデックスの中から検索ワードのベクトルとのコサイン類似度が高い上位k文を抽出し、ヒットした箇所をハイライトして検索画面に表示します。

既存のスクープのキーワードで該当箇所を見つけられるかの検証

検索エンジンを作成した後、検証として、既存のスクープに関するキーワードで、スクープになったものを含む4件の公文書の中からスクープ該当箇所を発見できるか実験を行いました。

その結果、該当箇所が検索結果上位5件の中に入り、作成した検索エンジンの有効性を確認することが出来ました。

フロントエンド

ヒットした文が含まれる画像の中でヒットした文をハイライトし、周りの文脈を照らし合わせて見れるようにしました。

感想

  • ページをまたいだ文は分割されてしまうなど、PDFから文章を正しい区切りで抽出するのが難しかったです。

  • 環境構築に想定していたよりも時間を取られてしまい、デプロイまで終わらせることが出来ず悔しかったですが、検索結果にスクープ該当箇所が出てきて嬉しかったです。

3ヶ月の長期インターンを通して感じたこと・学び

インターンが始まる前はお堅いイメージがあり緊張していましたが、
良い意味でゆるい雰囲気で質問や相談がしやすく、楽しく働くことが
出来ました。また、他のインターン生も優秀な方ばかりで、とても良い刺激になりました。

3ヶ月間の就業体験を通じて、実際に運用されているサービスの改善に
携わったり、記者の方とお話をしながらシステムを作ったりするなど、
学生生活では得られない経験をすることができ、大きな学びとなりました。
今回得られた学びや反省点を今後に生かし、更に研鑽していきたいと思います。

今回はこのような機会を頂き、本当にありがとうございました。
この場を借りて、関わってくださったすべての皆様に感謝申し上げます。


デジタルコンテンツ部は19階にあり、窓から見える景色が綺麗でした。

レポート第1弾は以上です!あらためて、インターンに参加していただきありがとうございました。引き続き、今後のnoteもお楽しみに。

この記事が気に入ったらサポートをしてみませんか?